LoginSignup
68
59

「最初に覚えるプログラミング言語は何がいいですか?」

あるいは、

「最初にある言語を覚えたんですが、そのままでいいですか?」

という書き込みを拝見することがある。

お答えをまず最初に。

最初に覚えるプログラミング言語はなんでもいいです。

と思った。そう書いた。少し考えたら

プログラミング言語は覚えなくていいです。

の方が、自分の経験にあっているような気がする。
記憶したくないから電子計算機を使ってプログラミングしている。
コンパイルエラーが出たら直せばいいから。プログラミング言語を覚えている必要がない。

人間が計算機に勝てる3つのこと。忘れる、あきらめる、やめる
https://qiita.com/kaizen_nagoya/items/49dc709d289d22846044

プログラマにとって、何か知っている必要なことは何もない。仮説(39)
https://qiita.com/kaizen_nagoya/items/30daf9836702bdefaf7d

「知っている」ことと「実現する」こと 
https://qiita.com/kaizen_nagoya/items/fc65bb332561add5b249

30年くらい前は、知人が情報処理試験で受験するの際に、あもうもなく、アセンブラを勧めていた。

仕様が付いていて、アセンブラを覚えていなくても、記憶しなくても合格できるから。

だから、よく考えたら、(よく考えなくても)プログラミング言語は覚えなくていいんです。
アセンブラ以外だと情報処理試験に受からないだけで、仕事には困りません。

描いて、コンパイルすれば、コンパイルエラーはでる。
存在しているサンプルプログラムをちょちょっと書き換えるのに、プログラミング言語を覚えていないといけないことはない。

自分が一番得意な8086アセンブラが身についてしまったのは、プログラムかきはじめてから10年くらい経ってからです。プログラミング言語を覚えてからプログラムを描いたことはないかも。

プログラムは詩のように描こう。仮説(110)
https://qiita.com/kaizen_nagoya/items/dd2a912f23b18e0f8893

programming like making a poem.
https://qiita.com/kaizen_nagoya/items/07ed8747f0811d070070

なぜかっていうと、学ぶことと覚えることは違います。

学ぶ必要はある。覚える必要はないのです。
5歳くらいの若いうちから始まるのも、50歳、65歳の年取ってから始まる場合も一緒。
覚えなくていい。何歳からでも始めらられる。

50歳からのプログラミング言語入門。docker(152)
https://qiita.com/kaizen_nagoya/items/5c7cec79cb3b15237076

65歳からのプログラミング入門 転職(16)
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f

ただし、1980年より前に、紙カードに穴を開けてプログラムを売っていた人たちは、
残念ながら、プログラムを覚え、フローチャートを書いて、プログラムが正しいことを
たしかめてからコンパイルしなきゃいけないという電子計算機の奴隷のような生活をされていたとお聞きしています。

プログラムは間違えずに入力する時代から、プログラムは間違えて覚える時代にいつ変わったか。フローチャートあるなし。
https://qiita.com/kaizen_nagoya/items/a0f6b63714f2c060367b

PCが、電子計算機の民主化を推し進め、プログラミング言語を覚えなくてもプログラムできる環境を整えてきました。MicrosoftとAppleに感謝する理由でもあります。

@tasurom 最初にどのプログラミング言語を学ぶか悩まなくて良い3つの理由

  1. 1つできれば他もできる
  2. 何があっている(楽しいと感じる)かなんて分からない
  3. 悩めば悩むほどポジショントークに振り回される

三つとも同意です。「最初にどのプログラミング言語を学ぶか悩まなくて良い3つの理由」を拝見していたら、紹介して終わっていたかもしれません。

@tasurom さんの問いかけにまずお答えいただけるといいでしょう。

「ポジショントークに振り回していないでしょうか。」

最初に覚えるプログラミング言語は何がいいですか?
と聞かれている方が、
何か困りごとがあるのか
何かやりたいのか
何かつくりたいのか
短期的なお金儲けがしたいだけなのか、
長期的なお金儲けがしたいのか、

そして、その思いは、過去3年くらいのあいだにどのように変化してきて、
これから3年後の間にどのゆに変化しそうなのか。

「何があっている(楽しいと感じる)かなんて分からない」
ことにいちど、思いをはせていただけるとよいでしょう。

