独学プログラミング、何を作る?続かない可能性。本職が実体験を

目次

独学プログラミングで何を作る?続かない…ということがないように

プログラミングを独学する際にモチベーションを保つのは思ったより大変です。
最初はやる気いっぱいだったのに、日に日にモチベーション下がり続かない…。

著者は現役のエンジニア。
2024年12月現在、もう数ヶ月で5年勤務の中堅プログラマ。

本職での経験も踏まえ、独学でのプログラミングのメリット・デメリットを挙げていきたいと思います。
やる気が続くように助言と、アプリ開発からリリースまで意外と道のりが長いことを取り上げました。

プログラミングを独学する利点

安価である

プログラミングを独学する最大の利点の一つは、非常にコストが抑えられる点です。
書籍やオンライン教材、YouTube動画など、無料または低価格で学べるリソースが豊富に存在します。
これにより、経済的な負担を軽減しながら、自分のペースで学習を進めることができます。

独学で学ぶことで、スクールや講座の受講料を節約できるだけでなく、時間の使い方も自由です。
通学にかかる時間や費用も削減できるため、
忙しい社会人や学生でも取り組みやすいのが特徴です。

自分のペースで学べる

独学の大きな利点は、自分のペースで学習を進められる点です。
スクールや講座のように決まったスケジュールに縛られず、
自分の生活スタイルやモチベーションに応じて取り組めます。
忙しいときは学習を減らし、余裕があるときは集中的に進めるといった柔軟な対応が可能です。

自宅でもカフェで優雅に勉強することもできますから
充実した土日を過ごすことができるというおまけもついてきます。

学びの自由度が高い

学びたい言語やフレームワーク、ツールを自分で決められる自由度があるのも独学の魅力です。
スクールではカリキュラムが決まっている場合が多いですが、
独学では興味のある分野や新しい技術にすぐに挑戦できます。

ただ後述するように何を作りたいか、は決めておいたほうがいいです。
また目標が高すぎないかも重要で
最初は論理思考能力の習得が最低限の必須条件になりますから
小さな山をたくさん乗り越えた後、大きな山に挑むイメージがいいと思います。

問題解決能力が向上する

独学では、自分で情報を調べたり試行錯誤を繰り返す中で、問題解決能力が磨かれます。
このスキルはプログラミングだけでなく、他の分野や日常生活にも役立ちます。

筆者は地方の中小企業のサラリーマンですが、
最近高学歴の新入生が入社しました。
プログラマ未経験者でしたが、頭がいい=論理思考能力があるので
プログラマ経験者並みの速度で成果物を作成できていました。

やはり高学歴の方は論理思考能力や問題解決能力に長けており
その意味では、営業だって技術者だってどの分野でも活躍できると感じます。

ここで重要なのは学歴ではなく、
高学歴=論理思考能力の下地がすでに完成していること。

論理思考能力はある程度技術なので、
普通学歴(筆者も普通の人です)の方も訓練すれば身につきます。
プログラミングはかなりわかりやすく、その技術を習得できるでしょう。

小さな成功体験の積み重ねが自信につながる

独学でスキルを身につけることで、達成感や自信を得ることができます。
例えば、最初に自分の力で作ったWebアプリやツールが動いた瞬間は、大きな喜びを感じるでしょう。
この成功体験が次の学びへのモチベーションを高めます。

プログラミングには論理思考が必須なので
実際にはまだ試していないが
自分で論理的に考えた結果がプログラムとして思い通りに動いた
という小さな成功体験をたくさん経験することになります。

実際にはまだ試していない、というところが肝で
頭で考えるだけで労力を費やしていないという意味で
全能感があり、プログラマ冥利に尽きるところですね。

キャリアの可能性が広がる

独学でも十分に実力を身につければ、
副業やフリーランス、転職、起業といった
さまざまなキャリアの可能性が広がります。
独学からエンジニアとして活躍している人も数多くいます。

独学の末、プログラミングで何を作るか

独学を始めた多くの人が、学んだスキルを活かして何かを作りたいと考えます。
ここでは、具体的にどのようなものが作れるのか、その例をいくつか紹介します。

何を作るかという視点はかなり大事です。
というのもただ漠然と書籍を読むだけではあくまで受動的。
どこかで飽きがきますし、本当の技術としては何も身につきません。

やはり自分で手を動かしてナンボですが、
作りたいもの、目標があってこそ勉強も捗るというものです。
目標ありきで勉強に臨めば、情報が受動的ではなく
目標を達成するためにいかに情報を利用すればいいか
と、ガラッと積極的な姿勢に変わります。

