はじめに
以下渡辺さんのツイートを拝見して、僕は数学者ではないけれど同じようなことはソフトウェアエンジニアにも言えそうだな、と思いちょっと考えをまとめておきます。
https://twitter.com/masayuki5160/status/1191283932395790336
元ツイートはこちら。
https://twitter.com/YohsukeW/status/1191270889293307905
https://twitter.com/YohsukeW/status/1191273775771389953
https://twitter.com/YohsukeW/status/1191281135126401025
ひらめきに繋がる考え続ける力
渡辺さんもツイート内でおっしゃってますが、深く考える力、そしてそれを続けられる力というのがあると僕も思っている。渡辺さんは数学者の場合についてお話をされていますが、この力はソフトウェアエンジニアにも必要だなと思っている。
https://twitter.com/masayuki5160/status/1191283932395790336
これは具体的にはどういった時に役にたつかというと以下のような時が例えばあると思っている。
- 簡単に解決できない不具合の改修を進めている時
- パフォーマンスチューニングをしている時
- 新規開発をしていて、なかなか良い設計ができない時
共通して言えることは一度のひらめきだけでは状況を打開できないこと。一度のひらめきを実際に試したものの、それでは解決しきれず再度考え直す。そして翌日またひらめいたことを試す。それでもダメなこともあり、翌週にまた試す。それでもうまくいかず、一旦は許容できる状況でリリースをして、しばらくしてからより良い解決策をひらめき、改修をしてやっと対応が終わる、というようなイメージです。
こういったことは実際にソフトウェアエンジニアの方は経験されているのではないでしょうか。僕も何度か自分自身で経験をしています。僕がよくあるのは、解決策がわからず、悶々としていたのに、その日は諦めて寝ようとベッドに入ったらいい解決策が思いついて、とりあえずスマホにメモをして寝る、というような経験ですね。(そのひらめきでは結局解決できなかった、というのはよくありますがw)
さて、この話のなかで僕が大切だなと思っているのが、ひらめきそのもののことではなく、そのひらめきに繋がる考え続ける力のことです。
以前、勤め先で360度評価をされた時のフィードバックとしてどなたかわかりませんが、"粘り強く考え続ける姿勢が素晴らしい"、と評価されたことがあります。僕自身はそう思っていたことはないのですが、ソフトウェアの開発をしていると上述の通り、何度も何度も検証をして、設計をして、試して、もう一度考えて、ということを続ける必要があります。その経験は僕の仕事のスタイルにもやはり出てきていて、それを"粘り強い"と評価されたのではないかと思っています。
振り返ると、僕が一緒に働いてきた尊敬するソフトウェアエンジニアの方々には共通してこの考え続ける力を身につけているように思います。
- 目指しているパフォーマンスが出ないため、何度も設計をかえ、実装をかえ検証し続ける
- 事象再現がうまくいかないなか、なんとか事象を再現させ数ヶ月かけ不具合を改修する
- 以前起こした障害から学び、新規開発においてはそれを教訓に考え続けてきた新たな設計を提案してくる
こういった姿勢はコードがかけるとかアルゴリズムに詳しいとかそういうことではなく、考え続けられる力があってこそなんだと思います。こういった方々と一緒に仕事をするのは本当に学びがあります。
ひらめきに繋がる考え続ける力は身につけられるのか
それでは、この考え続ける力は身に付けることができるのでしょうか。
具体的な方法自体は残念ながら思いつかないのですが、それを身につけられるだろう機会については例えば以下があると思います。
- 担当しているプロジェクトにおいて先頭にたつ(矢面に立つ)
- 新しい技術を導入する際の人柱になる
共通する点は、退路がない点でしょうか。退路がないため、問題があった場合に解決する方法を考え続ける必要があります。よって、考え続ける癖がその中で身につくように思います。僕自身が考え続ける癖がついたのはこういった機会を通してだったろうと思っています。
一点注意としては、こういった機会は総じてストレスフルであることです。体力的にも精神的にもハードですので正直にいうとあまりおすすめはできないです。ただ、考え続ける力はソフトウェアエンジニアにとって大切だと思いますので、例えば上司のサポートがある状況でプロジェクトの矢面に立つ機会をもらうことがいい方法かと思います。それを繰り返す中で考え続ける力が身についていくでしょう。
だらだらと考え続ける力について書いてきましたが、こういった本質的な力について以下書籍でも詳細に述べられています。
エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB DB PRESS plusシリーズ) 新品価格 ¥2,728から (2019/11/5 20:48時点) |
ソフトウェアエンジニアは学び続けることが仕事の一部であると思いますが、この書籍はその学びをどう効率的に進め、アウトプットしていくか、という点について考察されています。本記事では渡辺さんのツイートから考え続ける力について考えてきましたが、学び続けることについても同様にソフトウェアエンジニアに必要な力だと思います。
まとめ
ソフトウェアエンジニアにとって、考え続ける力の必要性について考えてみました。コードがかけることも大切ですが、ソフトウェアエンジニアがしていることは、何かしらの課題を解決している、と捉えることができると僕は思っています。その時に必要なのはこの考え続ける力だと思います。僕自身もまだまだ勉強中ですが考え続けることでこれからもソフトウェアエンジニアとして活躍していければな、と改めて思いました。