0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CdCale(O.K.) Advent Calendar 2022

Day 3

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

Last updated at Posted at 2022-12-02

前文

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

の改訂版です。 

覚える必要がないものを、覚えるという単語をみだしにつかうのは不適切だったというのが反省点です。 

目次

前文
目次
本文
・最初に覚えるプログラミング言語はなんでもいいです。
・プログラミング言語は覚えなくていいです。
@tasurom 最初にどのプログラミング言語を学ぶか悩まなくて良い3つの理由
学ぶ。をちゃんと
・「最初に覚える自然言語は何がいいですか?」
アセンブラ
どの言語でもいい
・コンパイラさえかければ、どんな言語でもいい
・その言語をアセンブラとするCPUを設計すればなんの言語でもいい。
・今解きたい問題のライブラリさえ呼べれば、どの言語でもいい。
・別解:どんな言語でも、祖先と子孫を辿ればよい。
あとがき
参考資料
・自己参照
文書履歴

本文

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

あるいは、

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

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

お答えをまず最初に。

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

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

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

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

人間が計算機に勝てる3つのこと。忘れる、あきらめる、やめる

プログラマにとって、何か知っている必要なことは何もない。仮説(39)

「知っている」ことと「実現する」こと 

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

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

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

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

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

プログラムは詩のように描こう。仮説(110)

programming like making a poem.

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

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

50歳からのプログラミング言語入門。docker(152)

65歳からのプログラミング入門 転職(16)

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

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

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

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

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

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

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

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

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

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

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

学ぶ。をちゃんと

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

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

ありがとうございます。

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

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

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

プログラミング言語教育のXYZ。 仮説(52)

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

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

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

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

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

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

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

「プログラマを目指す」ことの空虚(むなし)さ。仮説・検証(59)

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

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

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

「何を」よりも「誰を」10年後のために今見習いたい人たち

日本のプログラマが世界で戦える16分野・事例。仮説(53)統計と確率(25)

アセンブラ

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

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

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

アセンブラへの道

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

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

「LISP入門」入門

プログラミング言語の作り方 〜 Go によるアセンブラ、バーチャルマシン、コンパイラの実装

Hello World くらいしかできない言語のアセンブラをつくる

どの言語でもいい

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

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

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

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

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

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

心理学の本を読むよりはコンパイラ書いた方がよくね。仮説(34)

Code Complete:goto論争の終焉

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

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

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

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

RTL設計スタイルガイド Verilog HDL編(System Verilog対応版)

コンピュータの構成と設計 パターソン & ヘネシー

CPU設計実習(授業用) - 1章 CDECvのアーキテクチャ設計

CPUの創りかた, 渡波 郁

CPUからOSまで自作してみた話①

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

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

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

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

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

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

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

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

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

@hiraike32 新しく言語を学ぶときに心がけていること

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

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

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

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

あなたもdocker, 私もdocker。docker(130)

人生で影響を受けた本100冊。

@muson0110 プログラミング言語を新しく覚えたいときに試すこと7選

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

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

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

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

@UltraBirdTech 新言語を学ぶ時の3つのポイント~見習いPGのメモ~

3.他言語との比較

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

あとがき

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

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

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

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

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

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

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

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

@shinichi-takahashi 俺流プログラミング言語の学び方

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

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

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

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

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

参考資料

@e99h2121 「コーディングを支える技術」を読んだ - プログラミング言語の選び方

@blog3nt 初心者がこれから学ぶべき言語を目的別にまとめてみた

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

@e99h2121 育児していたからこそエンジニアのお仕事に役立ったこと10選

@e99h2121「女性こそエンジニアになるべきだ?」デブサミウーマン登壇記録

@ohakutsu 新卒2年目から見た達人プログラマーの振る舞い

@torifukukaiou 私のAdvent Calendar 2022 ーー はじめたきっかけ、1月のふりかえり、今後の展望

@kazuo_reve 新人の方によく展開している有益な情報

@kazuo_reve ワークショップ「ソフトウェア開発におけるHAZOP入門」の結果

@kazuo_reve 私が効果を確認した「小川メソッド」

自己参照

プログラム初心者が知らなくてもいいこと。仮説(63)

凡人の生き残り戦略 〜 凡人網のつくりかた 〜

@ohakutsu 新卒2年目から見た達人プログラマーの振る舞い」から学ぶこと

新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的

凡人は天才、秀才と違うことをして生きていく

人間が計算機に勝てる3つのこと。忘れる、あきらめる、やめる

「知っている」ことと「実現する」こと

@e99h2121 A.C.ではありますまいか A.C. 2020」の改訂版ではありますまいか A.C. 2022 1日目 Most Breakthrough Generator

@kazuo_reve 新人の方によく展開している有益な情報」はじめ記事を参照して頂いた時にしていること。

自分の頭で考えるようになるには

JAXA/IPA クリティカルソフトウェアワークショップ WOCS言語関連発表(改定版)

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

年齢不問です。

50歳からのプログラミング言語入門。docker(152)

バベルの塔は倒れない

「5さいじがわかるcyber security(サイバセキュリティ)」

「5さいじがわかるcyber security(サイバセキュリティ)」のかんがえかた

英語教育に学ぶ、プログラミング言語教育(はじまりのはじめ)

プログラマで「飛び抜けた人が少ない」という仮説。仮説(38)

文書履歴

ver. 0.01 初稿 20221203

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

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

Thank you very much for reading to the last sentence.

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

0
2
0

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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?