アプリの実装方法も様々

どのハードに向けてアプリを作るかの選択肢は一つではありません。
大きく分けて3点紹介します。

Webアプリ

Webアプリは、ブラウザを通じて動作するアプリケーションです。
ブログやECサイト、掲示板、タスク管理ツールなど、幅広いジャンルがあります。
プログラミング初心者にも取り組みやすいプロジェクトの一つです。

Webで公開すれば、誰でも閲覧できることが利点でもあり、
セキュリティ的な意味では欠点でもあります。
ネット環境さえあれば、家ではもちろん出先でも見ることができるのは強みですね。

スマホアプリ

スマートフォンで使用するアプリも、独学で作ることが可能です。
ゲームやツール系、SNSアプリなど、アイデア次第でさまざまなものを開発できます。
FlutterやReact Nativeを使えば、iOSとAndroidの両方で動作するアプリを効率よく作ることができます。

iOSとAndroid、実は違った言語でアプリ作成も選択肢の一つなのですが
クロスプラットフォームといって、標記の言語であれば両デバイス対応となります。

PCアプリ

WindowsやMacで動作するアプリケーションも開発可能です。
独自のメモ帳やタスク管理ツールなど、実用性の高いアプリが多く作られています。

Windowsでexeという拡張子のファイルは見たことあるでしょうか。
例えば、メモ帳を起動するのも実はメモ帳.exeという
アプリの中核となるファイルがあって、WindowsPCがそのexeファイルを起動している。
実はMacではexeファイルは基本的には動かないです。

著者おすすめは、Webアプリとスマホアプリ

独学のモチベーションキープのため、
身近な人に使ってもらえる、という理由につきます。

スマホは現代において大抵の人が所持している。
Webはスマホからでも閲覧できますし、
スマホアプリもインストールすれば誰でも利用可能。

逆に、PCのアプリはマイPCを誰もが所持しているとは言い難いです。
筆者は管理系のアプリ開発に強いため
PCをわざわざ開いて…という手間をかける時点で使われなくなるという判断をしています。
加えて、筆者だけがMac Bookユーザー。

ネットで公開したとて宣伝しなければ
どんなに素晴らしいアプリでも誰にも使ってもらえませんから、
確実に誰かに使ってもらうには自分と周りの人が同じ景色を見ることが大事だと思います。

アプリの利用目的も様々

アプリをどのような目的で使うかも決めておきましょう。

管理アプリ

業務効率化を目的とした管理アプリの開発も人気があります。
データベースと連携して、在庫管理や勤怠管理、
顧客管理などを実現するアプリを作ることも可能です。

自分や家族が使う、という視点であれば
家計簿やtodoリストのアプリがいいと思います。

もちろん、ストアにはすでに同様のアプリがありますが
自分ならではの機能も実装することができます。

ゲームアプリ

エンターテインメントとしてのゲームアプリ開発も、
プログラミングの学びがいがある分野です。
UnityやUnreal Engineを使えば、視覚的な開発環境で初心者でも取り組みやすいです。

ユニークなアプリを作れば、
SNSで宣伝すればバズったり、自分でストレス発散するのにもいいかもしれませんね。

勉強のための勉強は続かない…

元来、プログラミングはつまらないものだと筆者は考えています。
本職が言うのか。

と言うのも、プログラミング自体は目的ではないからです。
暮らしに悩みがあって、その悩みは実は機械に任せることができる。
機械に任せることができれば、自分はやらなくていいので可処分時間が増える!

本来はこのようなモチベーションでアプリを作るのだと思います。

ただ単に論理思考や問題解決能力を養いたいのであれば
数学や物理を勉強するのでも間に合うと思います。

プログラミングの動機は作ることにあります。

実際、プログラミングを学ぶときに必ずといっていいでしょう。
オブジェクト指向というキーワードにぶち当たります。
オブジェクト指向を概念的に学ぶのはいいのですが、
なんで勉強しているのか迷子になるときがたくさんありました。

要するに、「勉強するだけ」という状態がつまらなかったのです。
もし、オブジェクト指向を利用した実装方法も学んでいれば違っていたかもしれません。

何を作るか目的を決めた後は

さて目的を決めた後は、実際に開発を進める段階に移ります。
開発プロセスは以下のようなステップで進めるのが一般的です。

設計

