ナビ得

プログラミングの挫折ポイントを乗り越えて成功しよう!

 はじめにプログラミングは思考を言語化して、コンピュータに処理をさせることですが、何事の手順も言語化すること自体が大変難しいです。長年、人類は日常の何気ない作業を自動化してロボットにやらせたいという夢があります。ローコード、ノーコードといったプログラムを書かないでも処理ができるようなツールもようやく形になってきました。生成AIによるプログラム・コードの記述にも大いに期待が持たれています。

 しかしながらITで何かしようとしたら現実的なのは自分でプログラムを書くか、誰かに書いてもらうかということでしょう。プログラミングの学習の挫折率は独学で9割などとプログラミングスクールの集計したデータが一人歩きしていますが、何をもって挫折とするか、何をもって達成とするかで難易度は違うはずです。一方、大抵の独学用の書籍ではテキストのみでプログラミングを習得できるとされています。

 挫折してしまうかどうかは習得しようとしているプログラミングの到達レベルによります。プログラミングの学習の動機、各個人の事情が異なりますが学校の必修授業であればほぼ修了できるのではないでしょうか。学習目標(ゴール)が明確になっており、家庭教師を付ける、カスタムメイドのカリキュラムの個別指導のプログラミングスクールを利用するといった方法であれば学習継続しやすいことは確かです。

 独学だと知識の習得の到達度を測る機会を自分で作らならければいけません。親切な書籍には単元ごとに小テストが用意されているのでそれを活用してもよいでしょう。なければ自分で短めのコードを書いて確認しましょう。プログラミング言語の文法と一通りの基本の型を学習して、リファレンス・マニュアルなどの資料を見ながらプロクラムを作れるようになったら半人前でそこからは、作りたいものを作る、プログラマーとして仕事をするのです。職を得てプログラミング以外にやらなければならないことを手掛けるようになってプログラミングから少し離れたとしてもそれは挫折とは考えなくてよいでしょう。

要点 プログラミング挫折ポイント
現状のスキルに適した学習方法、学習教材がない プログラミングの習得にはコミュニケーションに使っている言語と同様に画一的な学習方法や教材はありません。各自に合った方法を見つけながら習得していくことになります。上手く行かないのは選んだ学習方法・教材が自分には合わなかっただけです。他の方法・教材を試してみましょう。短期間に習得したければ講習と書籍を併用し、書籍も複数購入していずれでも取り上げられている重要そうな項目をしっかり身につけるとよいでしょう。
スキル習得の実感がない プログラミングに関してはこれができたらスキル習得が完了ということはなかなかありません。強いてあげるとすれば作りたいものを作成できて、他の人に教えられるようになった時でしょう。それぞれのプログラミング言語のコミュニティ活動をすると実感が沸いてくると思います。
学習目標(ゴール)の設定が難しい プログラミングを学んで何をするのか、どこまで到達したいのか。ゴールを決めることは簡単なようで難しいことです。目標を達成出来たら次があるわけで、プログラミングの学習は継続していかなければならないと私は考えています。

本ページでは、プログラミングの挫折の具体例と対処方法初歩応用実践に分けて紹介します。プログラミング能力向上のお役に立てれば幸いです。

挫折の具体例と対処方法 【初歩】

自分の現在のスキルが分からない

 学ぼうとしているプログラミングの知識がどれくらいなのかを次の方法で大まかに把握しましょう。
 学校の履修しようとしている科目のシラバス、プログラミングスクールのカリキュラムを見て、それぞれの項目がどんな内容か他の人に説明できるくらい詳しければある程度のスキルを既に持っていることになります。反対になんだかわからないということであれば知識が不十分でありスキルがないと判断していいと思います。独学であれば、プログラミングの入門書の目次やサンプルを見て前述の要領で初期判断しましょう。
 各プログラミング言語の公式サイトのリファレンスやサンプルコードを応用して、自分でプログラムのコードを書いて、動作させるところまで出来れば先に進めます。

トレーニング教材の説明と画面が違う

 環境の違いで表記が変わることはよくあります。実務の場面でも度々起こります。
 単なる誤記、誤植の場合もあるので市販の書籍であれば出版社のWebサイトの正誤表をチェックしたり、研修・トレーニングの主催者の問い合わせ先に質問したり、そのキーワードを検索エンジンで調べてみます。見間違いや綴り違いということもあります。

原因として考えられること:
 ・OSやツールのバージョンの違い
 ・使用する言語の設定の違い

 海外の教材を使っている場合に起こりがちな例としては、英語のように1バイト1文字の文字を使う言語と日本語などの1文字に2バイトあるいは3バイト使用する言語の文字の扱いです。文字列から何文字目までを切り出すとか長い文字の入力を制限しようとしたときに生じます。そのほか年月日の表記の仕方や小数や分数の表記法など、普段当たり前と思っている表記が言語や地域によって異なります。

