ソフトウェアエンジニアのメンサー・デュラコビッチ氏が、ソフトウェアエンジニアを目指す学生に向けて、ソフトウェア開発の仕事に就く上で重要なアドバイス10点を自身のブログにまとめています。

10 hard-to-swallow truths they won't tell you about software engineer job

https://www.mensurdurakovic.com/hard-to-swallow-truths-they-wont-tell-you-about-software-engineer-job/

◆01:大学は仕事に必要な準備をしてくれない

デュラコビッチ氏は就職に向けて大学がやってくれることを「プールに入る前に泳ぎ方を説明し、動きを覚えさせて試問まで行った上で水には決して触れさえず、5年後、泳げるという免許証を発行したのち、突然生徒をプールの中に蹴落とす」ようなものだと水泳で例えています。

その上でデュラコビッチ氏は「ソフトウェアエンジニアの職についた新卒の学生にとって、最初の6カ月間は水に溺れまいと必死にもがいているのと同じです。大学ではいくつかの基礎を身に付けることができますが、ほとんどの大学で教わる内容は日常的な仕事とはかけ離れています。大学の教授の多くが優れたソフトウェアエンジニアではないのです」と述べ、学業以外にもさまざまなプロジェクトに関わってコーディングを学ぶべきだと主張しています。



◆02:ゼロからプロジェクトを立ち上げて進めることはほとんどない

大学やテックキャンプでは、ゼロからプログラムを書くような課題が多く課されます。しかし、実際にソフトウェアエンジニアとして就職すると、ほとんどの場合は既存のプロジェクトに取り組むことになります。

会社では、自分1人ではなく複数人で、数千行のコードを含むプロジェクトを半年から数年という長い期間で進めて行くことになります。誰かが書いたコードを読み、わずか数行のコードを修正したり、厄介なバグの修正に1週間まるまるかけたりしなければなりません。また、同僚と話してプロジェクトに関する情報を交換し、上司にソリューションの承認を求めることもあります。

◆03:きれいなコードを書くことに執着しなくてもいい

当然ながら他のプロジェクトメンバーやコードのレビュアーはきれいなコードを書くことを求めますが、それを褒められることはほとんどない、とデュラコビッチ氏。「ソフトウェアエンジニアとしての主な仕事は、ユーザーに価値を生み出すことであり、コードを書くことはその目標を達成するための単なる手段に過ぎない」とデュラコビッチ氏は論じています。

また、デュラコビッチ氏は「私は、ひどいレガシーコードで成り立っているプロジェクトの墓場をたくさん見てきました。それでもこれらのプロジェクトはユーザーの問題を解決するという目的に成功しています。ユーザーはそれらの使用に対して喜んで料金を払います。ユーザーはコードがどうなっているかを知りません。その製品が提供する機能を確認するだけです。きれいでエレガントなコードに過度に執着しないでください。機能を予定通りに、バグのない状態で出荷することに重点を置きましょう」と述べました。



◆04:無能な人と仕事をすることがある

一般的に、IT業界で働いているのは賢くて有能な人ばかりだという偏見がある、とデュラコビッチ氏。しかし、ほかの仕事と同様に、ソフトウェア開発の現場においても無能な人は存在します。無能な人は時間を無駄にし、非生産的で有毒な環境を作り出します。そして、そういった環境によってプロジェクトに遅れが生じ、企業の資金とリソースを浪費します。

デュラコビッチ氏は以下のアドバイスを示しています。

・できる限り効率的かつ生産的になるように努め、他人ではなく自分のことに集中する。

・その人がプロセスに関与しない解決策を試してみる。

・自分が行うことをすべて文書化する。

・その人が仕事をしないために作業が滞っている場合、可能であれば他の人に依頼する。

・無能な人と直接プロとして対話し、意地悪な態度を示さずに何をどのように改善できるかを伝える。彼らに対して嫌みを言う必要はない。

◆05:何時間もミーティングに参加することに慣れる

ソフトウェア開発を進める上で、ミーティングは非常に重要です。その中には意味のあるものもあれば、単なる時間の無駄であるものもあります。

