自分がエンジニアをやるにあたって壁だったこと

なんとなく、書いてみる。

自分がエンジニアをやり始めて10年たって今回ではじめて克服できたことがある。これまでもなんども跳ね返されてきた壁である。

それは、「できないことを捨てる」vs「できることを拾う」このバランスを非同期的に自分で自分でコントロールすることである。コードというのは大体の場合、イチから作ることはない。誰かのコードにadd / modifyするのが大体である。

その際に、重要なのはコードを「読む」こと。実は「書く」ことではない。そして、100%わかってないが、「雰囲気で」わかったつもりになってそれっぽいコードを書くことである。ネストされてたどり着く基底クラスなどは理解する必要はない。そういうものは切り捨てていかないとやらないといけないことは爆発的に増える。

これがメチャクチャ苦手だった。100%わからないと不安、100%わかってからコードを書きたい。これが僕のプログラミングに対する苦手意識の根底にある。

大学3年になって、研究室に配属されたとき、インドネシア人のエンジニアの人にコードの母体を書いてもらって、自分はそれにコードを足すだけだったのに、自分は延々そのコードを理解することを優先させてしまった。週令のミーティングで進捗が芳しくなく、怒られ、研究室に行くことが億劫になってしまった。(あるあるだと思う)

なんとか、先輩に相談したりして切り抜けたがほとんどトラウマのできごとであった。

社会人1年目にも幸運にもSIerでコードを書くという部署に配属されたが、その際も同じである。不運か幸運かわからないが、そのコードは「天才」が書いたコードだった。大学3年のときよりも、厳しい状況だった。

まわりの人も多分僕よりコード書けない人はいなかったし、客観的に見返すと、かなり厳しい状況だった。コードを読んで終わる1日、給与泥棒。後ろめたいところがあった。今思えば、流石にこれらのコードは「ヤリ過ぎ」であって、状況もよくなかった。

チームメンバーのことを考えて採用技術を選択する、ドキュメントを作るのようなことが完璧にできていなかった。先輩にペアプロを頼んだり、休日も毎日遅くまでコードを読んだが、全然わからなかった。

勉強することが死ぬほどあった、ネットワーク、サーバ周り、デザインパターン、C++, ruby on rails 、オブジェクト指向(大量にインタフェースがきられていた)、javaのDI、javaのIbatis、SVN trunk / tag 、テストケース、テスト技法、jenkins 、その他多数。いろいろ有りすぎた。デザインパターンも濃淡があって、ほとんど使うパターンは限られるのだが、大海に放り出された気分ですべてを勉強しようとしていた。

大学で余るほどあった暇な時間をなぜこういったことに当てなかったのか死ぬほど後悔した。サーバの管理人とかやっとけばよかったと思った。

インターネットを調べると出てくるたくさんの天才。自分意外のプログラマーはほとんど全員相当前にいっており、自分のレベルのエンジニアなどどこにもいないように思えた。ググって、でてくる記事の中で分からないことを調べるとそれがチェーンのように連鎖して、何を調べていたのかわからなくなることもママあった。

当時は特にqiitaのようなもののもないので、いろんなプログラマが思い思いの自作ブログを作ったりしていたので、より、情報が整理されておらず、情報を探索するのにコストがかかった。

世の中でできない人間は自分一人なのかもしれないと思った。

時間はいくらあっても足りなかった。月曜の未明に朝がくるのが本当に辛かった。月曜の朝がくる。また、今週も何もアウトプットをせずに、日が暮れていく。どんどん置いてきぼりになる。

もともと持っていたトラウマが更に悪化してもしょうがない状況ではあったと思う。

「天才」のコードに一行も書き足すことができず、上の人からは失望された。プロに入って一試合も登板することなく辞めていく投手のような、得も言えない精神的にもキツいものがあった。

他の部署に配属してもらうことをお願いし、自分はコードを書く環境からはできるだけ遠ざかることにした。

ただ、コレははっきりいって「ど真ん中」のあるあるだと思う。プログラミングというのは元来そういうものなのだと思う。

1 基本的なことを濃淡つけて勉強する
  (が濃淡が大体かかれていないのでここで初心者は苦戦する)

2 自分にあった環境から勝負する

  ・良いサンプルを探す
    ・ 究極までシンプル化して単純なコードを作る
    ・成功体験を意識的に積んでメンタルの安定にも気を配る
   ・「気がついたら理解できていた」といった感覚を身につける

3 できないことを捨てていく。特に選民意識からくるプログラマーの全部やったほうがいいといったアドバイスは捨てる

4 あの言語もこの言語もやらない

5 4と対立するが、かといってある程度理解したら、違う言語をうまく勉強する

実際今プログラミングスクール百花繚乱のいまでもここに踏み込んでいる人がいないように思う。非常に根源的なことで。これを通らずに、プログラマになることは確実に難しいと思う。

他の方法でなるとしたらごまかし、将来への先送りをしているだけだ。また、このあたりの基本的な考え方は何もプログラミングだけに限らないことだと思う。

何かを学習するということの根源的なテクニックだと思う。これを元にしたスクールみたいなのを開きたいと考えている。



この記事が気に入ったらサポートをしてみませんか?