本やWebに書いてある通りにコードを打ち込んでいるつもりだけど動作しない、エラーになる。

 書籍やWebの説明の前提としている環境と異なっている、PCのOSの違い、使用言語の違い、設定やバージョンの違いがあります。
 プログラミングしているPCやサーバーの管理者権限が必要な場合があります。また、組織によってPCのセキュリティが一括管理されている場合には、開発環境やコンパイラ、コンパイルしたしたバイナリの実行型プログラムの実行が制限されていることがあります。プログラム開発・テスト環境用のセキュリティポリシーの適用あるいはセキュリティの緩和が必要なことがあります。

 コードのタイプミス(TYPO: TYpograPhical errOr )、文字の種類が全角になっている、半角の大文字/小文字が間違っている、文字コードが異なっている、記述記号{},[];の間違い、\記号のエスケープ処理の間違い改行やスペースが余分か不足しているなどが考えられます。
 サンプルコードを完全にコピーアンドペーストしたつもりでも欠落していたり、不要な文字が入っていたりしている。特に書籍では紙面の都合から必須の記述が省略されていることもあります。(include/importなど)

原因として考えられること:
 ・実行時の権限の違い
 ・OSやツールのバージョンの違い
 ・タイプミス、打ち間違え
 ・規格ISO/ANSIの版の違い
 ・使用する言語の設定の違い

 そして、動作するけどエラーメッセージをなくそうと頑張っている場合に、嵌ってしまいがちなのが消えない警告メッセージがいつも出ていて平常運転のコンパイラやスクリプト言語ということもあります。ハンズオンで実機で手を動かしているからこその体験です。こうした気にしてはいけないもの/気にしなければならないことが判断できるようになることも大事です。

 上手く行かないことが続くとだんだん嫌になってきます。すべて捨ててすっきりさせたい衝動にかられることも一度や二度ではなくなります。そのようなときは他のことをしたり、休憩したりしてそのエラーから離れてうまく行かないことに対するイライラを落ち着かせましょう。疲労によってつまらないミスをして、それを直すのに疲弊することになります。リラックスして集中してコーディングに取り組まないと学習内容が定着しません。体調管理、特に睡眠不足の思考力の低下は成果へ悪影響があります。間違っていないという思い込みを一度捨てて、確認しなおしてみましょう。このあたりの経験が積み重ねるとチェック力が向上するのでコードレビューやトレーナーとして役立ちます。

 ちなみに、プログラマーの人は道具にこだわる人が多いのですが、プログラミングを始めると端末やサーバーの処理速度が気になりだします。プロセッサー、メモリ、ストレージが不十分だとそれだけで思考の妨げになりイライラします。納期が迫っているのに結果がすぐに出ないのもストレスです。長時間使っていると些細な差が結果に影響を及ぼします。打ち間違えを防ぐためにはキーボード、見間違いを防ぐためにはディスプレイ自体の品質の良し悪しも大事であることに気付きます。

サンプルコードと動作結果が異なる

 Webアプリのプログラミング、Webコンテンツのコーディングで頻繁に起こります。

原因として考えられること:
 ・端末、実行環境の違い
 ・HTML規格のバージョンの違い

 端末のOS、ブラウザなどコードの動作環境の違いによって生じる違いです。画面のサイズ、解像度、縦横比の違いででオブジェクトの配置に影響が出ます。ブラウザの描画エンジンの違いによって余白サイズが異なったり、タグの解釈が違うため見た目が変わることもあります。書籍などの印刷物、Webコンテンツと、文字フォント、記号類が自身のPC環境と異なる表示をしていることも考えられます。コードの誤りではないため直らないものもあります。見た目の正確性を求める場合、サンプルコードの動作環境を推奨環境に揃えて確かめます。

 サンプルコードの打ち間違い(TYPO)、コピーアンドペーストの失敗(途切れたり、改行が入ったりしてしまっている。)のこともあります。
 実務でもスマホアプリ開発やWebコンテンツの制作において苦労させられます。画面仕様の通りに実装したつもりでも動作させた機種の環境では上手く行かないことよくあることです。使用予定の機種を決めて開発して、実機でも動作テストをします。プログラムをゲーム機用に作るのか、スマホやPC用に作るのかで適切とされるアプローチ方法が違います。スマホやPCの場合にはサポート対象のOSやCPU、GPU、メモリなどを決めることで動作テストの環境が増えすぎないよう対象を絞ります。

 直らないものを自分なりに妥協して、既知の事象としてレビューアーや顧客にも納得してもらうことが大切です。実務では特定の1点に執着してしまって深追いしていては時間配分を誤ることになるのでスケジュール遅延のリスクがあります。気になるところを残しておくのは気持ちが悪いのですがそこを乗り越えないといけません。

