Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

2013年の個人的学習総括

概要

2013年の個人的学習総括

イベント

2013年5月に転職

SI'erの下請会社での開発業務から自社向けサービスを開発する会社に転職。
技術的にはJavaのWeb開発からRuby/JavaのWeb開発へシフト。

変わったこと
1.SI'er系の業務は激務だった。だいたい月250-300時間労働。転職後はほぼ定時。
=>学習時間が大幅に増えた。
2.保守的な環境から革新的な環境へ
=>新技術の導入検証は皆無だった現場からどんどん推奨される現場へ。
3.管理よりの業務から開発メインの業務へ
=>SI'er関連業務では実力が認められるとともに管理よりの業務へシフトしてしまっていて、
業務中はあまり開発そのものに関われなくなっていた。
転職後は、開発業務がメインになった。
4.主言語
=>JavaメインからRubyメインに。もともと個人でRubyを学習していて
Rubyの仕事をやりたいと思っていので願ったりかなったり。
Rubyを学び始めたきっかけは達人プログラマーの「1年1言語の学習」
5.技術に明るい上司のもとでの開発
=>直属の上司が非常に技術に明るいため、理にかなっていれば色々な提案が通る。
改善したいのに上を説得できない、政治的に無理、という機会が皆無。

CodeIQ出題者になる

今年の11月に運営からお声がけいただいてから各種確認作業を経て、12月12日に1問目の出題。
現在2問出題中。
現状の反響はまだまだ、といったところなので良問を作れるように努力します。
コードゴルフや数学的な問題が人気があるようですが、できるだけ実務に近い領域で
実際に役に立つ問題を作れれば、と意識しつつ問題の面白さとの共存に思考を巡らせる日々です。

今年学習したこと

