我、京大生ぞ

現役京大生の雑記。メインテーマは大学受験とプログラミングと英語と京大の日常

未経験からのプログラミング独学でやらかしていた8つの失敗【初心者プログラマー必見】


こんにちは、京大生ブロガーのゲーテ(@goethe_kyodai)です。


ぼくのプログラミング遍歴を振り返ってみます。


C言語の本を買うが数ページ読んでやめる→ Progate全コース制覇 → CodePrep全ブック制覇 PyQ全コース制覇 → Aidemy数コース制覇 → paizaのA問題とS問題をいくつか解く


こんな感じで主にプログラミングサイトで独学してきました。


そのなかで星の数ほど失敗し、無限に時間を溶かしてきました。


そんなぼくだから書ける未経験からのプログラミング独学でやらかしていた8つの失敗 をまとめました!初心者プログラマーは必見です!


目次

人に聞かずに自分で解決しようとする


プログラミングってのは永遠に出てくるバグとの戦いです。


自分は「全部一人で解決してやる!」と謎のプライドを持っていたので、全部一人でバグを潰してました。


ググりながらなんとか自分でできるっちゃできるんですが、その代わり何百時間もの時間がかかります。


C言語でcsvファイルを読むプログラムを書くのに5時間溶かしたこともあります。


解決できないバグは人に聞いた方が100万倍速いです!


5時間悩んでも取れなかったバグが人に聞いたら5秒で解決した!なんてことザラにあります。


知り合いに詳しい人がいるなら聞いた方がほんとうに早いです。時間を無駄にしないでください。


そういう人がいない人は無料のプログラミング質問サイトで質問しましょう!


オススメなのがteratailです。何より返答が早いのがいい!投稿したら6時間以内には返ってきます。


 
 
英語版サイトですが、Stack overflowもオススメです!どんな言語のどんなバグでもカバーしてるのがいいです。ここに質問投げればだいたい解決します。


stackoverflow.com

写経をして勉強した気になる


コピペ → 実行 → 動いた!→ 終わり


こんなこと毎回やってませんか?


それじゃなんの成長もしてません(笑)。


コードをいじって一行一行全部理解しないと勉強になりません。 エンジニアとして成長してないんです。


写経だけで終わらせないようにしてください。


コピペ → 実行 → 動いた!→ なんで動いたんだろう? → コードいじくる → 理解!


これで初めてそのコードを理解できたことになります。

動けばいいやの精神でいる


プログラミングを始めたての頃は


「明らかなバグあるけど、出力は合ってるしいいや!」


の精神でプログラミングしがちです。僕もそうでした(笑)。


そういうコードは、その時の入力ではたまたまうまくいったけど別の入力じゃ動かないことが大半です。汎用性がないんです。


想定される全ての入力で動かないプログラムは駄作です。実務ならかなり危険な動作を起こすかもしれない地雷であります。


そんなコードばっか書いても成長しません。


どの場合でも動くように、「ここをこう直せばいいこう動くはずだ」と考え続け、バグを直す過程でプログラミングに必要な論理的思考力がつくんです。


「このコードどうなってるかわかんないけど、動くから直さなくてもいいや!」


って思ってる人は要注意です。

1から全部書こうとする


プログラムっていうのは1からぜーんぶ自分で書く必要はありません。 大学入試の二次試験とは違います(笑)。


なぜなら、ネットに人が書いたお手本のコードがあるし、ライブラリもあるからです。


そういうのは、大抵プロが書いた、行も少ないし速いしメモリ消費量も少ない超優秀なプログラムです。初心者が書いたものとは比べ物にならないものなんです。


自分で1から書くより、そういうプログラムをコピペしてきた方がパフォーマンスもいいし、良いコードなのですごい勉強になります。


何も全部をコピペしろと言うわけではありません。たいていは必要な部分だけコピペして自分のコードに組み込んでます


自分で1から書いても、時間がかなりかかるし、実装速度やメモリ消費量で大きく劣る劣化版しか書けません。


自分が一生懸命時間をかけて書いたのに、それよりはるかにパフォーマンスのいいコードがネット上には落ちてた、なんてよくあります。


ですが、人の書いたお手本コードやライブラリは汎用性が高くはないです。自分がやりたいことをそのまま実現してくれるわけではないことが多いです。


そこで、お手本コードやライブラリを自分の目的に合うようにカスタマイズするのが効率のいいプログラミングの仕方なんです。



まずネットで探す
→ あったらそれを利用
→ なかったら仕方なく自分で作る


この流れでプログラミングをするのが1番早いです!

本で勉強しようとする


「よ〜しプログラミング勉強したるど〜」と意気込んで本を買う → 数ページ読んで放置


こんな経験ありませんか?


僕もあります(笑)。3冊くらい積ん読してます(笑)