デュラコビッチ氏は、「毎日あるいは毎週スケジュールされる定期ミーティングのほとんどは組織している人のほぼ唯一の仕事であるため、生産的ではないにもかかわらず強制的に行われます。それは会社における彼らの存在目的を証明するための空虚なプロトコルに過ぎません」と断言しています。

しかし、会議の中には生産的で有意義なものも存在します。ソフトウェアエンジニアの大多数はミーティングを嫌いますが、ミーティングはチームメンバーと情報共有を行い、積極的にコミュニケーションをとって他のチームの作業をよりよく理解するためにも役立ちます。



◆06:見積もりは何度も求められる

ビジネスでは数字が重要です。すべてのプロジェクトにはコストがあり、管理者はコストと時間を見積もる必要があります。また、ソフトウェアエンジニア自身も自分の仕事を見積もる必要があります。

◆07:バグは生涯の敵となる

コーディングを行えば行うほど,コードの至る所にバグが潜んでいることがよくわかります。仕事を始めたばかりの時は、コーディングして問題なく動作したら終わりだと考えてしまいますが、実際は自分のコードだけではなく、サードパーティーのライブラリやハードウェア障害、電力問題など、バグを引き起こす可能性が無数に眠っています。そのため、すべてのものにバグがあると想定する必要があります。



◆08:不安は常に共にある

デュラコビッチ氏は「ソフトウェア開発の仕事では、ほぼ常に不安を感じることになります。例えば、仕事が事前に出した見積もり通りに進むという確信は100%あるわけではありません」と述べています。他にも、プロジェクトの変更、転職、雇用の安定、テクノロジーの進化、締め日直近のバグ報告等、ソフトウェアエンジニアが不安になる要素は多く存在します。しかし、こうした不安はより優れたソフトウェアエンジニアになる原動力になるとデュラコビッチ氏は述べています。



◆09:仕事から離れることはほぼ不可能になる

ソフトウェアエンジニアは常に自分の仕事や問題、バグについて考えるようになってしまうとのこと。デュラコビッチ氏もガールフレンドとデートしている時に「なぜデート中なのにSlackを使っているのか」と何度も口論になったそうです。

仕事とプライベートをきっちりと分けるために、デュラコビッチ氏は「仕事が終わったらノートPCの電源を切る」「携帯電話で仕事のメールをチェックする時間を決める」「退勤後はSlackの通知をオフにする」「仕事のことを考えてばかりになったら休みを取ってリラックスするように自分に言い聞かせる」「仕事の後は散歩やスポーツを行う」「退勤後は可能な限り社交的に人と関わるようにする」といった工夫をしているそうです。



◆10:優れた技術スキルよりも優れたソフトスキルの方が役に立つ

ソフトスキルとは、例えば他人とのコミュニケーションやチームワーク、学習についての考え方、時間管理能力、共感力、親しみやすさ、忍耐力といった個人の能力や特性のこと。

さまざまなプログラミング言語を習得してさまざまな状況に対処できるような技術的なスキルは、確かにソフトウェアエンジニアにとって重要ですが、こうしたスキルは練習で身に付けることができます。しかし、ソフトスキルを改善するためにはかなりの精神力が求められます。

優れたソフトスキルがあれば、人々からより好かれるようになり、昇給や昇進の可能性が高くなります。技術的には才能があっても、協力的ではない場合、チャンスはわずかに減少します。また、優れたソフトスキルがあれば、周囲の人は陰で評価してくれるようになります。自分が気づかないうちにさまざまな仕事に推薦してくれることもあり得ます。



最後にデュラコビッチ氏は、「ソフトウェア開発は夢のある仕事ではありません。ほとんどの場合、ソフトウェア開発は長時間労働を強制され、ワークライフバランスがほとんど取れず、PCの画面に釘付けになります。勤務時間外でもオンラインでのプレゼンスが求められ、ストレスやプライベートの制限につながります。しかし、ソフトウェア開発は継続的なイノベーションを育みますし、さまざまな業界において世界的な需要が大きいといえます。また、どこにいても仕事ができるのはすばらしいことです。フレックス対応によって、朝に目覚ましをかけずに寝ることもできます。通勤に貴重な時間とお金を無駄にすることもありません」と述べました。