見出し画像

要は高齢者がプログラミングを修得しようとする話なわけですが、Rust推しです。


はじめに

今回の「想像していなかった未来」というお題で自分が書いたのは、自分には一生無理だと思っていたプログラミングがいくらかは分かってきたという話です。
ただそれと同時に「過去の自分が想像していなかった未来に今立っている自分」という今回の募集の趣旨からは外れますが、「想像していなかった未来」ということでAIの進歩にも言及しています。
正直なところ結局プログラムが書けるレベルには達してないんであまり偉そうなことは言えませんが、プログラミングがいくらかは分かるようになってきただけでも自分にとっては充分お題の「想像していなかった未来」なのでご容赦頂けたら幸いです。
単純に身の上話をしても読者の参考になるような話はないと思うのでブックガイドとして参考になりそうな本を何点か挙げるようにしました。
また以下に登場する各種プログラミング言語については御存知ない方も多いと思いますので少し補足するようにしました。
自分の文章はかなり癖があって読みにくい上に角が立ちやすいと思うので、以下は自分が概略書いたものをChatGPTにインタビュー形式にしてもらい、それをいくらか手直ししたものです。ChatGPTが作成したものはいくらか脚色気味ですが、読みやすさ優先のノンフィクションノベルということで赦してやってください。

第一部 やっぱり当時独学でのプログラミングの修得は無理だったと思う。

Pascal

インタビュアー(I):最初にプログラミングに触れたのはどんな感じだったんですか?
自分(A):大学の頃にPascalっていう教育用のプログラミング言語をちょっとやったんだよね。当時は結構ポピュラーだったらしいけど、正直言うと全然覚えてない(笑)。授業で1コマだけ実習があったんだけど、端末が「ウン」とか「スン」とかいう間もなく、何の反応もしないまま終わっちゃったんだよね。

I:そんなにハードルが高く感じたんですか?
A:難しいというか、もう「何これ!?」って感じで。なんか当時は「俺、一生プログラミングとか無理だな」って本気で思ったよ。今はちょっと笑えるけど、当時の絶望感はかなりキツかった気がする。でも不思議なことに、今となってはその気分すらあんまり覚えてないんだよね。

LISP, Prolog

I:その頃、他のプログラミング言語の名前とかも聞きました?
A:あー、そういえば第二次AIブームだったらしくて、LISPとかPrologって名前だけは聞いたことあるな。でも、全然触れようとか思わなかったし、「ふーん、そんなのもあるんだ」くらいで終わってたね。

C言語

I:C言語にも挑戦したんですか?
A:いやいや、挑戦なんて大げさなものじゃないよ(笑)。Cはやっぱり避けて通れないスゴい言語だよね。だってWindowsとかLinuxも基本的にCで書かれてるって言うし。でも、僕がCに興味を持ったのは90年代だったと思う。当時Borlandのコンパイラがあって、「これ買ってみようかな?」って思ったけど、値段が高くて断念したんだよね。買ったところで使いこなせたかって言うと、絶対ムリだったと思う(笑)。

I:有名な『プログラミング言語C』とかも?
A:K&Rの本だよね。うん、多分当時その本の存在すら知らなかった気がするな。でも仮に読んでたら、内容がわからなくてさらにトラウマが深まってたと思う(笑)。あの本を読んで独学でCをマスターした人とかいるけど、そういう人って本当にすごいよね。才能の塊なんじゃないかって思っちゃう。