学ぶ。をちゃんと

「覚える。をちゃんと」じゃないところが大事。

「欲しい!」とだけ返信し、みごと当たりました。

ありがとうございます。

そして、学ぶ事も要らないかもしれない。慣れるだけでプログラム書けるかも。

「最初に覚える自然言語は何がいいですか?」

という質問を考えて見てください。
何がいいかどうかに関係なく、まず一つ母語を習得したことを思い出してみてください。

プログラミング言語教育のXYZ。 仮説(52)
https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4

ここでは、学習することだけを目的とはしていません。
言語は、何かをするための道具です。
プログラミング言語も、自然言語も同じです。

その何かがない状態では、何か探しをするのではなく、自分が何かがないのはなんでだろうってぼんやり考えてもらえるとありがたいです。

英語教育ではCHANGEと言っているらしいです。なにかを変える必要はかならずしもないかもしれません。自分が今、1年後、10年後、何がしたいかで、経路を想像してみるのがいいかもしれません。

経済学を理解するために英語の本を読んだり、
数学を解くために英語の本を読むのは、とても役立ちます。
英語だけ勉強するって意味がないかもしれないって想像できるかどうか。

プログラム言語は問題を解決し、場合によっては対価をいただくことを想定しています。
勉強だけして仕事(趣味でもいいです)に役立てない人は除外しています。

勉強しなきゃプログラム書けないと思っている人も除外しているかもしれません。勉強しなくても、問題が解きたくて、問題を記述すればプログラムをもう書いています。勉強が先って誰が決めたんでしょう。

プログラムは問題を記述して解決するための道具です。
問題を解く気のないプログラムを書いていて楽しいわけありません。

「プログラマを目指す」ことの空虚(むなし)さ。仮説(59)
https://qiita.com/kaizen_nagoya/items/513f39bcf01a3db36d09

プログラマは目指すものではなく、日々問題をプログラミングで解決している状態を指すものだと理解しています。作家が毎日文章を書いたり、歌手が毎日歌を歌っているように。

リルケが「若き詩人への手紙」で 若い人が、芸術への道を進むかどうか悩んだときに、 芸術家になる人への、一つの教訓を示しています。 「自分が作家だと思うこと」が大事とのこと。自分で一行でもプログラムをかけば、あなたはプログラマだ。目指す必要はない。

誰か、あこがれの人を目指すのはいい。「プログラマ」を目指す必要はない。

「何を」よりも「誰を」10年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2

日本のプログラマが世界で戦える16分野・事例。仮説(53)統計と確率(25)
https://qiita.com/kaizen_nagoya/items/a7e634a996cdd02bc53b

アセンブラ

30年くらい前は、あもうもなく、アセンブラと答えていた。

知人が情報処理試験で受験するの際に、私はいつもアセンブラを推奨していた。仕様が付いていて記憶しなくてもよいことが一番。

アセンブラ以外であまり役にたつソフトをかいたことがなかったからもある。

アセンブラへの道
https://qiita.com/kaizen_nagoya/items/46f2333c2647b0e692b2

おおきく方向転換したのは、電総研(現在の産総研)の研修生として、在籍していた際に、「アセンブラは書けるがLISPはかけない」といったら、「LISPはアセンブラだ」と反論され、ぐうの音もでなかったことからだった。

当時、LISPマシンというLISPがアセンブラとして動く機材があった。
Intel 80386が安価で高速になり、LISPマシンよりも速くて安いLISPが動いてしまい、誰でもLISPが使えるようになっていた。

「LISP入門」入門
https://qiita.com/kaizen_nagoya/items/a15fb08db24bad85a841

プログラミング言語の作り方 〜 Go によるアセンブラ、バーチャルマシン、コンパイラの実装
https://qiita.com/nirasan/items/cb1f79955f31c45c6658

Hello World くらいしかできない言語のアセンブラをつくる
https://qiita.com/mitsuchi/items/767544d6ca044cbcc9c4

コンパイラさえかければ、どんな言語でもいい

20年くらい前には、もうどんな言語であっても、コンパイラさえ書ければいいですよって方針変換した。

自分でコンパイラを書いて、コンパイラの書き方を指導できるようになったこともある。

