プロが教えるわが家の防犯対策術!

最新のプログラム言語を学ぶには何がいいですか?

A 回答 (6件)

さて、ここまで「関数型言語」に絞って来た。

ここ20数年、のトレンドだと、サッパリ関数型言語「そのもの」は広まってないが(笑)、一方、C#やJavaなんかのメジャー言語は「その機能を移植しよう」と頑張ってきてるから、だ。
また、Pythonはマルチパラダイム言語だけど、実は設計根幹では関数型言語の影響が物凄く大きい。むしろそっちを基礎設計として採用してんだろ?的なトコが垣間見れる(逆に「オブジェクト指向」は実は付け足しだ・笑)。
いずれにせよ、繰り返すけど、「関数型プログラミング」と言うパラダイム自体は実はC言語なんかを代表する「手続き言語のパラダイム」より古い。むしろ「最古のモデル」って言った方がいいんだ。諸々の理由によって「封印されてきた」(つまり市場で主導権が握れなかった)って考えていい。そして皮肉な事に「最新の言語」の方が「最古のモデル」の影響が一番デカイんだよ(笑)。
あれだ、ラノベ風に言うと、関数型言語は「最古の封印されし呪われた邪神」だな(笑)。今それが現世に蘇ろうとしてる、と(笑)。

余談だけど、何故に「関数型と言うモデル」が市場で主導権を取れなかったか?大きな理由は「現実のハードウェアの動作モデル」と明らかに違い過ぎたから、だ。
実は高級プログラミング言語の「存在意義」ってのは根本的には「ハードウェアの直接動作を隠蔽する」為にあるの。だから「コンピュータの動作原理がわからないとプログラム出来ない」ってのは基本的には「ウソ」なんだ。実は全ての高級プログラミング言語は「直接的なハードウェアの動作を隠す」事にその存在意義がある。目的がそうな以上そういう事だろ?じゃなかったら屁理屈言わずに直接機械語でコーディングすべきだ。どれだけ面倒臭かろうと。
とまぁ、理想論はそうなんだけど、ところがその特定のプログラミング言語の思想っつーか設計が「あまりに現実のハードウェアとそぐわない」と「現実のハードウェアを動かす」トコに持っていくまでの「変換」がメンド臭いのね。
インタプリタなら「遅く」なる。コンパイラなら「どの辺まで最適化するか」が難しくなる。
パソコンで長い間(1990年代半ばまで)、Pythonを含む「新しい言語が普及しなかった」のはこれが原因なんだ。Windows 95以降でCPUの速度やメモリ容量の上限が飛躍的に上がった。そのお陰で「かつては資源の無駄遣い」にしか思えなかったプログラミング言語を動かす事が可能となったわけだ。言い換えると「かつてはミニコンやワークステーション上じゃなきゃ動かなかった」ようなモデルでも動くようになった。
そんなわけで、今は色んなプログラミング言語がパソコン上で使えるようになっている・・・・・・ハッキリ言っちゃうと、Pythonだって、大体1995年以前の貧弱なパソコンなら「ハードウェア資源の無駄遣い」って言われるようなプログラミング言語なんだよ(笑)。
技術の進歩は凄い。

とは言っても、現代でも「直接ハードウェアの動作を記述するような」プログラミング言語が不必要になった、って意味ではない。当然そういうニーズは存在する。
そういうジャンルを「システムプログラミング」等と呼ぶが。
今度はそういう「システムプログラミング言語」の(比較的)最新版と言えば?と言う話。
これはもう、一つしかないだろう。
Rustだ。

Rust:
https://www.rust-lang.org/ja

Rustも2010年登場だ。かなり新しい部類に入るプログラミング言語処理系だ。
目的もハッキリしていて「システムプログラミング」。C言語が一番有用だ、と認識されている分野に入ってきてる。いや、かつてそれを成そうと思って設計されたプログラミング言語はそこそこあるんだけど、初めてその領域に入る事を支持される言語になった、と言おうか。
とにかく「スピードが求められる」分野向け。上にも書いたけど、今は結局そこまでクリティカルな分野を思いつく方が難しいんだけど、例えばブラウザがそうだな。HTMLを読み込んで描画する、ってのに「時間がかかったら」シャレになんないだろ。そこは「速度が必要な」分野で、Rustは出自通り、Firefoxブラウザの一部を記述するようになっている。
また、UNIX系OSのLinuxのカーネルの一部にもRustが入ってきた、と言う話も聞く。この辺の開発では「C++でさえ入れなかった」んだ。C++は排除されている。一方、Rustが取り入れられた、と言う事は、まだ全体は任せられないとは言え、システムプログラミング向けとしてポテンシャルがある、っつー意味だ。
C言語でさえ、最初からUNIXカーネルを全部書いていたわけじゃない。最初はアセンブリやマシン語「しか」なかった。UNIXカーネル内で「徐々に」アセンブリやマシン語がCで書かれたソース(から生成したアセンブリやマシン語)に置き換えられていった。