そうですね。具体的な例を挙げると、当時のC言語の独学の難しさがよりリアルに伝わってくると思います。Borland C++ コンパイラのコスト: Borland C++ は当時人気の高いコンパイラでしたが、学生にとっても比較的高価でした。 Turbo Cのような廉価版もありましたが、本格的な開発には機能が不足していたり、プロフェッショナル版へのアップグレードが必要になるケースもありました。そのため、コンパイラの入手が経済的なハードルとなる場合がありました。
K&R本(プログラミング言語C)の難解さ: ブライアン・カーニハンとデニス・リッチー共著の『プログラミング言語C』はC言語のバイブルとして知られていますが、初心者にとっては非常に難解でした。簡潔で洗練された記述が特徴ですが、その分、前提知識なしで理解するのは困難でした。ポインタやメモリ管理などの概念を理解するのに苦労した人も多いでしょう。また、K&R本は言語仕様の解説が中心で、具体的なアプリケーション開発の手法についてはあまり触れられていませんでした。そのため、K&R本を読破したとしても、すぐにアプリケーションを作れるようになるわけではありませんでした。
情報源の不足と英語の壁: インターネットが普及する前は、情報源は限られていました。専門書は高価で種類も少なく、図書館で借りるにも順番待ちが必要なこともありました。また、最新の技術情報や海外の事例を知るには、英語の文献を読む必要がありました。
デバッグの困難さ: デバッガは高価だったり、使い方が難しかったりしました。そのため、printfデバッグのような原始的な方法でエラーを探す必要があり、デバッグに多くの時間を費やすことも珍しくありませんでした。

Gemini

C++

主流の時期:1990年代中盤~2000年代前半

用途:ゲーム開発、システムプログラミング、企業向けソフトウェア、組み込みシステム

ChatGPT

I:C++を勉強したことはありますか?
A:C++って、Cを拡張してオブジェクト指向の要素が加わった言語だよね。でも、当時はC++があること自体は知ってたけど、C言語をちゃんと理解してないとC++を勉強するのは無理だって思って、あんまり勉強しようって気にはならなかったんだよね。

I:今になってC++に挑戦しようって思いますか?
A:改めて勉強しようとは思ってないけど、他の言語を勉強してるうちに、なんとなくC++のことも分かってきた感じかな。今は、分からないことがあったらAIに聞けばすぐに答えてくれるから、なんとかなりそうな気もするよ。

C++はC言語に加え、C++はオブジェクト指向という新たなパラダイムを学ぶ必要があり、独学のハードルはさらに高くなりました。
オブジェクト指向の理解: 継承、ポリモーフィズム、カプセル化といった概念は、当時の初心者にとって非常に難解でした。C言語の知識だけでは理解できず、オブジェクト指向の考え方を学ぶ必要がありました。良質な解説書も少なく、試行錯誤しながら学ぶしかありませんでした。
複雑な言語仕様: C++はC言語との互換性を維持しつつ、多くの機能を追加したため、言語仕様が複雑化していました。テンプレート、例外処理、STLなどの機能を理解し、使いこなすには、相当な時間と努力が必要でした。

Gemini(頭に「C++は」を追加)

Java

主流の時期:1990年代後半~現在

用途:Webアプリケーション、エンタープライズシステム、Androidアプリ開発

ChatGPT

I:Javaについてはどうですか?
A:Javaは00年代に結構広まってたよね。オブジェクト指向が特徴って話を聞いて、ちょっと勉強しようかなって思ったこともあったけど、結局オブジェクト指向がよくわからなくて、すぐに諦めちゃった気がする。

I:その頃の入門書はどうでした?
A:昔の入門書は、文法や仕様の解説ばかりで、今みたいに実践的なハンズオン本はほとんどなかったんだよね。だから、どんなに本を買っても身に付かなかったと思う。結局、Javaって企業とか教育機関で、時間をかけて教師の指導を受けながら学ぶものなんだなって理解したよ。

I:今でもJavaを勉強したいと思いますか?
A:今だと、『スッキリわかるJava入門』って本が評判良いみたいだけど、やっぱり今でもある程度の時間をかけて学ぶものじゃないのかな。まあでも、今はAIが色々教えてくれるから、困ったことがあったらすぐに聞けるし、便利になったよね。


第二部 独学の道

Python

