mikanbox:first-step-guide:first_langages
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mikanbox:first-step-guide:first_langages [2024/08/20 02:06] – 削除 - 外部編集 (不明な日付) 127.0.0.1 | mikanbox:first-step-guide:first_langages [2024/08/29 17:44] (現在) – [BASIC] freemikan | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 初めての言語は何が良いのか ====== | ||
+ | |||
+ | よく見かける話題であり、回答はたいてい自分のやりたい分野に適したものを選べば良い、になります。そして、必要になったらそのときに別の言語に乗り換えれば良い、になります。これはいかにも正しそうなのですが、念の為、本当にそれで良いのかどうかを検討してみます。 | ||
+ | |||
+ | まず、ちょっと触って見るだけなら別に何でもよくて、そういうことを聞いているのではなく、この質問の本当に意味するところは、初めて本格的に、真剣に学ぶにはどの言語が良いのかということでしょう。なので、そのように読み替える必要があります。 | ||
+ | |||
+ | ときたま、言語なんてなんでもいい、基本さえ出来ていればどの言語を使っても同じだと豪語する輩に出くわすことがあります。確かに、プログラミング言語にはある程度共通したところがあり、その共通部分だけを使ってプログラミングをすることも可能ではあります。しかし、それだけで十分であるという認識は完全に間違いです。それぞれの言語には目指すところがあり、それを実現するために多くの概念が取り入れられています。どれも一緒だという認識のもとで書かれるプログラムは、極めて表面的にしか言語を活用していないことを意味します。それらはたいていひどいものです。言語の選択による違いは確実にあります。プログラミングと言語はイコールではありません。プログラミングには設計や分析を含めた様々な活動が含まれています。しかし、言語はプログラミングにおけるもっとも基本的かつ重要な道具であると言えます。言語の選択はプログラミング全般に渡って大きな影響を及ぼします。 | ||
+ | |||
+ | 最初の言語は何が良いのかという質問に戻ると、なにかやりたいことがあるならやはりその分野に適した言語を選ぶのはもっともです。ただし、言語には流行り廃りや誇大広告があり、何もかも鵜呑みにするのは良くないです。また、必要になったら別の言語に乗り換えればいいとまで楽観的にはなれないところがあります。なぜなら、最初に学んだ言語は、後になってもその言語の考え方から抜け出ることが難しくなり、何らかの影響を及ぼし続けることがあるからです。 | ||
+ | |||
+ | 個人的な経歴を上げると、C++が最初に学んだ言語でした。プログラミングを始めた理由はゲームを作りたかったからで、当時のゲームプログラミングはC++一色だったからC++を選択しました。Microsoft Visual C++のアカデミック版を購入して、付属していた本でいろいろ試したりしていましたが、さっぱり分かりませんでした。しばらくして、[[wp> | ||
+ | |||
+ | 何が言いたいかと言うと、単にゲームを作りたいからといって、今だとUnityとC# | ||
+ | |||
+ | 能書きはこれくらいにして、具体的に何がいいのかを検討してみることにします。 | ||
+ | |||
+ | ===== C ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | Cは低レベルな言語です。低レベルというのは粗末なという意味ではなく、ハードウェアに近いことを意味しています。そのため、アセンブリ言語と呼ばれる更に低レベルな言語との対応関係が理解しやすいという、プログラミングの練習においては有利になる側面もあります。よく聞かれるのは、Cを学ぶことでコンピューターの動作を理解できるという類の文句です。これは誇張されています。コンピューターはそんなに単純ではありません。確かに、アセンブリのコードをみることでCPUのステップを目にすることが出来ますが、それだけでは何もわかったことにもならないし、実際やってみたらわかった気にもなれないことでしょう。ただし、Cを知らずしてコンピューターを理解する((そんなことが本当に可能であるのならという条件の下で))のは難しいというのはあっていると思います。コンピューターそのものを学びたいからCを選ぶというのはそれほど的外れではないように思います。そのためのCをベースにした大量の情報やソースコードに自由にアクセスできる状況が後押しをしています。 | ||
+ | |||
+ | もっと実用的な側面を見ると、Cは他の言語との橋渡しをする仲介役としての役割もあります。例えば、英語のような役割です。本気でプログラミングをするなら実用的な面からも学んでおくことは必要です。いずれ学ばないといけないなら、最初から学べばいいじゃないか、というのもありです。 | ||
+ | |||
+ | また、[[wpjp> | ||
+ | |||
+ | 初めてプログラミングをするもっとも多くの人が関心があるであろう、アプリケーションのプログラミングについては微妙な感じがします。ハードウェアを制御するアプリケーションなどを除くと、通常はそこまで低レベルである必要がないからです。もちろん出来ないわけではなく、実際、伝統的なUnixプログラムの多くがCで書かれています。Win32 APIと呼ばれるWindowsアプリケーションのもっとも基礎となる機能もCによって提供されています。それどころか、数え切れないほど多くのアプリケーションがCで書かれ、またAPIと呼ばれるライブラリのインターフェイスがCによって提供されています。だからといって、現代でCでアプリケーションを書くのが良い選択であることは意味しません。 | ||
+ | |||
+ | 難しさという点から見てみると、Cの言語そのものは決して難しくありません。ただし、流行している言語に比べるといくらかコンピューターへの適性が必要とされる部分はあります。その原因は、開発ツールなどが統一されていないなど表面的な問題もありますが、最終的には低レベルであることに集約されます。低レベルであるために、そうではない言語だったらユーザーから隠してしまうようなことがもろに表に出てきます。これは必ずしも悪いわけではなく、CPUやメモリへのアクセスがコードとして目に見えることになり、意図的にそうしたい場合があります。システムプログラミングやハードウェアの制御を行う場合に必要なことです。 | ||
+ | |||
+ | 総合的に判断すると、コンピューターが大好きな人にはきっとしっくりくる言語です。Linuxユーザーは好き嫌いに関係なくいずれは学んでおかないといけないので、最初に選択しても良いのではないかと思います。初めてプログラミングに触れる領域がシステムプログラミングであるということは考えにくいので、もしそうなら考え直すべきで、あまり気にしなくて良いと思います。Cは重要視される傾向にある言語だと思います。実際にそうだと思うところも多々あります。もし本気でプログラミングをやっていこうと思っているなら、Cを全く知らないままでいることは難しいです。それが最初の言語かそうでないかの違いだけです。 | ||
+ | |||
+ | |||
+ | ===== BASIC ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | |VBA | ⭐⭐☆☆☆ | | ||
+ | |VB.NET | ⭐⭐⭐⭐☆ | | ||
+ | |Small Basic | ⭐⭐⭐⭐⭐ | | ||
+ | |その他のBASIC子孫 | ⭐⭐⭐☆☆ | | ||
+ | |||
+ | [[wpjp> | ||
+ | |||
+ | BASICの子孫のほとんどは現在ではすっかり存在感をなくしてしまった感じはあるのですが、ある特定の領域で揺るぎない地位を確立しているものもあります。特に、Microsoft Excel用のプログラミング言語である[[wpjp> | ||
+ | |||
+ | VBAに続いて現在でも広く使われているBASICの子孫は、同じMicrosoftによるVB.NETでしょう。これはVBAと違って特定領域ではなく、汎用的な目的のためのプログラミング言語です。もともとはVisual Basic (VB)という名前で、Windowsアプリケーションの開発言語として、広く普及していたものでした。2000年代初頭に.NETに対応させるために、大幅な変更を加えてVisual Basic .NETと名前を変えました。もはや別の言語と言っても良いくらい大きな変更でした。このとき、旧VBユーザーはVB.NETへの移行を余儀なくされました。旧ユーザーの誘導と新規ユーザーの誘致はまずまずうまくいって、決して少なくないユーザー数を獲得していたと思われます。しかし、現在ではMicrosoftはVB.NETにはあまり熱心ではありません。代わりにC# | ||
+ | |||
+ | Microsoftは、VBAとVB.NET以外にも[[https:// | ||
+ | |||
+ | [[http:// | ||
+ | |||
+ | BASICのこのような現状を踏まえて、初めて本格的に学ぶ言語に向いているかを検討してみます。 | ||
+ | |||
+ | まず、VBAを考えてみると、言語そのものについてはそれほど難しいものではありません。オーソドックスな手続き型の言語で、他のBASICの子孫とかけ離れたものではありません。しかし、Excelを操作するという目的のためにプログラミングをしないといけないため、実際のプログラミングはなかなか煩雑なものになってくる傾向にあります。VBAのための開発環境であるExcelのVBAエディタも、初めてプログラミングを学ぶにしては煩雑なものです。VBAを学ぶときの混乱の元となるのが、どうしたいかばかりに気を取られてしまうことです。その結果、VBAの言語について全く学ばずに、こう書けば動くとだけしか覚えようとしない方向に傾いてしまうことがあります。これはプログラミングを学んでいることにはなりません。最初の言語としては悪影響でさえあるでしょう。当人の姿勢が悪いとは言い切れません。VBAの存在理由を考えれば、何をしたいかが先に来るのは自然なことで、VBAを利用する人の多くがプログラミングを学びたいわけでではなく、仕事をこなしたいだけです。この状況は学習資料の傾向にも表れていて、本屋に並んでいる本のほとんどがVBAの言語の基礎をおろそかにして、その場しのぎの断片的な情報を載せただけのものになっています。もし、就労先で必要に迫られてやらないといけないとなったら、そうせざるを得ないところがあります。この場合、向いているかどうかを考える余地もないように思えます。ですが、十分に時間が与えられたなら、そうあるべきなのですが、やはりちゃんとVBA言語の基礎からちゃんと学ぶほうが良い結果に繋がります。問題なのはプログラミングを学ぶための良い資料が見つかりにくいことと、Excelにまつわる煩雑さが表に出るため集中力を乱されやすいことです。もし、必要に迫られているわけでなければ、VBAから始めるよりもVB.NETの方が良いです。Small Basicはもっと簡単で良いです。 | ||
+ | |||
+ | VB.NETは、.NETへのフルアクセスが可能であり、本格的なプログラミングに耐えうるものです。その反面、シンプルな言語であると言えません。見た目は確かにBASICの雰囲気が漂っています。BASIC言語の特徴は、できるだけ記号を使わずに、英語でプログラムの構造を表現しようとするものです。VB.NETは数多くの機能を備えているため、その分だけ英語のキーワードが存在することとなりました。英語がネイティブの人にとっては、直感的でフレンドリーな感じになるのでしょうが、そうでなければ本来の恩恵を受けることが出来ないのが辛いところです。加えて、VB.NETの言語を学ぶためのガイドとなる資料で良質なものが少ないのも辛いところです。そうであってもVBAよりVB.NETの方が良いと思える理由は、VBAのようにデタラメにプログラミングしてもなんとかなってしまうようなものではないからです。わりかしちゃんと言語の基礎を身に付けていないと、思うように動作するプログラムをつくるのは難しいです。否応なしに言語を学ぶことが強制されるので、プログラミングを学ぶという貴重な体験をスキップしてしまうような、間違った方向に進んでしまう事態を防ぐことが出来ます。 | ||
+ | |||
+ | Small Basicは、プログラミングの学習を目的として提供されています。あくまで学習が目的であるので、本格的に学ぶという趣旨とは少し外れるところもあります。しかし、VB.NETは覚えることがたくさんありすぎて負担が大きいように感じられるなら、その前にワンクッション挟むのは非常に有効です。MicrosoftもVB.NETの学習が大変であることを認識してるからこそ、BASICを基礎にした学習用の言語を作ったのでしょう。Small Basicの言語のルールはVB.NETと全く同じではないですが、似ているところがたくさんあります。学習用の環境で十分満足した後、本格的にVB.NETに取り掛かるときの負担は激減するし、VBAの場合もいきなり始めるよりはずっと正しい道を歩むことができるようになるはずです。もしVBAかVB.NETを最初の言語として考えているのであれば、その前段階の言語としてかなりおすすめできます。 | ||
+ | |||
+ | その他のBASIC子孫の言語は日本語の情報が極端に少ないので、英語に問題がない場合だけの候補となります。 | ||
+ | |||
+ | ===== Lisp ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | [[wpjp> | ||
+ | |||
+ | Lispには数多くの子孫が生み出されました。Lisp界隈では子孫と呼ばずに、方言 (dialects)と呼ばれるのが通例です。特に、[[wpjp> | ||
+ | |||
+ | ===== C++ ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | [[wpjp> | ||
+ | |||
+ | C++はプログラミングスタイルについて寛容的で自由度が高いです。様々なスタイルのプログラミングが可能です。これは基本的には良いことなのですが、まだプログラミングを始めたばかりの時期には、どうやって書くのが良いのかを自分で見つけ出していかなければならず、苦労することになります。それにこれには決まった回答がありません。何年経験を積もうが、良いプログラミングスタイルはどうあるべきかは追求し続けなければなりません。しかし、最初の段階でそれをやらされるのは、何を書いても一向に満足するものにならず、大変に感じられる要因となります。 | ||
+ | |||
+ | 2011年以降、3年おきに言語仕様が更新され続けています。この方針は今後も続くので、C++ユーザーはそれを追いかけていかなければなりません。いろいろな意見がありそうですが、個人的には苦痛ではなくて、言語も良い方向に向かっているように感じています。学習しやすさという点でも、2011年より前の状態よりもずっと整備されていて良くなっていると思います。 | ||
+ | |||
+ | C++はCを基礎として作られていて、Cのかなりの部分と互換性があります。つまり、Cで書かれたプログラムがそのままC++として使える可能性が高いことを意味します。そのため、CとC++の相互運用性は他の言語と比べて圧倒的に高く、C++の大きな強みの一つとなっています。 | ||
+ | |||
+ | C++はCを基礎にしているのだから、C++の前に先にCを学んでおいたほうがいいのか、ということを疑問に持つかと思います。これは一概に言えないところだと思います。人柄にもよります。自分の場合は、最初C++に手を付けて、さっぱり分からなかったのでCをやることにしました。しかし、今思うと、これはただ使用していた資料がCを学んでいることを前提にしたものであったからに過ぎません。なので、もし今使用している資料がCを前提にしているものであれば、Cを一度学んでからにしたほうがいいでしょう。ただし、これからC++を始める人のための資料で良質なものは、ほぼすべてがCの経験を問わないものになっているように見受けられます。いずれにしても、C++を使っていくのならどのみちCの大部分は把握した上で実際に活用していかなければならないので、Cを学んでも無駄になることはまずありません。 | ||
+ | |||
+ | C++を覚えるといろいろと良いことがあります。だからといって手放しでおすすめできるかと言うと、個人的な経験からはそうは言えないところがあります。C++を学び始めてから、ちょっとだけ書けるようになるまですごく時間がかかりました。最初にC++を学び始めてから10年くらいは何も書けずにいたと思います。ひたすら本を読んでサンプルプログラムを書いて、という日々を繰り返していました。傍ら、ごく短期間で学んだ[[wpjp> | ||
+ | |||
+ | ===== JavaScript ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | [[wpjp> | ||
+ | |||
+ | JavaScriptは実質、Webブラウザが解釈して実行できる唯一のプログラミング言語です。最近人気を集めているTypeScriptは、トランスパイラと呼ばれ、TypeScript言語で書かれたプログラムから、JavaScriptのプログラムを生成します。WebでJavaScript以外の言語を使用したいと言った場合、こういった手法がとられます。最終的にはJavaScriptのプログラムになることから、やはりJavaScriptについて知っていないと難しい状況にあります。 | ||
+ | |||
+ | JavaScriptはWebブラウザのための言語として登場しました。そのため、JavaScriptを学ぶにはWebブラウザの環境の中でプログラミングをしなければなりませんでした。これはやや特殊なプログラミングスタイルであり、伝統的なものとは違うので、これで本当にプログラミングの基礎が学べるのか疑問なところもありました。Webブラウザの環境でプログラミングを学ぶのが悪いわけではないのですが、VBAのときと同様に、何をしたいかばかりに気を取られて言語の基礎を学ぶことがおろそかになってしまう危険性があります。またJavaScriptだけを学ぶことは不可能であり、HTMLやCSSを同時に学んでいかなければなりません。その結果、本筋からそれてしまうことがあり、人によっては効果的でも楽しくもない体験になる可能性が大いにあります。現在では、Node.jsに代表されるWebブラウザを必要としないJavaScriptの実行環境も普及していて、これらを利用すれば伝統的なスタイルでプログラミングを学習することも出来ます。 | ||
+ | |||
+ | JavaScriptの言語に目を向けると、多くの言語が採用しているのとは違ったやや癖のある性質があります。その性質は決して悪いものであるというわけではなく、JavaScriptを良い言語として特徴づける優れた性質のものでもあります。しかし、以前のJavaScriptではその性質についてしっかり理解していないといけなくて、最初の言語として気軽に始めるにはあまり適切ではないように思えるところがありました。現在では仕様が改定され、とりあえずはそれらの詳細について知らなくても書けるような、直感的に扱える言語になってきています。したがって、とても学びやすい言語になっています。 | ||
+ | |||
+ | Webブラウザの環境で良ければ、プログラミングを学ぶための追加のソフトウェアをインストールする必要がなく、すぐに試してみることが出来るのも大きいです。Webブラウザの環境で試してみて、本格的に学びたいとなったらNode.jsをインストールすれば良いだけです。 | ||
+ | |||
+ | これらを総合すると、JavaScriptは最初の言語にとてもおすすめです。Node.jsがあれば伝統的なやり方でプログラミングを学ぶことも出来るし、Webブラウザ環境で視覚的な効果を得ることの出来るので、少ない労力で比較的大きな達成感を得ることも出来ます。実用的な側面からも、Webプログラミングをメインに見据えているならもちろん、そうでなくても、多少はWebについて知っておくことは普通は必要です。学んだことが無駄になることは決してありません。 | ||
+ | |||
+ | ===== Python ===== | ||
+ | |||
+ | おすすめ度: | ||
+ | |||
+ | [[wpjp> | ||
+ | |||
+ | 以上は、Pythonを選択してもよいかどうかの唯一の懸念材料です。Python自体は初めて学ぶのに決して悪くない言語です。流行を過剰に警戒して、Pythonを選択肢から外してしまうのは慎重すぎると言わざるを得ません。AIプログラミングやデータサイエンスを本当に学びたいと思っているのならば、まず候補にあがります。それ以外の領域であってもそつなく仕事こなせます。Pythonのクリーンな性質は、言語の詳細を学ぶために費やす時間を減らしてくれて、より高度なプログラミングの概念や技術を学ぶためにその時間をまわすことが出来ます。このことを考えると、原因と結果を逆にみることができます。つまり、Pythonが学びやすい言語であるからこそ流行しているということです。 | ||
+ | |||
+ | ===== Ruby ===== | ||
+ | |||
+ | ===== Rust ===== | ||
+ | |||
+ | ===== JVM言語 ===== | ||
+ | |||
+ | ===== C# ===== | ||
+ | |||
+ | ===== Go ===== | ||
+ | |||
+ | ===== Lua ===== | ||