プログラミング課題が全然できない

 仕事で行うプログラミングはロジカルシンキング(論理的思考能力)を基礎として、プログラミング言語の文法でコンピューターを動かすことを求められます。

 ロジカルシンキングは目的を達成するために物事の筋道を考えて、計画的に実行すること。
 プログラミングは最適な手順を作り、自分の意図した通りシステムを動かせること。

 プログラミング課題が全然できないあなたは今まで思考力を鍛えてこなかったのでは? 解法パターンを記憶して効率よく答えを導き出すような試験対策テクニックだけだとプログラミングの技能は伸びません。唯一の正解がある問題であれば回答を覚えてしまうことも有効です。文字を出力する、演算をするといったプログラミング課題は文法と命令の記憶でこなせたと思います。しかし、ビジネスでは正解がないか、制約条件下での最適解を求めることが課題です。上級プログラマになればなるほど世の中にないものを作り出すことを求められます。既存のプログラムの保守でコンピューターリソースを使う量を減らして高速化するような改善も従来とは別の解法が求められます。

 プログラミングの授業の課題自体、無の状態から考えると相当な時間がかかるものもあります。しかし、トレーニングのためにはそこを端折らずにやりきることが今後も挫折せずに乗り越えていくためには重要です。
 学校や参考書のプログラミング演習の課題は典型的な問題なので考えるのをあきらめてしまって、検索したり、AIや他の人に質問したら答えが見つかるもばかりです。すぐに答えが出てくる人は正解を知識として知っているだけかもしれません。自分で解法を考えて理解した上での回答なのか怪しいです。丸写ししても実力はつきません。大抵の場合には課題の提出期限があるので、要領よく回答を探して、転記して提出することに徹するか、はたまた期限ぎりぎりまで考えて課題を完成させるかはあなたのスタンス次第です。業務であれば効率的に回答を見つけてくることでも成立しますのでコーティングテストなどでは問題ないとみなせます。しかし、正解探しばかりしていると見様見真似のカスタマイズしかできないコーダーレベルのプログラマーで終わってしまいます。プログラミングで全く新しい解法を見つけようとする研究者やこの世に無い真新しいソフトウェアの開発者を目指しているなら、いきなり正解を回答するのではなくどのように考えてロジックを組立ていこうとしたのかその過程が重要です。

文章理解ができない

 プログラミングの前に文章読解力がとても大切です。文章の内容や意味を理解する能力がなければプログラミングは出来ません。小学校の算数の文章問題が苦手だった人にありがちなのですが、記述されていることを理解せずに四則演算すればいいと思っているようだとプログラマーになる資質はないです。文章読解力こそが現実にある複雑な課題を計算によって解決することがプログラミングの要です。要件にプログラミングに必要なプロセスやパターンがすべて書かれていることは稀です。文脈から意味を推測して処理方法を考えなければなりません。未定義な点はないか疑問点を考えることも大切で例外処理をすることもあります。そして、いくつかの短い部分に分けてそれぞれのパートを単純化して処理することも有効です。 話が大きくなりますが私は日本のデジタル敗戦の一因にITエンジニアの読解力の低下にあると睨んでいます。業務システムであれば日本の複雑な法律、税金や会計などの商習慣をプログラムで処理しなければなりません。

ケース分けが苦手

 どういう状態になることが可能なのかということを日頃から考える癖を付けるようにしましょう。

 それぞれのケース、パターンに分けて考えることがプログラミングではとても重要です。例えば、囲まれた図形であれば線の内と外と線上に一致しているかということです。数値であれば、より小さい/より大きい、一致、以上/以下です。文字列であれば、文中に含まない/含む、完全一致、文頭で一致/文末で一致といった具合です。

アルゴリズムを理解できない

 長年、数学者やプログラマが考えて生み出されたアルゴリズムを短時間で理解するには無理があります。最初に考えた人よりも圧倒的に優れた能力があったとしても理解するためには相応の時間を費やすことが必要です。プログラムのコードをまずは模写して、解説を読んで状態の変化を見ながら解析しながら少しずつ理解することです。先ほど課題を転記して提出するのはよくないということを書きましたがそれはコードとプログラムの動作を理解せずに回答だけ求めることに対してです。

記憶力に自信がない

 学校教育のプログラミングの課程では他の科目と同様に授業と考査(試験・テスト)が課されることが一般的です。プログラミングの考査をペーパーテストで行う場合には試験時間内に高得点を取るためには記憶力と記述力がものをいいます。記憶力はプログラマーの素質の一部でしかなく、紙への記述力はほとんど関係がありません。ペーパーテストの点数が悪いからと言ってプログラミングを挫折しないでください。