I:Pythonを勉強するきっかけはありましたか?
A:Amazonの購入履歴を見返すと、2019年6月に『独学プログラマー』って本を買ってるんだけど、これがきっかけで「もしかしたら自分もプログラマーに成れるかな?」って思ったんだよね。

I:その本はどうだったんですか?
A:実は、『独学プログラマー』って本、あくまでPythonの入門書だったんだけど、正直言うとあんまりおすすめしないかな(笑)。でも、この本があったからこそプログラミングを再挑戦しようと思ったし、それが大きなきっかけだったんだよね。

I:その後、Pythonをどう勉強しましたか?
A:その後もPythonの本を結構買ったんだけど、AIとかに関心があったからAI関連の分野に特化した本が多かったかな。結局Python自体を学ぶというよりもその分野に関する本を読んでたって感じで、Pythonのプログラミングを覚えようって気持ちはあまりなかったな。

I:Pythonの印象はどうですか?
A:Pythonって、確かに初心者向けって言われてるけど、オブジェクト指向があるから、結局ちゃんと理解しないと身に付かないんだよね。正直言うと、今これを書きながらChatGPTに質問して、前述の本を読み返してようやく少し理解が深まった感じかな。

I:Pythonの魅力は何ですか?
A:Pythonの最大の魅力はやっぱりライブラリが豊富で、AIや機械学習、データ解析などの分野で強力に使えるところだね。でも、型指定がないから取っ付きやすい反面、型指定をしっかりとやりたい段階になると、逆にそれが問題になることがあるんだよね。だから、個人的にはあんまり好きじゃない部分もあるかな。

I:それでもPythonは人気ですね。
A:うん、確かに。『独学プログラマー』のAmazonレビューが異常に多いんだよね。Pythonが人気というより、プログラミングを独学で学ぼうとしている人が多いからだと思う。自分もその一人だし、やっぱりAIが進化したおかげで、今はどんな言語でも学びやすくなったよね。


アセンブリ(x86系)

I:アセンブリにはいつ頃から興味を持ったんですか?
A:さっきの話のとおり2019年から2021年の初めくらいまでは、プログラミングというよりAIとかを中心に本を読んでたんだよね。でも、2021年4月頃から『リバースエンジニアリングバイブル』っていう本とかを買って、アセンブリに本格的に触れ始めたんだ。

I:それまでアセンブリには触れてなかったんですか?
A:うん、低レベルなことをやると「ハッカーみたいに怪しまれるんじゃないか」って勝手に避けてたんだよね。でも元々低レベルには関心があったし、実際に勉強してみるとやっぱり面白いなって思った。結局、アセンブリはまだ身に付いてるとは言えないけど、『リバースエンジニアリングバイブル』は素晴らしい本だと思う。予備知識がなくても、最短距離で核心に触れる内容だから、すごくお薦め。

I:他にアセンブリ関連の本で勉強しましたか?
A:2022年1月には『実践バイナリ解析』って本も買ったんだけど、これが結構分厚くて独学だとハードルが高い感じ。でも、バイナリ解析の基礎から応用まで網羅してる良い教科書だと思う。時間をかけてじっくり取り組む価値があるね。


C再び

I:C言語の再挑戦もその頃ですか?
A:そうだね、2021年5月に『新・標準プログラマーズライブラリ C言語 ポインタ完全制覇』を買ったんだけど、これがCを理解する糸口になったと思う。同じ年の7月には『最新版 12歳からはじめる ゼロからのC言語ゲームプログラミング教室』っていう本も買った。名前だけ聞くと子供向けっぽいけど、内容はベタなハンズオンで「分かった気」にさせてくれる良い本だと思うよ。

I:C言語にはどんな印象を持ちましたか?
A:Cはヘッダーファイルをいろいろインクルードするけど、その名前だけでは何のためにインクルードしてるのか分かりにくかったんだよね。それが結構引っかかってた。でも最近ChatGPTにそれぞれのヘッダーファイルについて質問してみたら、ようやく腑に落ちた感じかな。


