見出し画像

これからプログラミングを学ぶひとたちへ伝えたいこと

最近、友人がプログラミングの勉強を始めました。
そのはじまりにちょっとしたトラブルがあり、そこからどうしても伝えたいことがあって記事にしました。

これからプログラミングを学ぶ人、学ぼうと思っている人、興味がある人に向けた記事です。プログラミングの勉強の一歩目を踏み出そうとしている人にはぜひ、読んでもらいたいです。

ただ、めっちゃ長いので内容を簡単にすると
・「学ぶ方法」よりも「何を学ぶか」が大事
・でも初心者には、そこの見極めが難しいから助けになりそうな情報書くね
という話です。

起きたトラブル

起きたというか、起きかけたトラブル、というのが正しいのですが、簡単に言うと、彼が「あきらかに的外れなプログラミングスクールに高いお金を払おうとしていた」です。

ここで言う「的外れ」というのは
・彼がやりたいこと。
・スクールで得られる(と思われる)知見。
・それに払う予定の授業料。
全部がチグハグだった、ということです。教える内容自体がめちゃくちゃ、という訳ではありません。スクールの詳細なカリキュラムはわかりませんでしたし、通ったわけでもないのに内容には何も言えません。

でも見当違いの技術に高いお金を払おうとしているのを知って、全力で止めました。

誰だって最初は初心者

当たり前の話です。どんな「つよつよエンジニア」も最初は初心者でした。
でも学んでいくにつれ、初心者のときの「分からない感覚」は忘れてしまいます。

今回、友人と話をしていくなかで、自分がプログラミングを学び始めたときの感覚を多少なりとも思い出したので、急いで記事を書くことにしました。

そんな自分はというと「つよつよエンジニア」なんてものじゃありません。というかエンジニアですらありません。プログラミングスクールに通ったこともありません。独学でプログラミングを勉強して、サイト運営している人間です。興味があればこっちの記事の方が詳しいので、どうぞ。


なぜ、彼はスクールに通おうと思ったのか

勤務先の距離とか、スクールのPRとか色々と言っていましたが、本質はこれです。「面倒くさかった」からです。

もっと詳しく言うと
「何を学んだら自分のしたいことができるのか分からないし、調べても余計わからなくなって、もう全部が面倒くさくなった」からです。

それを聞いて思いました。。。

めっっっっっっっっっっっちゃ、分かる!!!!!!!!

プログラミングに全く触れていない人間が勉強しようとして、まずぶち当たるのが「何を勉強したら良いかわからない」という問題です。

「JavaScript良いよ!」「時代はPythonだよ!!」「これからはRUSTでしょ!!」
とか言われても訳わかりません。

世の中は手段よりも目的が大事とはいいますが、いざ「俺はWebサイト作りたいんだ!!」と思って調べてみても
「Rubyで出来るよ!」「JavaScriptで出来るよ!」「C#で出来るよ!」
と返事をされて

「全部、できんじゃん!!!!! 結局どれよ!!!?」
ってなります。

だったら、プログラミング分からない人が「何を勉強したら良いか」わかる手助けがあれば良いのでは?

そう思って記事にすることにしました。はい、長くなりましたが、ようやくスタートです。

ここからは上記のための内容になります。そしてわかりやすさを優先して、かなり大雑把な説明をしていきます。できる限りカタカナ用語も使わないようにします。

だから多分、上級者の人からしたら青筋をたててツッコミたくなる説明だと思います。お見逃しください。


そもそも「プログラミング」って何よ

まず、ここからスタートです。
プログラミングを学びたい、と思っている人は沢山います。でもプログラミングを知らない人の「プログラミングのイメージ」って、かなりあやふやだと思います。自分もそうでした。

友人も「なんかコードを書いて、プログラムを動かすやつ」という感じの答えでした。

間違いじゃないですが、この記事内では以下のように定義したいと思います。

プログラミングとは「人間の言葉による機械への指示」です。

え?難しそうになった?
……待って!帰らないで!!これからかみくだいていきますから。

当たり前ですがコンピュータに「Webサイト作って」と言っても動いてくれません。彼らは「0」と「1」だけで動くからです。これが機械語というものです。

じゃあ、人間がこの言葉を使って指示を出せるか、というと出来るけど、とても大変です。

だから、これを人間でも分かるような言葉で書いて、それを機械語に翻訳して指示を出しているのです。
この「人間でも分かる言葉の指示」が「プログラミング」です。

