自分の周りでも(特に英米)プログラミングをやろうかなと考えてる人が増えてる気がするので、今日はプログラミングについて書いていこうと思います。あくまで自分の学習の軌跡に基づいて書いていくので、エンジニアの方や情報工学科の方が見たら間違ってることも書いてあるかもしれません。何をこの若造が🖕と思わずに、その時は直接教えてくれると幸いです。

 

3ヶ月で買った本。

 

プログラミングを始めた理由

ブログでも書いた通り、本を8月ごろに書き上げました。(出版したのは11月でしたけど)そしてその勢いまま、たまたま見つけた映画学校に申し込んだのですが最初の授業が始まるまで1ヶ月ほど時間があったので、空いた時間で高校の時挫折したプログラミングを再びやってみることにしました。(意識高い😱)最初は1ヶ月のつもりだったんですけど、思ったよりハマってしまい、その後映画学校の方はキャンセルして、こっちの方に本腰を入れることにしました。

 

因みに当時のプログラミングスキルとしては、もともと高校生の時にC系の言語を1ヶ月ほど勉強していた時期があっただけで、分かっていたのはプログラミングは挫折するくらい大変だということだけでした。

 

一度やっていたのでC系の言語をまたやっても良かったのですが、当時はweb系をやりたかったのでブームだった(今でもブームですね)Pythonをなんとなく選ぶことにしました。webに強い言語がPython一択かと言われると疑問は残るんですが、比較的簡単な言語かつ優れてるので最初の言語としてもお勧めします。

 

自分が高校生の時は次はObjective-Cが来る!なんて言われてObjective-Cの本が大量に出版されてましたけど、3年経って見ると、今更Objective-Cなんて勉強するバカいるのみたいな風潮で流石にこの業界は移り変わりが早いなあと3年ながら今昔の感を新たにしました。ちなみに言語選びに関してなんですがpythonを勧めたもののぶっちゃけ最初はどの言語でもいいのかなと思います。それぞれの言語にも得手不得手な分野はあるのですが、最終的には一つのプログラミング言語だけで生きてくことはないと思いますし、ひとつやっちゃえば他の言語も簡単に習得できちゃいます。とりあえず最初は比較的簡単なPythonでいいんじゃないですかね。(HTML/CSSから入ってという人もいるかもしれないですけど、これらはマークアップ言語といって厳密にはプログラミング言語とは区別されます。僕は性格的にプログラミング言語から入りたかった)

 

 

 

 

学習の軌跡

まず最初に手を出したのは、「新・明解Python入門」。名前の通りPythonの入門書です。レビューも見ずに適当に手に取りました。

3日で読んだのですが、いまいちオブジェクティブだったりクラスの概念だったりとノンプログラマにとっては難しい部分が多々ありました。

 

そこで人気の高かったオンライン学習PyQというものを始めました。これはPythonに特化したオンライン学習サービスで月額3000円で始められます。サービスは3ヶ月で未経験からエンジニアレベルにまで育てるというものですが、自分はその時夏休みだったのでちゃちゃっと2週間で終わらせました。

 

 

 

 

その後、Pythonistaにとってもバイブルとなっている「みんなのPython」を購入しました。こちらは最初にPythonの全体像を説明して、その後個別の項目を深掘りしてく形ですね。入門書をうたっていたますが、レファレンスとしても十分使える良書です。この段階では必修ではないような分野も書かれていますが、全体に目を通して最低限用語は抑えておいたほうがいいです。ただ読者は機械学習者を人を想定しているようで、後半になるにつれwebとは関係ない分野が増えてきます。

 

 

ただこれだけ本を読み漁っても、自分のやってるプログラミングが実際のwebサービスでどう生きるのか分からない。基本的に入門段階なので、実際にプロダクトを作るというよりは淡々と言語についての理解を深めていくのが多いんですね。ここで「Pythonでつくるゲーム開発入門講座」というものを購入。

 

 

これは良かった。今までやってきた勉強がどう生きるのかがよくわかりましたね。この本をざっと読んでから入門書に入ってもいいかもしれません。勢い余ってこの本に関するLT作ってまで作って発表しました。

 

 

 

次に手を出したのがこちら。

 

 

 

 

都内の書店に行けば大抵並んでる有名な本です。プログラミング本で定評のある有名なオライリー社が出していることだけあって、4000円の価値は十分あります。ただノンプログラマと書いてありますが、流石にこれは言い過ぎでプログラミングを少しくらい触っていないと理解できないのではないでしょうか。

 

ここにきてPython自体の知識は十分だと思い、Webフレームワークの世界に進みました。統計とか機械学習やりたい人はこの辺でそこら辺の勉強を始めるのかな。まあPythonのフレームワークというとFlaskだったり、Djangoが思い浮かぶと思います。ただrails(rubyのフレームワーク)と違ってあんまりpythonのフレームワーク本で売ってないんですね。本に出すほどの内容ではないのかと思いPyQに戻ってdjangoの勉強をしたりしましたが、さっぱりでした。そこで当時djangoの入門書としては最も高い評価を集めていた。「Python Django超入門」を購入しました。