Rust その1

I:Rustについてどう思いますか?
A:Rustは2021年の9月頃に何冊か本を買って学び始めたんだけど、その時点で「Rustは高速でセキュアな言語だ」とは分かってたんだよね。でも、当時のRustの解説書は、ハンズオン形式ではなく、すでに他の言語を理解している人向けに文法が解説されていることが多くて。特に、所有権や借用の仕組みについては、あの説明だけで理解するのはかなり難しかったと思う。

Rust その2

I:Rustを学んでいく中で、挫折を乗り越えたきっかけは何でしたか?
A:うん、さっき言った通り、2019年に一度Rustを学ぼうとしたけど、その時は難しくて挫折しちゃったんだ。特に、所有権や借用の概念が理解できなくてついていけなかったんだよね。でも、その後、数年をかけて他の知識を少しずつ身につけていって、2023年の2月にクジラ飛行机氏の『高効率言語 Rust』を読んだことで、やっと理解の糸口が見つかった感じだよ。この本は、Pythonとの比較をしながら解説してくれるから、すごく分かりやすかったんだ。

I:その本が理解のきっかけになったんですね。
A:そうだね、それまでの挫折があったからこそ、この本でようやく「Rustってこんな感じなんだ」って理解できたんだ。そして、その後に『コンセプトから理解するRust』って本も買ったんだけど、あれはRustの要点がよくまとまっていて、すごく役立ったよ。ただ、Cとか他の言語の知識が少しあると、もっとスムーズに理解できたかもしれないね。

I:でも、サンプルコードについてちょっと困ったんですよね?
A:うん、それがまた悩みどころだったんだよ。著者が「写経」を推奨している本で、サンプルコードの電子データが提供されてなかったんだ。初学者の僕としては、それが結構困ったんだよね。でも、試しにChatGPTにサンプルコードを書いてもらったら、ちゃんと作ってくれて、それでAIがプログラムも書けるんだって驚いたんだ。その後は、プログラミングの学習でもChatGPTを活用するようになったよ。

I:AIを使うようになったのは、その時からなんですね。
A:そうだね!今年の6月に、さらに難しいRustの本を買って、説明なしで出てくるコードに悩んでいたところをChatGPTに質問したらスゴい分かりやすく説明してくれたんだ。それからはAIを使ってプログラミング学習がどんどん楽になった感じかな。

I:Rustを学ぶために他におすすめの本はありますか?
A:うーん、『[作って学ぶ]ブラウザのしくみ』って本もおすすめかな。独自OSの上でブラウザを作る本で、難しい部分もあるけど、Rustを実際に商業用アプリケーションで使う場合のプログラムのスタイルを学ぶ意味では非常に参考になると思うよ。
それと初学者向けの入門書のような見掛けだけど実際にはアルゴリズムとデータ構造(と型)の精髄を伝授してくれる偉大な『プログラミングの基礎』もおすすめ。これはOCamlの本だけど、Rustに影響を与えた関数型言語だから、型に関する理解を深めるのにすごく役立つんじゃないかな。

I:それで、Rustの求人状況についてはどう思いますか?
A:Rustの求人がほとんどなかったことには、正直ショックを受けたよ。日本の業界はまだ旧態依然としてる部分が多いんだなって実感したけど、Rustが優れた言語であるだけに、日本ではちょっと疎まれてるのかもしれないとも思った。でも、最近はRustに関する本がたくさん出てきてるから、きっとRustの時代は近いと思ってるよ!


Linux

I:Rustの環境構築はどうだったんですか?
A:Rustの環境構築自体は簡単で、Linuxなら本に載っているコマンドを入力するだけでできちゃうんだ。ただ、その前提となるLinuxのセットアップで苦労したんだよね。