正規表現が苦手

 苦手にしているプログラマは意外と多くいます。仲間と正規表現について話すと苦手派と得意派に二分されるように思います。記号に置換するところの考え方、正規表現で使う記法に慣れないことなどに理由があります。基本を覚えて、いくつかのパターンを整理して手元に記録しておくと後で使えて便利です。正規表現を使うのをやめて自作のプログラムで文字列を走査しながら完全一致、部分一致、特定文字が文字列の先頭に一致、文字列の末尾に一致などを書こうとすると長くなってしまうものが、わずかな正規表現の記法で記述して処理できます。

<< 前のページに戻る

挫折の具体例と対処方法 【応用】

プログラミング以外のことを知らな過ぎたたことに気付いた

 情報工学でプログラミングについて学んでいたとしてもプログラミングに必要な知識は非常に多くの枝葉に分かれており、その習得には時間がかかるものです。
 プログラミングやコンピーターサイエンスなどは理系(理数系)、情報工学を学んだ人を前提としているので文系科目のみを勉強してきた場合にはさらに追加で勉強が必要でしょう。
 業務をするうえでITパスポートや基本情報、応用情報に合格するレベルの知識は必要ですが、すべて完全に知識を習得しようとせずに必要な分野から徐々に獲得していくことが現実的です。
 例えば、コンピューター、プロセッサー、メモリ、ストレージ、ネットワーク、OS、アプリケーション(開発ツール、コミュニケーションツール、プロジェクト管理ツールなど)、データベース、クラウドサービス、業務知識など関連する様々な知識が必要になります。

少し複雑なことをしようとすると参考にできそうな情報がない。無料のWebコンテンツや手ごろな価格の書籍がない。

 最新の技術に限らず本当に有用な情報は簡単に手に入るものではありません。
 その技術を使って稼いでいる人がいるわけでパクられないように保護しています。外注先にも同じビジネスをしないように契約で制限し、情報保護を徹底するのが通常です。また、技術者としては初心者に広く知れ渡ると価値の低下が起きるかもしれないことを懸念しています。入門書レベルであればコミュニティーを活性化する意義もあり、多くの書籍の購入を期待できるので執筆の動機になりますが、中・上級向けとなると需要が減りライバルにもなるために情報が出てこなくなります。ITコンサルタント、アーキテクトの人は飯の種である設計仕様、ビジネスモデルやアルゴリズムは特許で保護、プログラマであればソースコードは秘密として保護しています。具体的な要素を挙げるとすると少ないデータ量で奇麗に見せる映像処理(エンコード/デコード)、ブロックチェーン、大量のユーザーを管理する方法、不正な操作を監視・検知・防御する方法などです。数学や物理学、化学の知識をベースに電子工学や情報工学がハードウェア寄りの技術には欠かせません。

基本ができるようになった後に巷にあるようなプログラムを作ってみたいけど目標をどのように見つけたらいいかわからない。

 手当たり次第にサンプルプログラムを切り貼りして動かしてみるのもよいのですが、サンプルプログラムやどのようなAPIやライブラリがあるのかを探す前にやらなければならないことがあるように思います。勉強のうちはいいですがプログラムを作ってみることが目的になってしまっているかもしれません。業務に役立てようとするならば在りものを使うのが先です。新規のアルゴリズムを考えてプログラムをコーディングするにはかなり時間がかかるものです。業務のDXだとかデジタル化の取り組みでプログラミングに嵌ってしまうと投入時間の割に目立った成果が出るまでに日数がかかるので評価につながりにくいです。

 私はオープンソース化されたコンピューターゲームのプログラムを改造してみるのをお薦めしています。仕事でプログラミングを学んでいるのであれば業務ツールの改造に取り組むとよいでしょう。

動画で紹介されていた基礎までできるようになったけど仕事がない、経験年数が足りない。

 環境構築やサンプルコードと同じものを動かせるレベルではプログラマーの仕事はほとんどありません。生成AIでももっと高度なプログラムを作ります。レベルアップが難しいようなら、他の付加価値を付けたほうが良いと思います。
 教え方に自信があるなら教材を作る、明るいキャラを活かすならプログラミングのオンライン個別指導や学生向けにプログラミング教室で働いたり、そうした形で動画でプログラミングについて配信して人気になるのも一つの方法です。例えばサイバーエージェントグループの株式会社CA Tech Kidsでは大学生、大学院生、専門学校生、高等専門学校生を対象に学生スタッフを募集しています。プログラマになる人はあまり話したがらずに熟慮型の思考をする方の割合が多いので教師の成り手は多くありありません。

