@mfny

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

初心者が今からコーディングを学ぶときの考え方

初めて投稿させていただきます。
今月より仕事でコードを作ることになった超初心者です。今のままではAIの言うままにコードを作ることしかできず学習の必要性を感じています。
以下のような点で皆様にアドバイスをいただければと思います。

皆様にご意見いただきたいこと

  • 今からコーディングを学び、実務で使えるようになるには、何をどう学ぶべきか
  • AIを活用した学習でAIのコードを正しくレビューできるようになるか
    (AIに課題を与えてもらい、その回答をAIにレビューしてもらうような学習を想定)

業務背景

  • 今年度よりコーディングを伴う業務の担当になった
  • 作成したコードのレビューはしてもらえるが、ペアプロのように人に教えてもらえる環境はない
  • 社内向けツールの一機能の設計、実装を私個人で担当する

私の背景

  • 高校の情報の授業、基本情報レベルの知識はある (if,for等)
  • コードの可読性、安全性、その他非機能要件を考慮したコーディングの知識はほとんどない (DRYを知っている程度)
  • バイブコーディングでちょっとしたツールを作ったことはあるが、中身はざっくりとしか理解していない

特に、以下のような点について、ご意見を伺いたいです。

  • 一般的な文法について、「読めるけど書けない」状態で良いか。
    例えば for (int i = 1; i <=10; i++) とAIが出力したら意味はわかるが、自力で正確にこれを書けない。AIを用いてコーディングする際、その言語やパッケージをどれほど理解しておくべきか。
  • AI以外からフィードバックをもらえない、独学の環境でAIのコードを非機能要件観点でレビューできるようになるにはどうしたらよいか。
    例えばこの処理は共通化すべきではないかと考えたらAIは肯定するが、実際に共通化が良い判断だったのか評価できない。バイブコーディングの際は、共通化したほうが良いか尋ねると共通化すべきだと返され、共通化したあとに「共通化すべきではなかったのでは」と聞くと「たしかにそうだ」と返される。
1 likes

6Answer

今からコーディングを学び、実務で使えるようになるには、何をどう学ぶべきか

読めるけど書けないという状態なら、とにかく書いて経験を積みましょう。
他人(AIも含む)に書かせても、書く能力は身につきません。

10回ループのコードも、以下のように使う場面によって書き分けられるように
色々なコーディングを経験してください
 for (int i = 1; i <=10; i++) { ... }
 for (int i = 0; i <10; i++) { ... }

AI以外からフィードバックをもらえない、独学の環境でAIのコードを非機能要件観点でレビューできるようになるにはどうしたらよいか。

ご認識の通り、AIに意見を求めても無駄です。
「間違っている内容を含みます」とよく言われますが、
間違っている内容でも、それらしい理由などを述べて正しいかのように答えます。
これは、生成AIの仕組み上しかたのない事で、改善される見込みはありません。

外からのフィードバックが無いのは当たり前の状態です。

AIのコードは、色々なものが混じった"とりあえず動くかも"コードになります。
これをレビューで理想的な状態に持っていくのは困難です。

普通は、プログラマーが何らかの意図を持って書いてます。
その意図を聞いて、その理想に向けて直していくことができますから。

学習を進めていく上でも、今後の業務に向けてという観点でも、
 誤 AIにコードを書かせて、それをもとにして勉強していく
 正 自分でコードを書き、ブラッシュアップしていく
だと思いますよ。
ブラッシュアップの際などにAIに意見を求めるのは一つの手です。 

0Like

私はプロのプログラマではなく業務の実態はわからないことを先にお断りしておきます。

AI でのプログラミングが上手くいっている事例はおおよその場合に「自分で書けるけど AI で楽をする、または大きな規模に出来る」というもので、能力不足の人に AI の補助を付けても駄目ですね。 AI にとっては自分は仕事を振る上司の立場なわけなので与える仕事が的確でなければ当然ながら結果も相応に不適当なものになるでしょう。

共通化が妥当かどうかといった価値判断はその判断がプログラマのメンタルモデルに沿うかどうかの問題が大きいです。 人が、特に自分が後からプログラムを見返したときに頭の中で思っていた構造と違っていたらわけが分からくなります。 良くても悪くても自分 (チーム) の考えがプログラムに反映されていることが読み書きしやすく保守しやすいプログラムなのです。