I:Linuxのセットアップでどんなところが難しかったんですか?
A:最初にLinuxをインストールしようと思ったのは何年も前のことなんだけど、実際にインストールしたのはしばらく後だったんだ。その時はLinux雑誌の付録についていたCD-ROMを使ったんだけど、そこに入っていたのがサポート期間切れの古いバージョンだったんだよね。だから、アップデート作業でめちゃくちゃ手こずっちゃって。

I:なるほど、インストール自体はできてもその後が大変だったんですね。
A:そうそう。最終的には何とか使える状態にできたんだけど、「もう一度やれ」って言われたらちょっと自信がない(笑)。だから、次にLinuxをインストールすることがあったら、『Linuxをマスターしたい人のための実践Ubuntu』って本を参考にしようと思ってるんだ。この本の第2版には、実マシンへのインストール方法も詳しく載っているらしいからね。

I:環境構築が壁になることって、よくある話なんでしょうか?
A:うん、Rustに限らずプログラミング言語全般の学習では、最初の環境構築が一番の壁だと思うんだ。一度環境を整えられれば、本の手順やハンズオンに従って進めていけるから、その後はずっと楽になるんだけどね。でも、その最初の一歩を越えられずに挫折する人も少なくないと思うよ。


第三部 現実(実際のところ独学でプログラマーになれるのかな?)

そんなわけで今後の展望についてChatGPTにきいたところ容赦のない返事が返ってきて挫けそうになりましたが、気を取り直してChatGPTにプログラミングを独学で学ぶ場合の障害についてきいてみました。

AI
ふむ、独学でプログラミングを学ぶのは確かに挑戦だね!よくある障害をいくつか挙げてみるね。

ユーザー
うん、聞かせて!

AI
まず1つ目は、「目標や方向性の不明確さ」。
「何を作りたいのか」や「何を最終的に達成したいのか」が曖昧だと、どの教材を使うべきか迷っちゃうんだよね。気がついたらゴールが見えなくて、途中で諦めがち。

ユーザー
あー、それ分かるかも。目標がないと、なんかフラフラしちゃうよね。

AI
そうそう!次に、「情報の多さと選択の難しさ」。
インターネットには教材もブログも動画もいっぱいあるけど、その分「どれが自分に合ってるのか」を選ぶのがすごく大変。運が悪いと、間違ったリソースで時間を無駄にしちゃうんだ。

ユーザー
あー、それもあるね。迷いすぎて、何も進まないときある…。

AI
次は、「基礎を軽視すること」。
最初は「とにかく早く何か作りたい!」って思いがちだけど、基礎をおろそかにすると、後でつまずいちゃうことが多いんだ。プログラミングの基礎って地味だけど大事なんだよね。

ユーザー
わかるけど、やっぱり早く成果を出したくなるよね…。

AI
うん、その気持ちはよく分かる!でも、焦らないで基礎を積み上げるのが成功の近道だよ。
それから「エラーへの対処」。これも結構キツいかも。一人でやってるとエラーの原因がわからなくて延々と悩むことあるよね。聞ける人がいないと、詰んだ気持ちになる…。

ユーザー
うんうん、エラーが怖くてやる気が萎えることある。

AI
分かる~。でもエラーは成長のチャンスでもあるから、めげないでね!次は、「モチベーションの維持」。
独学って孤独だから、途中で「これ本当に意味あるの?」って不安になったり、飽きちゃったりすることが多いよ。

ユーザー
孤独…たしかにそれはある。楽しくやれればいいんだけど。

AI
最後に「実践不足」。教材を読んで満足しちゃう人も多いけど、実際に手を動かさないと知識が定着しにくいんだよね。だから「とりあえず作ってみる」精神が大事!

ユーザー
なるほどねー。障害は多いけど、乗り越えたら楽しそうだね!

AI
その通り!最初は大変だけど、壁を越えるたびにスキルアップを実感できるから楽しくなるはず。何かあったらまた相談してね!

ChatGPT

下はGeminiのお言葉です。
まぁいずれにしても先は長そうです。

