- 作りたいものがないのは当たり前
- プログラミングで何を作りたいかわからない
- 「作り方を知ってる」と「作ったことがある」の違い
- プログラミングで作りたいものがない時の考え方
上記をまとめ、プログラミングで作りたいものがないといった悩みを解消する考え方を提案します。
本記事の対象者
ここでは、「プログラミングで作りたいものがない」「何を作りたいかわからない」など、プログラミング学習時の開発に関する悩みを持つ人が対象となる内容になります。
プログラミングを始めるきっかけは学習態度に影響する
前置きとして、プログラミングを始めるきっかけは学習態度に大きく影響します。
- 内発的動機付け
- 外発的動機付け
「〇〇を作りたい」「エンジニアを目指す」といった内発的動機からくる目的は、比較的に情報感度が鋭くスキル習得とともに作りたいものが見つかりやすいです。
問題は、他者からの外部要因による外発的動機のみで行動する人の場合、中々作りたいものがない状態に陥りやすいです。
なぜなら、目標設定の明確化と行動の持続しやすさに影響するためです。
内発的動機付けと外発的動機付けの関係性
ロチェスター大学のエドワード・デシ教授は、1975年に「内発動機付け」を提唱しました。
また、「外発的報酬は内発的な動機付けを低下させる」ものとして発表しています。
実験内容は、大学生グループを2つに分け、片方のグループにパズルを解くと1ドル支払う約束し、もう片方は何も約束しませんでした。
結果として報酬を約束していないグループは、特に変化がなありませんでした。
一方で報酬をもらった学生のほとんどは、自由時間にパズルを解かず別の作業を始める結果になりました。
あなたはプログラミング学習を外発的動機によって、「やらされている」「しょうがなくやっている」状況だと挫折の原因になる可能性があります。
プログラミングに対して自分自身で内発的動機を探す働きかけも重要になります。
勘違いしてほしくないのは、外発的動機であっても最終的にプログラミング学習の中で楽しさや喜びが一部でも見つかるのならば、学習のきっかけとして何も問題ありません。
ほんとにプログラミングで作りたいものがないのか?
そもそもプログラミング初心者は、ほんとにプログラミングで作りたいものがない状態なのか筆者は疑問に感じます。
作りたいものがない状態を一括りにまとめられているように思えてなりません。
- 作りたいものがない状態
- 作りたいものがないではなく、作り方がわからない状態
- 作る意味を考えてしまい手が付かない状態
作りたいものがない状態は、文字通り何も作りたいものがないので興味関心から見つけるあるいは構想してみればよい話です。
なんとなくぼんやりと「こんなアプリあったらなぁ」ぐらいで想像するが、作り方がわからない状態の初心者も多いと思います。
さらにネット情報が溢れているため、読むだけで終わりマネてまで作る意味があるか考えこみ、手が付かない状態もあると思います。
このように、プログラミング初心者が伸び悩む時期は様々な悩みがある中で、一括りに「作りたいものがない状態」を生み出しています。
プログラミングで何を作りたいかわからない
何を作りたいかわからない状態は、少ない記述量と知識不足から陥ります。
改めて、プログラミング学習者が成長段階で抱える悩みを以下に記載します。
- そもそも作りたいものがない
- 何を作りたいかわからない
- 作り方がわからない
おそらくプログラミングで何かを作るといっても、一概に作りたいものがないだけで片付く話ではありません。
しかし、少し過激な言葉を使うなら「圧倒的なプログラミングの経験不足」に他なりません。
プログラミング学習で重要なのは、自らの手を動かしコードを記述することです。
形式知とは
各個人が持っていたスキル/ノウハウが目に見える形になっている知識を指します。
プログラミングで言えば、学習教材/動画、公式ドキュメントなどが挙げられます。
暗黙知とは
個人の経験則や勘に基づくノウハウ、仕事を重ねる中で身に付けたスキルといった言語化が難しい知識を指します。
プログラミングで言えば、現役エンジニアの業務からくるテクニックやエンジニア特有の各思想などが挙げられます。
プログラミング学習において効率的な行動だと思っても、必ずしも良い結果になるとは限りません。
最も一般的な機能(CRUDやログインなど)すら記述経験がなければ、作り方はおろか作りたいものなど見つかりません。
おそらく現役エンジニアとして活躍してる人は、結果として振り返ると無駄な学習があったと思う人もいるでしょうが、間違いなく一定のコード記述量を経験してるはずです。
「作り方を知ってる」と「作ったことがある」は全く違う
基礎的なプログラミングの学習段階で「作りたいものがない」と悩む以前に、「作ったことがある」といった経験が浅すぎる人も一定存在します。
どれほど簡単であっても「作る」経験を疎かにすると、簡単なものでさえ作り方がわからない状態に陥ります。
- 参考サイトや記事を読むだけで終わる
- マネてまで作る意味があるか考えて手を動かさない
プログラミング初学者は時間の無駄を省くことや効率化を図ろうとするあまり、「読むだけで終わる」「真似る意味がない」と手が止まります。
一見マネてまで意味を持たないと思った勉強でも、「作ったことがある」といった経験値を得るべきです。
要するに、プログラミングを分かったふり・理解したふりで終わっていると考えます。
基礎的な学習段階で「作り方を知ってる」状態は、知識も作れる技術も身に付けれていないケースがほとんどです。
プログラミングで作りたいものがないのは目的の違い
大前提として、あなたは何を目的に置いてプログラミング学習を始めましたか?
意外と上記の問いに対して、自身の明確な答えを持っているプログラミング初心者は少ないです。
プロダクトアウトとは
マーケティング用語で、プロダクトアウトは「企業や個人の作りたいものを作り販売すること」を指します。
マーケットインとは
マーケティング用語で、マーケットインは顧客のニーズに沿うことで「売れるものを作る」といった考え方を指します。
- 〇〇なアプリケーションを作りたい
- プログラミングスキル習得でエンジニアを目指す
同じプログラミングといった手段を使うとしても、目的の違いによって作りたいものがあるかないかに関与します。
例えば、「〇〇なアプリを作りたい」といった目的から出発した人は、特定のアプリ開発を実現するためにプログラミング学習が始まります。
そのため、作りたいものに対する情報収集を行い、言語習得を始め周りのエコシステムに派生していきます。
一方で、エンジニアキャリアの実現としてプログラミングを手段に選んだ人は、作りたいものがないのは当然の結果です。
なぜなら、作りたいものがある上でプログラミング学習しているのではなく、キャリア実現(就職/転職/年収アップ)を目的に置いてるからです。
エンジニア業務としてスキルを他者へ価値提供するための情報収集を行うので、一般的なプログラミングスキル習得の学習手順に落ち着きます。
このように、エンジニア市場に対してどう参入するか考えると、あなたが作りたいものがないのは特段問題ありません。
プログラミングで作りたいものがない時の考え方
ここでは対象者として、目的がエンジニアキャリアの実現を目指したプログラミング初学者へ作りたいものがない時の考え方をお伝えします。
とはいえ、エンジニアになるためにはアプリを作るといった学習行動が必須です。
ただ、作りたいものがない中でどのような開発の学習経験を積むか考える必要があります。
- エンジニア業界全体の構造を知る
- 習得したいスキルを起点にプログラミング学習する
- 最小単位で開発した機能を利用し作れるものを想像する
エンジニアキャリアの実現を優先的に考えている人は、モノづくり以外にエンジニア業界の構造を知るのも重要です。
エンジニア業界全体の構造を知る
ここでは、始めにエンジニア業界全体を理解しましょう。
エンジニアと一言で表すことはできず、実際にはエンジニアの中でも職種は細分化されます。
最も一般的なエンジニア職種として、以下のエンジニア職種が挙げられます。
- フロントエンドエンジニア
- バックエンドエンジニア(サーバーサイドエンジニア)
IT企業では、主に「ユーザーが見える部分」をフロントエンドエンジニアが担当し、「ユーザーが見えない部分」をバックエンドエンジニアが担当します。
また、企業は社内外で受託開発を実施するのが基本であるため、作りたいものがあるというより「クライアントの要件に沿ったアプリ開発」を実現することがほとんどです。
つまり、現役エンジニアであってもほとんどが作りたいものがあってエンジニアキャリアを実現しているわけではないと理解しておきましょう。
習得したいスキルを起点にプログラミング学習する
ここでは、プログラミング言語Pythonを例に考えていきます。
Pythonがビジネス市場で利用される代表的なケースは以下になります。
- Webアプリケーション開発
- 機械学習/深層学習系アプリケーション開発
- データ分析系アプリケーション開発
- デスクトップアプリケーション開発
いきなり「作りたいものを考える」のではなく、「どんなアプリ開発に取り組んでみたいか」といったアプローチもありだと考えてます。
最終的にアウトプットされる機能が異なるだけで、フロントエンド側とバックエンド側を実装するのは共通になるので無駄になることもありません。
また、最終的に開発する機能が違うことから、得られるスキルも変化してくるので開発段階で作りたいものが生まれることもあります。
最小単位で開発した機能を利用し作れるものを想像する
ここでは、Python製のフレームワークであるFlaskを利用してWebアプリケーション開発を想定したとします。
例えば、上記の関連記事によって得られる情報を整理してみます。
- Webシステムに対するPython基礎文法/構文の使い方
- フロントエンドとバックエンドの役割と仕組み
- MVTモデルの理解
- Flaskの使い方とディレクトリ構成
- DB設計/構築方法とORマッパーの使い方
- ToDo管理を実行するCRUD機能
代表的な学習内容としては、上記項目が挙げられます。
また、最小単位で開発したToDoアプリに対して、ログイン認証機能や画像アップロード機能を追加実装することでアプリを拡張できます。
「作れるもの」の引き出しを増やせば、アイディアの種になり自然と作りたいものが見つかる可能性があります。
たとえ見つからない場合でも、作れるものが多いとエンジニアの仕事に間違いなくつながってきます。
作りたいものがない状態から作れるものがある状態へ
「☐☐機能を作ったことがある」「△△機能なら作れる」といった経験を増やし、組み合わせることで新機能や作れるものが増えます。
既存でも何かを開発するという行為は様々な技術を複合的に利用してアプリ単位でまとめるため、プログラミングスキル習得と向上に効果的です。
さらに、一度開発した経験がある機能やアプリがあると、作り方を知ってることで具体的な構想力も高められます。
実際に、ログイン認証機能や画像アップロード機能を実装してみたい人は以下の関連記事を一読ください。
プログラミング学習が思い通りにいかない人へ
それでもプログラミング学習が思い通りにいかず、うまく手につかない人も一定存在すると思います。
本来はアプリ開発を中心に時間を有効活用したくても、基礎学習や仕事のバランス、その他技術研鑽など様々な要素で時間が奪われます。
特に、現在独学によるプログラミング学習を始めた人にとって、時間管理は重要な役割を持ちます。
- 学習によって実現したい目的/目標設定
- 学習内容の取り決め
- 学習レベルの基準
- 学習時間の確保
- 学習計画の具体的なスケジュール管理
- プログラミングにおける悩み/エラー解消などの学習環境
- エンジニア就職/転職の具体的な実現方法
最低限でも上記の項目は考慮し行動を実施する必要があります。
各項目に関する詳細な解説を確認したい人は「【プログラミング独学】初心者はやめとけと言われる理由と唯一の解決策」を一読ください。
プログラミング学習の何が難しいのか把握する
とはいえ、プログラミング未経験あるいは初心者によって、自身が取り組む「プログラミング学習の何が難しいか」把握することも大切です。
- プログラミング情報が膨大で整理できない
- プログラミング言語の基礎学習が難しい
- どうやってアプリ開発するかわからない
プログラミング初心者にとって難点はいくつか存在しますが、主に3つへ分類できると感じます。
さらに、分類した難点を分解すると学習ステップのどこで難しさを感じるか分かります。
漫然とプログラミングが難しいと思考放棄するのではなく、対策を講じる必要があります。
自身が何に対して難しいと感じるか判断し対策を打ちたい人は「【プログラミング独学】何が難しい?挫折箇所の対策と学習計画管理を考える」を一読ください。
独学によるプログラミングに限界/無理な状態から抜け出す
当然ながら、「独学ではもう無理。」と挫折や諦めを抱いて手を止めてしまった人は、今後のプログラミング学習は無理でしょう。
しかし、一度これまでのプログラミング学習を振り返り、独学によるプログラミング学習は限界・無理なのか判断しても良いと思います。
プログラミングの悩みを細分化し解説した内容を確認したい人は「【プログラミング独学】無理な状態なら目的逆算思考で考える」を一読ください。
コメント