ソフトウェアエンジニアとして生きていくには
ある方から、ソフトウェアエンジニアとして生きていくために何をすべきか?という質問をいただきましたので、私なりの考え方をまとめておきます。
とはいえ「そんなんあったら、僕が教えて欲しいわ!」と言う感じではあるので、そのつもりで読んでください。
ソフトウェア開発の仕事とは
ソフトウェアを開発する仕事は、大きく3つに分解できます。
- どんなものを作るか考える仕事
- それをどうやって作るかを考える仕事
- 1と2で決まったものを作る仕事
1はいわゆる企画ですね。企画なのでソフトウェア開発関係ないじゃん!と思われるかもしれませんが、ここにエンジニアが関わることもありますし、自分でアプリやサービスを作るのならここも自分の仕事です。
2はいわゆる設計です。企画で決まったものをどうやって作るかを考えます。webサービスにするのかアプリにするのかというレベルの場合もあれば、UnityなのかUnreal Engineなのか、それとも別のフレームワークなのかといった技術的なレベルもあります。
3は実装です。1と2で何をどうやって作るのかが決まっているので、それにそって作っていくだけです。作っていくだけとはいえ、設計されたものを実装していくにあたっては、バグが出にくいように、将来拡張できるように、メンテナンスしやすいように、など色んなことを考えなければならないので、簡単な仕事ではありません。
収入の違い
これらの仕事の中の収入の違いは、超ざっくりいうと 1 > 2 > 3となります。
稀に3ができる人がめちゃくちゃ少ない場合には3の実装の人の収入が多くなる場合がありますが、あまり多くないケースかなとは思います。
また、個人(フリー)でやっている場合2が決まった段階で自分のできる技術じゃないと自分に仕事が回ってこないので、そう言う意味でも1や2ができると有利です。
ソフトウェアエンジニアとして生きていくために
ソフトウェアエンジニアとして生きていくために重要なことはたくさんあると思いますが、とくにこれと思うものを4つ挙げてみました。
1. ソフトウェア技術以外の得意分野を作る
ソフトウェアエンジニアを目指す人は、みんなプログラミング言語や技術的なことを学ぼうとします。もちろん、それは必要なことなのですがある程度技術が身に付いたら、ソフトウェア技術以外の得意分野を作ることを意識した方が良いです。
会計が得意、鉄道関係に詳しい、ゲームが得意、ゲームの中でもスマートフォンゲームに詳しい、家庭用ゲーム機向けが得意、などなど。
技術というのは流行り廃りがあって、どんどん変化していきます。あるひとつの技術を身につけたからといって一生それでやっていけるわけではありません、どんどん学び続けアップデートしていく必要がある。
けれど、技術以外の得意分野があればその分野の中で技術をアップデートしながらやっていくことができます。 また、得意分野があれば最初に書いた1や2の仕事ができる可能性がでてきます。得意分野がなければずっと3の仕事をするしかありません。
自分の得意分野、業界を作りましょう。自分の好きな、興味のある分野や業界を持つと良いです。
2. 仲間を作る
ソフトウェア開発に限らず、何かを作る仕事で全部をひとりでやるケースは稀です。会社に勤めて仕事をするのであれば、必ず一緒に仕事をする人はいますが、個人(フリー)であればそれを自分で見つけなければなりません。
ですが、ソフトウェア業界はそれがやりやすい業界でもあります。ソフトウェア業界は横のつながりが強く、とくに同じ技術を使っているもの同士、同じ業界同士は仲が良いのが特徴です。
同じ開発ツールや技術を使っている開発者同士のコミュニティも多くあります。
ユーザー間の交流が活発な開発ツールのひとつにkintoneがあります。
kintoneはサイボウズという日本の会社が開発しているサービスで、これを使って業務システムを開発しておられる方もたくさんいらっしゃいます。 それらの方の横のつながりが強いのも、kintoneの特徴ですね。
開発者のイベントも多くて、みんな仲良くしているイメージです。
仲間がいることのメリット
仲間がいるということは、わからないところを教えてもらえるということ以外に、仕事を紹介しあえるというメリットもあり、実際にそういったやりとりはよく起こっています。
「この業界なら、あの人の方が得意だな」みたいな関係を築ければ、案件も獲得しやすくなるでしょう。
CoderDojoは大人も子どもも仲間になれる
私が参加しているCoderDojoもエンジニアコミュニティのひとつです。CoderDojoは子どもたちのためのプログラミングコミュニティですが、大人(メンター)同士の交流もよくあります。CoderDojoに参加して転職しましたという話もよくあります。
わかりやすい例としてはこの方がいらっしゃいます。自分の経験を語っている動画がありますので、よかったら観てみてください。
ママ事務員がCoderDojoとの出会いで覚醒、Dojoチャンピオン、Microsoft MVPに大変身
この二人もCoderDojoで出会って活動しています。
未踏修了生インタビュー#01 未踏は予想以上に自分自身の成長につながった | 2023年度未踏事業 | IPA 独立行政法人 情報処理推進機構
野崎さんは兵庫県、三橋さんは東京在住なので普段はリモートでやり取りして色んなサービスを共同開発しています。私は二人ともよく知っていますが、良いコンビです。
3. 自分の興味・関心をアップデートする
ITの世界は変化の速い世界です。常に知識のアップデートが必要です。
でも、それが勉強だったとしたらなかなか続かない。だから、自分の「好き」であることが大切なのです。そしてそれをどんどんアップデートしていく。
自分の興味・関心を持つというのは「面白がる」こと。色んなことを面白がることが重要、そのネタはあちこちに転がってます。 ネットのニュースをみていると毎日ようにいろんな会社が新しい製品を出したり、新しいサービスを始めたりしています。
それらの製品やサービスをその企業がやる意味は何なのか、誰がターゲットなのか、どうして無料で提供できるのか、などなど考えていくととても面白いです。
もし「この企業がこのサービスを開始する意味は何なんだろう?」という疑問が湧いたらぜひ教えてください。その理由を説明できるか、それはできなくても「多分こうじゃないかな」というのを示せるかもしれません。
4. 自分の作ったものを発表する
私はここにいる、こんなことができる人ですということを知ってもらうには、自分が作ったものを世の中に発表していくしかないです。上に書いた野崎、三橋の二人もずっとそれをやってきています。
自分のwebサイトを立てたり、SNSを使って自分が作ったものをどんどん世の中に出していきましょう。コンテストに出るでもいいです。自分が作ったものを発表して自分を知ってもらうことでエンジニアとして認知してもらえます。認知してもらえなければ仕事にもつながらない。
人に優しいエンジニアに
今、いろんなことをAI(人工知能)ができるようになりました。人工知能に仕事を奪われるみたいな話があちこちでされています。 しかし、すべての仕事は最終的に誰か人に届けるためにあります。人工知能が仕事をすることはあっても、人工知能のために仕事をすることはないのです。
最終的に届ける相手は人間、機械を作っている仕事でも最終的にその機械を使う人のことを想わなければ良い開発はできないし、良いエンジニアにはなれない(そして、おそらく人工知能は人のことを想えない)。
これからの時代に必要とされるのは「人に優しいエンジニア」だと思います。こちらはちょっと高い本ですが、僕が色んな人に勧めている本です、使いやすさとは何か?について書かれた本で、著者のドナルド・ノーマン博士はこの分野の第一人者です。よかったら一度読んでみてください、図書館などにあると良いのですが。
誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論
追記
気がついたら関連する記事をいくつか書いていたので、こちらにリンクをつけておきます(この記事のリンクも含みます)。