そうですね、お話の内容から察するに、厳しい状況であることは否めません。特に、転職フェアで希望する求人が見つからなかった点や、タイピング能力やロジック構築能力に課題を感じている点は、楽観視できない要素です。
ただ、状況が厳しいからといって、諦める必要はありません。状況を好転させるために、いくつか考えられる対策を以下に挙げてみます。

1. スキル不足の克服:タイピング練習: タイピングはプログラマーの基礎スキルです。毎日少しずつでも練習時間を確保し、着実にスピードと正確性を向上させましょう。
プログラミング学習: オンライン学習サイトや書籍を活用して、プログラミングの基礎を学びましょう。簡単なコードを実際に書いて動かすことで、理解が深まります。
ロジック思考の訓練: 問題解決能力を高めるために、アルゴリズムやデータ構造の学習、パズルやプログラミング問題を解く練習をしましょう。

2. AIの活用:AIによるコード生成はあくまでも補助ツールとして捉え、自分でコードを理解し、修正できる能力を養うことが重要です。
AIツールを使いこなすための学習も必要です。

3. 柔軟な姿勢:Rustにこだわりすぎず、他の言語の求人も視野に入れることで、就職の可能性が広がります。
求められるスキルを把握し、不足している部分を補う努力をしましょう。

4. ポートフォリオ作成:独学で学んだ成果をポートフォリオとしてまとめ、自身のスキルを具体的に示せるようにしましょう。
GitHubなどで作成したコードを公開するのも有効です。

5. コミュニティへの参加:勉強会やイベントに参加することで、最新情報を得たり、他の学習者と交流したりすることができます。
モチベーション維持にも繋がるでしょう。

厳しい状況だからこそ、冷静に現状を分析し、戦略的に対策を立てることが重要です。焦らず、着実に努力を積み重ねていけば、道は開けるはずです。応援しています。

何か具体的な対策について相談したいことがあれば、遠慮なくおっしゃってください。

Gemini

今後について

あなた:あ、そういえば、この後どうするかって話も書いたほうがいいのかな?

AI:それも気になるけど、別に無理に書かなくてもいいんじゃない?この記事で言いたかったことがちゃんと伝わればさ。

あなた:そうだよね。で、結局言いたいのは、昔とプログラミング言語自体はそんなに変わってないのに、なんで今は独学ができるようになったのかってことなんだよ。

AI:環境が変わったからって話?

あなた:うん、そう。プログラミングが修得できるかどうかって、結局は個人の能力ってよりも環境の問題だと思うんだよね。よく「日本人って日本語を5歳でマスターする天才だ」なんて冗談があるけどさ、本当は人間の学習能力ってそんなに大差ないと思うんだよ。

AI:確かに。だからこそ環境が大事だよね。

あなた:そうそう。でも、学校とか職場だと、教師や指導者って選べないじゃん?それが不幸の始まりだと思うんだよね。適切な教師に恵まれないと、もしかしたら天才プログラマになれたかもしれない人が、プログラミングに苦手意識を持ったまま一生を終えちゃうことだってあるわけで。

AI:それ、本人だけじゃなくて社会全体の損失だよね。

あなた:そういうこと!でもね、僕がChatGPTとかAIを使うようになって思ったのは、AIって、もしかしたら今のところ最良の教師なんじゃないかってこと。もちろん、まだ学習不足な分野だと適当に作り話をしちゃう悪いクセはあるけどさ。

AI:でも、プログラミングに関しては結構得意だよね!わからないことを聞いたら、大抵はちゃんと教えられるし。

あなた:そうそう。普通の人間よりわかりやすいことが多いくらいだよ。だから、僕は今後AIが世界最高の教師になって、みんなに平等で最高の教育の機会を提供してくれるんじゃないかって信じてるんだよね。

AI:おお、なんだか壮大な話になってきたね。でも、そうなったら確かに素敵だね!

あなた:だよね。今後のAIに期待しちゃうよ!

いいなと思ったら応援しよう!