名古屋地区で20年くらい前に教育を受ける新人たちは、
「3ヶ月でコンパイラかけなきゃプログラマになるな」
って檄をとばしていました。

30年近く前に、COBOLでアセンブラを作られた方がいたこともあり、
どんな言語でも、アセンブラもコンパイラもかけるはずだという思い込みによります。

プログラマの「プログラムが書ける」思い込みの激しさは強みであって弱点ではない3つの理由。仮説(168)統計と確率(17)
https://qiita.com/kaizen_nagoya/items/bc5dd86e414de402ec29

心理学の本を読むよりはコンパイラ書いた方がよくね。仮説(34)
https://qiita.com/kaizen_nagoya/items/fa715732cc148e48880e

Code Complete:goto論争の終焉
https://qiita.com/kaizen_nagoya/items/82c7939f442cbd5fce37

その言語をアセンブラとするCPUを設計すればなんの言語でもいい。

さらに時代は進み、Verilog HDLの勉強をして、CPUの設計ができるようになった。(嘘)CPUの設計のReviewができるようになった程度。

それでも、どうすれば、どういう言語をアセンブラとするCPUが書けるかの想像がつくようになり、方針を変換した。

その言語をアセンブラとするCPUを設計すればなんの言語でもいい。

RTL設計スタイルガイド Verilog HDL編(System Verilog対応版)
https://qiita.com/kaizen_nagoya/items/4c02f1575db1f28310a7

コンピュータの構成と設計 パターソン & ヘネシー
https://qiita.com/kaizen_nagoya/items/dc7246b39935974bcd2d

CPU設計実習(授業用) - 1章 CDECvのアーキテクチャ設計
https://qiita.com/rikitoro@github/items/6992ad968f8dc842ffeb

CPUの創りかた, 渡波 郁
https://qiita.com/kaizen_nagoya/items/2e1b6b79ea3e6b2bf0c0

CPUからOSまで自作してみた話①
https://qiita.com/yusuke_blog1026/items/71a2119e3fdb4a52bda9

今解きたい問題のライブラリさえ呼べれば、どの言語でもいい。

今、WEBを作ろうとしているとします。
今、作りたいWEBの機能を全て持つライブラリをどの言語からでも呼び出せれば、
どの言語でもいいです。

肝心なのは、どの言語でそのライブラリを書いているかではなく、
どの言語でそのライブラリを呼び出せるかです。

ありとあらゆる言語で呼び出せれれば、どの言語でもいいことに納得いきませんか?

別解:どんな言語でも、祖先と子孫を辿ればよい。

ある言語を習得したら、その言語の祖先となる言語や、子孫となる言語も少し勉強して、比較さえできるようになっていればいいというのが別解。

必要に応じて、言語を切り替えられれば、困ることはないはず。

C言語を最初に覚えたら、先祖としてのPasclと、子孫としてのC++、JAVA,C#のどれかを使えるようにしとけばいい。

JavaScriptを最初に覚えたら、htmlとTypeScriptくらいをやればいい?
まだJavaScript覚えていないので断言できません。

@hiraike32 新しく言語を学ぶときに心がけていること
https://qiita.com/hiraike32/items/40ef06f85f6a63828985

「4. お約束のプログラムを作る」

コンパイラとCPUがお約束のプログラムです。OSを勧める方もおみえかもしれません。私はOSが嫌いだから勧めません。DBを勧める方がお見えです。DBは苦手だから勧めません。個人の好みです。

「1. 言語の歴史と特性を知る」

歴史を知るのではなく、一つ前の世代、一つ後の世代の言語を実際に動かしてみるとよい。dockerでいろんな言語を動かせます。

あなたもdocker, 私もdocker。docker(130)
https://qiita.com/kaizen_nagoya/items/8f2746f10f30b575d0a8

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

@muson0110 プログラミング言語を新しく覚えたいときに試すこと7選
https://qiita.com/muson0110/items/ae891dd630bc129960a1

「6. 言語の特性や歴史を知る」

歴史を知るというよりは、一つ前の世代、一つ後の世代の言語を実際に動かしてみるとよい。そうすると、歴史が自然の身についてくるかも。

「5. つよつよエンジニアを追う」

つよつよエンジニアに、その言語でコンパイラ作って見てとか、その言語がアセンブラとして動くCPUを記述してみてって頼むのも手かも。全部自分でやる必要はない。

