smellman's Broken Diary

クソみたいなもんです

自分がエンジニアとして働くために学んできたことをまとめてみる

id:sinsoku さんが今までソフトウェア開発について勉強してきたことのふりかえりというエントリで学習してきたことをふりかえっていて、僕も転職を機会にまとめてみようかと思います。ただし、僕はエンジニアという大まかな括りで書いてみます。
とりあえず、期間はアルバイト時代からケイビーエムジェイ入社までの期間です。

アルバイト一社目

Linkedinには社名を書いていますが、社名は伏せておきます。よくわからないけど。
主な業務内容はVisual Basic 6でのGIS開発でした。当時はまだGoogle Mapsとか無かった時代で、G-XMLの動向についてが注目されていたような時代です。
アルバイトだったので研修などはありません。いきなり数万行(数十万行かな?)のVisual Basicソースコードを渡されて改修するというものでした。
最初の一ヶ月程度はVisual Basic自体に慣れることと、本を頼りに文法などを学習するのがメインでした。最初にソースコードを渡されていたので、それ自体もよい勉強になりました。例えば、ModuleだらけでClassにしていないのは明らかにおかしいコードが散見されることとかです。
一ヶ月経過するころにはある程度コードが書けるようになるので効率が上がっていきます。しかしながら、それは同時に開発者が一名から二名に増えることを指すため、CVSでのコンクリフトが発生し始めるようになります。酷いときにはサーバにログインしてゴニョゴニョと直すという変な能力を身につけることとなります。
開発者として特に学んだのはXMLについてでした。
一つ目はG-XMLSVGで出力させたらすげーよくねとかいう話になって単純にSVGについて勉強したり、MozillaSVGが動くバイナリをビルドして試したりとかしていました。こちらは全く実用的になりませんでした。
二つ目はなぜかVisual BasicXULがあったら面白くない?と妄想してXULの仕様(これはもともとある程度把握していた)と、実装を行なうためにVisual Basicで普通に使えたMicrosoftのライブラリについて勉強して実装をしていました。そういや、今度Microsoftのイベントに壇上するまゆきさんにVisual Basicについて日記経由で教えてもらったのもこの話が元ネタでしたね。
ちなみに、Visual BasicXULを動かすやつは実装後にあまりに使えないのがわかって、退職時にこのコード消していいよと伝えていたのですが、後にこれが悲劇を生み出します。これは後述。
あと、当時Rubyに挫折した(その前にPerlPHPも挫折済み。Tcl/Tkとschemeがメインでした)のですが、「RubyがわからなければPythonだ」という安直な考えでPythonを勉強していました。この知識が元となり、国土地理院のデータを変換するコンバータなどを開発して、Visual BasicでラッパーのGUIを作りPy2exeで作ったexeを叩くというのをやっていました。

なお、僕の最後の仕事は便所掃除でした。何故最終日に当番回ってくるんだ...

当時読んでた本はここらへんです。

初めてのPython 第3版

初めてのPython 第3版


eXtreme Programmingテスト技法―xUnitではじめる実践XPプログラミング (OOP foundations)

eXtreme Programmingテスト技法―xUnitではじめる実践XPプログラミング (OOP foundations)

アルバイト二社目:株式会社アーツテック

アルバイト二社目では多岐に渡る開発を行いました。
最初の仕事はApacheのログ解析でした。ここではPythonで解析を行い、その結果をGNU Plotで出力して見せるというのを作りました。
一週間後、何故か前のアルバイト先のアルバイト仲間が転職してきます。そしたら、その当時の上司と前職の上司が何やらIRCで悪巧みを始めました。「二人がいるんだったらうちの仕事回せるよね」何故か前の会社の案件が舞い込んでくることに。
そして、案件スタートして驚愕の事実がわかります。先ほど、退職時にこのコード消していいよと言ったXULを真似たやつが改変された状態で復活していました。聞いてみたら、僕が退職後に入ったエンジニアがこのコードを見て使えると思ったらしく復活させたらしいのです。ここで、害悪となるコードは責任を持って消さないといけないというのを学びました。
案の定、その案件はその害悪コードもありデスマーチ化します。ここで初めてデスマーチを学びました。バイトだぞ?
そして、バイトが忙しいため就職活動ができない状態に陥ります。その話を査定の時にちらっとしたら、次の日に内定が出ていました。やはりこれも後悔するので、就活時期のデスマはもってのほかというのを学びました。いいですか、学生アルバイトをしている皆さん、就活中のデスマは危険ですよ!
ちなみに、もじら組組長になったのはこの時期です。それはおいとくとして。
次にしばらくはサーバメンテナンスなどの仕事がメインとなり、アルバイトも週数日だったので大きな仕事は振られない状態でした。
で、夏休み前に上司から言われます。「Javaできる?」フラグですね。どう見てもフラグですね。
僕は「Java Appletなら」と言ったら「問題ない」という返事が来て渡されたのがJava WorldStruts特集をコピーしたものでした。「これ読めばわかるから」なんだそれは。
また、アプリケーションサーバとしてJRunを、プレゼンテーション層としてColdFusionを使うというのが決まっていました。
そのため、JRun+ColdFusion+Strutsという構成でアプリケーションが構築できるようにするために各ミドルウェアの勉強をして、一週間ぐらいかけて環境を構築します。そしたら、作ったあとにIBM Developer Worksにて同じような組み合わせの環境構築方法が公開されました。ショックでした。
そして、そのプロジェクトはどんどん魔窟になっていきます。またもやデスマーチです。僕はエンジニアとして、椅子を並べて寝るよりも床で寝る方が負担が少ないことを学び、対象外ブラウザだろうが構わずJavaScript Debuggerを使って動的にオブジェクトを解析する方法を学び、スレッドプログラミングでデータベースの負荷を減らせる術を学び、SQLServerSybaseのストアドプロシージャについて学び、1クラスが1万行を超えると脳みそがパンクすることを学び、銭湯の営業時間は早めに調べておかないとまずいことを知り、小人さんが実在することを知ることになります。

