Linuxエンジニアを目指して入社一年目にやって役にたったと思う事

自分がLinuxエンジニアになりたくて、入社一年目にやってよかった事をまとめておこうと思う。一年目にどれだけやるかが、勝負の別れめといっても過言ではない。それは技術を学ぶだけではない。いっぱいあるんだけど、最低限やって良かったなと思う項目を列挙する。

それがぼくには楽しかったからを読む

Just for Fun.

Linuxがどうやってできたか、なぜそれをしようと思ったのかが分かり、今後自分がLinuxのエンジニアとしてどういう動機で仕事をしていきたいかを考えさせてくれる本。この本を読めば、自分が仕事でオープンソースを扱っていることに自信を持てると思う。

「なんでその仕事してるの?」という質問に即レスできるようになる。

The Hacker Ethicを読む

自分にとっての娯楽、しかし、それは真剣な娯楽なんだ。
それが最高なんだよ。

オープンソースを扱う仕事ってどうなんだろう、という疑問に対する答えを教えてくれるかもしれない。また、昔の人の仕事に対する考え方なども知ることができる。これを読むことで、「自分はこれから何をしたいのか」がおぼろげながらも見えてくる。少し明確になるだけでも十分だと思う。

「仕事ってなんだと思う?」という質問に即レスできるようになる。

UNIXという考え方―その設計思想と哲学を読む

Linuxよりもっと昔のフリーソフトやオープンソースの歴史や思想を最初に知っておくと、オープンソースエンジニアとしての意識が高くなると思う。「フリーソフトウェアと自由な社会 ―Richard M. Stallmanエッセイ集」もおすすめ。

意識高い系のエンジニア。

信頼できる師匠を見つける【重要】

すごく大事。自分が他人との比較で腹を立てたり悩んだりした時は、信頼できる師匠に第三者としてのアドバイスを貰えると、前向きに取り組めるようになる。とにかく自分はどうなりたいのか、それをするのに他人と比較して悩んでる暇はあるのか、そういう心の持ちようは大事だと思う。世の中には自分よりできる人が何人もいる。そんな事にこだわっている暇は無い。とにかくやる。

信頼できる師匠がいると、前向きな気持ちを維持できる。

上司の愚痴ばかり言わない

確かにそういう時はある。しかし、自分は本当に上司にとって良い部下で行動できているのか、そのあたりは一生答えが出ない。とにかく自分は上司に対して最高のパフォーマンスを見せる。上司に自分を理解させるのが大事。自ずと上司も自分に高いパフォーマンスを見せてくれるんじゃないかと思う。

そうなれば、認められて、頑張って、認められて、というような良い循環ができて成長速度が早くなる。

チャンスは逃さない

「これやれる人ー」とか「やってみたい人ー」という問いかけには、出来ても出来なくても全部「はい!」と立候補する。その時できなくても、調べながらやれば意外とできることが多い。そうすると、自信になって次々チャンスがやってくる。自分ができないことは例え年下であっても素直に教えてもらう姿勢が大事。自分の出来無いことを隠したって何もいいことはない。

気がついたらプロジェクトの中心にたっているだろう。

Filesystem Hierarchy Standardを理解する

古い文書かもしれないが、Linuxを触っていく上であまり考えなくても感覚的にディレクトリ構造を扱えるようになった。標準文書とかは知っとくに越したことはない。和訳もあるが、いつかはトップエンジニアになる、とか思っていると英語は必須なので、早めにテクニカルな言い回しに慣れておいた方が良いと思う。まぁ、どっちを読んでもいい。

The Cathedral and the Bazaarを読む

フリーソフトやオープンソースの歴史や思想を理解するのに役にたった。fetchmailを使ってみると意外と便利だった。

マスタリングTCP/IP 入門編を読む

ネットワークを学ぶ上での基礎を理解するのに役にたった。ネットワークをやらなくても、ここに書いてある内容を十分理解するだけでもやっていけたりする。

どうせサーバエンジニアはネットワーク知らないでしょ、と言われないようになる。

インターネットルーティング入門 第2版を読む

プログラミングとかサーバばっかりいじってると不足しがちなネットワークのルーティングやバックボーンの知識(BGP)を理解するのに役に立った。BGPだってしってます!と言えるようになる。