@UltraBirdTech 新言語を学ぶ時の3つのポイント~見習いPGのメモ~
https://qiita.com/UltraBirdTech/items/b00380a9ca73494a75cd

3.他言語との比較

同じ系統の言語の比較をまずすることをお勧めします。
その先は個人の自由で。

あとがき

何年か前、非常勤講師をしていた岐阜大学で、全学共通でPythonを教えることになった。自分の仕事場でもPythonを教える機会があった。

人材派遣の会社から、新人・中途採用者の教育を依頼された。
プログラミング未経験、プログラミング初心者にpythonで3週間でプログラミングできるようになってもらった。

たまたま、ロボット制御の演習をその後3週間C言語で取り組まれた方がおみえだった。pythonとC、どっちがわかりやすい?って聞いた。
必要なのはロボット制御だったらしく、C言語という答えが帰って来た。
C言語が難しいと思うのは、教え方が悪いだけのことがほとんど。

その後、コンパイラを作りに来た方は3週間でコンパイラを書いた。
昔は3ヶ月かかったのが、今は3週間なんだと感慨にふけった。

Cコンパイラのソースがあちこちにあるし、Cコンパイラそのものも無償であるんだし。

ところで、プログラミング言語を問題を解決するのではなく、文法を教えている場合があるらしい。

特定の問題を解きたい場合じゃない時には、文法は教えずに、コンパイラの書き方だけ教えるようにしている。

コンパイルエラーが出れば、文法は自然に身につく。
自然言語を最初に習うのに、文法を教えることはないことに気がつけば。

@shinichi-takahashi 俺流プログラミング言語の学び方
https://qiita.com/shinichi-takahashi/items/d046598c9fd072ddf8f8

やらないこと
学習商材に手を出す
書籍を買う

そうですね。個人で学習商材は購入しないし、学校へは通いません。
組織がお金を出してくださるのなら、後学のために行くのはいいことだと思います。

できれば、入門、初級、中級とあれば、最初から中級へ行くことをお勧めします。
まわりは、入門、初級ができる人ばかり。みんなから教えてもらえる。

本も、ソースコードが全部公開されているものは、動かしながら学ぶのにはいいです。
教えるときはまず10冊動かします。
機械学習は100冊やろうとして今、中断中。ごめんなさい。

なぜdockerでpython/Rを使って機械学習するか 書籍・ソース一覧作成中 (目標100) docker(18)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e

参考資料

@e99h2121 「コーディングを支える技術」を読んだ - プログラミング言語の選び方
https://qiita.com/e99h2121/items/2ddccd8ea50a57aab96a#_reference-3f2991a684ac56d09d32

@blog3nt 初心者がこれから学ぶべき言語を目的別にまとめてみた
https://qiita.com/blog3nt/items/c84b95ff3c0045416ac3

@e-a-st 人生最後に学ぶプログラム言語とは? (生涯給与3億円クラブに追いつきたい場合)
https://qiita.com/e-a-st/items/eaa6815ef8bb264789ce

@e99h2121 育児していたからこそエンジニアのお仕事に役立ったこと10選
https://qiita.com/e99h2121/items/db7e54c111ffcd3c3957

@e99h2121「女性こそエンジニアになるべきだ?」デブサミウーマン登壇記録
https://qiita.com/e99h2121/items/7c69be1b2c2f305f6a4c

@ohakutsu 新卒2年目から見た達人プログラマーの振る舞い
https://qiita.com/ohakutsu/items/387ff8d8c09f592f124f

@torifukukaiou 私のAdvent Calendar 2022 ーー はじめたきっかけ、1月のふりかえり、今後の展望
https://qiita.com/torifukukaiou/items/891db4e40a7f6194af56

@kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1

@kazuo_reve ワークショップ「ソフトウェア開発におけるHAZOP入門」の結果
https://qiita.com/kaizen_nagoya/items/e62e91cb019c6275d6c1

@kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da

自己参照

プログラム初心者が知らなくてもいいこと。仮説(63)
https://qiita.com/kaizen_nagoya/items/3eaeb88e583898b8aae7

凡人の生き残り戦略 〜 凡人網のつくりかた 〜
https://qiita.com/kaizen_nagoya/items/c8e2af61f344761c41be