読んでみてようやくフレームワークというものがどういったものかは分かりましたが、中々詳しいとこまでの理解は進みませんでした。ぶっちゃけここが一番の難敵でしたね。環境構築といった物理的な部分からフレームワーク特有のMVC構造といったのは理解するのに相当な苦労を要しました。DjangoとMySQLとの接続に4日かけても出来なかった時は本気でここでプログラミングをやめようかとすら思いました。ただここで自分のメンター(師匠)との出会いがあったんですね。これについては後述します。

 

まあ、なんとかメンターの力を借りつつ「Python Django 超入門」を終わらせ、その後はDjangoの公式チュートリアルに進みました。やっぱり最後は公式チュートリアルですね。ぎこちない翻訳調で不安になることはありますが、読んでおいて間違いはありません。チュートリアルでpollアプリケーションを作りながら、ここでさらにwebフレームワークについての知識を深めました。ただいずれもビューからデータベース設計の流れで説明してありまして、実際にこの通りアプリ開発をすることはないと思います。普通は逆の流れでミドルウェア(データベースとか。osi参照モデルでいう下の方)からの設計になります。PythonではAPIを作って、ビューの部分はJavaScriptとかにやらせましょう。入門書のやり方を覚えちゃうとビューに振り回されちゃうので注意です。(多分)

 

 

サークルの本棚にあったのでパクってきた本。言語はPHPとJavaだがそれを差し引いたとしても相当良い。djangoを一通りやったあとにこれを挟むと◎。

 

 

 

 

ただこの辺りまで勉強してくると、プログラミングの知識だけでは済まなくなってきたので周辺の知識もとり入れ始めました。

 

まずGitHub。こちらはヴァージョン管理システムといって自分の書いたコードだったりとかをアップロードして保存するものですね。エンジニアになるには必須の知識です。書籍の購入を勧めてくるサイトもありますが、自分は「猿でもわかるgit入門」というサイトをやりました。これで十分だと思います。Progate(こちらもオンライン学習サービス)のgitも結構わかりやすかったです。こちらにはLinuxコマンドの学習もあるのでここで同時にやっちゃうのが結構いいと思います。(macならターミナルから色々操作するのでLinuxコマンドは必修。もちろんウインドウズも、多分)

 

続いて、データベースの知識。webフレームワークの勉強でもデータベースは扱いますが、基本的にはGUIベースで操作できるので本は必要ないかと思います。初めはdjangoに組み込まれてるSQliteを使うと思いますが、最初からMySQLを使うことは意識しておいた方がいいと思います。メンターにも最初からMySQLをやるように勧められました。因みに以下のMySQL本は相当有名なものなので買っておいて損はないと思います。(自分は買いましたけどまだ読んでないです。)

 

 

 

そしてそもそもwebやITの知識。割とプログラミングをやっていると最低限のITの知識は前提知識ように扱われていますが、文系の学生だと知らないことも多いと思います。自分も初めは全然わからなかったので、まず高校の情報の教科書をやった後に、ITパスポートの教本をやり、web系諸々の本に手を出しました。

 

 

 

 

続いてAWS。これはAmazon Web Serviceの略でwebを公開するのに必要なもの。諸々のクラウドサービスを提供しているもので、ネットだと「amazon web serviceネットワーク入門」がよく勧められていますが、こちらは実務的な部分で初心者にはとっつきにくいかと思います。自分は二つ目の「AWSクラウドの基本と仕組み」をやって理解を深めました。

 

 

 

 

 

またフレームワークやる上で、ビュー(MVC構造のV)を扱うときはHTML/CSSが必須になるのでこれらを勉強してない人はこの段階でやるといいと思います。余談ですが、コーヒーこぼしてパソコンが死んでたときは、JavaScriptにまで手を伸ばしました(HTML/CSS共にフロントエンドの言語。因みに名前は似ているがJavaとは完全に別言語、メロンとメロンパンくらい違う)

 

 

これはおまけですが、この頃になるとパソコン自体の知識が必然的に増えてきます。またLinuxコマンドだったりショートカットキーを使うようになるとマウスやトラックパッドを使わずにキーボードだけで操作することが多くなります。プログラマの中でもキーボードだけで完結するのかっこいいみたいな風潮があり、実際キーボードだけで操作できるようなるとタイピングスピードが上がり、これがまた結構快感です。ここで自分がコーディングのスピードを更に上げたいと思って手を出したのがVimです。これは全てをキーボードだけで完結するエディタなんですけど全部コマンドで操作するため相当使いこなすのが大変なエディタでして、学習コストは相当高いです。自分のメンターがVimmer(vimを使える人のこと)だったこともあり、自分もその影響でvimを使うようになりました。これを使っていると自分に酔えます笑。(統合開発環境の方はPycharmを使ってます)

 

