しめじのもの

モノのブログ

素人からエンジニアになった後の3年を振り返る(その1~研修時代編)

まえがき

上司:「今後の新人研修の参考にしてみたいから、今までどんなことしてきたのかちょっとまとめて~」
大学では農学を学び、IT業界についてはほぼ素人という意味では
文系SEとかプログラマーと言っても良かった自分が、
エンジニアとして今まで何を学んで今に至ったのかを少し詳細に振り返ってみる。

テーマは、(主にプログラミング方面で)どの時期に何を学んで、何を考えたのかについて。

ネットを賑わせる新人エンジニアの活動歴はどうにも華々しすぎて、胸がいたいので、
普通の人はきっとこんな感じだよ、ということで公開してみる。

経歴

入社前のスペック

  • 大学
    • 国立大学の農学部出身
    • 現役合格だったものの、大学時代は無気力に陥り2回留年。
  • IT技能
    • プログラミング知識はほぼ無し。(卒論でFORTRAN77を触って面白いとは思ったが、現代で通用するような言語でも知識でもない)
    • Linuxなどもほぼ触ったことがない(cdしか分からないレベル。そもそもCUIで何かできない程度)
    • Excelで関数(非VBA)ごちゃごちゃやるぐらいなら・・・程度のリテラシー
    • 資格:応用情報処理技術者
      • 就活なども意識して取ってみた。応用情報まではほぼ無勉強でも国語の問題だと思えば取れる人も多いと思うので、価値は微妙。

1社目(独立系SIer時代)

いわゆる下請け会社ではあったが、一次案件もそこそこあったり、自社パッケージ売ってたり。
技術へのこだわりを掲げる会社だった。先輩社員たちにはレベルの高い人も多かったが、
外部イベントに積極参加したり、情報を発信しているような人はほぼいなかったように思う。

新人研修

新人研修は手厚くやるのをウリにしている会社だった。(自分もそこをアテこんで入社した)
基本的には毎日ひらすらプログラミングをしていた。
これとは別に、3週間に1日程度の間隔で「スポット講義」と呼ばれる講習を受けた。
内容はテストやツールの使い方、オブジェクト指向、ネットワーク、データベース、など

研修前半(~2013/05)

プログラミング言語C 第2版 ANSI規格準拠

プログラミング言語C 第2版 ANSI規格準拠

windowsでVirutalBox使ってCentの上でいきなりプログラミングスタート。
同期達もLinux&CUIに詳しい人は少なく、随分苦戦した。

K&R の進め方(主に4月)

  1. K&Rの指定された問題を解き、問題ごとにREDMINEでチケットを立てて進捗管理
  2. SVNにコミット
  3. 研修担当社員にコードレビューを受ける
  4. 合格が出れば次の問題に進む

社内オリジナル問題集の進め方(主に5月)

  1. REDMINEにチケットを立てる
  2. テストケースを作る & Astah Communityでフローチャート作る
  3. テストケース&フローチャートのレビューを受ける
  4. OKが出たらコード/テストコードを書く
  5. コードレビューを受ける
  6. 合格が出れば次の問題に進む

上記のレビューは全て口頭で行う(後でREDMINEに文書化して投げてくれる)
テストはGNU Makeで書く。

所感

C言語とデータ構造の基礎を学べたことはとても良かった。
特にK&Rではスタックとハッシュテーブルを実装する章があるが、そこは非常にためになった。(特にハッシュテーブル)
こういったものは現在の高級言語では予め用意されているので、利用するだけになってしまうが、
最小限の道具だけでアルゴリズムとデータ構造を学ぶのは、その後の知識の「ノビ」を左右する大事な土台になると思う。
ポインタを学ぶこととメモリ管理を学ぶことは、現在の高級言語でも確実に生きるはず。

K&Rがなぜ今でもバイブルとして取り上げられるのかを肌で感じた。
(ただし、K&Rは日本語版の訳が怪しいとか微妙な問題はいくつか抱えているし古臭いという批判もわかる。)

この時点ではLinuxの知識もviの知識もほとんど増えていなかった。
viはとりあえず編集は出来る、というだけで各種ショートカットは少ししかわからず。
コマンドもファイル移動やsvnのコマンド程度。
今となっては、せっかくやるならもう少し手厚く学べてもよかったのかも、と思う。

研修後半(~2013/09)

ただし、教科書は最初の1周間読むだけで後はリファレンスとして使う。
ここで、クラスと継承やインターフェイスなどのCにはない要素だけかいつまんで学び、
あとはもっぱら社内オリジナル問題集を説いていた。
進め方はCの時とほぼ同じ。テスト書く→レビュー→コード書く→レビュー

  • 副読本

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

「いきなりは難しいかもしれないけど、ある程度研修進んだ段階で読むといいよ~」と渡された本。
特にEffective Javaは研修終わってしばらくしてから読んで抜群に効いた。
これを読んでないJavaプログラマはモグリと呼んでいいとさえ思う。

研修内容

  • 6月はオリジナル問題集(CUI)
  • 7-8月はオリジナル問題集(Swingを使ったGUIプログラム)
  • 9月は課題を作って自分でWebアプリケーション作り(Servlet+JSPを生で使い、フレームワークは使わない)
    • 自分は食べログみたいに、飲食店を評価して☆をつけるシステムを作った。セキュリティ的に脆弱性はあった気もするがログイン機能もあった。

所感

オブジェクト指向入門期。
まだまだコードはこなれてなかったように思う。
わからないこと、多少問題に関係がなくても興味があったことはとにかくググりまくっていたのが良かった。
特に9月は自分で課題を設定して、好きに機能を作れたのでとても充実していた記憶があった。
Webアプリケーション(+MVCアーキテクチャ)は初体験だったが一気に知識が増えた。
また、それを許される程度の時間の余裕があったのも嬉しかった。
Java6は派手な機能もなく今となってはレガシーだがその分シンプルにオブジェクト指向言語を学ぶことが出来た部分もあったように思う。

自習学習

8月か9月にリーダブルコードを読んで世界が広がった。
レビューでは自分のコードのおかしいところを指摘されたが、その場その場の話題だけで終わってしまっていた。
それを体系的にまとめて提示してくれた本がこれ。
あらゆるIT会社の新人研修で配られるべきだとすら個人的には思っている。
特に、変数・メソッドの命名、メソッドの引数に何を渡すのがいいのか、そういったロジック周辺のことを考え始めるキッカケになった。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)


この後、現場に配属されることになる。
~つづく。~

simezi9.hatenablog.com