概要
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.技術に明るい上司のもとでの開発
=>直属の上司が非常に技術に明るいため、理にかなっていれば色々な提案が通る。
改善したいのに上を説得できない、政治的に無理、という機会が皆無。
今年学習したこと
対象 | 内容 |
---|---|
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 | JVM、CLR、JavaScript処理系で動作するオブジェクト指向言語。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 | RubyのWindows向け複数バージョン管理ツール。検証はしたが実際に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 | RubyのAPIドキュメント用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を利用したRubyのCLIツールを簡単に作成するための 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 | 名著。全体を通して読書完了 | |
RailsによるアジャイルWebアプリケーション開発 | 序盤をコーディングしながら読んでいたが途中から積読。たまにリファレンスとして参照 | |
Ruby Cookbook | 英書。電子書籍。すべてをカバーせずかいつまんで学習して読了 | |
プログラミングRuby1.9ライブラリ編 | ほそぼそと学習継続中 | |
プログラミングRuby1.9言語編 | 読了。基礎をひと通り学ぶ | |
秀丸マクロ ポケットリファレンス | ざっと目を通して実際に役に立ちそうな部分は手を動かして学習。Sublime Text2に移民したので秀丸はもう使っていない | |
bash入門 | ほそぼそと学習継続したり積読状態になったり | |
Linuxコマンド ポケットリファレンス | ざっとみて気になたものを学習したり、リファレンスとして置いておいたり | |
UNIXという考え方 | 読了。複数の書籍で推奨書籍、参照書籍になっていたので購入した | |
Code Simplicity | 電子書籍。ボリュームがないので即日読了。他の「良いコードとは」について語った書籍と類似内容が多かった | [rakuten:paperbackshop:16306560:image:small] |
メタプログラミングRuby | 読了。実務でDSLの実装などが多いため重宝した | |
デザインパターンマルチスレッド編 | マルチスレッドの経験、知識皆無のためひと通りサンプルを書いて学習。 実務・趣味共に実際役に立つマルチスレッド処理はあまり書いていないのでまだ経験値不足 |
|
Ubuntu Linux入門キット | 読了 | |
RSpec Book | 読み始めていたがCucumberを利用しなくなりそうになったため読書停止。積読中。 たまにリファレンスとして見ている |
|
実装パターン | 読了。既知のものが多かったので読み飛ばす箇所が多かった | -- |
アプレンティスシップ・パターン | 読了 | |
リーン開発の本質 | 読了 | |
ピープルウェア | 読了 | [rakuten:hmvjapan-plus:10845829:image:small] |
ITエンジニアのゼロから始める英語勉強法 | 読了 | |
英語のリスニングは発音力で決まる!UDA式30音練習帳 | ITエンジニアのゼロから始める英語勉強法で推奨されていたので選択。読了 | |
テストから見えてくるグーグルのソフトウェア開発 | 読了 | |
アジャイル開発とスクラム | 読了 | |
Webデザインメソッド | 途中まで読んで積読中 | |
アルゴリズムを学ぼう | 途中まで読んで積読中 | |
アプリケーションを作る英語 | ほそぼそと学習中 | -- |
Ruby on Rails3ポケットリファレンス | 必要な箇所を抜粋して学習。読了 | |
小飼弾の仕組み進化論 | 読了 | -- |
Linuxシステム実践入門 | 学習中 | |
TeamGeek Googleのギークたちはいかにしてチームを作るのか | 読了 | |
ソフトウェア開発の名著 | 読了 | [rakuten:guruguru2:11825032:image:small] |
CoffeeScriptファーストガイド | 必要な箇所をリファレンス的に参照しながら学習 | [rakuten:enterking:11505942:image:small] |
Clean Coder | 読了 | |
アジャイルユーザビリティ | 読了 | [rakuten:enterking:11692564:image:small] |
Thoughtworks Anthology Volume2 | 電子書籍。英書。読書中 | |
サムライ・エピソード | 電子書籍。読了 | -- |
DevLove Hangar Flight | 電子書籍。読了 | -- |
開発現場に伝えたい10のこと | 電子書籍。読了 | -- |
Release IT! | 電子書籍。読書中 | |
入門Chef Solo | 電子書籍。読了 | |
ソフトウェアアーキテクトが知るべき97のこと | 少しずつ読書中 | |
Jenkins実践入門 | 読書中 | |
ドラエもん英書版 | 英語学習用。1-7巻読了 | -- |
総括
転記
とにかく転職が大きかった。
業務内でも新たな技術をほぼ毎日覚えることができる上に、
定時勤務のため就業後の学習時間も多く確保できた。
SI'erでの業務は大きなシステムの一部分のコーディングおよび
それに関わる技術者の取りまとめや管理等を担当する事が多かったため知識の幅が狭かった。
また、大抵激務の現場だったため十分な学習時間も確保できなかった。
転職後は少人数ですべてを担当するためひと通り学ぶ必要があり、
知識を広げるチャンスを得ることができた。
Web系の企業は勤めたことはないですが、現職のようなサービスを提供する側の現場に
勤めることで、技術や手法の選定の自由度が高まるのでSI'erではできなかったような
経験を多くできます。
私の場合は直属の上長が非常に技術に明るくPM-PL-SE-PGのどの立ち位置についても
経験値が高く適切な判断ができ、政治等にとらわれない発言力と信頼を持っているため
理にかなったことができる環境になっていることが大きいです。
ペアプロ面接による採用だったため、採用する側もされる側もお互いに技術的に納得・信頼して
採用してもらえたことも大きかったように思えます。
ちなみにTwitterで声をかけてもらってすぐに直接あって採用試験の手順を踏んだため
転職サイトや転職エージェントは経由していません。
やる気も実力もあるが、現場の方針や政治的事情に悩まされている方は
転職するのが良いのでは、と思います。
その際は、信頼できる技術者の紹介や勉強会等の繋がり。CodeIQのような技術力で評価するサイト
等を利用するほうが旧来の転職サイトやエージェントを利用した転職よりは良い転職ができるのでは、と思います。
新技術の学習
転職後の業務で新技術の検証、選定をする機会が非常に多くなった。
もともと私的に色々調べることも多かったが、調査・検証の経験値が跳ね上がった。
2013年後半にはVagrant+Chefを学び始めたこともあり、検証作業がさらに楽になった。
良いコード
「いかに良いコードを書くか」という系統の書籍については散々読んできたので
「この記述は見たことがある」と思う機会が増えてきた。
この種の書籍はしばらく買わなくても良さそうだ。
英語
最新分野に触れる機会が増えたため、必然的に英語文書を読む機会が増えた。
それに伴い英語の勉強熱が高まり、レギュラーの学習対象に組み込んだ。
CodeIQの出題になれるまでは中々時間が作れなくなり、英語学習時間が減ったが
大分慣れてきたのでまた英語に時間を割り当てて行きたい。
CodeIQ
CodeIQの出題者になったとも良い材料。
限られた時間で、出題・採点を行う必要があるため必然的に自動化等を考慮しなければならず
この部分でも新たな経験を積むことができた。
個別の解答採点自体得ることも多く、アプレンティスシップ・パターンや達人プログラマー等にもあるが
教える側のメリットのようなものの恩恵を受けるとともに解答者によってはこちらが教わる立場にも
なるためかなり得をしていると思う。
技術ブログ
転職もCodeIQも当ブログがきっかけでした。
技術ブログやGitHubへのコード公開をすることは転職の面でも非常に有益だと思います。
転職時のメリット以外にも
自分が悩んだり迷った部分は他の方も経験する可能性が高いため、貢献するために記事化する、
自分のリファレンスとして役にたつ、
記事にまとめることで理解が深まるとともに復習も兼ねて脳への定着率が高まる、
といった面もあります。