ちなみに以下の本は読むともっぱら思考のスピードでコーディングできると噂なので載っけておきます。ソフトカバーで7000円もするので中々手を出せないでいますが、いつかは自己投資と思って買うつもりです。(Vim本)

 

 

 

 

 

まあ、これまで触った本は上記の通りです。

 

プログラミングを3ヶ月やってみて

なんとかこれまで挫折してやめちゃうことなく、プログラミング学習を続けられてこれたのですが、自分の中ではメンターに出会えたことが非常に大きかったと思います。経験からプログラミング学習を始めた時に、挫折する姿は容易に想像できました。そこである程度外的な環境を整えていかないとまずいと思ったので、初めてすぐにエンジニア界隈に顔を出すようにしました。一つはインカレサークル。二つのサークルに顔だしてみて、代表が優秀だった方の一つに絞ってついて行きました。

そしてもう一つが学内のサークル。KeioComputerSocietyというサークルの部室に2年の10月に突然顔を出して行き、そのまま入サーしました。

 

ただどちらもエンジニアやプログラマーの世界を見せてくれはしましたが、分からないところをいつでも聞けて、心を許すことのできるメンターには出会えませんでした。そんな時、自分が一年の時所属していたサークル(ITとは全然関係ない同好会サークルです)の元代表を務めていた先輩Aに辿り着きました。もともと先輩後輩の関係として仲良くさせてもらっていたのですが、たまたま彼がIT系の企業に就職すると聞いたので頼ることにしました。djangoでつまずいてる時に電話で彼に直接メンターになってほしいとお願いし、その場で弟子入りしました。そこで彼にはアウトプットが足りないと言われ、ひとまず掲示板を作るように指示されましたね。以降彼とは毎日プログラミング関連で連絡を取り合っています。(彼に出会えたことが振り返ってみれば同好会サークルに入ってて一番良かったことかもしれない笑)

 

プログラミング学習に必要なことは色々あると思いますが、メンターと出会うということはとても重要なことではないのでしょうか。環境構築などエラー処理など、一人じゃどうにもならない状況に初心者はぶち当たると思います。そこで聞ける人がいるかいないかというのが挫折するかしないかの大きな境目なのではないでしょうか。

 

自分最初からメンターを求めて行動していましたが、今のメンターと出会うのに2ヶ月かかりました。それだけメンターを見つけるのは大変なので、プログラミングを始めたら頼れる人を探しましょう。自分もいつかはメンターになって弟子を持ちたいと考えてます。。。因みに今のメンターには尋常じゃないくらい感謝しています。

 

たとえメンターに出会えなくても、ひとまずエンジニア界隈には出入りするようにした方がいいと思います。SlackのGeneralチャンネルで流れる会話眺めてるだけでも勉強になります。

 

 

コーディング(コードを書くこと)は慣れないうちは苦痛なんですけど、本を書くことと一緒で作業興奮、書いていくうちに苦痛が快感に変わります。経験からある程度ゾーンに持っていくコツは掴んでいたので、毎日朝起きたら30分、電車の中で90分、寝る前に30分と時間を決めて、ひたすら教科書を写経しました。コードを書いて、読むことに抵抗感をなくすことだけが目標なので、この行はどういう意味なんだということは一切考えずにただただ書きます。これが習慣化してきた頃にちょうど大学のテストが来たのでそれを機に写経はやめました。日数で言ったら10日くらいでしたけどこれも相当大きかったですね。

 

あとプログラミングはアウトプットが基本。基本的に受験含め、自分の勉強はインプットの比重がアウトプットに比べずっと多かったのですが、これだとプログラミングの腕は向上しません。新しいことを覚えたらすぐに使う。本と向かい合って暗記するよりも実際にパソコンで使って覚えましょう。

 

 

今は一通り入門レベルの知識は終わったのでツイッターのクローンを作ってます。諸々、本やオンライン学習サービス含めたら投資額はすでに5万は超えてると思います。(今は諸々交際費とかを基本的に全部こっちに回してるんでこれくらいは出せます)まあこのまま挫折することなく3年くらいやっていたら腕がプロレベルになってることを期待しますが飽きっぽいのでどうでしょうね。。

 

 

 

 

 

最後に自分が好きなユーチューバーと映画を紹介します。

 

joma

カナダの大学を卒業した韓国系のエンジニア。startupというドラマも撮っていて中々面白い。

 

 

 

 

mayuko

日系エンジニア。UC(San Diegoだったかな)を卒業しているらしく、jomaともよくコラボしている。

 

 

 

 

JOBS

スティーブ・ジョブスの半生を描いた映画。前半から後半にかけてトーンダウンしていく感じは否めないが全体として勉強になる部分は多い。(youtubeに全編上がっちゃってますね。違法かな)

 

 

 

 

SocialNetwork

こちらはマークザッカーバーグの半生を描いた映画。本人は完全なフィクションだと否定していたが、普通に面白い。

 

 

 

Silicon Valley

HBO作品。コメディタッチのドラマで一本30分と見やすいのも推せる。自分はこれを見るためだけにNetflixからAmzonprime に切り替えた。