個人的な意見では、現在ではC/C++を学ぶよか先にRustを学んだ方がエエんちゃうか、って思ってる。
理由はC++は単に難しすぎ、Cは「現行仕様を無視したような記述法を薦める」入門本ばっかだから、だ。後者が特に酷い。何故に国際的にはC24が成立しようとする現在、30年も前のANSI Cの書き方を学ばねばならんのか?ホントに仕様をチェックしてんのか、って言うような奴らばっかが本(あるいはサイト)を書いていて、「標準Cが学べない」から、だ。
連中は色々と言い訳をするんだよ。「組み込み分野ではANSI Cがいまだ標準」とかな(笑)。いや、これらはハッキリ言うと「ウソ」だ。特定分野で特定の仕様が必要だ、って「現実」は「標準以上にそっちを学ぶべきだ」と言う理由にはなり得ない。当たり前だろ。「九州行ったら博多弁が必要なんで、国語教育では博多弁を扱うべきだ」とか言われたら「そりゃ違うだろ」ってなんだろ(笑)?同じ事だ。
平たく言うと、おっさん連中は「俺が昔からこれをこのように使ってるんだから他の新しい事を覚えたくない」って言ってるだけ、なんだ(笑)。「俺がラクだから」若者の方をマウンティングしよう、と。「俺に」合わせろ、と。どこまで行っても基準は「俺」なんだ。そして「俺が面倒臭い事をしたくないから」が根底理由であって、「言い訳は些事」でしかない。
こんな老害がうろついてる言語に「知識がない」若者を放り込むのは良くない。従って、やるならRustのような「老害が寄り付かない」システムプログラミング言語を最初にやった方がいいと思っている。老害はホントに害なんだわ(笑)。
Rustは日本語でのチュートリアル(通称: The Book)も完備してて比較的学びやすい環境が整ってる(言語自体が簡単だ、とは決して言わんが)。

The Book:
https://doc.rust-jp.rs/book-ja/