基本を勉強した後に何をすべきかわからない

プログラミングできるようになったらやろうと考えていたこと、やりたいことをすればいいのです。
 収入を得たいのなら、コーディングやソフトウェアテストのアルバイトがあります。プログラマーとしてコーダー、テスターのみの経験では評価されにくいので早期に別の職種にステップアップしたほうが良いでしょう。在学中や他業種に就業中でも副業プログラマーとしての経験年数を積むことができます。

 特に何かやることを思いつかないなら、毎日繰り返しているちょっとした日常を便利にすることをプログラムで実現してみてはいかがでしょうか?
 勉強を続けたいのなら資格を取得する、プログラムを自主制作する、コンテストに応募する、コミュニティーに参加するなどの実践する場があります。もっと手軽にプログラミングスキルを磨きたいならコーディングのゲームもあります。

CodingGame.com コーディングゲームをプレイ
https://www.codingame.com/start/

 在学中であれば私は学生対象の競技プログラミング、プログラミングコンテストへの応募を強くお勧めします。優れたプログラマを発掘することを目的に行われており、実力を対外的に示すことができます。最終審査の発表まで進めれば審査員参加企業やスポンサー関係者へのアピールになります。

小学生向け

全国選抜小学生プログラミング大会 [全国新聞社事業協議会]
https://zsjk.jp/
プログラミングのスキルだけではなく、発想力・表現力を含めた総合的な人間力を評価するコンテスト。都道府県予選・決勝、全国大会が行われています。

中高生向け

日本情報オリンピック (JOI = Japanese Olympiad in Informatics) (高校2年生まで) [一般社団法人 情報オリンピック日本委員会]
https://www2.ioi-jp.org/
競技では、与えられた課題に対する性能の良いアルゴリズムを設計し、さらに、それをプログラムとして適切に実装することが求められます。 高等学校2年生までの競技プログラマー日本一を決める大会です。国際情報オリンピックへの参加者の選抜を兼ねています。

大学、高専、専門学校生向け

U-22プログラミング・コンテスト(22歳以下) [U-22プログラミング・コンテスト実行委員会]
https://u22procon.com/
アート、AI、IoT、セキュリティ、プログラミング言語、ユーティリティ、学習&教育、コミュニケーション、ゲーム、その他など、実行可能にした作品を募集しています。応募者に開発支援ツール(クラウドサービスや開発環境など)の無償提供も行われています。

就業者向け

 就業中であれば、業務課題を解決するアイデアをプログラムで解決する企画を立てて実装してみるのが良いと思います。ビジネスコンテストが主体となっており、会社組織としての参加となる形式が一般的です。そのためプログラミング単独のコンテストは少ないです。
 個人単位で参加しようとした場合、情報セキュリティのスキル競技 CTF(Capture The Flag)がITスキル、プログラミングスキルを活かして参加しやすいと思います。
 いずれにしても参加する場合、自己研鑽や裁量の範囲でやるか、上司の許可を得て業務として行うのかは組織や就業形態によって判断が必要です。本業を手早く片付けてこっそり試してみることができる自由な職場であればDXコンサルタントのアイデアよりも現場の実践に優れたデジタル化の施策をいろいろ試して、ビジコンにも参加できると思います。

<< 前のページに戻る

挫折の具体例と対処方法 【実践】

コーディングしているとイライラする、疲れる

 プログラミングをすることは人類未踏の秘境を探検するようなことと似ているかもしれません。他の人に状況が分かってもらえず、大変さも理解されない状況で一人もしくは少数のチームで課題に挑むところがそっくりです。新しいアルゴリズムをプログラミングしようとしたとき、プログラミング言語は大抵コーディングの自由度はとても高いものの、踏破するためのルートは決まっていないため試行錯誤して、同じところをぐるぐる回るような無駄な冗長な記述をしてしまうこともよくあることです。体の筋肉はほとんど付かれていなくても脳がとても疲れた状態になります。この状態を解消するには休憩が必要です。行き詰まった時にひらめきで突破するためには8時間の労働時間のうち7時間が休憩かもしれません。プログラマーではない同僚が近くにいると、全く働いていない、酷く言うとさぼってボーとしているとか、他のことをして遊んでいるように見えると思います。
 日本ではプログラマーに個室や広いワークデスクが与えられることが少なく、とにかくキーボードをたたいていないと仕事をしていないように考えられがちです。静かに考えられるスペースが与えられていません。じっくり考えているとき暇そうに見えるようで、非IT部門の人からはプログラマーとITエンジニアを混同していてITに詳しい人としてPCやアプリの便利屋のような手伝い仕事をさせられることも少なくありません。つい話しかけられると思考を停止させられたことに怒ってしまい、イライラして酷い人だと思われてしまうこともありました。プログラマーの生態は非プログラマーには理解されにくいので上手くあしらうすべを獲得したほうがいいでしょう。

