memorandums

日々のメモです。

プログラミングできるようになりたいならまず基礎力をつけましょう

「情報系の大学を卒業したけど。。。コード書けません」というのは残念ながらザラにあります。教えている身としてこんなことを書いては身も蓋もないことなんですけどね。。。

でも、思い返して欲しいのです。

学校で学ぶと知識や教養は身につくはずです。英単語だって歴史だって計算だって。学校に入学する前には知らなかったたくさんのことを知ることができる(た)はず。

ちなみに僕は学部は電気でした。キルヒホッフの法則、トンネル効果、過渡現象、ボード線図、古典制御理論、水力発電、レーザー発振とか、いろいろ習った記憶はあります。細かいことは忘れましたが、概念的にどういうものかは今でも頭の中にあります。これは僕という人間を形成する1つの要素だと思っています。でも。。。だから、電気工事できるか?(←免許が必要だけどそれはおいておいて)壊れたテレビや冷蔵庫を直せるか?というとそれはノーです。

この違いなんだと思います。「知っている」ことと「できる」ことは違います。講義をしっかり聞いて課題を期限までしっかりやっていれば基礎力はつきます。基礎力とは、用語の意味を理解できること、ある特定の条件下での課題に対応するコードが書けること、だと思います。ここを混同していると。。。いつまでも「プログラミングができる」という自信は持てません。

では、本当にプログラミングできるようになりたい人はどうすればいいでしょう?いや「プログラミングができる」と公言しないまでも、少なくとも自信をもつにはどうすればいいでしょう?

個人的な体験ですが、「何か1つの課題についてプログラミングすることを続けてみる」ということだと思います。ゲームを作る、Webサイトを作る、自分が考えて始めてもいいでしょうし、知人からの依頼でもいいんです。

例えば、Unityでスプラトゥーンのようなゲームを作ろうとしたとします。ボールをキャラクタに見立てて、サンプルを少しいじりながら動かしていくなどするかもしれません。とりあえず壁なんかも塗りたいですが。。。ちょっと難しいですね。2次元でやるという手もあるかもしれません。キャラクターに興味があるなら、キャラクタを作ってボーン入れてアニメーションで動かして。潜ったりジャンプしたりの表現をつけていくでしょう。

アプリは完成しなくてもいいんです。自分で行動したことは記憶に残ります。苦労したことであればなおさらです。親に連れられていった旅行より、自分で旅に出た方が断然記憶に残ります。それと同じです。

作りたいと思って始めるには自分が関心あることからスタートしないと長続きしません。そんなときに、一緒に進める仲間がいたり、先輩や先生がいると躓いても何とか乗り越えられるかもしれません。困っている人がいたとして、手を差し伸べないってことはまずありませんから。。。勇気を持って「これしたいけどうまくいきません。。。どうすればいいですか?」などと声掛けするしかないな。。。とは思います。難しいかもしれませんが。

という思いがあって、少人数の授業ではなるべく学生さんらが関心を持ちそうな新しい話題のアプリ開発やツールやガジェットを取り入れてきました。大昔、ニンテンドーDSのプログラミングができる環境がありました。悪用する人もいたシステムですが。。。でも、自作ゲームを作る方法でもあったんですね。。。当時の学生はC言語を学んでいましたのでちょうどいい演習環境でした。今年はポケモンGoを作ろうという取り組みを始めています。うまくいくかはわかりませんが。。。それでも。。。学習した要素を使って自分の作品作りを進めた。。。という人はなかなかいないんですね。やはり、これも与えられた課題であり、自分が興味をもって始めたプロジェクトではない。。。ということなのでしょう。

いつものように前置きが長くなりましたが、ここからやっと本題です。

ここまでプログラミングができるようになりたいなら自分なりの何かを始めてみると書いてきました。月並みで申し訳ないのですが。。。でも、そう言い続けてきたけど、できない人が多いことも知っています。

できない理由は簡単で、本気じゃないってことです。ダイエットや英会話と同じです。何となく興味はあるし少しはやってはみるけどやめてしまう。。。ライザップさんみたいに専属トレーナーがつきっきりでパーソナルトレーニングしてくれればいいんでしょうけど。。。いきなりそこにたどり着くにも気合やタイミングが必要ですよね?

じゃ、どうすればいいのか?どうすれば本気な方向に自分を持っていけるのか?なぜ本気になれないのか?

ちょっと踏み込んで考えると。。。たぶん、基礎力が足りないからなんだと思います。やっと本エントリーのタイトルにたどり着きました。めでたしめでたし😁

大学の講義・演習、加えてサークルにバイトに遊び、やることは意外と多いですよね?それに加えて自分プロジェクト。。。となるとやる気を持てたとしても持続することは難しいはずです。

オススメなのは、講義をしっかり聞いて演習を前向きに取り組んでみるってことじゃないかと思います。

当たり前すぎて呆れたでしょう?😁 でも、たぶん、最も効率のいいやり方なのではないかと思うんです。やりたいことを重視するあまり本買って始めたけど進まない。。。挫折感を味わう。それを繰り返すけど挫折感の上塗りをしていく。。。辛いですよね?

それでも、大学の科目や先生に興味を持てない場合もあるでしょう。。。残念ですが。それはそれでしかたがありませんが(T_T)

そんな方にオススメなのはMOOCS(←知らない人はWikipediaでもみてね)です。動画で解説があって質問に答える形式のものも多いですが、僕が特にオススメなのは、freeCodeCampです。テキストを読んでその場で試していけるやつですね。退屈じゃないし、できた感じもします。しかもブラウザがあれば試せるので環境構築の必要がありません。freeCodeCampは英語サイトですが、英語サイトだからこそ勉強になります。プログラミングには英語は必須です。新しい技術を取り込んで一般人が目にする前の情報にアクセスする必要があります。英語もプログラミングも両方学んでしまえばいいわけです。しかも完全無料です。クレカ情報の入力も必要ありません。

learn.freecodecamp.org

メニューを見ると、全部学習するには6 x 300hoursだそうです。1800時間。毎日1時間やっても5年かかります。全部やらなくてもいいでしょう。CS系の学生さんなら知っていることも多いはずですし。それでもメニューがありますから、それに沿っていけばいいというのは安心です。僕もreactJSのコンテンツを少しやってみました。本に比べると情報量は少ないですが。。。やはり自分がやったというのは記憶に残りやすいと思います。

あと、一部有料ですが同じ理由でCodecademyもオススメかと思います。好きな方を選べばよろしいかと。

www.codecademy.com


どーしても英語は嫌だという人はProGateさんでしょうかね。。。これは学生さんも自分でやっているという人を聞きます。

Progate | プログラミングの入門なら基礎から学べるProgate[プロゲート]

まとめると(というか発展的なことも書いちゃいましたが。。。)

  • 高い学費を出している講義や演習をしっかりやる。
  • どうしても合わないならMOOCSやる。
  • そこで基礎力を身につけたら。。。自分なりのプロジェクトをやってみる。
  • 進める過程で挫折しないように仲間やメンターを探す。リアルてもオンラインでも。
  • 発表する場を作るといいですね。人に見られるってのは刺激になります。勉強が進んだらツイートしてみるとか。まとめてブログに書いてみるととか。今の時代、手段はいくらでもあります。
  • 理想を言えば、Githubに学習用のリポジトリを作って、そこに公開していくってのはいいでしょうね。就活時にそのレポジトリを参照してもらってのもいいでしょう。マメに独自に開発活動をした記録がGithubではActivityとして残ります。そういう前向きな人を企業が放っておくってことはないでしょう。面接が苦手な人は実力で勝負すればいいんです。

以上です。