2018年を振り返る

こんにちは。いつにも増して筆不精ですが年の瀬なので今年一年を振り返っておこうと思います。

昨年の振り返りにもあるように今年は効率的な学習を強く意識しました。

kentakudo.hatenablog.com

具体的には一年を四半期に区切りそれぞれテーマを絞って学ぶスタイルをとりました。それぞれ以下のテーマです。

それぞれ個別にみていきます。

1〜3月:デザインパターン機械学習

こちらにまとめてあります。

kentakudo.hatenablog.com

記事にあるように、もともとはデザインパターンとネットワークをテーマにする予定でしたがDL4USのコースに当選したため丸々二ヶ月機械学習を勉強していました。デザインパターンに関しては有名な本二冊(「オブジェクト指向における再利用のためのデザインパターン」「増補改訂版Java言語で学ぶデザインパターン入門」)を読んだもののよく理解できず、またネットワークも「UNIXネットワークプログラミング〈Vol.1〉」を途中まで読んでOS周りの知識が足りないためそこを補ってから読んだ方が早く理解できそうだという結論に達しました。機械学習はDL4USとCourseraのオンラインコースプログラマ向けの本をいくつか読んでかなり楽しく学べた一方、残念ながら根本的に興味が薄いなということを認識しました。機械学習を専門にすることは想像できないですが、機械学習には何らかの形で関わりたいと思っているのでさらに踏み込んで勉強したい分野です。

4〜6月:オペレーションシステム

こちらまとめです。

kentakudo.hatenablog.com

とても難しかったです。難しかっただけに「あ、わかったかも」という瞬間の気持ち良さも強く、機械学習とは対照的に勉強することでますます興味が増した分野です。(機械学習も難しかったんですけどね。。)Raspberry Piを使うというアイデアは勉強している途中に思いついたものですが「なにか作る」という点でとても学習効果の高いものだったので同じ形ではないにせよ他の分野を学ぶときにも活かせそうなアイデアだと思います。完成まで至らなかったですし、IoTという視点でも来年はもっとラズパイで遊ぼうと思っています。

7〜9月:テスト、オブジェクト指向、セキュリティ

こちらがまとめになります。

kentakudo.hatenablog.com

この三ヶ月間は「勉強したいと思っている残り物詰め込み期間」ということでテーマを三つ、それぞれひと月ずつ勉強しました。初めの二ヶ月は「テストとTDDはどう違うのか」という疑問から始まり、オブジェクト指向に到るまで関連の有名な本を中心に読んでいきました。実用の面から言って一番役に立った期間でした。TDDを日頃の業務で即実践できるので段違いに身に付くスピードが早かったです。オブジェクト指向を理解することで結果として1月に挫折したデザインパターンもかなり理解が進みました。セキュリティに関しては分野に触れた程度の理解に止まっており、もう一度学びたい、次はCTFにも出てみたい、と思っています。

10〜12月:デザイン、DevOps

当初はデザインのみを学ぶ予定でしたが本業の都合と、デザインにそこまで気持ちが向かなかったことがあり2つのテーマを平行して勉強する形になりました。結果としてどちらも中途半端になってしまい「一度に一つ」を守ることがいかに大切かを再認識しました。デザインはいくつか本を読んだのに加えDesignLab 101のオンラインコースおよびUAL: Central Saint Martinで一週間グラフィックデザインショートコースを受講しました。とくにショートコースは"mind blowing"な経験で始まる前は不安でいっぱいでしたが終わってみると一週間頭を使いっぱなしで楽しくてたまりませんでした。いきなりWebデザインやIllustratorを始めるよりもグラフィックデザインを学ぶ方が「デザインとはなにか」という点を学ぶことができるのでおすすめです。「デザイナーになろう!」とはなりませんでしたが、とても楽しかったのでタイミングがあれば違うコースを受講してみようかなと思います。最終的に目標としていたポートフォリオサイトのデザインはかろうじて達成できたかなと思うので興味ある方はぜひご覧ください。笑

読書リスト

