[相談] コードの意味を完璧に理解して書かなきゃダメですか?

に投稿

よく聞く話で「プログラムを理解してから使え」というのがありますが、理解とはどのくらいのことを指すのでしょうか?

スクリプト例
echo date('m/d',strtotime('+4 day'))//結果 本日か4日後を返す

【理解レベル1】
ネットからひろってきたものをただコピペ
→これはとてもだめなことなのはわかります。間違っていたらバグをまくことになるし、自分の勉強にもなりません。

【理解レベル2】
dataは日付を取得するものでフォーマットはm/dで、
strtotime('+4 day')で本日の日付から4日後を取得している?

ネットから使用例を見て、それを自分なりの解釈で説明でき、実装できる段階。
僕はこのレベルくらいです。このレベルだと案件によっては危険なのでしょうか?
危険のなのはわかるのですが、現実的に時間がなかったり、聞けるひとがいなかったりします。

teratailで聞いてもプログラムの間違いと手本はいただけるのですが、なぜこうなるかについて初心者にわかりやすく伝えられるひとはなかなかお目にかかれないような気がします。 僕の理解力のなさは棚上げしています。

この場合は、第2引数が変わるとこうなるかとPHPマニュアルをみてもちゃんとわからず、例えるならテレビの使い方を知っていて見れるけどなんでテレビを見れるのかわかっていない状態。
こうインプットするとこういうアウトプットがあると予想できるという状態です。

【理解レベル神】
phpマニュアル等を読んで、第2引数がこうなるとこうなる、なぜならこうだからと人に教えられるくらい理解している状態。
僕から見ればこの状態はPCさえあれば全知全能であり崇拝するかんじです。

理解レベルはこれを目指すべきなのはわかるのですが、その場でわからないことがあります。できるだけ調べたり、聞いたりしますが、それでもわからないことがあります。

そのわからないことはずっと覚えていてなにか別のプログラムを書いているときにその部分をさわることになってふとした瞬間に理解できることがあります。

そんな感じでもやっていけるのでしょうか?

僕は、phpマニュアルを見てもなんのこっちゃという感じで他サイトや書籍にある使用例や解説を読んで理解できることは、全部ではないければぼちぼちあるというような感じです。

読者の方から相談メールをいただきました。

同じような悩みを持っている方向けに回答内容を一部紹介します。

「プログラムを理解してから使え」の理解とはどのくらいのレベル?

「プログラム(コードの意味)を理解してから使え」が必ずしも正しいとも限りません。

村上福之さんは「プログラマーが独立するのに必要な2つの勇気」として、

(1) nullなり適当な値をつっこんでコンパイルする勇気
(2) プライドを捨てて、人に聞いたり、頼ったりする勇気

が大切だと仰っています。

どんどん使っていって、使ってくうちに理解するというやり方の方が、次々と新しい技術が生まれる時代には合ってます。

ネットから使用例を見て、自分なりの解釈・説明・実装できる。これじゃ危険?

ミッション・クリティカル(障害や誤作動などが許されない)な案件では、まずいように思われますが、そういう案件の場合、コードレビューやテストが綿密に行われるはずなので十分だと思います。

危険のなのはわかるのですが、現実的に時間がなかったり、聞けるひとがいなかったりします

時間に対する投資対効果を考えることは重要です。
時間を掛けて調査をして、納期に間に合わなかったら意味がありませんからね。

teratailで聞いてもプログラムの間違いと手本はいただけるのですが、なぜこうなるかについて初心者にわかりやすく伝えられるひとはなかなかお目にかかれません。

自分なりに、「こうなのかな?」と考えていくことを積み重ねていくと、ある時、確信が得られる瞬間があると思います。

全てを完璧に理解している人なんていませんからね。「こうなのかな?」って考えていければいいと思います。

この場合は、第2引数が変わるとこうなるかとphpマニュアルをみてもちゃんとわからず、…こうインプットするとこういうアウトプットがあると予想できるという状態です。

分かる範囲でコードを書いていくことで身についていくものもたくさんあります。

プログラミング言語は言葉なので、日本語を覚えるのと同じです。国語辞典の全部の言葉の意味を知ってる人なんていません。それと同じです。

そのわからないことはずっと覚えていてなにか別のプログラムを書いているときにその部分をさわることになってふとした瞬間に理解できることがあります。
そんな感じでもやっていけるのでしょうか?
僕は、phpマニュアルを見てもなんのこっちゃという感じで他サイトや書籍にある使用例や解説を読んで>理解できることは、全部ではないければぼちぼちあるというような感じです。

それでいいと思います!

先輩風を吹かしたがる輩が自分が知ってる分野だけを指して「プログラム(コードの意味)を理解してから使え」と言ってくるかもしれませんが、無視すればいいと思います。

大切なことは目の前の仕事に自分なりのやり方で取り組むことですからね!

プログラミング初心者におすすめのサービス
1. 講師から対面で学びたい派なら

プログラマカレッジをおすすめします。ProEngineerという転職エージェントが運営しているプログラミングスクールです。20代限定なんですが、無料で受講できて、修了後、就職支援もしてくれるんです。最高過ぎですよ、これ!!就職の紹介料を企業からもらえるのでスクールを無料にできるんでしょうね。すばらしいシステムだと思います!

30代以上の方には

プログラマカレッジは20代限定なので30代以上の方にはWebCamp Proをおすすめします。受講料の返金保証がついているし、毎日11時〜23時まで通い放題なのでとてもいいと思います!

2. 自宅で学びたい派なら

「就職保証付き」オンライン就職予備校をおすすめします。Javaエンジニアコースでは就職保証がついているのでプログラマーとして就職したい方にはぴったりです。Javaエンジニアの求人ってめっちゃ多いし、求められる技術レベルもそこまで高くないのでちゃんとした教育プログラムなら就職保証できるだろうなとJavaエンジニア経験者の私も思います。

3. つまづいた時に質問したくなったら

プログラマー専用の質問サイトteratailをおすすめします。 つまづいた時にteratrailで質問すれば教えてもらえます。

これらのサービスを活用すれば、全くの初心者からでもプログラミングをばっちり出来るようになると思います!レッツトライです!

 - 技術