当時読んでた本はここらへんです。


WebDAVシステム構築ガイド ――Apache/IIS/Subversion/Jakarta Slide

WebDAVシステム構築ガイド ――Apache/IIS/Subversion/Jakarta Slide



Jython Essentials

Jython Essentials


Python & Xml

Python & Xml


Webサービスエッセンシャルズ

Webサービスエッセンシャルズ

社会人一社目:株式会社アーツテック

社会人初日、スーツで出社したところ社員みんなに笑われ、社長挨拶が「今年の新人は松澤君だけなので新人研修はありません」という事務連絡で、社会人初日に一人で客先に行ったらお客さんから「なんでスーツ姿なんですか?」と言われた。アルバイトから新卒入社は世知辛いというのを学びました。
最初はサーバ関係の仕事がメインでした。その時、こんなエピソードがありました。俺「このサーバのパスワードわかりづらいですね」上司「劇場版宇宙戦艦ナデシコ見てればすぐ覚えるだろ!」アニメ見てないだけで不理事に怒られることを学びました。というか劇場版とか難易度高い。
初年度の夏に差し掛かるぐらいから開発案件が入って来ました。担当はJava+Tomcat+Struts+OracleによるWeb開発及びJava+Swing+Oracleによるクライアント開発及びサーバ保守でした。長いデスマでした。
ここではOracleの管理方法を学び、first_nameというデータベースフィールドに性を入れる設計をしたエンジニアは死ぬべきだというのを学び、3UのUPSを一人で持ち上げてはいけないことを学び、UPS付属のソフトが使えないので普通にLinuxディストリビューションから入手できるソフトを駆使してネットワーク越しに安全にシャットダウンさせる方法を学び、ドットプリンタの微調整がいかに難しいかを学び、USBトークンを使ったなんちゃって認証(PPTPで接続するのに使った)を作る手段があることを学びました。最後は学んだというよりもVBAを駆使して結構えげつないことをする方法を発見するというものでしたが...
また、上記の案件で心が折れていたので、他の先輩が気晴らしも兼ねて他の案件にも入るように計らってくれました。
その案件では、お客さんと交渉する手段やお客さんが困っているものを引き出す方法を学び、インターネットVPN(IPSec)の構築方法を学び、お客さんのセキュリティの講師を担当し、Active Directoryの設計を学び、出張先で飲み過ぎるとやばいことを学び、UPSが初期不良で燃えることがあるのを学びました。まぁ、他にもいろいろ勉強させていただきました。あと、結局コードは書かずに終わりましたけどDelphiについても学びました。
担当するサーバ、ネットワーク機器も多く、Windows 2000 Server, Windows Server 2003, Debian GNU/Linux, Miracle Linux, FreeBSD 2.x, どこのメーカか忘れたL3スイッチ, YAMAHA RTX1000, 古めのCiscoのルータなどをいじっていました。それぞれはあまり大したことができていませんが、多くの環境が触れるというのは結構よかったと思います。
あと、途中に C Magazine での特集のお話をもらい、Firefoxソースコードについて解説する記事を担当することになります。とりあえず C++ の初心者本を会社から借りて読んでから、手探りでソースを読み、ビルドをひたすら繰り返して記事を書きました。この時にはGNU Globalがソースリーディングで役に立ち、言語によってソースリーディングをするときに使えるツールを探すとよいのを学びました。

当時読んでた本はここらへんです。

ゆとりの法則 ? 誰も書かなかったプロジェクト管理の誤解

ゆとりの法則 ? 誰も書かなかったプロジェクト管理の誤解


ピープルウエア 第2版 ? ヤル気こそプロジェクト成功の鍵

ピープルウエア 第2版 ? ヤル気こそプロジェクト成功の鍵


デッドライン―ソフト開発を成功に導く101の法則

デッドライン―ソフト開発を成功に導く101の法則


エンジニアのための時間管理術

エンジニアのための時間管理術



Java&XML 第2版

Java&XML 第2版


Javaの鉄則―エキスパートのプログラミングテクニック

Javaの鉄則―エキスパートのプログラミングテクニック

  • 作者: ピーターハガー,Peter Haggar,ドキュメントシステム
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/08
  • メディア: 単行本
  • 購入: 4人 クリック: 33回
  • この商品を含むブログ (20件) を見る

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)


Java魂―プログラミングを極める匠の技

Java魂―プログラミングを極める匠の技


Delphiオブジェクト指向プログラミング (ソフトウェアテクノロジー)

Delphiオブジェクト指向プログラミング (ソフトウェアテクノロジー)


実践Postfixメールサーバー構築

実践Postfixメールサーバー構築


UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

続きは...

株式会社ケイビーエムジェイ入社後についてはまた別途エントリを書きます。