そしてあなたが何を考えてそうしているかを察することが出来るほど AI は賢くありません。 どういう意図でそこを共通化しようと考えたのか、あるいは共通化が不適当だと考えたのかまで含めて AI に相談すればどういうトレードオフがあるのかは教えてくれるはずです。 でも初心者はそういう思考を的確に言葉に出来ないんですよね……

初心者は適切な質問をしようがないので学習するにあたって (現在の) AI はあまりあてにならないです。 AI に相談するとしたら適当な教材を紹介してもらうくらいのところでしょう。

きちんとしたプログラムを書くというのは単純なコツをいくつかわかれば良いというわけではないので知識の量こそが重要です。 関連する資料を大量に読み (いまどきは動画もありますが) 練習をするという地道な、ごく普通の学習手順をとるしか仕方がないと思います。

その上で、わからないことが具体的であるならば AI に相談すればそこそこまともな返答を得られることもあるかもしれません。

0Like

■今からコーディングを学び、実務で使えるようになる
以下の三点を意識されると良いです。
第一に仕様を読んで、動くものを作る力(要件→実装)です。
第二に壊れにくくする力(テスト、例外、境界)です。
第三に読める形で残す力(命名、構造、差分)です。

ここから「入力(要件)→出力(成果物)→検証(テスト)→改善(レビュー)」を毎回ワンセットで回すと良いです。

まず動くものを作ります。
●例題
・CSVを読み、集計して、別CSVに出力
・APIから取得→整形→DB保存
・画面入力→バリデーション→登録

次に「壊れにくい」を覚えます。
動くコードは生成AIの力を借りて格段に作りやすくなりました。ここに価値が生じます。
・境界値(空、0、最大、異常、NULL)
・例外設計(握りつぶさない、原因を追究できるメッセージを出力)
「直したら別の場所が壊れた」もなくします。

最後に「読める」を磨きます。
・関数は短く、責務は1つ
・命名は「何を」「なぜ」が伝わるように
・「IFのネスト地獄」を分割で救う
・コメントは「コードに書けない意図」だけ書く

自分が一週間後に読んでも理解できるコードを目指します。
一週間後の自分はある意味、他人です。

■AIを活用した学習でAIのコードを正しくレビューできるようになるか
既に御認識されている通り、AIにレビューさせるだけでは危険です。
AIは便利ですが、AIレビューは以下の問題が起こりがちです。
・もっともらしい指摘をする
・仕様や前提を勝手に補完する
・セキュリティ・性能・運用を見落とすことがある
・“本当に直すべきリスク”の優先順位がズレることがある

このため、AIを「答案作成機」ではなく「レビュー観点の訓練装置」にすると良いです。
そこで以下三点のルールを追加します。

ルール①:課題に「制約」を入れる
例えば以下です。
・入力形式(例:CSVの列、JSONのスキーマ)
・例外条件(空行、欠損、重複)
・性能条件(データ件数、時間、メモリ)
・変更条件(将来の仕様変更ポイント)
・運用(ログ、再実行時の挙動)

●課題
「10万行CSVを集計して、失敗した行はスキップせず、理由付きで別ファイルに出す。再実行しても二重計上しない」

ルール②:レビューは「観点チェックリスト」で行う
観点の例です。

  1. 正しさ:仕様を満たしてる?入力の境界は?
  2. 安全性:例外、NULL、外部入力の扱い
  3. 読みやすさ:命名、分割、責務
  4. テスト:どこをどうテストすべき?
  5. 性能:計算量、I/O、無駄なループ
  6. 運用:ログ、再実行性、障害時の情報

AIレビューを受ける前に、自分でもこの順で見ます。
AIには以下の形式でレビューさせます。
「上の6観点で、重大度(致命/高/中/低)付きで指摘して。指摘ごとに“根拠”と“修正案”と“テスト観点”も書いて」

ルール③:AIに「反証」させる
レビューが上手い人は、反例を探します。
AIには以下のように依頼します。
「この実装が壊れる入力を10個作って」
「仕様を満たしていない可能性を疑って、反例を挙げて」
「セキュリティ上まずいケースを列挙して」
このような質問によってAIが“優しい先生”から、“意地悪なテスター”になってくれます。