対象 内容
backborn-rails 実務で導入判断のため検証。まだ使うか未定
Bundler Rubyのgemパッケージ管理ツール。実務で頻繁に利用するため基本構成を含めて学習
C# 実務でほんの少しだけ利用する機会があり必要な範囲で学習
Capistrano 公私ともに利用するため学習。まだ入門レベル
Capybara 業務のため学習。主に実装に必要になる内容に絞って学習
Chef Ruby製のプロビジョニングツール。私生活で検証をはじめ、便利そうだったので業務でも提案し採用決定。継続学習中
CodeIQ出題 出題およびそれに付随するツールの作成
CodeIQ解答 数問解答
Codo CoffeeScriptドキュメンテーションのため調査、検証まで行う
CoffeeScriopt 転職後の業務で利用。標準的なコードは書けるレベルまで学習
Cucumber 受け入れテスト記述。入門レベルを学習するも業務では使わなくなりそうなので学習停止
cygwin 公私ともにより便利な使い方をしたくなった場合に新たな要素を調査、学習
EasyMock JavaのMock機能の調査検証のため入門レベルの動作を検証
Eclipse より便利に利用使う方法を学習。ショートカットやPluginの利用方法等
Elixir Rakuten ConfluenceのDave Thomas氏のセッションをきっかけにHello Worldまで。
Emmet html,cssの高速コーディング。Zen-Codingからの差異を学習
ExtremePerformanceTesting Thoughtworks Anthology Volume2をきっかけに学習
FactoryGirl Capybaraと組み合わせて利用するため検証。基本機能のみ学習
Fantom JVMCLRJavaScript処理系で動作するオブジェクト指向言語ThoughtWorks Anthologyをきっかけに基本概念とHello Worldまで学習
Firefox 自動テスト等の関係でプロファイル設定周りを学習
GitHub 自作のPlugin、Snippet、gemなどの公開のため利用開始
GitLab 検証および実運用土入
Git 実務、個人学習の両面で学習。基礎的なコマンドしか利用していない、まだまだ学習が必要
Gradle 実務で利用するため学習。基本構成、実際に利用する機能について学習
Grease Monkey 簡単なサンプルの作成。実務で実際に利用して効率化
HTML5 趣味でいくつかの要素を学習
Java 実務で直面した課題を解決するための学習がメイン。その他は書籍を通した学習
Jenkins CI導入のため、環境構築+各種検証。単体テスト・シナリオテスト・静的解析・ドキュメント生成等を検証
jQuery 公私ともに何かを実装する際に必要な範囲で学習
Kickstart 主に実務でアイコンを利用するため、必要な範囲で学習
konacha JavaScriptのテスティングフレームワーク。疎通検証レベルまで行う
logback ロギングライブラリ。実務で利用するため、必要な範囲で学習
LTSV Webの情報をきっかけに学習。実務のJavaプロジェクトのログをLTSV化したり簡易検索ツールを作成した。
Maven 実務で利用するため学習。基本構成、実際に利用する機能について学習。結局利用を取りやめたため途中からは学習停止
metric_fu Ruby,Railsの静的解析ツールの一括適用。実務で検証、利用
MiniTest Rubyのテストフレームワーク。基本機能、カスタムマッチャの作成等を学習
mockit JavaのMock機能の調査検証のため入門レベルの動作を検証
MySQL 実務で利用するため学習。基本構成、実際に利用する機能について学習。
Nginx Webサーバー。公私ともに利用するため学習。まだ入門レベル
opencsv Javaの実務で利用するために調査検証
Passive View Pattern Thoughtworks Anthology Volume2をきっかけに学習
PhantomJS Cucumberと組み合わせて利用するために調査、学習
pik RubyWindows向け複数バージョン管理ツール。検証はしたが実際にWindows環境で複数Rubyを切り替えるような作業はしていない
PlantUML UMLをプレーンテキストで作成できるツール。利用したい範囲で調査、たまにブログの説明のために利用
pry Rubyの対話環境。irbの上位版。Webで情報収集中に見つけて学習
Python Sublime Text2のPlugin開発に必要な範囲で学習
Rack 基礎概念学習
Rbenv Ruby複数バージョン管理ツール。実務で頻繁に利用するため基本構成を含めて学習
Redmine 自宅で疎通確認及び基本的な使い方を学習。実務でも自分で利用を提案した上で、管理者として利用
RSpec Rubyのテスト(BDD)フレームワーク。基本機能、カスタムマッチャの作成等を学習
Ruboto Rubyの静的解析を実務で導入するために調査、検証。自宅でも導入
Ruby on Rails サンプル作成によって構成要素を覚える。標準的なCRUD処理をひと通りカバー。
backborn、haml、devise等の利用も合わせて学習
View, Controller, Model, routing, ActionMail, debug, Plugin、多言語対応の作成などを学習
Ruby Java開発時代は自動化や個人的なツール作成に利用しつつ、書籍等での学習を継続。
標準的な要素の学習、gemの作成、メタプログラミングなどを習得。
自分、チームの作業を効率化するための各種ツールを作成
SampleCov Rubyカバレッジ計測ツール。主に趣味のgem作成時に利用。
Selenium WebDriver テストの自動化ツールの比較検証のためサンプル作成 + Javaと組み合わせた受け入れテスト作成に利用。
社内システム(外部企業が作成したパッケージシステム)の定形作業自動化にも利用
serverspec Chef+Vagrantの情報収集中に見つけて一緒に学習。疎通レベルまで。
Sublime Text2 転職を機に利用をはじめたが、あっという間にメインエディタに。基本機能、Plugin、Snippetの開発等一通り学習
Tapestry 業務のためJavaのWebフレームワークTapestryを学習。基本機能と実務で必要になる領域に絞って学習
Tomcat Jettyで動作しているJavaのWebシステムをTomcatに乗せ換えるために必要な範囲で調査、学習
Turnip 受け入れテスト記述。入門レベルを学習するも業務では使わなくなりそうなので学習停止
Ubuntu 転職先の開発が標準でUbuntuを利用するため実務中および書籍にて学習
Unicorn Rack対応のWebサーバー。公私ともに利用するため学習。まだ入門レベル
UNIXのコマンド 既存のbashスクリプトの不明点を起点とした学習、やりたいことを起点としてた調査からの学習、書籍を通した学習で覚えるコマンドを増やす
Vagrant Ruby製の仮想環境自動化ツール。私生活で検証をはじめ、便利そうだったので業務でも提案し採用決定。継続学習中
vim bash入門で少々、あとは実務で利用中に利用法を調べたりした範囲で学習
VirtualBox Vagrantの学習開始時に合わせて。必要最低限を学習
Visual Studio 実務で利用する.netの開発のために必要最低限を学習
VMWarePlayer 実務で利用。必要な範囲に絞って学習
Watir テストの自動化ツールの比較検証のためサンプル作成まで行う
Xaml 実務で利用する.netの開発のために必要最低限を学習
YARD RubyAPIドキュメント用gem。学習したが結局RDocを使っている
先行評価(eager evaluation)と遅延評価(lazy evaluation) Thoughtworks Anthology Volume2をきっかけに学習
受け入れテストについて Thoughtworks Anthology Volume2をきっかけに学習
継続渡しスタイル(CPS = Continuation Passing Style) Thoughtworks Anthology Volume2をきっかけに学習
英語 基礎発音、多読、ディクテーション、シャドーイング。毎日ipodで英語を聞いて通勤。
自宅PC作業中に英語学習CDを流しっぱなしにして作業

