大学で時間かけてゆっくりプログラミングを独学してみた経験から汚いコードについて考えてみようとした

思いつきで色々書く回ですよっと。

を、読んで自分の経験からどう捉えるべきか色々考えてみた。

まず、自分は、無駄が多い勉強をしてきたのだけど、何をどうやって覚えたか、その話からしようとおもったけど、殆どの人はあんまり興味ない気がしたので「思ったこと」以降だけ読めばいいです。

前提

小2(1996)の頃からインターネットしていた
中学生の時にはネットで見つけた記事みて親父のPCのAdmin権限を書き換えたりしてた
プログラミングはできない。あくまでツール拾ってきて使えるだけ

~ 1年目 ~

Twitterをはじめた

エンジニアの知り合いが増えた。エンジニアって楽しそうだなと思った。

大学でJavaならった

そんで家でウェブサイト作ろうとしてTomcatで挫折

Ruby on Rails

1.2から2.0の移行期に巻き込まれ挫折した

集合知プログラミング

集合知アルゴリズムは忘れたけどPython覚えた
Pythonが手に馴染んで最低限の基礎は覚えた

あいてるマシンにUbuntuいれてみた

Linux経験。まともに動かなくて何度も再インストールを繰り返した
コピペでシェルコマンドを入力しているうちにUnixコマンドを覚えた

~ 2年目 ~

Emacs

プラギン漁ってUnix文化的なものを覚えた

Vimperartor

Firefoxいじり回せるようになって生活とプログラミングが直結した

大学のサークルのHP作成

Wordpressのテーマ作ってHTMLとCSS覚えた

~ 3年目 ~

趣味Webサービスつくってみた

Python/FlaskというSinatra系のアプリを使ってたので自前でいじることになって色々覚えた
VPS、セッション、DB、キャッシュ、ルーティング、MongoDB、XSS

某研究所でバイト

MeCab用辞書作ったりとかで自然言語処理っぽいことを少しやってた。はじめてコード書いて金を貰った経験。
周囲が優秀すぎてあんまり力にはなれなかった

Vim

小指が弱かったので覚えた

~ 4年目~

某IT企業でバイト

インターンだけでチーム開発やったんだけどお粗末すぎて破綻
チーム開発とかリファクタリングとかテスト駆動とかバージョン管理とか意識するようになった

オンラインゲーム作ってみた

就活の技術アピール用にWebSocketでネトゲ作ってみた
ちゃんとリファクタリングしてたんだけど、そもそも設計が破綻してたので爆発、メンテできず
この間、CoffeeScriptとNode.jsを使い込んだ

~ 5年目 入社 ~

最初のプロジェクト

Gitを使い込まされ、レビュー基準を叩きこまれ、ペアプロで思考フローを叩きこまれ

今のプロジェクト

クライアントサイドの設計とか、フレームワーク選定とか、見積りとか
JSで破綻しない設計をひたすら考える係

思ったこと

で、即戦力とか、綺麗なコード、汚いコードについて考えてた。


設計とか、綺麗なコードとかは、必要に迫られないと覚えない気がする。自分も自分が作ったコードの設計が破綻して考え始めたので、むしろIT企業の新入社員とかは破綻したコードをなぜ破綻したか考えるところから始めたほうがいいのかもしれない。

自分もまだ綺麗なコードを書けているとは言いづらいが、そこは会社のコードレビューでだいぶ救われてるし、あらゆるコードはレビューされるべきだと思う。

思うに、綺麗なコード、汚いコードってのは、そのタスクに掛けた時間ではなく、その人固有の体質みたいなもので、経験の賜物だから、心構えとして汚いコードでいい、って言っちゃうと後々含めてその人への悪影響が大きい。皆そこに拒否反応を示しているのだと思う。

あと、皆たぶん勘違いしているのだとおもうのだけど、優秀な人が近くにいても、彼らは別に教えてくれるわけじゃない。彼らが教えてくれるのはコードの内側に宿る文化とか、ライフスタイルだったりとか。

自分のケースの話だけど、目的を明確にしないと学習が散漫になるが、実際に必要なのはその過程で身につく周辺スキルだったりする。自分は効率が悪い勉強をしたが、その過程で得たスキルは全部血肉になっているし、無駄だとは思っていない。

初心者相手に勉強会でりゃいいやんみたいにいう人はいるけど、本当に勉強したかったら公開資料だけみてりゃいいし、本当の学習段階でモチベーション以上の理由でいく必要はあんまりない。
ググって解決できる問題解決力は必要なんだけど、ドンハマりすることあるので、そこでヘルプしてもらえるかってのは重要かもしれない。


という思いつきずらずら書いた。