何を作るのかを明確にしたら、その機能や構造を設計します。
ユーザーがどのようにアプリを使うのか、
どんな機能が必要なのかを具体化することが重要です。

そのアプリでは、何をコンセプトとし
できること、できないこと、将来の可能性を考えて
どのような拡張性を考慮するかを検討し
開発中に方向性があやふやにならないようにする必要があります。

開発環境整備

設計終わったとて、すぐに開発とはいきません。
どの言語を利用するかによって
自分のPCに開発用のソフトウェアをインストールする必要があります。

ほとんどの場合、1日あればお釣りが来ると思います。
たまに地獄のように沼ります。

開発

設計に基づいて、実際にプログラムをコーディングしていきます。
エディタや統合開発環境(IDE)を活用しながら、コーディングを進めましょう。
多くの方がアプリ開発のイメージとは、この開発のイメージだと思います。

論理的思考を駆使し、意味不明なエラーに果敢に挑みながら
一通りの動きが完成したとき、感動は無類です。

テスト

開発が完了したら、動作確認を行います。
不具合や予期しない挙動がないか、
さまざまなケースを想定してテストを行います。

これは僕もそうだったし、新入社員=初心者あるあるですが
基本的な動きは完成しているが、ユーザのキテレツな動きを考慮していない。

機能一つ一つの動きはできているが
機能を組み合わせた際、不具合が発覚するケースもよくあります。

自分で作って自分で使う分には
どのような操作をしてはいけないか見当はつくと思いますが、
家族、全くの赤の他人が利用するとしたら、
起こりうる想定外を(エラーとしてユーザーに通知するなど)
想定内の事象としてプログラムで守ってあげる必要があります。

リリース

テストが完了したら、アプリをリリースします。
Webアプリの場合はサーバーにアップロードしたり、
スマホアプリならストアに公開したりします。

スマホアプリの公開は
プラットフォーム側の審査がありますので
アプリ完成→即公開ではないこと、ご注意ください。

また、公開までの手順を調べる必要があり
なかなか公開できず、もどかしい時間が続きます。

前者ならサーバー代にお金がかかりますし
後者ならストアの利用代がかかります。

などなど、意外にも時間もお金(!)もかかってしまうのが
リリースの作業です。

保守

リリース後も、ユーザーの声を反映しながら改善を続けることが大切です。
バグ修正や機能追加など、継続的なメンテナンスを行いましょう。
自分で使っていくと、設計段階では気づかなかった不便な点
意地悪な操作による不具合に気づくかもしれません。

プログラミングを独学するデメリット:続かない、継続が難しい理由

続かない:モチベーションの維持が難しい

独学では、進捗や目標の管理を自分で行う必要があります。
そのため、明確な目標がないとモチベーションが低下し、
途中で挫折してしまうことがよくあります。
一人で学ぶ孤独感も、モチベーションの低下につながる要因です。

目的を明確に!

このため、自分が何を作りたいか明確にしましょう。
もしかすると現状人間がやっている作業をアプリが代替してくれる可能性があります。
その発見が、プログラミング意欲を掻き立てる可能性が高いです。

目的を共有する

目的を明確にした後は、誰かと共有するのもいいでしょう。
宣言することで自分の逃げ道を無くしてしまう行為です。

あまりプログラミングに詳しくない人であれば
感嘆の声が上がるかもしれません。

「すごい!そんなことできるんだ。」

ただし、アプリ開発までは本記事でも紹介した通り
開発以外でもけっこう時間が必要です。
気を長くして待ってもらう必要はあるかもしれません。

そんなときも
リリースした後サプライズ的に成果物を共有するのも達成感ありますが
ある程度小分けで進捗を開示するのも一つの方法です。

もしかしたらプログラミング全くの未経験だからこそ
新鮮な声が聞けるかもしれませんよ。

「ここ、こういう機能があったほうがいいんじゃない?」

迷いやすい:学びの方向性が曖昧になりやすい

何をどの順番で学べば良いのかが分からず、効率の悪い学習に陥ることがあります。
例えば、基本的なプログラミングの概念を理解する前に難しいフレームワークに手を出したり、
最新の技術に振り回されて本質を見失ったりすることも少なくありません。

独学の場合、学んだ成果やスキルを客観的に評価してくれる人がいません。
自分のスキルがどのレベルにあるのか、
どこを改善すれば良いのかを把握しづらいのは、独学特有の課題です。

ソースレビュー

自分の技術の向上手段として
自分の書いたプログラムをレビュー(見返す)することがあげられます。