BGPオペレータに詳しく聞かれるとやっぱりきついけど。

サーバの要塞化をする

今では古いかもしれないが、やったことあるのと無いのとでは細かい所でサーバ構築の差がでるように思う。上のURLのさくらの田中さんの記事とかすごい参考になると思う。構築の基礎を理解するのに役に立った。

不要なデーモンをあげてまくって、脆弱性を作ってしまうとすごく恥ずかしい。

エディターやシェルのショートカットやキーバインドを意識して使う

今後、サーバを触ったりコーディングする時間が増えてくるはずだ。そういう時に、例えばBashを使っていた場合は、少なくともCtrl+a、d、e、r、h、p、y、w、f、bぐらいは意識して使えるようになっておこう。また、エディタもカーソルキーはできるだけ使わずにショートカットやキーバインドを使うように意識する。screenを使う場合もキーバインドをしっかり覚える。慣れてくると、作業効率が大幅に向上していることに気付く。カーソルキーはなるべく使わないように意識すれば、そのうち使わなくなる。viやscreen、以降で述べるgtagsで自分だけの開発環境を作るとハッカーな気分になれる。

人に見せる時にカーソルキーを使ってカタカタしてると少し恥ずかしいかもしれない。

Perlを勉強する

おすすめの本は、やっぱりオライリーになっちゃうかな。Perlを使って、デーモンの監視をするとか、そういうシステム管理のツールを作ると、Perlの理解と共にサーバやデーモンの構成等の理解を深めるのに役に立った。最初はメイン長くていいから、じょじょにサブルーチンで構造化プログラミングを学んで、モジュールの凝縮度や結合度を理解して、オブジェクト指向っぽいコードを書いていくのが良いかも。「すぐわかる オブジェクト指向 Perl」が個人的にオブジェクト指向やリファレンスを学ぶ上で役に立った。

いきなり訳もわからずオブジェクト指向っぽいソースを書くと、かなり恥ずかしいコードになっていたりする。

Linux From Scratchで自分のLinuxを作る

僕の場合は一年目にはやってないんだけど、一から全てソースでコンパイルしていくことで、より深くサーバを理解できた気がする。理解も大事だけど、KernelやGlibcをコンパイルすることで自信にも繋がった。そして、今後は自信を持って「世の中にない?だったら自分で作ってやろう。」という気になる。2年目以降は「Linuxシステムプログラミング」で理解を深めていく。

「僕はKernelコンパイルの経験あります」と声高らかに言える。

Cを勉強する

Linux From Scratchとかしちゃうと、Cで色々触ってみたくなる。とにかく最初は、どこかの出力を自分の名前にしてみるとか、そういうちょっとしたことでいいので弄ったりしてると、気がついたらApache触ってたりKernel触ってたりってなると思う。Linuxを触っていく上では、Cは必須だと思う。2年目以降は「Linuxカーネル2.6解読室」を読めるようになるだろう。

Cができたら色々分かったり弄れたりして純粋に楽しくなるはず。

GNU GLOBALとvimで巨大なコードでも追えるようにする

これは自分もやれてなかったが、是非1年目からやっておいた方が良いと思った。Linuxエンジニアである以上、いつかはKernelやApache HTTP Server等、数万から数十万、さらには数百万行のコードをじっくり読んでいきいく事になるだろう。何も知らずに、いきなり巨大なコードを何のツールも使わずに読むのはかなりきついはず。なので、GNU GLOBALと呼ばれるソースコードタグシステムをvimに組み込む事で、快適にコードリーディングをできるようになるので、その周辺の知識をつけておこう。また、コードリーディングのメソッドとして、「ひらメソッド」を参考にすると良いかもしれない。

目指すはKernelやApacheのコミッター!

 

これぐらいだろうか。技術だけでは無いことがわかって頂けただろうか。こういう細かい事が2年目3年目の成長を左右すると思っている。細かいハードウェアの扱いや他にも色々あるんだけど、少なくともこれを一年目にやっておけば、きっと有意義な2年目を迎えられると思う。そして、仕事がどんどん楽しくなるはず。

頑張って下さい。

 

追記(2012年4月5日)

続いて、Linuxエンジニアを辞めて大学院に入学しましたを書きました。このエントリでは、どうしてここまで頑張れたかの理由を書きました。