昨年に続き読書リストをあげておきます。

  1. オブジェクト指向における再利用のためのデザインパターン
  2. Java言語で学ぶデザインパターン入門
  3. ITエンジニアのための機械学習理論入門
  4. プロフェッショナルシリーズ 深層学習
  5. 詳解 ディープラーニング TensorFlow・Kerasによる時系列データ処理
  6. Python Machine Learning — Second Edition
  7. はじめてのOSコードリーディング
  8. プログラムはなぜ動くのか
  9. 30日でできるOS自作入門
  10. Linuxのしくみ
  11. はじめて読む486
  12. Linux カーネル読解室
  13. BareMetal で遊ぶ Raspberry Pi
  14. はじめて学ぶソフトウェアのテスト技法
  15. 知識ゼロから学ぶソフトウェアテスト
  16. ソフトウェアテスト技法
  17. テスト駆動開発
  18. 実践テスト駆動開発
  19. The Art of Software Testing
  20. リファクタリング
  21. エクストリームプログラミング
  22. レガシーコード改善ガイド
  23. Agile Testing
  24. オブジェクト指向でなぜつくるのか
  25. クリーンコード
  26. アジャイルソフトウェア開発の奥義
  27. パターンハッチング
  28. ソフトウェアアーキテクチャ(POSA)
  29. エンタープライズアプリケーションアーキテクチャパターン
  30. プログラミング作法
  31. 不正アクセス対策
  32. 体系的に学ぶ 安全なWebアプリケーションの作り方
  33. おうちで学べる セキュリティのきほん
  34. この一冊で全部わかるセキュリティの基本
  35. 動かして学ぶ セキュリティ入門講座
  36. セキュリティコンテストチャレンジブック
  37. サイバーセキュリティプログラミング — Pythonで学ぶハッカーの思考
  38. ハッカーの学校
  39. HACKING:美しき策謀
  40. Object oriented software construction
  41. データベース実践入門
  42. インターフェイスデザインの心理学
  43. さよなら、インターフェイス
  44. なるほどデザイン
  45. 新しいシェルプログラミングの教科書
  46. レイアウト、基本の「き」
  47. 詳解シェルスクリプト
  48. Layout Essentials 100 design principles for using grids
  49. 「シェル芸」に効くAWK処方箋
  50. 入門vi
  51. You can draw in 30 days
  52. Ansible: Up and Running, 2nd Edition
  53. Terraform: Up and Running
  54. 初めて作るクラウドインフラ Amazon Web Service ネットワーク入門
  55. Amazon Web Service in Action
  56. AWS System Administration
  57. CentOS 7 構築・運用・管理パーフェクトガイド

計57冊

総評

昨年「来年学びたいこと」として

を挙げていました。

昨年紹介したこちらの記事および今年読んだ「本を読む本」におけるシントピカル読書、シントピカル学習を実践した結果、言語処理系には手をつけられませんでしたが体感として目指していたところの85%は達成していると思うので成功の年だったといっていいんじゃないかと思います。

来年は

取り組みたい課題が2つあります。

一つ目は積年の課題であるアウトプットです。これまで意識的にインプット偏重の学習をしていました。駆け出しのプログラマとして正しかったとは思うものの、アウトプットが苦手である以上言い訳である感じは拭えません。学習効率改善の余地としてアウトプットは最大のボトルネックである他、プログラマとしてやっていく以上もう少しプレゼンスがあった方が都合がいいなと思います。反応があった方が楽しいですしね。水物でもありますし気にしすぎもよくないので、期待値低めで頑張りたいと思います。

二つ目は専門性に関してです。昨年までのデタラメな学習からテーマを絞った学習にシフトして効率という面では大きく進歩しました。しかしいまだに「広く浅く」という印象が強く「これが僕の強みです」と言えるものを持っていないのがコンプレックスです。来年は一つのテーマに腰を据えて自分の強みにしていくことを始めたいなと思います。


諸々の事情がありここのところこれからについてモヤモヤ考える日々を過ごしています。大学を卒業して強い希望もなく"とりあえず"でプログラマを選んだ時に「3年間全力でやってやめてしまおう」と冗談半分で思っていましたがあっという間に3年半が経過してしまいました。「やり尽くした」という境地には至っていませんが機会に恵まれ3年間でとても多くのことを学べました。あいかわらずプログラマとしてやっていくことには強い希望もなく、それ故にプログラマとして到達できるところもたかが知れているなと思うんですけども他にやりたいことがあるわけでもないし、なんだかんだプログラマが向いているなとも思うので結局これまで同様に「走りながら考える」というのを続けるしかないかなというのが今の所の結論です。

プログラマとしてやっていくにしてもそれはそれで一つ違うフェーズに入るかなと思います。一つには「3年間」という意識が常にあったこと、もう一つはある程度自信がついてきたことです。これまでは「なんとか追いつかなくては」という意識でやっていたし、とくにメルカリという環境にあっては同年代で何歩も先にいる同僚がごろごろいる中でビハインドを取り返すという強いモチベーションがありました。一方常に「これじゃダメだな」と思っていたのは、いいプログラマというのはいいプログラムを書ける人ではなく、プログラムにより問題を解決する人だということです。もちろんもう知識は必要ないというつもりはないですがそれ自体には終わりがないことですしタイミングもいいのでそろそろ問題解決にフォーカスすべき時期にきたかなという感じがします。じゃあ具体的にどうするのと言われるとそれはまだよくわかってないんですけどね。特に僕はコミュニケーションもだいぶ苦手ですし自分に合った問題解決スタイルを探すのが当面の目標になりそうです。