いわば、コンピュータくんは「外国人」なのです。彼らにわかる言葉(例えば英語)で伝えないと、こちらの意図は分からないのです。

なぜ一回、外国人のたとえを挟んだかというと、ここからが本番だからです

ここから開発の流れを追体験してもらいましょう。でもそうなると、プログラミングをしたことがない、というか開発をしたことない人にとって未知の世界が始まるので、コンピュータくんでは説明が難しい。
外国人の方をイメージした方がわかりやすくなります。
(失礼に思われる方がいましたら申し訳ありません。でも、わかりやすさを優先させてください)

いったん、プログラミングが「指示」ということは分かったと思います。そこでアナタは「よし!じゃあ、やってみよう!」と試しに自分のパソコンで指示を書きました。しかし、ここで思わぬことが起きます。

残念なお知らせです。そのコードでは動きません

なにが起きたのでしょうか。
絵のなかに答えがありますね。

そう、外国人さんは「ドイツ」の方だったのです。だから、あなたの言っている意味が分からないのです。

どんなにわかりやすい英語(コード)を書いても、伝わらないのでは意味がありません。
あなたがしなければいけないことは一つです。そう。
「ドイツ人に英語を覚えてもらう」ということ。

そうすればあなたの英語の指示はドイツ人に伝わります。

パソコンでもこれと同じことがおきます。パソコンにプログラミング言語を理解してもらわないといけないのです。これが多くのプログラミング初心者が心折られる「環境構築」というやつです。

これについては長くなるので、いったん「パソコンにも言語を覚えてもらう必要がある」とだけ理解してください。

そして、あなたはなんとかして環境構築できました。
英語も勉強して指示も出せるようになりました。

そこであなたは思いたちます。
そうだ!この人にカレーを作ってもらおう!


なんでカレー?とかいうツッコミはなしです。繰り返しますが、わかりやすさを優先しているのです。

そして、あなたは苦労してカレー作りの指示書を書きました。
「たまねぎを、まず半分に切り、縦に切って……」
「フライパンに油をひいて……」

そして完成です!つたないところもありますが、遂にカレーが完成しました!!

またまた残念なお知らせです。あなたの指示書は無意味でした

そこに「つよつよエンジニア」さんがやって来て、カレーの指示書を見て、こう言いました。

「レシピは使わなかったの?」

は? どういうことでしょう?
訪ねてみると、こんな絶望的な返答がきました。

「公開レシピ使えば、材料を書くだけで良かったのに」

そう言って彼が渡してきたのは、材料などを伝えるだけでカレーが作れる指示書の塊、レシピでした。

これを使えば◯◯を切って。。。みたいな細かい指示をいれなくても
レシピを渡して、その上で「玉ねぎを使う」「肉は豚肉」みたいな指示だけでお好みのカレーが作れてしまったのです。

これがいわゆる「車輪の再発明」という失敗です。
そして、ここでいう「レシピ」というのが「ライブラリ」や「フレームワーク」といったもの。一度は耳にしたことはあると思います。

例えばRuby On Railsというレシピを使えば、5分で簡単なWebサイトのコードが作れます。

プログラミングでWebサイトを作りたい人は沢山います。ゲームやアプリも沢山います。でもそれを全員が毎回、ゼロから作っていたのでは大変です。

だから先人は思いました。骨格だけ作って、あとはそれぞれでカスタマイズして肉付けする。そうすれば簡単に、より高度なプログラムが書けるようになるじゃないか。そうして多くのレシピが生まれました。

あなたはがっかりしましたが、同時に喜びました。
なぜなら次はハヤシライスを作りたかったからです。
(なぜ、ハヤシライスかというのは……略)

しかし、さらなる絶望が待っていました。

またまたまた残念なお知らせです。レシピが読めません。使うこともできません。

なんとこのレシピ、英語だけでなく、一部がイタリア語で書かれています。

はい。またイタリア語の勉強と環境構築をしないといけなくなりました。

これはプログラミング言語にも得意なこと・不得意なことがあるためです。そのため高度なフレームワークなどは、いくつかの言語がくっついてできているものがあります。

先のRuby On RailsならRubyという言語がメインですが、JavaScriptとかも大きな役割を負っています。

もちろん全てを理解する必要はありません。分からなくても使っている人はいると思います。でも使いこなしたければ、勉強は必要ですし、何より動かすための環境構築は避けられません。

さて、がっかりしたあなたですが、もうゼロからハヤシライスづくりの指示書を書く気はしなかったので、これらを使いこなせるように努力しました。