とにかく、プログラミング言語を選ぶ際に「おっさんが避けてる言語を選ぶ」ってのは結構大事な気がしている(笑)。
おっさんを混ぜるな(笑)。若者同士で結託しろ(笑)。仕事ではおっさんに関わるのはしょーがないにしてもプライベートまでおっさんに関わりたくねぇだろ(笑)?C言語は「仕事」だ、Rustは「プライベート」だ。
おっさんが「股引が標準」って言ってもキミはそれには従わんだろ(笑)?
そういうこった。
おっさんが「グンゼがいいブランド」って言ってもキミは別のもっとイカしたパンツを履きたいだろ(笑)?
そういうこった。
おっさんの言う「これがフツー」は常に世の中の、キミの目から見た「常識」からズレてるんだ(笑)。悲しいことにこれが現実だ。
じゃあ、プログラミング言語「選択」に関して何故にそうじゃない、って言えるのか。
C言語は「グンゼ」だ。白いブリーフだ。それしか選択肢にならない。おっさんはみな白いブリーフをはくんだ。ゴルゴ13でさえ愛用している(謎
RustはBVDだ。カラフルなだけでなく、ブリーフ以外にも選択肢がある。
そういうこった。
若者なら、システムエンジニアリング向け、と考慮するならRustをまずは選べ。
白いブリーフはいつでも買う事が出来る。

そんなトコかな?
    • good
    • 0

最新かぁ・・・。


最新の定義によるんだけど・・・。

プログラミング言語には「パラダイム」ってモンがある。
いわゆる「××指向言語」とか「××型言語」とかだよな。
ただ、これでも「最新」とか「最新じゃない」とかは言いづらい。
何故なら「研究としてみると」ずーっとあってもそれが市場に取って「古い」とは限らないんだよ。単にそのコンセプトが流行ってない、って意味だけど(笑)。

登場順、って意味だと多分恐らく一番新しいのに「アスペクト指向言語」ってのがある。

アスペクト指向プログラミング:
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9 …

ただ、個人的にはよう知らん(笑)。興味があるなら自分でどういう言語があるのか、どう記述するのか、調べてモノにしてくれ。

2014年にJavaにラムダ式が導入された。これで当時のJavaユーザーは混乱に叩き込まれたわけだが(笑)。
ラムダ式は「関数型言語」と言うパラダイムの機能だ。いわばJavaにとっては「最新機能」だったわけだな。「これからは関数型プログラミングを!」ってぇわけだ。
ところが、「関数型言語」自体の研究は古くからあるんだよ(笑)。ハッキリ言えばC言語なんかの「手続き型言語」のパラダイムより「古い」。「研究」って意味では歴史は長いんだけど、一方、歴史の表舞台には立ってこなかったんだよな。基本「学者向け」ってカンジになってた。
市場に対しては「新しい」関数型言語。代表的なブツとしては次の言語がある。

Haskell:
https://www.haskell.org

これがある意味、唯一無二の「関数型言語」だ。登場時期は1990年。ほぼPythonやRubyと同じ時期に登場してる。そして「登場してから34年」ってのは、実はプログラミング言語に関してはまだヒヨッコ、って言うに等しい。人々のある言語実装の「実力に気づく」事の方に長い時間がかかるから、だ。現に、Pythonが日本で人気が出たのは2010年代に入ってから、だ。
Haskell最大の特徴、と言うのは、通常のプログラミング言語と違って「遅延評価」を基礎とする辺りだ。
通常、プログラミング言語は関数を使うと「引数を評価してから」「関数をそれに適用する」と言う順序になる。
反面、現時点恐らくHaskell「だけ」は先に「関数が評価されてから」必要に応じて「引数を評価する」と言うシステムになっている。これを「遅延評価」と呼ぶ。
繰り返すが恐らく、現時点ではこの「遅延評価」を採用してるのはHaskell「だけ」だと思う。
この「遅延評価」の一部だけ、をC#やらJavaも取り入れようとしてきている・・・「一部だけ」と言うのはデータを作る際に、って事だな。言語の根幹としては「まだまだ取り入れるには早い」と言う保守的判断の方が現在では優勢だ。
また、この言語、「純粋関数型言語」と言って「純粋」が付く。純粋が何か、と言うと、「副作用を持たない」と言う意味だ。「副作用」とは一般に、入力、出力、代入のような行為を持つ。言い換えるとHaskellは「入力、出力、代入」を持たない。
そんな言語なんて使いようがねぇだろう、って感じるのはその通りで、しかし数学的に「入力、出力、代入」を扱う為、Haskellはモナドと言う機能があって、これがまたニューカマーを混乱の坩堝に叩き込む、なんつー事をやってるわけだ(笑)。
Haskell関連の書籍では、僕は読んだ事はないけど、次の書籍が人気があるようだ。

すごいHaskellたのしく学ぼう!:
https://www.ohmsha.co.jp/book/9784274068850/

略称「すごいH本」だ。なんかすごいエッチな本に聞こえるけど、要はそういう事だ(謎

ただ、個人的にはHaskellは「尖りすぎてる」気がする。もうちょっとマイルドな・・・と言うとWindowsならこれがある。

F#:
https://learn.microsoft.com/ja-jp/dotnet/fsharp/ …

MircrosoftはC++、C#、そしてVisual Basic関連のベンダーとしても有名だが、「第4の言語」がある。それがMicrosoftが開発した関数型言語F#だ。登場は2005年。
C#、Visual Basic.NETで出来る事は全部F#で出来る。と言うのも、この3つは極端に言うと、.NETと言う「仮想コンピュータ」をどう動かすか(つまりプログラミングするか)と言う共通目的があって、要は異体同心だ。「見た目は違うがやる事は同じ」なわけで、結果、Windowsで.NETを使ったプログラムをする人はオブジェクト指向(C#)、手続き型言語(Visual Basic)、関数型言語(F#)から好きなモノを選んでくれ、となってるわけだ。
F#はHaskellと違って「遅延評価」ベースではない。また、入力・出力・代入も許す。Haskell程尖ってないわけだ(よって「理論的」にはこういうのを「不純な」関数型言語、と呼ぶ)。
F#に関してはMicrosoftがチュートリアルを用意してくれている。

チュートリアル:
https://learn.microsoft.com/ja-jp/dotnet/fsharp/ …

Microsoft環境に馴染みがあるなら、すぐさま始められるだろう。
なお、確かにF#は知名度から言うとC#やVBに劣るが、一方、米国ではF#プログラマは数が少ないにせよ、C#やVBのプログラマより「給与が良い」と言う結果が出てるらしい。
なお、F#には「原作」が存在し、それはフランスの国家機関INRIAが作ったOCamlと言う言語だ。

OCaml:
https://ocaml.org/

登場は1996年、だ(結果F#はOCamlの「方言」で、その登場まで10程を要した)。
OCamlに対しての入門書、っつーか「OCamlを使ったプログラミング入門書」に次の本がある。

プログラミングの基礎:
https://www.saiensu.co.jp/search/?isbn=978-4-781 …

これは現在でもお茶の水女子大学の二年でのプログラミング講座の教科書として使われているらしい。
また、個人的な意見を言うと、日本で日本人によって書かれた「プログラミング入門書」の類の本では圧倒的に「良い」本だ。初学者向けでこれ以上にデキがいい本は知らない。世界レベルでも多分これに匹敵する本は、2〜3冊くらいしか無いんじゃないか。
よって、「今からプログラミングを始めたい」って言う人には本当はこの本を「まずは」推薦したい、って思ってる程だ。

「最新の」じゃなくって「最強の」って言われたら当然これを挙げる。Lispだ。
Lispはプログラミング史上、最強言語だ。
元々関数型言語はこのLispがもたらした数学的アイディアをベースに発展してきた。また、「オブジェクト指向」なんかも研究ツールとしてはLispを用いられて研究されてきてる。
言わば「学者のおもちゃ」。それがLispだ。そしてPythonなんかも平たく言うとかなりの部分でLispの影響を受けている。「C言語の影響で・・・」って言いたがる人が多いけど、それはウソだ。PythonはLispとHaskellの影響が、少なくとも二番目には多い。逆に「最も影響が小さい」のがC言語だろう。
さて、Lispは長い歴史があるんで、実の事を言うと方言だらけ、だ。よって、Lispはプログラミング言語と言うよかより正確には「言語族」なんだ。だから「どのLispを選ぶ?」って事になる。
ここでは初心者向けに優しい、つまり、オールインワンの処理系Racketを紹介する。

Racket:
https://racket-lang.org

Racketの登場は2010年。実はそれ以前はLisp方言Schemeの実装だったんだけど(MzScheme)、2010年にそれから離反して独自路線に変更、Racketを名乗るようになる。
なお、Racketは実は「かなりデカイ」処理系で、「学者のおもちゃ」のイメージが強固なLisp族の中では、デカイ以上かなりの実用性を誇っている。多分ANSI Common Lispに匹敵するくらいの実用性はあると思う。
学習サイトには次のサイトを薦めておく。

紫藤のページ:
https://www.shido.info/lisp/idx_scm.html

また、もうちょっと一般のLispを・・・と思う向きには、冗談に思うかもしんないけど、次の「ノベルゲーム風チュートリアル」を薦めておく。

魔法言語リリカル☆Lisp:
http://lyrical.bugyo.tk

繰り返すけど「ふざけてない」。
このノベルゲームには厳選された良質の「Lispによる代表的な問題」11問が含まれていて、ぶっちゃけこの11問を「解く」だけでも相当な実力が付くようになっている・・・・・・。まぁ、本当の「プログラマの資質」、つまり「パズル好きか否か」が問われてる、って考えてもいい。
いずれにせよ、オススメのノベルゲームだ。
    • good
    • 0

システム開発の仕事を30年ばかりしていました。




> 最新のプログラム言語を学ぶには何がいいですか?


何を目的としたプログラミング言語学習なのかによると思います。
また、「最新」とはどういう視点に基づいた最新なのか・・・というのもあります。

「その他(プログラミング・Web制作)」というカテゴリーへのご質問ですが、プログラミング・・・ソフトウェアの設計・製造(と試験)を仕事として行う事を目的としての学習であれば、ある程度のハードウェアの知識や作成したソフトウェアが動作する環境(=OS)との関係(=インタフェースなど)も理解することが好ましいので、いきなり記述レベルが高い言語を学ぶことには一定のリスクがある(←最初に学んだ言語が先々の理解のベースになり続けるので)と感じています。
なのでデータ型や入出力についてしっかり理解できる昔ながらの手続き型言語を学ぶのがよいように感じます。
Webページの作成なら最初は静的ページの作成でHTMLとそこに多少の動きを付けるJavaScript。次はWebぺk時側での入力を受けたサーバサイドでの処理としてJavaなど。でも本当は先のように基本をしっかり学ぶにはサーバサイドでの処理をC言語やC++で書くのがいいかも。
あ! でもオブジェクト指向をしっかり理解するという点ではC++はあまり適さないと思うのでまずはC言語ですかね。

同じ仕事として行うのであってもある種のゲームなど分野に特化した仕事なのであれば、現在その分野ではやっている言語(だけ)を学ぶというのも方法だと思います。

参考まで。
    • good
    • 1

AIにもチャレンジしたいのでしたらPythonです。


制御系だとC++、一般的な業務システムはJava、WebアプリケーションだとTypeScript系のフレームワークになります。
    • good
    • 0

やっぱりJavaとSQLかな。


https://jp.indeed.com/career-advice/career-devel …

「何のために学ぶのか」が書かれていませんから一概には言えないけど。
もし職業としてプログラマーを目指しているのなら、SQLは必須かと。
SQLを「プログラミング言語」と呼んで良いのかちょっと疑問はありますが。「SQLだけ」ではほとんど何もできないので。
    • good
    • 0

Web制作ならJavaScriptでしょう。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A