業務未経験で雇ってくれるところがない

 雇ってくれるところがないからと言っていきなり起業するのはハイリスクです。人気ゲームを自分でも作りたいとか、新しいWebサービスを作りたいと目指す人は多いですが、資金調達やプロジェクトマネジメントのスキルがないため、途中であきらめるか失敗してしまうことが多いです。

 ITエンジニアやプログラマが不足しているといっても既に人気が出ている製品・サービスを提供している会社には求人へ応募者がたくさんいるので不足していません。通年採用の窓口が開いていても未経験では応募条件を満たせないか、応募しても書類選考で落ちてしまいます。
 それでは未経験のうちはどうしたらよいかというと、巷には業務未経験でも雇ってくれるところはあります。未経験で何もない状態ではIT下請け会社の低賃金の(派遣契約)会社員、プログラミングのアルバイトや請負で下積みから始めることになります。現在はプロジェクトメンバーの数は増えているのでプロダクトに必要な1つの分野で専門性があれば参加することはできるでしょう。ここでいう専門性には大学、大学院での研究、情報処理の資格、コンテストなどの受賞歴、職務経歴などが含まれます。ちなみに誰でも参加できるお金を払って勉強するプログラミングスクールはアルバイトよりも下に見られるかもしれません。

 IT下請け会社とは工数1人月いくらという形で他の企業から仕事を受注しているIT会社です。労働者派遣事業許可番号や有料職業紹介事業許可番号を取得していて、会社概要などに起債されているのですぐにわかります。そういう会社ではプログラマーの派遣事業をしているので客先へ派遣されて客先の会社の社員と仕事をすることになります。ごく一部の人は派遣契約満了前に実力を示して紹介派遣制度で契約社員や正社員として採用されます。正社員になれば派遣先を転々とすることが無くなるので生活が安定すると思います。大半の人たちはプロジェクトの遅延で契約期間が多少延長されることはあっても、プロジェクト完了で他のプロジェクトや派遣先へ移ることになります。ここが下請けITエンジニア、プログラマーのつまらない部分です。システムに詳しくなってもその知識は活かせませんし、後々の運用まで考えてプログラムを組むよりも面倒を避けて動作テストにパスして納品、検品を終えられればよいという考えになります。少し経験を積んだら、次は大規模プロジェクトでとにかく人数が必要なところに就職してプログラマーとして頭角を表す活躍を目指してください。

 数十年前のソフトウェア開発では個人プレー、もしくはごく少数で成功が可能でしたが、現在は開発規模がとても大きくなっています。基本的に数百、数千人規模でプロジェクトチームを構成して作るので誰しも知っているようなプロダクトはどんなスーパープログラマーでも一人ではできません。米国を中心にGAFAMでは初級プログラマーにも手厚い福利厚生と高額な報酬+ストックオプション(株式権利)を付与しています。人を集めてやろうとしてもお金と求心力が必要です。お金を集めるには知名度、実績、期待感が要ります。この人となら上手くいきそうだという感覚は一緒に仕事をしていた人には分かるようになると思います。そうなると業界内で優れた製品やサービスを創り出した人の評判が上がり、そこに優れた集まる人が集まるよになって別の新しいプロダクトが生み出されるという循環が生まれます。ストックオプションが付与されると、プロジェクトが終わった後も会社の成長と利益を共有できるという利点があります。日本では税法上退職金と比べてストックオプションが不利になるので、無難に勤めて細く長く会社にしがみつこうという思考になりがちです。

