戯れは終わりだ

戯れ言です

プログラミングを学ぼうとする若い人へ

まず、こういうことについて人の解釈は人それぞれ、人の数だけ常識があり、正解はなく、最適もなく、あるのは多様性とちょっとの偏り。

そして、このブログはまるで人気がないので、この記事を読む人はおそらく片手で数える人数くらいだろう。

まぁいいじゃないか。

ということで急ではあるが、私個人の解釈として、これからプログラミングを学ぶ若い人、主に高校生から大学生くらいをターゲットとして何を学べばあとあと役に立つか、について書きたいと思う。

さて、プログラミングを学ぶときにやりがちな勘違いは、「プログラミング言語を選ばないといけない」と思ってしまうことだ。

これは良いこともあれば悪いこともある。実際に書いて動くところを見て楽しみ、それをモチベーションとして学習を続けるというのはとても効果的に学習を持続させる効果があると思う。好きこそものの上手なれ、というやつだな。

でも、もう自我も確立し、自身を律することができる年齢のひとたちであれば、そんな楽しみなどなくとも学習することができるはずだ。大学受験は楽しくないだろう?

なので、ruby だ kotlin だなんだ、あーだこーだと具体的なプログラミング言語はもういいじゃないか。君たちは若い。

若い=頭がやわらかい=難しいことでも今なら理解可能

逆に

トシヨリ=頭が硬い=難しいことが頭に入ってこない=若いときにやっておけばよかった

だ。

なので、とりあえずこの本をおすすめしたい

やさしいコンピュータ科学 (Ascii books)

やさしいコンピュータ科学 (Ascii books)

やさしいコンピュータ科学。これはすごくいい本で、まずはわからなくとも一回全部読んでみて、あとからまたもう一度読んで見る、そしてまたもう一度、みたいに読めると思う。これを若い内に読んでた人と読んでなかった人では年収にして最低でも100万くらいは違うだろう

つまり、特定のプログラミング言語などあとでいいのでその背景にあるテクノロジーをまずがっちり抑え込んで理解するのが絶対役に立つ。というか、それが正道だと私は考える。わたしはその正道をちゃんとは歩いてないが。歩きたかった・・・。

なぜなら scalagolang は、ふむふむなるほど確かに覚えることで web サイトをつくれたり、android アプリなどをつくれて楽しい。もしかしたらお小遣い稼ぎになるかもしれない。いいね。でもそれだけだ。pythonjava をただずっと書き続けても上記の書籍に書いてあるようなことは下手したら一生理解出来ない。アプリをいくつつくっても売上を上げる知恵はつくがプログラミング技術の向上は頭打ちになる。間違いない。

面接のときに見る履歴書に「java 歴 10年」みたいな人をよく見るのだが、話を聞いてみるとデザインパターンも知らず、DI もよくわからず、ただただ Struts で業務アプリを直したり壊したりしてただけの人だったりしてガッカリすることがある。

もちろん、最初に perl や swift を書き続けることから始めた人でも、本人が望めばソフトウェア工学の勉強はできるし、実際そういう人もだいぶ居る。

でも、そういう人たちに話を聞いてみると、おそらく「もっと早く基盤の技術を勉強しておけば良かった」という趣旨のことを言うと思う。

基礎をつくらず家を立てても、あとから結局壊して基礎からやりなおさないと駄目なように、プログラミングというものにもそういう側面がある。

TCP/IP のことを知らずに Web アプリを書いていても、根本の理解がないと、つまづいたときにただググるだけのロボットになってしまうという現象を、私自身も体現している。

ということで、今からプログラミングを学ぼうという気骨ある若い人はまず基盤を勉強するべきだ。unix、network、データ構造、アルゴリズム、CPUとメモリはどういう関係なのか、パソコンはなぜ起動できるのか、C をコンパイルするコンパイラコンパイルするのは誰なのか。

わたしもやさしいコンピュータ科学をまた読もうと思う。