一つの指標として、一日たった自分がプログラムを即座に理解できなければ
汚いソース=保守しにくいソースであると思えます。

  • 同じ記述がないか
  • 分岐が複雑でないか
  • 丁寧なコメントか

など。

時間がかかる:分からないことを解決するのが難しい

スクールや講師がいないため、学習中に分からないことが出てきた際に誰にも相談できないことがあります。
エラーメッセージや動作不良に直面したとき、
解決までに時間がかかり、ストレスを感じることも多いです。

よくあるエラーは誰でも経験しているので、たいがいネットで解決方法が見つかります。
マニアックなエラーも大抵ネットで見つかるのですが、
英語で検索しないと見つからなかったり、英語で検索したら英語の(yahoo知恵袋のようなサイト)
やりとりを読まなければいけないので、Google翻訳に入れるなど一手間だったり。

生成系AIが開発の手助けに

この時代、わからないことはAIに質問するのも大事です。
著者の感覚としてはエラーは6割くらいは正解が帰ってくる。

あまりにマニアックだったり、
プログラム自体が複雑だったりすると解決には至らない。

エラーを一つ一つ解決していくことが
エンジニアとしての血肉にもなりますから
生成AIも有効に利用しつつ、焦らず丁寧に解決していくことが大事です。

時間がかかる2:学習環境の整備が必要

プログラミング学習にはPCや開発環境のセットアップが必要ですが、
これを自力で行うのは初心者にとって難しい場合があります。
環境構築でつまずいてしまい、学習が進まないこともよくあります。

環境構築だけで1日が吹っ飛ぶこともあります。
リアルな開発の進捗がないため、貴重な休日が犠牲になったりして
かなりフラストレーションは高いです。

最もきつい:独学という孤独

独学は一人で進めるため、孤独を感じることがあります。
質問できる相手がいない、モチベーションを維持する仲間がいないといった状況は、
学習の挫折につながることがあります。

実体験ですが、本職=プログラミングが相当キツく感じることがありました。
別にプログラム自体は難しいものではなく、悩みを感じたのはその点ではありませんでした。

問題は、他の人はチームで色々わいわいとやっているのに対し
自分は1人で黙々とやるしかなかったことだということに気づきました。
(ハブられているとかではないんですよ…。)

しょぼくれた解答かもしれませんが、この結論を捻り出すのにも相当時間かかりました。
ですが、これはある種の真理だとは思いました。

孤独な作業というものは精神的に辛いものです。

スクールに通う

独学が難しいと感じた場合、プログラミングスクールを利用するのも一つの手段です。
講師から直接指導を受けたり、カリキュラムに沿って効率的に学べるため、
モチベーションの維持やスキル習得のスピードが上がります。

現代において、実際に学校に通うというよりは
Web上でのやり取りやチャットでのやり取りが多いです。

実際テレワークする時もTeamdやスカイプ、Zoom等々で
会議すれば事足りますから、うなづけます。

TechAcademy [テックアカデミー]では初心者向けのコースや転職支援のコースがあります。
なんと初心者が9割以上。

機械学習やAI、JavaやWebデザインとさまざまな内容から受講したい内容を選ぶことができます。
受講生1人ずつに現役のプロのパーソナルメンターがつき、
質問をチャットでプロから返答、先生がいるという安心感がありますね
エンジニアに転職できて年収200万円アップしたなどの受講生の声も。

SNSで仲間を見つける

SNSを活用して、同じ目標を持つ仲間を見つけるのも有効な方法です。
XやDiscordなどのコミュニティで情報交換をすることで、
新たな学びや刺激を得ることができます。

誰かが「今日も頑張ろう」などと意気込む姿(物理的には見えませんが)
を見ると自分も少し勉強意欲が刺激されるときがあります。

気軽にネットで繋がれるSNSを有効に活用して
自分のスキルアップに繋げたいですね。

独学のプログラミングが継続するように

以上、独学でのプログラミングが継続するように
メリット・デメリットや助言を掲載させていただきました。
日常に機械化できる悩みや作業を発見することで
プログラミングで何を作るか、目的がはっきりします。

目的がはっきりすれば、勉強のモチベーションが上がります。
孤独な戦いは辛いものですから、
SNSで同志を発見したり、身近な人と話題を共有することでも、
やる気をキープできると思います。

本当に困った際はプロに相談するのも方法の一つです。
ぜひ、スキルアップ、個人開発のお役に立てていただければと思います。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次