将来への不安があり、仕事のプログラミングに身が入らない

 自分の実力でプログラマとして稼げるのか分からないのでやる気が起きない。周りと違う道だけどこのまま時間を費やしてよいのか悩んでいる。将来像が見えにくいのでモチベーションが上がらないということを感じることはあると思います。

 将来どうなるのか、このままだと厳しそうだと感じているのは正常なことだと思います。プログラマーとして生計を立てていくのに雇われて会社員を続けるのか、請負で自由にプロジェクトを渡り歩くフリーランスになるのか、起業家になるのか、さまざまな選択肢があり、不確実性の中にたくさんの可能性があります。

 ソフトウェア作成者の平均年齢は37歳、最も多い年齢層は30~34歳ころというデータ※があります。ソフトウェア業の会社員プログラマーの場合、大学卒業後に新卒採用された場合には10年~15年程度でプログラマから管理職に職種がかわりプログラマの管理、つまり人材やプロジェクトの管理にシフトしているのではないかと推測されます。プログラミングのうちコーディング自体は外国人技術者や賃金の安い海外の国にオフシェアされる傾向にあるため、プログラマーを続けていくのはなかなか難しい現状があることも見逃してはいけません。

 ※経済産業省 IT人材を巡る現状について(データ編)
 https://www.meti.go.jp/shingikai/sankoshin/shomu_ryutsu/joho_keizai/it_jinzai/pdf/001_04_02.pdf

 日本では製造業のIT子会社がSIerとしてITコンサルティングからシステム開発・運用の受託を手掛けるという業態が多く、それらの会社の経営者はプログラマーの中でもコーディングをする人たちを工場の組立工のようにとらえがちです。100人、1000人と増やせば生産量が増加するように大規模なプログラムができると思っています。開発するプログラムをきちんと分割して作業できれば理論的にはそのようになるはずですが、サブプログラムを結合してもネジや歯車を組み立てるようにはいかないです。日本ではリーマンショックの際にIT関連の従業員もリストラ対象になっており、経営者のIT分野の無理解から世界に大きく後れを取る「デジタル敗戦」と言われる事態が進行中です。NTTや大手電機メーカーを辞めた人の話を見聞きする限りですがこの数十年の間も組織の体質は基本的には変わっていないように感じます。

 本当に自分のなりたい姿を考えてみてください。他の人からどう評価されるのか、どのようにみられるのかということを気にするのではなく自分がどうしたいのかを大切にして、自分なりの成功、つまり目標を決めてプログラミングに取り組むことです。日本ではよい大学を卒業し、よい組織で出世を重ねていくことが理想のビジネスパーソン像として語られることが一種の共通認識となっています。そのようなルートに最初から乗らずに起業する、転職を繰り返して早くステップアップする、複数の会社を経営するといった人達も出てきています。

 ビックテックと呼ばれる企業も買収や事業売却をしていますし、同じ組織・同じ仕事で安泰という状況ではなくなっています。組織が社会情勢に合わせて形を変えるように、自分と仕事のかかわり方を変化させても構わないのです。これからさらに社会の仕組みそのものがデジタル化されているのでさらに高度なプログラミングが求められる傾向が強くなっています。プログラマーを含むIT技術者が不足すると言われています。ここ数十年の間にプログラミングの仕事は大きく変化しました。定型化された処理についてはプログラムのモジュール、ライブラリが部品として揃っているので新たにコーディングする部分は少ないものの難易度が高くなっているように感じます。一方、全く新しい分野や刷新しようとしている分野では一からプログラミングしなければならない部分がたくさんあります。端的にいうと人材需要は二極化していて低賃金で働く人と超高技能の人が足りていないのです。

 視野を広げてみると人材不足の業種・職種には構造的な問題があり、労働条件や報酬面で厳しい状況にあります。ITエンジニア、プログラマーに限らず看護・介護といったエッセンシャルワーカーにも共通する社会課題です。平均年収が他の職種と比べて高いからと言って、時間外に技術研鑽が必要だったり、疲労度が高かったりと楽ではない実態があります。仕事関連に費やしている時間を考えると時給ベースではそれほど高いとは言えないのです。ITの場合はITの多重下請け構造で、労働者1人当たりの支払い額で頭が抑えられていることが一因です。その他大勢のレベルのプログラマーでは給料が上がりにくいのです。そして新たなライバルとして生成AIによるプログラミングのジェネレート機能が挙げられます。要求仕様をメッセージとして与えるとプログラムコードがすぐに答えとして返ってくるので近いうちにコーダーの仕事は奪われると言われています。

 一方、超高技能というのはどうなのでしょうか? とりわけ理解力が高く、柔軟な発想で解法を生み出してプログラムで解決できること、ソリューションやサービスとして収益化できることなど複合的に高い才能が求められています。重要なポイントを3つ挙げるとすると、ニーズ、タイミングとスケーリングです。需要のあるプログラミング言語、フレームワークを自在に使いこなし、プログラマーとしての仕事があるタイミングで素早く開発して一定の成果を上げられること、それを世界へ提供して収益につなげることです。成功したプロダクトの開発者としての名誉と報酬が得られて、次のプロジェクトへの参画や自ら起業して事業を立上げ易くなります。

 現在最も成功しているのがイーロン・マスク氏です。PayPal、スペースX、テスラ、ボーリング・カンパニー、OpenAI、xAI等を共同設立しました。現在はスペースX、テスラのCEO、X Corp.の執行会長兼CTOを務めています。氏のようなキャリアを考えると一分野に限る必要はなく、複数の国籍を持ち世界各国で事業を展開することが可能なのです。

