社会人プログラマ1年目で学んだこと20個(プログラミング言語・ツール・概念など)
2014.3.31
今日で社会人一年目が終了するので、振り返りも兼ねて一年目で学んできたことを記事にしようと思う。
そのついでに今まで勉強してきた技術書(一部勉強中の本・これから勉強する本含む)も参考文献として載せておく( 飽くまで自分のチョイスなので「いやーこの本はやめといた方いいよー」みたいなのも中には混ざっている可能性があります。購入を検討する際はWeb上でのレビューも確認の上で )。
また、「これらを全部やればレベルが上がる」類のものではないので注意してください。特に 一部時代が非常に古く、実用でほぼ使うことが無いものも含まれています。
おしながき
- JavaScript
- Canvas
- CSS3
- SCSS, Compass, Grunt
- OOCSS
- W3C標準
- CentOS
- VPS
- Ruby / Ruby on Rails
- REST
- Zend
- C#
- C
- アセンブラ
- ソースコード管理
- パフォーマンスへの意識
- 大規模サイトのインフラ構成
- 品質への意識
- ツールや言語におけるバージョンの違いに対する意識
- 外に出ていくこと
「あれ?何か途中で時代逆行してない…?」とか言わないで下さい(´・ω・`)
1. JavaScript
クロージャ使ってみたりプロトタイプベースで書いてみたりと、効率的な書き方がそれなりに身についた。Node周りのサーバサイドJSもいじったけど「身についた」という程には使い込んでないかも。
2. Canvas
雪降らせてみたり 当たり判定実装してシューティングつくってみたり 色々操作できるようになった。具体的に本を見たというよりはWeb上の色んなソースを参考にした感じ(文法・理論的な部分に関しては動物本を参考にした)。CodePlayerあたりは自分がCanvasでアニメーションをつくる良いきっかけになったかもしれない。Glazing ribbon screensaver effect あたりは結構難しそうに見えて構造が単純なのでトライしてみるとよいかも。
3. CSS3
border-radiusとかopacityとかは以前からよく使ってたけど transition とか animation のあたりを身に着けた。
CSS3リファレンスのサイトには一体何度お世話になったかわからない。
4. SCSS,Compass,Grunt
言わずと知れた便利ツール達。
5. OOCSS
CSSにもオブジェクト指向を という感じで、modularなCSSの書き方が勉強になった。
6. W3C標準
HTMLの書き方が汚かったので とりあえずLint通してちゃんとグリーン出る程度までには矯正。
7. CentOS
公開鍵つくったりユーザつくったりで頭を悩ませていたのは良い思い出。
基本的なlinuxコマンドは 何回もエラー出してその都度調べたり有識者の方に伺ったりしながら覚えていった。
よく叩く面倒なコマンドをエイリアスに登録したりすると便利だということに気づく。
8. VPS
rootログイン禁止とかiptables設定とかポート変更とか最低限のセキュリティに関しては実際に構築しながら覚えた。
DNS設定とかも最初は結構苦労したけど 何度かドメイン貼ってるうちにようやく扱えるようになった。
VPS等でCentOSをOSとして選択した場合にやっておきたい最低限の設定
9. Ruby / Ruby on Rails
ぺちぱーからの参入。これまでと記法ががらりと変わったので結構苦労しながら二~三回写経した記憶がある。
O/Rマッピングとかの概念とか マイグレーションとか scaffoldとか の概念はRailsをいじりながら学んだ。
ついでに言うと 何で RoR が アジャイルな開発手法とかCIとかと相性が良いのかも学んだ。
10. REST
こちらはRailsをいじる中で学んでいった記憶が。寧ろ最新版のRailsを勉強するなら切っても切り離せないような感じがした。RESTfulってどういうことか理解するのに当時は結構苦労した記憶があるけど、以下の文献とRails本で繰り返しアウトプットしてたら何とかなった。RESTに関しては読書会も開催されているので同時に紹介。
11. Zend
機会があったので。
12. C#
GUIでさくっとつくりたいものがあったのでさくっと流しで勉強した感じ。趣味の範囲でやっているため実務レベルではない。
マルチスレッド処理の他、インデクサとかジェネリクスとか色々勉強になった。
イベントとデリゲートのあたりは結構苦労したけど、おかげでその後勉強するCの関数ポインタがどういうものか理解しやすかった(厳密に言うとデリゲートと関数ポインタは違うけれど)。
単純なゲッタセッタ書きたいんだったら自動実装プロパティ使えばいいじゃない とか 文字列連結でStringBuilder使わないとパフォーマンス落ちるじゃない 等々 色々勉強になった。
13. C
元々低レイヤ方面への憧れがあったのと、
世に浸透している「手続き型」<「オブジェクト指向型」という根拠の無い漠然とした考え方に流されるのが嫌だったので勉強。
(一部では「手続き型」=プログラミング経験の浅い人が一つの関数の中にずらーっとまとめて処理を書いているようなイメージが本気で持たれているらしい)
ポインタ操作とか構文解析ぐらいはできるようになった。
記号表とかメモリ管理とか自信ないので コンパイラやプログラミング言語を1からつくったりはまだちょっと難しい(というか勉強中)。
14. アセンブラ
そのうちリバースエンジニアリングしてみたくてちょこちょこやっていたもの。Cとかアセンブラとか機械語とかバイナリとか 内部でどういう風に処理されるのかなって部分とかを整理したのと逆アセンブルの仕組みを勉強したくらい。細かい文法とかは自信無いのでこの記事を見たアセンブラ関連の闇の勢力に消されないことを祈うわなにをするやめろ
15. ソースコード管理
ソースコード管理は大事。
自分のいじっているファイルに誰かが変更をかけても、「ここの変更ってどういうことです?」「変更しちゃって大丈夫ですかね」みたいな感じで追えるから 突然コードが動かなくなった!なんてことがなくなる。
ソースコード管理すると 一つのタスクで発生した変更箇所も一発でわかるからソースコードレビューも楽。
16. パフォーマンスへの意識
数千万件規模の大規模なデータベースとかになると速度的な部分がすなわち売上に直結してくるので、パフォーマンスを必然的に意識するようになる。
負荷検証したり インデックス貼ったり クエリチューニングしたり そこら辺の事を色々経験させていただいた。
ドキドキしながらインデックスを貼って 劇的にパフォーマンスが改善した時のあの感動はパフォーマンスを意識する上で一度経験してみる価値があるかもしれない(インデックス原理主義者にならない程度に)。
17. 大規模サイトのインフラ構成
冗長化とかマスタ-スレーブ構成とか分散とか なんとなーく聞いたことがあるレベルだったものを実際に自分の中でしっかり落とし込むことができた。
18. 品質への意識
テストやコードレビューがいかに大切か学んだ( これはチームや組織の環境によって異なるので、これ以上深くは言及しない。例えば「最初はバグだらけでもとにかく最速でリリースして、そこからPDCAを回しながら品質を高めていく」という考え方もある )。
なお、テストについては テスト駆動開発を実際に手を動かしながら学べる「TDDBC」というコミュニティも存在するのでこちらも強くオススメします。
19. ツールや言語におけるバージョンの違いに対する意識
恥ずかしい話ではありますが、正直言語のバージョンの違いってあんまり意識してきませんでした。PHPの4系を目の当たりにしてからその認識が一瞬にして覆ったわけですが。自分が使うツールのメジャーなバージョンのどんな部分が違うかは抑えておきたい。
20. 外に出ていくこと
社外の人達と沢山の関わりを持ったり 色んな勉強会に出てみたりするのはすごく重要だなあと思った。
モチベーションも上がるし、もしそれが自分にとって新しい分野だった場合、なおさら新鮮な経験ができるし。
( 個人的に思うのは、有識者の皆に合わせる必要は無くて、わからない事はわからないってはっきり言えば良いし、寧ろ勉強させていただくスタンスで全然いいんじゃないかなあということ。少なくとも自分の例で言うと 周囲の人たちの方がずっと豊富な経験持たれているので自分にとっては皆先生という認識です )
・・・といった感じです。この他、学んだ事は色々ありますが、細かいものとか普段あまり使わなそうなものは抜いてます。
二年目は何を学ぼう?
今のチームで
個人的には今の会社・チームを技術的な部分でもっともっと効率化していって、エンジニアが入りたくなる・入った後も楽しく働き続けられるような環境をつくりたいと思っているので、チームの人達と協力しながら少しずつCIの文化を根付かせていきたいと思っています。なので二年目はまずその周りの技術のお勉強をしていく予定。
あと、ネットワークやインフラの経験に関して結構自分のボトルネックだなあと感じているのでそこら辺もちょいちょいやっていければなあと思っています。
趣味で
( ここからは完全に趣味の領域なのであまり参考にならないかも )
とりあえず「プログラミング言語を作る」を読み終えたら今度は簡単なOSをつくってみたいなあと思ってる。
逆アセンブルの時にちょっぴりいじった関数型言語も楽しかったので、そこら辺もできたらいいなあ。
あとはせっかくRaspberry Pi持ってるので今年はハードウェアハックもしてみようかなと思う。
Written by Nisei Kimura ( 木村 仁星 )