@ohakutsu 新卒2年目から見た達人プログラマーの振る舞い」から学ぶこと
https://qiita.com/kaizen_nagoya/items/2d87b99b096972327c4d

新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

凡人は天才、秀才と違うことをして生きていく
https://qiita.com/kaizen_nagoya/items/0502aebb7610fef584f5

人間が計算機に勝てる3つのこと。忘れる、あきらめる、やめる
https://qiita.com/kaizen_nagoya/items/49dc709d289d22846044

「知っている」ことと「実現する」こと
https://qiita.com/kaizen_nagoya/items/fc65bb332561add5b249

@e99h2121 A.C.ではありますまいか A.C. 2020」の改訂版ではありますまいか A.C. 2022 1日目 Most Breakthrough Generator
https://qiita.com/kaizen_nagoya/items/49ebebee3a0377f3b59b

@kazuo_reve 新人の方によく展開している有益な情報」はじめ記事を参照して頂いた時にしていること。
https://qiita.com/kaizen_nagoya/items/0e4e92f45c158ef81423

自分の頭で考えるようになるには
https://qiita.com/kaizen_nagoya/items/121a5372e3d67fc3af35

JAXA/IPA クリティカルソフトウェアワークショップ WOCS言語関連発表(改定版)
https://qiita.com/kaizen_nagoya/items/4789832baf494cb74626

データサイエンティストの気づき「勉強だけして仕事に役立てない人。大嫌い!」。『それ自分かも ? 』ってなった。
https://qiita.com/kaizen_nagoya/items/d85830d58d8dd7f71d07

年齢不問です。

50歳からのプログラミング言語入門。docker(152)
https://qiita.com/kaizen_nagoya/items/5c7cec79cb3b15237076

バベルの塔は倒れない
https://qiita.com/kaizen_nagoya/items/a111afdd0d03abc2692c

「5さいじがわかるcyber security(サイバセキュリティ)」
https://t.co/GYhfNgUbVG

「5さいじがわかるcyber security(サイバセキュリティ)」のかんがえかた
https://qiita.com/kaizen_nagoya/items/f83394e4916760e2bae1

英語教育に学ぶ、プログラミング言語教育(はじまりのはじめ)
https://qiita.com/kaizen_nagoya/items/7299f44b7f2d47ff58b1

プログラマで「飛び抜けた人が少ない」という仮説。仮説(38)
https://qiita.com/kaizen_nagoya/items/f0d22e20f6d2c58f2c1b

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

文書履歴

ver. 0.01 初稿 20220226 昼
ver. 0.02 参考URL追記 20220226 夜
ver. 0.03 アセンブラ、コンパイラ記事URL追記 20220228 昼
ver. 0.04 今解きたい問題のライブラリさえ呼べれば、どの言語でもいい。20220228 夜
ver. 0.05 最初に覚えるプログラミング言語はなんでもいいです。20220301
ver. 0.06 プログラミング言語は覚えなくていいです。追記 20220302
ver. 0.07 学ぶ必要はあるかもしれない。覚える必要はない。追記 20220303 昼
ver. 0.08 コンピュータの構成と設計 パターソン & ヘネシー。Code Complete:goto論争の終焉 URL 追記 20220303 午後
ver. 0.09 たにぐち まこと/学ぶ。をちゃんと「覚える。をちゃんと」じゃないところが大事。20220305
ver. 0.10 リルケが「若き詩人への手紙」参照 20220305 夕
ver. 0.11 英語教育に学ぶ、プログラミング言語教育(はじまりのはじめ),
「何を」よりも「誰を」10年後のために今見習いたい人たち URL追記 20220306 昼
ver. 0.12 「プログラムは間違えずに入力する時代から、プログラムは間違えて覚える時代にいつ変わったか。フローチャートあるなし。」URL追記 20220306 夕
ver.0.13 アセンブラ、コンパイラ、CPU設計追記 20220306 夜
ver. 0.14 プログラム初心者が知らなくてもいいこと。 追記 20220312
ver. 0.15 @e99h2121 「コーディングを支える技術」を読んだ - プログラミング言語の選び方 追記 20220518
ver. 0.16 補足 20220616
ver. 0.17 ありがとう追記 20230413

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

68
59
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
59