ソフトウェアエンジニアに必要な考え続ける力
- 2019.11.05
- LIFE
はじめに
以下渡辺さんのツイートを拝見して、僕は数学者ではないけれど同じようなことはソフトウェアエンジニアにも言えそうだな、と思いちょっと考えをまとめておきます。
すごく参考になる話。僕は数学者ではないけれど、この複数回のひらめきから成果につなげるために必要な考え続ける力はソフトウェアエンジニアにもいるなと思った。 https://t.co/fYQ4OKFDRH
— Masayuki Tanaka / 田中 優之 (@masayuki5160) November 4, 2019
元ツイートはこちら。
ヒラメキと思いつきは違う。
ヒラメキは深く考えたあげく、木や森みたいな無関係の物をみて脳がスパークする感覚。偶然的に思うが、実は思考の深い所にいないと産まれない必然。日々の努力の結晶。
思いつきは、浅い思考後のアウトプット、誰でもできる。俗に言うジャストアイデアはこの部類ですね。— Yohsuke Watanabe 渡邊陽介 (@YohsukeW) November 4, 2019
数学研究の場合、このヒラメキを常に産み出せるのが重要。簡単な問題は一つのヒラメキで打開できるが、現代数学では一つの問題で複数のヒラメキがいる。受験数学が出来て研究が出来ないのは、一つのヒラメキで打開するのに慣れすぎていて、次のヒラメキまで継続できる忍耐力が備わってない場合が多い。
— Yohsuke Watanabe 渡邊陽介 (@YohsukeW) November 4, 2019
僕はこの深く考えれる忍耐力を養う事に、数学教育の未来があると思っています、AI時代を見据えて。基礎学習が終わったら、それでできる難問で試行錯誤させ一筋縄で行かなくて良いと認識させる、それを繰り返す。考える基礎力がつけば、数学を理解するのも早くなる。筆算100問やるより効果的だと思う。
— Yohsuke Watanabe 渡邊陽介 (@YohsukeW) November 4, 2019
ひらめきに繋がる考え続ける力
渡辺さんもツイート内でおっしゃってますが、深く考える力、そしてそれを続けられる力というのがあると僕も思っている。渡辺さんは数学者の場合についてお話をされていますが、この力はソフトウェアエンジニアにも必要だなと思っている。
すごく参考になる話。僕は数学者ではないけれど、この複数回のひらめきから成果につなげるために必要な考え続ける力はソフトウェアエンジニアにもいるなと思った。 https://t.co/fYQ4OKFDRH
— Masayuki Tanaka / 田中 優之 (@masayuki5160) November 4, 2019
これは具体的にはどういった時に役にたつかというと以下のような時が例えばあると思っている。
- 簡単に解決できない不具合の改修を進めている時
- パフォーマンスチューニングをしている時
- 新規開発をしていて、なかなか良い設計ができない時
共通して言えることは一度のひらめきだけでは状況を打開できないこと。一度のひらめきを実際に試したものの、それでは解決しきれず再度考え直す。そして翌日またひらめいたことを試す。それでもダメなこともあり、翌週にまた試す。それでもうまくいかず、一旦は許容できる状況でリリースをして、しばらくしてからより良い解決策をひらめき、改修をしてやっと対応が終わる、というようなイメージです。
こういったことは実際にソフトウェアエンジニアの方は経験されているのではないでしょうか。僕も何度か自分自身で経験をしています。僕がよくあるのは、解決策がわからず、悶々としていたのに、その日は諦めて寝ようとベッドに入ったらいい解決策が思いついて、とりあえずスマホにメモをして寝る、というような経験ですね。(そのひらめきでは結局解決できなかった、というのはよくありますがw)
さて、この話のなかで僕が大切だなと思っているのが、ひらめきそのもののことではなく、そのひらめきに繋がる考え続ける力のことです。
以前、勤め先で360度評価をされた時のフィードバックとしてどなたかわかりませんが、”粘り強く考え続ける姿勢が素晴らしい”、と評価されたことがあります。僕自身はそう思っていたことはないのですが、ソフトウェアの開発をしていると上述の通り、何度も何度も検証をして、設計をして、試して、もう一度考えて、ということを続ける必要があります。その経験は僕の仕事のスタイルにもやはり出てきていて、それを”粘り強い”と評価されたのではないかと思っています。
振り返ると、僕が一緒に働いてきた尊敬するソフトウェアエンジニアの方々には共通してこの考え続ける力を身につけているように思います。
- 目指しているパフォーマンスが出ないため、何度も設計をかえ、実装をかえ検証し続ける
- 事象再現がうまくいかないなか、なんとか事象を再現させ数ヶ月かけ不具合を改修する
- 以前起こした障害から学び、新規開発においてはそれを教訓に考え続けてきた新たな設計を提案してくる
こういった姿勢はコードがかけるとかアルゴリズムに詳しいとかそういうことではなく、考え続けられる力があってこそなんだと思います。こういった方々と一緒に仕事をするのは本当に学びがあります。
ひらめきに繋がる考え続ける力は身につけられるのか
それでは、この考え続ける力は身に付けることができるのでしょうか。
具体的な方法自体は残念ながら思いつかないのですが、それを身につけられるだろう機会については例えば以下があると思います。
- 担当しているプロジェクトにおいて先頭にたつ(矢面に立つ)
- 新しい技術を導入する際の人柱になる
共通する点は、退路がない点でしょうか。退路がないため、問題があった場合に解決する方法を考え続ける必要があります。よって、考え続ける癖がその中で身につくように思います。僕自身が考え続ける癖がついたのはこういった機会を通してだったろうと思っています。
一点注意としては、こういった機会は総じてストレスフルであることです。体力的にも精神的にもハードですので正直にいうとあまりおすすめはできないです。ただ、考え続ける力はソフトウェアエンジニアにとって大切だと思いますので、例えば上司のサポートがある状況でプロジェクトの矢面に立つ機会をもらうことがいい方法かと思います。それを繰り返す中で考え続ける力が身についていくでしょう。
だらだらと考え続ける力について書いてきましたが、こういった本質的な力について以下書籍でも詳細に述べられています。
![]() |
エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB DB PRESS plusシリーズ) 新品価格 |
ソフトウェアエンジニアは学び続けることが仕事の一部であると思いますが、この書籍はその学びをどう効率的に進め、アウトプットしていくか、という点について考察されています。本記事では渡辺さんのツイートから考え続ける力について考えてきましたが、学び続けることについても同様にソフトウェアエンジニアに必要な力だと思います。
まとめ
ソフトウェアエンジニアにとって、考え続ける力の必要性について考えてみました。コードがかけることも大切ですが、ソフトウェアエンジニアがしていることは、何かしらの課題を解決している、と捉えることができると僕は思っています。その時に必要なのはこの考え続ける力だと思います。僕自身もまだまだ勉強中ですが考え続けることでこれからもソフトウェアエンジニアとして活躍していければな、と改めて思いました。