作ったもの

<By Ruby
はてなダイアリーの投稿用RubyScript
MySQLのDBスキーマからDB定義書を生成するツール
DSL用Snippet生成gem「sublime_sunippetter」
・Webスクレイピング為替相場を取得して、ドル価格のものを円に換算するツール
Excelのシート名一括取得ツール
・プレーンテキストを元に簡単なフォーマットのExcel受け入れテスト仕様書を作成するツール
・LTSVファイルの簡易検索ツール
・英語学習用スクレイピングツール(発音記号、音声ファイルをWebから一括取得する)
・日々の学習履歴のテキストをjsonに変換し、htmlの一覧にするツール
ソースコードを編集できないパッケージのWebシステムを自動化するためのSeleniumを利用した自動化gem
・長時間処理後のアラートとして利用するダイアログを表示するだけのRuby gem「denrei」
RSpecのリスト形式のテストケースを実行するためのSpecテンプレート生成Ruby gem「rspec_piccolo」
DSLを利用したRubyCLIツールを簡単に作成するための Ruby gem「dslable」
・remoteファイルの取得+加工を自動化する Ruby gem「takuhai」
・採点ツール Ruby gem「Akapen」
・単独作業用のタスク管理ツール Ruby gem「Tudu」
・Markdown一括変換+メニュー挿入ツール Ruby gem「Markun」
・汎用ユーティリティ Ruby gem「TbpgrUtils」
Sublime Text2>
・自作業に必要なSnippet(Ruby,Rails,はてなの記事作成用,日常作業の定形フォーマット用など)
・TODO管理用のPlugin(Pythonで実装)
・エディタから各種サイトを利用するPlugin(Pythonで実装。Google,Wikipedia,Google翻訳を呼び出す)
・5行単位の上下移動、5行単位の上下選択マクロを作成(秀丸の機能をSublime Text2に持たせたかった)
<Gradle>
・PackageInfo一括作成カスタムPlugin

今年学習した書籍