0Like

一般的な文法について、「読めるけど書けない」状態で良いか。

現状 AI に丸投げ状態のように見えますが、であれば良くはないです。「業務背景」に書いてあることが製品品質に影響することで、それを質問者さんが業務の一環として行っているのであれば特に。質問者さんの属する組織は製品品質を担保できてないということになりますので。

AI以外からフィードバックをもらえない、独学の環境でAIのコードを非機能要件観点でレビューできるようになるにはどうしたらよいか。

本を読むとか、公式チュートリアルを自分の手を動かして試すなどして、体系的な知識をつけることが必須だと思います。

読んでも分からない用語とか多数出てくるかもしれませんが、本やチュートリアルに従って自分の手を動かしてアプリを作って動かしてみれば、基本的なコードの書き方やアプリの作り方は学習できると思います。

そして、分からない用語などは Web で検索するなどして調べるようにすれば、だんだん知識もついてくると思います。

AI に聞くなら、正しい用語で正しく質問できる知識、返ってきた答えが合ってるかどうか分かる知識をつけてからにすることをお勧めします。

何が分からないのかさえ文書化できない基本的な知識のない人がプログラム作成でハマって、人間相手の Q&A サイトとか会社の上司・先輩に聞くと「一体何が聞きたいんだ。質問になってない。顔を洗って出直してこい」とか言われる。ところが、AI に聞くとそういうことは言われずに勝手に解釈していかにもそれなりの何かを答えてくれる。でも、質問が的外れなので返ってくる答えも見当違いで、何度やり取りしても的外れと見当違いのループから抜け出せない。なので、ますます質問者は混乱する・・・ということはよくあることのようですので。

AI にはペアプログラマーとしての役割を担ってもらい、力を合わせて開発を加速するということを基本として、どのようにしたら効果的に AI に支援させられるかということをユーザーが考えながら、「指示」⇒「応答」⇒「検証」⇒「改良」のループを回して開発を行い、成果物を完成させるという方向で考えてみてください。

AI にコードを作ってもらうにしても、AI が作ったコードはたたき台として形にしたものだとの認識を持って、そのたたき台をレビューし、理解し、検証し、最終成果物に対して、あなたがが当事者意識を持った主体的な責任を持てるようにすることが重要だと思います。

0Like

一般的な文法について、「読めるけど書けない」状態で良いか。
例えばfor (int i = 1; i <=10; i++)とAIが出力したら意味はわかるが、
自力で正確にこれを書けない。AIを用いてコーディングする際、その言語やパッケージをどれほど理解しておくべきか。

まずいですね。まずは基礎をやった方がいいと思います。
少なくとも「ロジックがわかる程度」であれば後は調べればいいだけなので。

ちなみにfor文の構文は「for( 初期値; 条件式; 増減式)...」なのでfor (int i = 1; i <=10; i++)は、
「初期値はint i = 1で、iが1になっている。そこから条件式i <= 10を満たす間、{...}の処理を実行し、増減式i++を行い、ループさせる」です。つまり、「iが1から10以下の間、以下の処理を行う」という意味です。

そのように日本語で読み替えて、ロジックを読み込みます。

ただ、言語によって書き方が変わるので、その都度調べれば書ける程度で十分です。(ロジックは読める必要がありますが。)

AI以外からフィードバックをもらえない、独学の環境でAIのコードを非機能要件観点でレビューできるようになるにはどうしたらよいか。

私なら、AIに「このコードの非機能要件観点でどのようになっていますか?」といった質問をしたり、『セキュリティ面等の問題がないか』を考えながらレビューしますね。

例えばこの処理は共通化すべきではないかと考えたらAIは肯定するが、実際に共通化が良い判断だったのか評価できない。
バイブコーディングの際は、共通化したほうが良いか尋ねると共通化すべきだと返され、共通化したあとに「共通化すべきではなかったのでは」と聞くと「たしかにそうだ」と返される。

やはりロジックを読むことですね。
先ほど挙げたfor文の例のようにロジックを読みます。
同じコードでもたまたま同じになっただけで意図が明確に違うときがあるので。

0Like

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