本を買ってもたいていやりません。紙に書いてるコードを打って写経すんのがかなりめんどくさくて心が折れます。


本はプログラミング学習には向いてないです。特に初心者は本での独学は不可能に近いでしょう。


じゃプログラミング学習に最適なのは何か?それはオンラインサイトです!


手を動かして学べるし、写経もコピペ一発で済んですごいプログラミングの勉強が捗ります!


初心者がやるならProgateがオススメです。


扱ってるプログラミング言語はHTML&CSS、JavaScript、Ruby、Ruby on Rails、PHP、Java、Python、Swift、SQL、 Sass、Goととても多く、ポップなデザインのスライドでの説明はかなりわかりやすくて評判です。


prog-8.com


今話題の機械学習や人工知能で使うPythonを学びたいならPyQが断然オススメです!


ProgateでもPythonを学べますが、本当に初歩的なことしか学べません。


ですがPyQでは入門から機械学習の実装まで一通り学べます。スクレイピングやJupyter、データクレンジングなど機械学習をやるなら必要になるスキルも全部一緒に学べちゃいます。



Pythonやデータ分析、人工知能、機械学習でだけでなく、ブロックチェーンなどの最新技術が学べるAidemyもオススメです。無料カウンセリングなどのサポート体制が手厚いのが初心者には嬉しいです。
 
 

 
 

実装をしない・手を動かさない


本でプログラミングを勉強してる初心者にありがちです。


本で読んで学んだ気になって、めんどくさい実装(実際にプログラムを組むこと)は一切しない。


それじゃ一向に技術力はあがりません。


なぜなら、実装しないと完全に理解することはできないからです。


実際にプログラムを書いてくと、「あれ?この部分ってなんでうまくいってるんだ?」とか「ここってどう動いてんだ?」とどんどん疑問が出てきます。


そこで初めて自分が分かってないことに気づくんです。そしてその疑問を解決してくなかで「理解」できるんです。


これは技術的なことでもそうですし、理論的なことでもそうです。


数学屋の人はこのパターン当てはまることが多いんじゃないでしょうか?理論だけ学んで実装を避けがちなんじゃないでしょうか?

変数の名前を適当につける

int a = 3;
int b = 3; 
double x = 67;
double y = 7288;

 
 
こんな風に変数をアルファベット順に適当につけたりしてませんか?


それで後で困るのは自分です。


なぜなら自分のコードっていうのは自分で再利用することが多いからです。


「前書いたコードのあの部分を再利用して新しいコードをつくる」っていうのはよくあることです。


それで何ヶ月前に書いたコードを読解しなきゃいけないんですが、変数の名前がaとかxとかだと何を指してんのかわからなくて混乱して読解に時間がかかる。


無駄に時間を浪費して効率が落ちる。なんてよくあります。


仕事でプログラミングしてる人は自分のコードを他人が読むのは当たり前だと思いますが、自分のコードは他人以上に自分が読みます


このような「実際コードを書く上で大切なのに他で教えてくれないテクニック」をまとめたのがこのリーダブルコードです。


これを読んて実践するだけでプログラミングの効率が上がります!僕も参考にしてます。

 
 
そのテクニックをもうちょっと詳しく紹介してるのがプログラミング作法です。テストみたいなより実務的なことが詳しく載ってます。


相互補完のあるエディターを使わない


適当なエディターを使ってませんか?


エディターでプログラミングの効率は左右されます。


メモ帳で書くなんて、洗濯機を使わずに手で洗うようなもんです。(僕は始めたときはメモ帳でコード書いてました(笑))


エディターで一番大切な機能が「相互補完」というこんな風にタブを押すと変数の候補を表示してくれる機能です。


f:id:a86223990:20180703203905p:plain


この相互補完あることで効率1.5倍くらいになり時間短縮されます!いやほんとです!相互補完を舐めてはいけません。

プログラムによってはすごい長ーい変数を使わなきゃいけない時があるので、すごい重宝します。

独学にはスクールが最適!


プログラミング学習には最適なのはオンラインサイト!と言いましたが、ガチのマジの初心者にはすこしきびしいものがあります。


人間が対面のマンツーマンで教えてくれるわけではないからです。マンツーマンもありますが、メールや電話でのやり取りです。


そこで本気で学びたい初心者はスクールに通うべきです!人間が対面のマンツーマンで教えてくれます!


オススメなのが TECHCAMPです。コースがたくさんあって、「これをやりたいならこのコースで学べばいい」がはっきりしていて迷いません。
 
 

 

失敗まとめ

 
 


  • 人に聞かずに自分で解決しようとする
  • 写経をして勉強した気になる
  • 動けばいいやの精神でいる
  • 1から全部書こうとする
  • 本で勉強しようとする
  • 実装をしない・手を動かさない
  • 変数の名前を適当につける
  • 相互補完のあるエディターを使わない

 

みなさんも気をつけましょう!