そして、完成!
いよいよハヤシライスのお披露目です。

Webサイトでいえば、サイトが完成して公開するような感じですね。

もう止めてくれ!!

ハヤシライスを提供するために、お店を借りて厨房を準備しないといけません。出納帳も必要です。

これをWebサイトになおすとサーバーを借りて、データベースを作るみたいな感じですね。

そして、あなたは意気揚々と土地の管理者に会いに行きました。
しかし、そこの管理者はあなた見てニカッと笑いかけ挨拶をしてきました。

「ナマステ!!!!!」
そう、データベース言語の習得とデプロイの知識が必要だったのです。
あなたは膝から崩れ落ちました。




と、かなり極端な例で開発を追体験してもらいました。実際はここまで苦しむことはないと思いますし、事前に調べた上で開発するので致命的なやり直しというのは稀だと思います。

でも、プログラミングを全く知らない人がこれらのことを完全に予測できるか、というと難易度は高いと思います。

初心者向け教材は「Webサイト(カレー)が作れるようになるよ!!」とPRしてきます。とてもわかりやすい。

でも、この追体験をしたら思いません?
「作るのは良いけど、その作り方は?」って。

レシピを使って、作れるようになるの?
どのレシピを使えるようになるの?
それだけで足りるの?

色々な疑問がでてくると思います。

「どうやって学ぶ」かより「何を学ぶ」か

擬似的に開発経験をすることで
・ただコードの書き方を学ぶだけでは足りないこと
・ひとつの言語だけでは足りないかもしれないこと
・利用するフレームワーク(レシピ)がめっちゃ重要なこと
などが伝わっていれば幸いです。

プログラミングを学ぶ方法は、とにかく色々あります。

でも大事なのは「どうやって学ぶか」より「なにを学ぶか」です。手段はあとからついてくる。
けど、初心者にはその「なにを」がプログラミングの場合、意味不明です。

この記事を読んでも結局、どの言語とフレームワークを学べばよいか分からないじゃん!!という声が聞こえてきそうです。

でも「何を学ぶか」を重視する姿勢があれば、少しだけ助けになると思います。

例えばエンジニアに転職したいとします。そのためにプログラミングの勉強を考えている。

そしたら、なんとなくでも良いので行きたい企業の求人を見てみてください。

例えばこのnote株式会社。古い求人がありました。
そこにはこう書かれています。

<社内で使われている技術スタック>
・開発言語: Ruby、Go、Java、Rust、JavaScript、TypeScriptなど
・フレームワーク: Ruby on Rails、Reactなど
・データベース: MySQL、PostgreSQL、Redis、DynamoDB、Redshiftなど
・その他: AWS、Docker、gRPC、GraphQLなど

多分、プログラミングが全然分からない人が見たらチンプンカンプンな呪文だと思います。でも、記事を読んでぼんやりとでもイメージできるようになっていたら嬉しいです。

開発言語というのは、英語かイタリア語かフランス語かといった話。
フレームワークというのは、例のレシピですね。
データベースというのは、最後にちらっと出てきた管理人です。

じゃあ、何を勉強すれば良いのか、少し見えてきませんか。

レシピに使えない言語を学んでも親和性はありません。
Ruby on Railsは名前のとおりRubyが必須ですね。
Reactは、どんなフレームワークで何が必要か調べてみましょう。
すると、どの言語にすべきか見えてくると思います。

これで少しだけ「何を学ぶべきか」方向が出てくると思います。

仮に転職目的じゃなくて、スキルアップや個人開発のためだとしても、今はChatGPTやBardがあります。聞いてみましょう。

こんな感じで、めちゃくちゃ丁寧に教えてくれます。
追加で気になったフレームワークを詳しく聞いていけば、さらに詳細な情報ももらえます。

「データ分析に適したプログラミング言語を教えて」って質問するより、遥かに勉強すべきものの具体性があるのではないでしょうか。

インパクトが強くなるよう、わかりやすいよう、追体験の開発話は大変そうに書きましたが、実際に大変です(オイッ)

でも、それが実際の姿です。

環境構築で心が折れる人が多いのは、難しいからというのもあると思いますが、ソレ以上に予想していない困難だから、というのもあると思います。

けど、プログラミングは奥深いし、楽しいです。

この記事で少しでも、変な寄り道のせいで辞めてしまう人が減ってくれると幸いです。



この記事が気に入ったらサポートをしてみませんか?