三流プログラマが脱三流するために書くブログ

PHP, オブジェクト指向プログラミング, デザインパターン, リファクタリング, DDD, 関数プログラミング, etc.

36. 沖縄のプログラミング教室でソフトウェアエンジニアの生存戦略について話してきた

この記事について

沖縄宜野湾市にある CODE BASE というイベントスペースで行われているプログラミング教室にて、「三流プログラマによるソフトウェアエンジニアの生存戦略」と題してお話する機会をいただきました。

本記事はその資料と、当日喋ったこと(公開できる範囲で)を中心に補足説明を書いておきます。

はじめに

前提として、戦略とはそれを実行する者の特性(characteristics)によって最適解が異なる、ということで、ここに書かれていることが誰しもに当てはまることではない、ということです。

なので、ここに書かれていることは、私個人の認知バイアスが多分にかかっていることをご承知おきください(何事においても、別の可能性を考えるのはよい習慣と思いますので、ここに書かれていることについても、「本当にそうだろうか 🤔」と考えたり、他のひとと議論したりしてみてください)。

資料

speakerdeck.com

補足説明

1. 自己紹介

自己紹介を少し多めにやりました。これは、これから述べることは、こういう性格で、こういう経歴の人間によるものなので、なるほどそういうひとはそういう戦略の立て方をするのか、という見方を多少なりともしてほしかったからです。

最初に書いたように、戦略というのは実行者の特性に依存しますから、強みを活かして外部環境といい相性をつくりあげていくことを目指すことを基本線とし、あとは自分と対話しながら、微調整していくのがいいんじゃないかと思います。

資料中の「性格」と「才能」に載せた図はエムグラム診断という性格判断テストの結果ですが、私の性格的な特徴の中で、「ひとりが好きすぎる」「果てしない熟考」というのがこの職業に向いていて、「人にイライラしにくい」「協調性あります」というのが、チーミングやコラボレーションの領域に適正があることを示唆しています(とはいえ、自分ではしっくりきてない項目もあるので、まぁ最終的には、自分の直感を信じて、あくまでもこれらの分析結果は参考資料程度に考えておくのがいいとは思います。自分では気づかなかった才能、みたいなのもあるので、一概には言えないんですが)。

2. 戦略に関する基礎知識

戦略、戦術、兵站、みたいな話はビジネス書なんかにもよく書かれているので(ブルーオーシャンとか。ちょっと古いけど)、興味あるひとはそういうテーマで書かれた本を読んでみるのもいいかもしれません。

とにかく、これらの考え方は「いかに戦いに勝つか」というためのものですから(生存戦略ということであれば、いかに競争に勝って生き残るか、ということになります)、最大の成果(あるいは自分が満足するていどの成果)をどうやったら得られるか、というのを常に意識するといいのではないでしょうか。

3. ソフトウェアエンジニアの職種と技能

ひとくくりに「ソフトウェアエンジニア」といっても本当に多様な仕事とスキルがあって、載せた表は独立行政法人情報処理推進機構(と経産省)のものですが、あくまでもこれらは一例で、会社や業界によって大小異なる部分があるので、参考までに、というかんじではありますが、色んな可能性を考えておく、というのは大事かと思いますので、へーこういう仕事もあるのかー、と思ったら、そこを掘り下げていって、自分がフィットする可能性を予想してみるのもいいかもしれません。

最終的にはやってみないと分からない仕事も多いですし、同じ職種であっても、仕事の進め方や組織の構成などによってだいぶん印象が違ってきたりもするので、ひとから話を聞いたり、インターネット上の文章を読んだりして、知識を増やしていくことも大事かと思います。

4. ソフトウェアエンジニアの生存戦略

以上を踏まえて、実際に戦略を立てていくわけですが、まずは目的と目標がないと始まりません。

ソフトウェアエンジニアになってなにがしたいのか、どうなりたいのか、というゴールがなければ、どうやってそれを実現するか、という計画も立てられません。

目的が柔軟な働き方であってもお金であっても、なにかしら(なければでっち上げて)用意してほしいところです。

なお、資料の中では自己分析が先で市場分析が次になっていますが、これは順番が逆でもいいとは思っています。

やりたいことが明確なひとはいいですが、なんとなくエンジニアよさそう、みたいに思ってるひとの場合は、ひとまずどんな仕事があるのかという市場分析から始めて、なんとなく面白そう、稼げそう、みたいなざっくりしたイメージだけでも持てればいいのではないでしょうか。

いま見返すとこれ(戦略|戦術)じゃなくね?みたいな部分もあったりして(他の言語を学ぶ、っていうのは戦術で、戦略としては「いつでも他の言語やライブラリの仕事もできるように準備しておく」みたいな感じになるのかな。ただ、まぁ、その辺は些事なのかな、とは思います)、あまり汎用フレームワーク的に使うにはどうなのかな、という気もしますが、まぁ、こういう考え方もあるか、ていどに参考にしていただければ幸いです。

資料には書いてないですが、質疑応答の時間の中で、人脈も資源のひとつだ、みたいな話もあったと記憶しているので、ここに書いておきます。

無い袖は振れない、ということわざもありますし、兵站大事といいつつ、どうしようもないこともありますから、

戦略を考える → 戦術を考える → 兵站を考える → (必要十分な資源が投入できない)→ 戦略を見直す → 戦術を見直す

みたいなフローにして、できるだけ無理のない範囲で(ただし、なにが足りないのかは意識しつつ)、進んでいくのがいいと思います(これはまぁ私がわりと慎重な考え方をする人間なのでこうなりますが、もっと野心的で積極的なひとなら違った見解になるかもしれません。いずれどこかでフリーランス生存戦略を語り合う会、みたいなイベントが開かれたらぜひとも色んなひとの話を聞いてみたいと思います)。

おわりに

気づけば今年でソフトウェアエンジニア業が20周年を迎え、立派な老害となりつつも、後進の発展のために微力ながら尽力したい、という気持ちから、今回お邪魔させていただきました。

いまの需給バランスがいつまで続くか分かりませんが、現時点では、ソフトウェアエンジニアになることは刺激的で充実した人生を送れる可能性を高めてくれるはず(自分もそうだから)、と思っているので、ソフトウェアエンジニアで食っていきたいというひとには惜しみなくアドバイスやメンタリングなどでサポートしていければ幸いです。

またプロ野球の春季キャンプの頃に沖縄に来る予定ですので、そのときはまた色んな話ができたらうれしいです。

おまけ

参考文献の Amazon のリンクを貼っておきますね

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

プログラマが知るべき97のこと

プログラマが知るべき97のこと

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

失敗の本質―日本軍の組織論的研究 (中公文庫)

失敗の本質―日本軍の組織論的研究 (中公文庫)

Learn Better――頭の使い方が変わり、学びが深まる6つのステップ

Learn Better――頭の使い方が変わり、学びが深まる6つのステップ

エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド

エンジニアのためのマネジメントキャリアパス ―テックリードからCTOまでマネジメントスキル向上ガイド

おまけ2