チュートリアルばかりのプログラミング学習の思い出と反省【社会人編】

※2019年5月に書いたものをnoteに移植したものです。

ホームページを作っていた学生時代はまだ「作るための学習」のニュアンスが大きかった。
しかし社会人になってからの学習はチュートリアルをこなすだけで、一向に作る力が身につかないものが多かったし、その他寄り道もたくさんした。
ここはそんなチュートリアルばかり作ったり寄り道した勉強方法を反省するために記録に残しておく墓場だ。

1年目:なんとなくRubyをはじめる

漠然とWebサービスを作りたいなーと思って色々ググった際に選んだのがRubyだった。
当時の検索しててPHPとRubyが候補に残ったような気がするけど、なんとなくカッコ良さそうなのがRubyだったとかそんな感じで選んだ気がする。
そして手にとったのが「たのしいRuby 第3版」だ。

画像1

そんな安易な理由ではじめた勉強なので、成果としてもいまいちだった。
当時のEvernoteを見てみると、"モジュール、カプセル化、ポリモルフィズム、ダックタイピング"などと書かれたところが最後になってる。
多分このあたりで挫折したのだろう…。
この後も残念ながらRubyは触ることなくRubyで何かを作ったこともない…。

2年目:PHP+MySQLを学ぶ

Rubyの勉強を挫折したのは「何か作った感じがしないな…」という点だった。
そこで次の教本を選ぶにあたって重要視したのは「WEBサービス全体を作るプロセスを学ぶ」ことであった。
そこで選んだのが「よくわかるPHPの教科書」だった。
※Rubyで学び直せばよいところをわざわざPHPに変えているあたり、寄り道ばかりしている感が否めない…。

画像2

黒い画面で出力される文字列を相手にするのではなく、実際にWEBブラウザ上で動くプログラムを作りながら学べた点はモチベーション維持に役立った。
フォーム入力の反映みたいな簡単なところから始まるのだが、中盤ではSQLの勉強も合わせてでき、最終的には「Twitter風ひとこと掲示板」を作るところまで進む。
解説もわかりやすく、挫折すること無く1冊こなすことができたのは1年目から進歩したところだろう。

ちなみに当時の勉強方法は、英文法の勉強方法に近かった。
英語の勉強で主語(Subject)、述語動詞(Verb)、目的語(Object)、補語(Complement)をわけてSVOCを単語に振り分けていく勉強方があるが、それと同じようなことをやっていた。
関数に対してこの部分は引数でこれが戻り値みたいなのを本に記載しながら勉強していた。
効率がよかったかはわからないけど、教本内のプログラムに記号振りながら読んでいくほうが理解しやすかった気がする…。

わざわざ丁寧に環境構築を記載してくれているのにバージョン違いのPHPを導入してしまったので苦労したところはあった。
でもこのバージョン違いを入れたことで公式ドキュメントを見ながら仕様変更箇所を見たりするようになったのは進歩したポイントかもしれない。

本を読んだまではよかったものの結局ここでも応用と呼ばれるようなプログラムを作ることはなかった…。

3年目:仕事でちょろっと触るところができる

社会人1~2年目は実務でプログラミングを使う機会はほとんどなかった。
2年目の中頃から新規事業の立ち上げに従事していたのだけど、その中でエンジニアを手伝うことがあった。
プログラム自体を組むことはほとんどなかったけど、その周辺部分を触る機会が多く勉強になったことも多かった。

・仮想マシン / サーバーの立ち上げ
・WordPressの立ち上げセッティング
・CSSでの簡単なデザイン修正
・Gitでのバージョン管理
・サーバーの設定値を変えるために黒い画面の操作とかVimを覚える
・PHPで簡単な管理画面を作る
・公開されてるAPIの仕様調べてサービス転用の要件建てをする

エンジニアリソースが希少だったので、自分でできることをカバーしようと必死だった。
(その頑張りで追加のエンジニアリソースを確保したほうがよかったり色々と反省はある…)

ビジネス側で必要な管理画面を作ったりしたのは、唯一2年目のPHP勉強が活きたポイントなのかもしれない。
この頃はとにかく仕事が忙しかったのでプライベートでのプログラミング勉強はほぼしていなかった。

4年目:RaspberryPiとUnity

RaspberryPiなるものの存在を聞き、気になり買ってみたりした時期。

ただ作るものも考えてなくとりあえず買ったので、LEDをチカチカさせて終わった。
今では引き出しの奥深くに眠っている。

あとは仕事上カジュアルゲームのディレクターに就いていたので、勉強がてらにUnityやCocosStudioのチュートリアルをやった。

この頃からまたチュートリアルばかりの勉強になっていく…。
(この頃、仕事上ではFacebookAPIとSpreadsheet組み合わせてデータ連携させたりしてたかな)

5~6年目:Unityの勉強

仕事ではカジュアルゲームから離れたものの、Unityの勉強は継続してた。
とはいえサイトや教本のチュートリアルばかりで自分のプロダクトは全く作れずスキルとして身につかなかった時期。

6年目:Pythonの勉強

シンギュラリティとかその手の本を読んでいたのがこの頃。
ジワジワとAI分野の話が増えてきたのに対して何か勉強しなきゃ!と思い手を付けたのがPython。(単純過ぎなんだよな…)

とりあえず色々とスクレイピングしてデータ加工できるようになろうと思い、手にとったのが「独学プログラマー Python言語の基本から仕事のやり方まで」だった。

画像3

Pythonについてだけでなくプログラマー全般について必要な知識があったのは独学している自分みたいな存在には非常に助けになった。

クローリングやスクレイピングについては「Pythonクローリング&スクレイピング ―データ収集・解析のための実践開発ガイド―」でちょろっと勉強した(途中で辞めた)。

画像4

Seleniumを使って管理画面をクローリングして業務を自動化するなど一部やってたけど、プロダクト作るには至らず。
当時Shadowverseにハマっていたのでそれにまつわるサービスを作ろうとしたけど挫折した形跡がある。
(OpenCVで画像認識させて…みたいなことやってたけどうまくいかなかった…)

あとはもっと広義のプログラミングスキルを学んだほうがよいのかと思いエンジニアに進められた「プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則」を読んだりもした。

画像5

でもこれ読んだ後にコードを書くことがなかかったのでほとんど血肉にならず…。

振り返ってみて

①チュートリアルをしたら応用プロダクトをセットで作る(作る力が身につかない)
②まずは一つの言語を深く勉強する(すぐ他言語に移ってるので身につかない)

特にプライベートのわずかな時間を使って勉強しているのに対して、上記2つを守っていくことは大事だなとめちゃくちゃ寄り道した数年を振り返ってみてようやく思った。失った時間を後悔しても仕方がないので、この失敗をオープンにすることで次は失敗しないような時間の使い方にしたい…。

この記事が気に入ったらサポートをしてみませんか?