書籍名 内容 link
Effective Java 名著。全体を通して読書完了 Effective Java 第2版 (The Java Series)
RailsによるアジャイルWebアプリケーション開発 序盤をコーディングしながら読んでいたが途中から積読。たまにリファレンスとして参照 RailsによるアジャイルWebアプリケーション開発 第4版
Ruby Cookbook 英書。電子書籍。すべてをカバーせずかいつまんで学習して読了 Ruby Cookbook (Cookbooks (O'Reilly))
プログラミングRuby1.9ライブラリ編 ほそぼそと学習継続中 【送料無料】 プログラミングRuby第2版 ライブラリ編 / デビッド・トーマス 【単行本】
プログラミングRuby1.9言語編 読了。基礎をひと通り学ぶ プログラミングRuby 1.9 −言語編−
秀丸マクロ ポケットリファレンス ざっと目を通して実際に役に立ちそうな部分は手を動かして学習。Sublime Text2に移民したので秀丸はもう使っていない 【送料無料】 秀丸マクロポケットリファレンス 秀丸エディタ7.11対応 / 西沢直木 【単行本】
bash入門 ほそぼそと学習継続したり積読状態になったり 【楽天ブックスならいつでも送料無料】入門bash第3版 [ キャメロン・ニューハン ]
Linuxコマンド ポケットリファレンス ざっとみて気になたものを学習したり、リファレンスとして置いておいたり 【楽天ブックスならいつでも送料無料】Linuxコマンドポケットリファレンス改訂新版 [ 沓名亮典 ]
UNIXという考え方 読了。複数の書籍で推奨書籍、参照書籍になっていたので購入した 【楽天ブックスならいつでも送料無料】UNIXという考え方 [ マイク・ギャンカ-ズ ]
Code Simplicity 電子書籍。ボリュームがないので即日読了。他の「良いコードとは」について語った書籍と類似内容が多かった [rakuten:paperbackshop:16306560:image:small]
メタプログラミングRuby 読了。実務でDSLの実装などが多いため重宝した 【楽天ブックスならいつでも送料無料】メタプログラミングRuby [ パオロ・ペロッタ ]
デザインパターンマルチスレッド編 マルチスレッドの経験、知識皆無のためひと通りサンプルを書いて学習。
実務・趣味共に実際役に立つマルチスレッド処理はあまり書いていないのでまだ経験値不足
【楽天ブックスならいつでも送料無料】Java言語で学ぶデザインパターン入門(マルチスレッド編)増補改訂版 [ 結城浩 ]
Ubuntu Linux入門キット 読了 【楽天ブックスならいつでも送料無料】Ubuntu Linux入門キット [ 水野源 ]
RSpec Book 読み始めていたがCucumberを利用しなくなりそうになったため読書停止。積読中。
たまにリファレンスとして見ている
Professional Ruby Series【後払いOK】【1000円以上送料無料】The RSpec Book/DavidChelimsky/DaveAstels/ZachDennis
実装パターン 読了。既知のものが多かったので読み飛ばす箇所が多かった --
アプレンティスシップ・パターン 読了  【新品】【書籍・コミック 医学・科学・技術】アプレンティスシップ・パターン 徒弟制度に学ぶ熟練技術者の技と心得
リーン開発の本質 読了 【楽天ブックスならいつでも送料無料】リーン開発の本質 [ メアリー・ポッペンディーク ]
ピープルウェア 読了 [rakuten:hmvjapan-plus:10845829:image:small]
ITエンジニアのゼロから始める英語勉強法 読了 【後払いOK】【1000円以上送料無料】ITエンジニアのゼロから始める英語勉強法 英語落ちこぼれでもペラペラになれる!/牛尾剛
英語のリスニングは発音力で決まる!UDA式30音練習帳 ITエンジニアのゼロから始める英語勉強法で推奨されていたので選択。読了 【送料無料】 英語のリスニングは発音力で決まる! UDA式30音練習帳 / 鵜田豊 【単行本】
テストから見えてくるグーグルのソフトウェア開発 読了 【送料無料選択可!】テストから見えてくるグーグルのソフトウェア開発 テストファーストによるエンジニアリング生産性向上 / 原タイトル:How Google Tests Software[本/雑誌] (単行本・ムック) / ジェームズ・A・ウィテカー/著 ジェーソン・アーボン/著 ジェフ・キャローロ/著 長尾高弘/訳
アジャイル開発とスクラム 読了 【楽天ブックスならいつでも送料無料】アジャイル開発とスクラム [ 平鍋健児 ]
Webデザインメソッド 途中まで読んで積読 伝わるコンテンツのための理論と実践WEBデザインメソッド
アルゴリズムを学ぼう 途中まで読んで積読  アルゴリズムを学ぼう 続/川中真耶/杵渕朋彦/椎名俊輔【後払いOK】【2500円以上送料無料】
アプリケーションを作る英語 ほそぼそと学習中 --
Ruby on Rails3ポケットリファレンス 必要な箇所を抜粋して学習。読了 【送料無料】 Ruby on Rails3ポケットリファレンス / 山田祥寛 【単行本】
小飼弾の仕組み進化論 読了 --
Linuxシステム実践入門 学習中 【送料無料】 Linuxシステム実践入門 Software Design plusシリーズ / 沓名亮典 【単行本】
TeamGeek Googleギークたちはいかにしてチームを作るのか 読了 【楽天ブックスならいつでも送料無料】Team Geek [ ブライアン・W.フィッツパトリック ]
ソフトウェア開発の名著 読了 [rakuten:guruguru2:11825032:image:small]
CoffeeScriptファーストガイド 必要な箇所をリファレンス的に参照しながら学習 [rakuten:enterking:11505942:image:small]
Clean Coder 読了 【楽天ブックスならいつでも送料無料】Clean Coder [ ロバート・C.マーティン ]
アジャイルユーザビリティ 読了 [rakuten:enterking:11692564:image:small]
Thoughtworks Anthology Volume2 電子書籍。英書。読書中 The ThoughtWorks Anthology: More Essays on Software Technology and Innovation
サムライ・エピソード 電子書籍。読了 --
DevLove Hangar Flight 電子書籍。読了 --
開発現場に伝えたい10のこと 電子書籍。読了 --
Release IT! 電子書籍。読書中  Release It!本番用ソフトウェア製品の設計とデプロイのために/MichaelT.Nygard【後払いOK】【2500円以上送料無料】
入門Chef Solo 電子書籍。読了 入門Chef Solo - Infrastructure as Code
ソフトウェアアーキテクトが知るべき97のこと 少しずつ読書中 ソフトウェアアーキテクトが知るべき97のこと
Jenkins実践入門 読書中 Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
ドラエもん英書版 英語学習用。1-7巻読了 --

今年再読した書籍

書籍名 link
アジャイルサムライ アジャイルサムライ−達人開発者への道−
プログラマが知るべき97のこと プログラマが知るべき97のこと
プロダクティブ・プログラマ プロダクティブ・プログラマ -プログラマのための生産性向上術 (THEORY/IN/PRACTICE)
ポモドーロテクニック入門 アジャイルな時間管理術 ポモドーロテクニック入門
リファクタリング・ウェットウェア リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法
情熱プログラマ 情熱プログラマー ソフトウェア開発者の幸せな生き方

総括

転記

とにかく転職が大きかった。
業務内でも新たな技術をほぼ毎日覚えることができる上に、
定時勤務のため就業後の学習時間も多く確保できた。

SI'erでの業務は大きなシステムの一部分のコーディングおよび
それに関わる技術者の取りまとめや管理等を担当する事が多かったため知識の幅が狭かった。
また、大抵激務の現場だったため十分な学習時間も確保できなかった。
転職後は少人数ですべてを担当するためひと通り学ぶ必要があり、
知識を広げるチャンスを得ることができた。

Web系の企業は勤めたことはないですが、現職のようなサービスを提供する側の現場に
勤めることで、技術や手法の選定の自由度が高まるのでSI'erではできなかったような
経験を多くできます。
私の場合は直属の上長が非常に技術に明るくPM-PL-SE-PGのどの立ち位置についても
経験値が高く適切な判断ができ、政治等にとらわれない発言力と信頼を持っているため
理にかなったことができる環境になっていることが大きいです。
ペアプロ面接による採用だったため、採用する側もされる側もお互いに技術的に納得・信頼して
採用してもらえたことも大きかったように思えます。
ちなみにTwitterで声をかけてもらってすぐに直接あって採用試験の手順を踏んだため
転職サイトや転職エージェントは経由していません。

やる気も実力もあるが、現場の方針や政治的事情に悩まされている方は
転職するのが良いのでは、と思います。
その際は、信頼できる技術者の紹介や勉強会等の繋がり。CodeIQのような技術力で評価するサイト
等を利用するほうが旧来の転職サイトやエージェントを利用した転職よりは良い転職ができるのでは、と思います。

新技術の学習

転職後の業務で新技術の検証、選定をする機会が非常に多くなった。
もともと私的に色々調べることも多かったが、調査・検証の経験値が跳ね上がった。
2013年後半にはVagrant+Chefを学び始めたこともあり、検証作業がさらに楽になった。

良いコード

「いかに良いコードを書くか」という系統の書籍については散々読んできたので
「この記述は見たことがある」と思う機会が増えてきた。
この種の書籍はしばらく買わなくても良さそうだ。

英語

最新分野に触れる機会が増えたため、必然的に英語文書を読む機会が増えた。
それに伴い英語の勉強熱が高まり、レギュラーの学習対象に組み込んだ。
CodeIQの出題になれるまでは中々時間が作れなくなり、英語学習時間が減ったが
大分慣れてきたのでまた英語に時間を割り当てて行きたい。

CodeIQ

CodeIQの出題者になったとも良い材料。
限られた時間で、出題・採点を行う必要があるため必然的に自動化等を考慮しなければならず
この部分でも新たな経験を積むことができた。
個別の解答採点自体得ることも多く、アプレンティスシップ・パターンや達人プログラマー等にもあるが
教える側のメリットのようなものの恩恵を受けるとともに解答者によってはこちらが教わる立場にも
なるためかなり得をしていると思う。

技術ブログ

転職もCodeIQも当ブログがきっかけでした。
技術ブログやGitHubへのコード公開をすることは転職の面でも非常に有益だと思います。

転職時のメリット以外にも
自分が悩んだり迷った部分は他の方も経験する可能性が高いため、貢献するために記事化する、
自分のリファレンスとして役にたつ、
記事にまとめることで理解が深まるとともに復習も兼ねて脳への定着率が高まる、
といった面もあります。