書き取り学習法
20代半ば、文科、復学生。 NEXTでプログラミングを学び始めた当時の私の姿だ。 まさに難関だった。一度に押し寄せる新しい情報が大変だった。何を知らないのかさえ知らない状態が続いて苦しかった。しかし、時間が経つにつれ徐々に私に合った学習法を身につけることができ、プログラマーとしての立場を確立するのに多くの助けになった。誰もが最初にぶつかる難関に対して、結局必要なのは「自分に最も合う学習法を探すこと」だ。私に最もよく合う学習法は書き取りだった。
書き取りの始まり:学生を悩ませたプログラミング課題
最初の学期が始まって数週間経って、学生たちを悩ませた出来事がが発生した。 「データ構造とアルゴリズム」科目の実習を担当する講師と、理論を担当する講師のコミュニケーションミスにより、再帰理論を学んでいない状態で「ハノイの塔」がコーディング課題として与えられたのである。つまり、プログラミングに初めて触れてから約1か月で、再帰の概念も知らずにハノイの塔の問題を解決しなければならなかった。当時は、その課題の恐ろしさを知るすべが無かった。週末を過ごして課題提出日の月曜日に学校に来たら、まさに大騒ぎだった。問題を解決しようと家にも帰らず、週末ずっと学校で食べて寝ていたという人々があふれた。ほとんど眠らなかったという人も多く、みんな疲れ果てていた。それにもかかわらず、問題を解決したという人はほとんどいなかった。衝撃と恐怖の現場だった。
私は違った。数時間で問題を解決した。私が知っている知識で何度も試した後、Google検索で答えを見つけたのだ。ただ、検索結果をそのままコピペしたわけではなく、答えを見つけてからは、1行ずつ実行してみて、解決策を把握し、1人でも同じように作成できるように練習した。でも、学校に来た時、他の学生たちはどうにかして自ら解いてみようと2日を徹夜したと言うので、心が痛くて、何か間違ったよううな感じがした。便法か私がとても楽な方法で勉強したかった。数学問題を解く時、正解を見ると実力が上がらないと言っていた高校時代の先生が思い出した。
コードの書き取り:頭脳がスリープモードの時は、何も考えずにオンライン講座のコードを書き取りする
一日の集中力が枯渇した夕方や、頭を使いたくない日にはオンライン講座を受講した。Treehouseの有料メンバーシップに登録し、Udemyで有料講座を購入した。アプリ開発講座は、通常少しの理論説明の後、ほとんどは講師が画面上に作成するコードを見てそのまま入力しながらサンプルアプリを完成する形だ。だから頭がよく回る状態なら、このような形の講座はすぐに退屈になる。オンライン講座は、何も考えたくなる時に活用しやすい勉強手段だと思う。
別に集中せずに複数のサンプルアプリを作ってみると、自分だけの素晴らしいリファレンスコードになっていた。確かに、いつかやったことがあるのに覚えていない時、私が作ったサンプルアプリを開いてコードを探して、方法を再び習った。とにかく自分の手で直接作成したコードなので、必要な部分をすぐに見つけることができ、コードを見ると記憶がすぐに蘇った。このように数か月に渡って集めた私のサンプルアプリは、開発を学び始めてからほぼ1年間、有用に活用された。
アプリの書き取り:うまく作られたアプリを参考にして作成する
韓国App Storeで1位となったセキュリティカードウィジェットアプリも、書き取りから始めた。ただ、アプリを丸ごと書き取りしたわけではなかった。いくつかのアプリから気に入る部分を持ってきた。特にUI/UXの場合は、Appleの基本アプリやよく作られた他のアプリを見て書き取りした。例えば、通知センターでセキュリティカードを照会する画面を作成する時は、ウィジェット機能に対応する電卓アプリをいくつかインストールしてみて、一番気に入るキーパッドのUIを持ってきた。うまく作られたアプリを書き取りして作ってみると、自分だけのアイデアが生まれることもあり、一人では思い出せない方法で開発をしながら実力は向上する。
書き取りとの最高の相性:応用と繰り返し
幸いにも時間が経つにつれて、私のコーディングのスキルは着実に伸びていった。 模範解答(best practice)を探し、必要あがれは書き取りした後、自分のものにした。 書き取りは私にとって非常によく合う学習法でした。そもそも集中力が続かない側面もあり、新しいことを学ぶ時、先の人々が開拓しておいた最適な方法を真似したり、私より上手な人を見て模倣する方法で初期の知識を習得してきたことに気づいた。例えば、あるゲームを初める場合も、最初から試行錯誤をするよりは、攻略法を探してみて、上手なゲーマーの映像を見て真似しながらプレーするのがもっと楽しかった。重要なのは、最初はそのように書き取りして真似しても、パターンを発見し原理を把握した後からはすぐに応用して自分だけの方法を見つける。プログラミングも同じである。パターンがあるからだ。「ソフトウェアデザインパターン」というのが存在するように、特定の問題を解決する方法を身につければ、それを少し応用して他の問題も解決できるようになる。
プログラミングは運動を学ぶのと似た側面があり、頭では理解しても直接手で繰り返し訓練をしなければ自分のものにはならない。すぐに忘れて自らはできない状態が続く。何も考えずに書き取りしたオンライン講座だが、繰り返してみると、講座を通じて作ったアプリが20種を超えていた。サンプルアプリも2~3つぐらい作ってみると、それからは重複する内容が多い。StoryboardでViewControllerを作成し、クラスを作成して指定し、IBOutlet/IBActionを連結することを何度も繰り返すことになる。しかし、このように何度も繰り返すと、いつか目よりも手が先に動き始めた。講師よりも速く開発を終え、映像が私に追いつくのを待っていた瞬間は快感だった。最初は書き取りして真似する水準だったが、繰り返してみると私の思考の筋トレとなっていた。
🥑 実務における生存戦略1:上手な人が開発することを真似る
「書き取り学習法」は、実務においても自然に私の成長方法としてて働いた。それで、最初の職場で隣の席に座った先輩に、自分が開発する姿を見せてもらったのがとても良かったし、個人的には幸運だったと思う。IDEでウィンドウを自在に扱うこと、ソースファイルを開いたり閉じたりする方法、よく使われるショートカット、デバッグツールはどのように使うのか、コードを書いたり修正したり、詰まった時にどのように乗り越えていくのか、そのような行動を見て真似しながら、本当にたくさん学んだ。
また、Xcodeではソースファイルを生成した人のIDがコメントとして残るが、メンターはIDでプロジェクト全体の検索をして、メンターが作成したコードを1か所に集め、書き取りできるようなコードがないかを探して、あちこちに修正しながら勉強した。その中で習得した知識や発見した新しいパターンが、私の既存のものと融合されたり、代替されたりしながら学びの幅が広がった。
🥑 実務における生存戦略2:レビューノートを作成する
プログラミングを学ぶ途中で、何度も挫折感が訪れる時があった。きっと何度もやっていたのに、またやろうとするとなかなか思い出せない。手がキーボードでうまく動かなかった。する方法をまた探そうとしても、どこから探してみるべきかすら記憶がなかった。それでいつからか、レビューノートを書き始めた。最初は自由形式で書き始めたが、書いているうちに一定の形式を整え始めた。(1) しようとしたこと、(2) 解決した方法、(3) 新しく学んだ点、あるいはうまくいかなかったり詰まったりしたことを記録した。コードがたくさん入っても、全て手書きをした。ノートを最初のページから書き始め、最後のページまで書いたのは生きて初めてだっだ。サンプルアプリと同様に、この勉強用レビューノートもほぼ1年間ボロボロになるほど頻繁に開いてみた。このように、プログラミングを初めて学ぶ時は、一気に身につけることはほとんどなく、同じことを数十回繰り返してやっと自分のものになる。
プログラミング勉強の際にレビューノートの助けをとてもたくさん受けたので、実務においてもこれを続けていた。業務をしながら新しく学んだこと、特に最初は詰まっていたが解決したことを重点的に記録した。勉強用ノートと同様に、業務用レビューノートも開いてみることが多かった。ところで、ふと振り返ってみると、2年目からはレビューノートを書かなくなった。再開してみようかと考えている。
終わりに
最後に、プログラミングの楽しさを見つけることは、長期的なモチベーションの面で大きな助けになる。1年ほど開発を学んだ時点でスランプがやってきた。授業でさせるものはほとんどできたが、なんだか楽しみがなかった。一難去ってまた一難、でhtml/cssをする中で、開発を諦めたくなる程度まで行った。NEXTを通い続けるか、諦めて大学に戻るか選択に迫られた。
幸いにも、モバイルアプリ開発に触れてから状況が変わった。アプリ開発は興味深かったし、たまたま起業専攻が新たに新設され、心に通う友達とチームを組んで「何」を作るかから一緒に決めながら開発する過程で、とても楽しかった。何がおもしろいかは人によって違うだろう。特に初心者たちは、本人の興味と好奇心を刺激する開発分野を探して、楽しく開発を学ぶことを応援する。
이 글의 초안을 읽어준 조소현, 류성두 님에게 고마움을 전합니다.
Tags: learning to program, mooc, next institute