イーロン・マスク氏 [ウィキペディア(Wikipedia)]
 フォーブスの長者番付によると2021年時点で3200億ドル (約41兆円) の資産を有する。また、世界で初めて資産が3000億ドル (約34兆円) を超えた人物。2019年にフォーブスが発表した「アメリカ合衆国で最も革新的なリーダー」ランキングではAmazon.com(アマゾン)CEOのジェフ・ベゾスと並び第1位の評価を受けた。

 超高技能のプログラマーとしてチャールズ・シモニー氏が世界的に有名です。オフィスアプリケーションソフト ワードプロセッサー(Microsoft Word)と表計算ソフト(Excel)を開発した天才プログラマーです。純資産63億米ドルといわれる成功者で、民間宇宙飛行士で2度の宇宙旅行経験者でもあります。

チャールズ・シモニー氏 [ウィキペディア(Wikipedia)]
 マイクロソフト社で表計算ソフトMultiplan, ExcelやワープロソフトWordを開発した チャールズ・シモニー(Charles Simonyi)氏。変数の命名法の一つであるハンガリアン記法でも有名。アプリケーション開発責任者やチーフアーキテクトを務め、マイクロソフトリサーチ でインテンショナルプログラミングの研究に従事。

日本でプログラマーとして身を立てていけるか

 日本国内に留まってプログラマーを続けていくことは私はあまりプラスにならないと思います。日本ではプログラマーの地位、報酬が低いためです。日本の大企業のプログラマーは若手で低職位の内に行う業務という認識です。高齢の政治家や経営者の中には総務や人事配下の電算課の仕事という意識が抜けていない人もいます。海外へ挑戦するチャンスがあるなら英語が苦手だからと言ってソフトウェア開発の本場アメリカへ行くのを躊躇していたら非常にもったいないです。先駆者として中島聡氏を紹介します。

中島聡氏 [ウィキペディア(Wikipedia)]
在学中に日本のCADソフトの草分け的存在である「CANDY」を開発。NTTを辞め転職した日本マイクロソフトから米国マイクロソフトへ移りWindows 95、Windows 98、Internet Explorer 3.0/4.0のチーフアーキテクトを務めた。

NTTの株価総額が世界一だった時に、Microsoftに転職した理由 [中島聡氏のブログ Life is beautiful]

著書
おもてなしの経営学 アップルがソニーを超えた理由』(2008年3月、アスキー、ISBN 4756151345)

エンジニアとしての生き方 IT技術者たちよ、世界へ出よう!』(2011年3月、インプレス、ISBN 4844329944)

なぜ、あなたの仕事は終わらないのか スピードは最強の武器である』(2016年6月、文響社、ISBN 4905073413)

結局、人生はアウトプットで決まる 自分の価値を最大化する武器としての勉強術』(2018年9月、実務教育出版、ISBN 4788919567)

 最近の身近な例としては日本の巷で優秀なプログラマーと評価された人がどんな人生を歩んでいるのかその一端を知ることができます。具体的にはプロコンやIPA未踏の出身で活躍されている研究者、社長、CTOがどのような経歴を歩んできたのか調べてみるとよいと思います。渡米してアメリカの大学院へ進学して米国のスタートアップを立ち上げるなどと可能性は無限大です。文部科学省「トビタテ!留学JAPAN 日本代表プログラム」(返済不要の給付型奨学金)などもあります。

 小中学生なら将来の夢、職業を公務員や会社員と決めてしまわずに今のうちに発明王エジソンの伝記などと一緒に成功者達がスタートアップからメガベンチャー、ビッグテックへどの様に成長させてきたのか、学んで、挑戦して欲しいです。成功の原動力は行動力、あきらめずに試行錯誤して行くことです。その実現手段の一つにプログラミングがあり、得意ならプログラミングの比重を多く、苦手ならそれ以外の工程の専門性を高めて活路を切り開きましょう。

 せっかくプログラミングに興味を持って、学び始めたのであれば挫折なんてありません。別の自分に合うプログラミング言語を見つけて試してみることです。

参考リンク:
IPA 情報処理推進機構 未踏IT人材発掘・育成事業 未踏スーパークリエータ
https://www.ipa.go.jp/jinzai/mitou/it/supercreator-list.html
未踏ソフトウェア創造事業2000年度~、未踏IT人材発掘・育成事業 2008年度以降~現在に選ばれて人のリストです。

<< 前のページに戻る

関連コンテンツ
ITスキルを伸ばそう ITスキルとは何か、どうしたら身につけられるのかについて解説します。
プログラマーになるために プログラマーを目指す際に必要な知識、勉強について説明します。

<< 前のページに戻る

更新履歴

2024年4月2日 更新 rcm-fe.amazon-adsystem.comの廃止に伴う修正
2023年9月8日 更新 コーディングに挑戦するためのリンクを追加
2023年9月6日 新規作成(執筆:SENRI)

<< 前のページに戻る