質問: teratailには素晴らしいエンジニア経験をお持ちの方がいらっしゃると思うので質問させてもらいます。 タイトルの通りになりますが、 **「書くコードが酷い開発会社(ベンチャー)」**で働いた経験がある方(なくても似たような経験をした)に特に回答頂けたらとても嬉しいです。 プログラマーの皆様は「コードの品質」というものに、どれだけこだわりを持っていますか? 現状 --- Web系エンジニア経験2年未満。諸事情で転職活動中。 ある経由でお話を頂いて、タイトルの通りのような会社に入社を考えています。 理由は現職の給与面のあまりの低さと残業と通勤時間から起因する「プライベートの時間のなさ」です。 自分の実務での経験 ---------- エンジニアとして「コーディング規約に則ったキレイなコード」を書くようにずっと教えられてきた。 CI導入も積極的にして自動テストもちゃんと書く。 リファクタリングなども積極的に行う。 誰が見ても読みやすいコードを書く。コードの品質も求める。 「パフォーマンスの面での良いコード」の追求はまだ力不足で全然出来ていない。 「コードの生産量」も同じくまだまだだと思います。 といった感じで今までプログラマーとしてやってきました。 入社予定の会社 -------- 今までの経験とは真反対。プロジェクトのソースコードを見たりお話を聞いた限りだとこんな感じでした。 「コードの品質はどっちでもいい。とりあえず動けばいい。」 「テストは基本的に書かない。」 「コードは基本的に動けばいいのでコーディング規約も存在しないし、人それぞれ」 「とりあえずgitで管理しているけど、コミット内容やメッセージも統一がない」 基本的に人も会社も若いのでコードのレベルも未熟? トップが納品重視なので工数がかさむことはしたくない。 期待面 ---- 給与面、会社の自由な規則から来る時間的な余裕 (今までは仕事で1日が終わり、プライベートでコードを書くことや、勉強会などには中々行けませんでした。) 「酷いコードを直していく」「良いコードを書く」といった指導する教えられる立場になれる?(今までプログラマーとして周りの指導などしてこなかったのでそういったスキルも欲しい。) 不安面 ---- 周りの技術レベルがかなり落ちるはず まだまだレベル的には新米プログラマーなので、技術で背中を追う先輩方が居なくなる不安 「酷いコードを書く」環境に馴染まないかどうか まとめ ---- 自分に実力があれば、技術責任者としてバシバシ引っ張っていけるかもしれないが、現状の実力は全然。 ただプログラマーとして「コードの品質を重視したい」という思想だけが先行している。 以上を踏まえてプログラマーとして 「コードの品質を求めるプログラマー」を目指すならやはりそういった会社だけを渡り歩いていくのがいいのか。 それとも経験としてこういった会社で開発する事もこれから数十年やるプログラマー生活で必要なのか。 というのを悩んでいる段階です。 皆さんはどういった経験をしてきてどういった「プログラマー」に現状なっていますか? アドバイス頂けるとありがたいです。
回答: ベンチャー企業とはなんぞや?というのはちゃんとおさえていますか? ベンチャー企業というと一見かっこよく見えますが、 社会的に何の信頼もないおっさんが一人で立ち上げたような会社です。 (そのおっさん個人が優秀だったり、有名だったり、金持ってたりとスタートラインに差はありますが) 毎年沢山のスタートアップ企業が出来ますが、 10年生き残る企業はわずか1%といわれる過酷な環境なのです。 経営者個人がいくら優秀でも、有名でも、金持っててもそれだけでは決して届かない、時間や運すらも味方にする力が必要なのです。 赤字を垂れ流しながら動くものを作って死ぬ気で回りに売り歩き、 銀行やベンチャーキャピタル等から出資して頂くことでその人のお墨付き、 初めて社会的な地位や信頼を得てスタートラインに立てます。 そういう状況下の企業なので、ベンチャー企業も休めませんよ。 基本的にゴミ以下の福利厚生で死ぬほど働かせる代わりに、 ストックオプション(ほぼタダの値段で株券を従業員に譲渡する仕組み)を利用します。 上場すれば皆で沢山お金をもらいましょうね!それまでは僕と一緒に死んでね(はぁと そういうわけなので「プライベートの時間」を確保するために、 ベンチャー企業に行きたいというのは前提がおかしいのでもう一度考え直して下さい。 > > 「書くコードが酷い開発会社(ベンチャー)」 ←これって普通? > > > 普通と言い切ると言い過ぎかもしれませんが、一般的にその傾向がありますね。 日本では営業畑の経営者がコードが「汚くても1日で動くモノを作ってくれるようなエンジニア」と組んで会社を起こすケースが多いです。 コードの品質はさておき、売れるようなものでなければそもそも会社が存続出来ませんからね。 従って、程度の問題はありますがそのエンジニアがコードの品質を意識する人である可能性は低いです。 かの有名なFacebookもPHPが得意な学生が入社して「何だこのそびえ立つクソコードの山は...」と呆れた話もありましたね。 結局その新入社員がリーダーとしてクソコードの山を切って捨てながら大リファクタリングを行ったそうですが... 他のベンチャー企業も似たような感じで、次のフェーズに行く時に技術的負債が多すぎてもう開発がまともに出来ない。 コードを一旦整理しましょうねというタイミングで優秀な技術者を雇い入れるケースが多いようです。 > > 「書くコードが酷い会社」で働いて得る経験は大きいと思いますか? > > > あります。 コードを書く速度も優秀なエンジニアの1要素です。 どんなに頭を捻って描いた最強の設計図を元にしても、 最終的には書いたコードを消して書き直すリファクタリングという作業が必要です。 リファクタリングをしないコードは例えどんな凄腕のエンジニアがやったとしても品質がばらつきます。 そのベンチャー企業ではリファクタリングの手抜きをしているだけの話です。 結局の所、手が速いエンジニアはリファクタリングを行う場合でも手が速いので何度も消して書き直し、 結局並のエンジニアよりキレイな設計のコードを書き上げるわけですね。 「巧遅は拙速に如かず」 まぁ、そうとは分かっていても、自分の好き嫌いの問題ですから、 糞コードにまみれてイライラするような人間なら、 ベンチャー企業に入ってもどうせコードを書くのが辛くなるので辞めたほうが良いでしょう。 > > プログラマーの皆様は「コードの品質」というものに、どれだけこだわりを持っていますか? > > > 私はどちらかと言えば巧遅の人間なので、コードの品質を抜けば何も残らないでしょう。 前の会社も面接時で渡された課題があまりに簡単で、「ひょっとしてこれ罠じゃね?」と思いながら少しでも綺麗にする為にリファクタリングし続け、その姿勢とコードを評価してもらって入社した経験があります。 コードが綺麗ってのはそれだけの価値があります。 分かりやすいコードを書くよう意識し続けたお陰で、ちょっとしたコードなら一発で動作するものが書ける自信が付きましたからね。 まぁ「皆様」という軸で言えば別に拘らなくても食って生活していけます。 優れたエンジニアは程度やベクトルは違っても拘る人が多いでしょうけどね。 > > ただプログラマーとして「コードの品質を重視したい」という思想だけが先行している > > > いいんじゃないですか? 自分はこういう人間でありたいという意思を持つのはとても重要な事です。 後は生きてるだけで自然とそうありたい自分に近づけますから。 現在の実力云々は気にしないようにしてください。 成長すれば良いだけです。 私も更に上の人間から見れば、取るに足らないその他大勢です。 > > 理由は現職の給与面のあまりの低さと残業と通勤時間から起因する「プライベートの時間のなさ」です。 > > > 別に逃げたり休んだりする事はしても大丈夫です。 会社にとってあなたは代わりがいくらでもいるかもしれませんが、 家族やあなたにとってあなたはかけがえのないものです。 私も休息期間を全部合わせれば3年以上サボってますが、 サボりながら面白いモノを作ったりして再起すれば大丈夫です。 まずは雇用条件を貰ってよく考えて見て下さい。 私個人としてはもうちょっとぬるい会社を探してみるのも良いと思います。 中には定時で上がれる企業もあるみたいですよ。 「ソニックガーデン」や「株式会社アクシア」等がその一例です。 もちろん人気があって入社は大変だと思いますが、受けるだけ受けてみては? > > 「酷いコードを直していく」「良いコードを書く」といった指導する教えられる立場になれる? > > > 絶対に無理です。3年後や5年後を見据えればなれるかもしれませんが今は無理です。 何故ならばあなたのスキル云々が問題ではないからです。 もちろん私にも不可能ですし、テスト駆動開発のセミナーをやってるような凄腕のエンジニアの方でも不可能です。 と言うのは、人は自分の行動は変えられても、人の行動は変えられないからです。 貴方は今まで親御さんから「勉強しなさい!」と言われて、素直に勉強していましたか? それができていれば今頃東大卒で数多の企業から引っ張りだこです。 「トップが納品重視」なので、プログラミングのプの字も知らない営業畑のド素人に理解出来るよう、 何故コードの品質が重要なのか説いて納得させる事がスタートラインです。 ところが相手はベンチャー企業の経営者(トップ)です。 トップもサボってるわけではなく、吐き気がするほどの重圧に苦しめられながら走り続けている訳です。 「1時間でも早く開発しなければ会社が存続出来なくなる危機や責任」との天秤にかけて、 それでも「コードの品質を上げる為の施策」を提供する必要があります。 そのトップが「コードの品質は無視する、今は速度を優先してくれ」と言ってるわけで、 ちょっとやそっとの説得で納得してくれるようなら最初から品質の低いコードが蔓延しているはずがありません。 やるとすればFacebookのように、上場して一段落した。 技術的負債で開発スピードが落ちてるらしい...どうすれば...? システムを再構築して一旦仕切り直しましょう?なるほどね〜 こういうフェイズが必ず必要で、時間で解決するしかないのです。