適当に楽しいことを書くブログ

とりあえず趣味っぽいことを書き連ねます

好きな(優れたというわけではない)プログラミング言語

2021-08-23 13:06:00 | 日記
この記事は私が完全なる独断と偏見により今まで触れてきたプログラミング言語の好みを語る記事である。

私が今まで触ったことがある(とりあえず何かしらの作業に使ったことがある)言語は、

  • C言語
  • C++
  • Java
  • JavaScript
  • Python
  • Processing
  • R
  • Haskell

くらいだろう。

機械語への近さという観点で並び替えようと思ったが概ね上にあげた順番くらいであることに気づいた。
C言語が最も機械語に近く、Haskellが最も遠い。
機械語に近いものほど人間の言語からは離れるが、機械の仕組みを知っている人間からすると処理の流れがわかりやすくなりやすい。しかし同時に、原始的な処理を1から書かねばならないため、高度な処理をしようとするとプログラムが複雑になりすぎたりする。


ちなみに、似ているもの同士をまとめると、

C++はC言語を拡張したものであるので完全上位互換である。

C++とJavaはどちらもオブジェクト指向である言語で、変数の宣言時に型の指定(その変数が数値であるとか、文字列であるとかを最初に決めておくこと)が必要な言語である。
少し前ならプログラミング言語といえばC++、Java、C#であったように、これらは結構似ているものである。

JavaScriptとPythonも結構似ているように思う。どちらもオブジェクト指向であり、その点ではJavaやC++と同じではあるのだが、こちらははるかに簡略化されている。変数宣言時の型の指定は必要ないし、何をするにもライブラリ(先人の知恵のようなもの)が用意されていて楽に(本当に楽かどうかはわからないが)実装できることが多い。しかし逆を言えば、何をやってるかわからないが結果が出る、みたいなことが頻発する。

RとProcessingは似ても似つかないが、ある特殊な目的に特化して使われる言語、という意味では似ている。
Rは統計などの計算に、ProcessingはCG制作に用いられる。
どちらの言語もそれ専用に非常に便利な関数などが用意されており、そのほかの言語なら複雑なプログラムが必要な処理を簡潔に書くことができる。逆に、それ以外のことは一切できないと言っても過言ではない。

最後にHaskellである。こいつが1番の曲者で、この記事であげた言語で分類するなら、HaskellとHaskell以外という分類ができるほどそれ以外とは違う。
その他の言語が手続き型(指示を羅列する)言語であるのに対し、Haskellは関数型(関数を主体としてプログラムを書く)言語である。
率直にいえば普通の人間には理解し難い言語である(個人の感想)。


さて、大まかにそれぞれがどんな言語であるかわかったところで、本題である私の好きなプログラミング言語ランキングの発表に移ろうと思う。

ランキングは以下の通りである。

  1. Java
  2. Processing
  3. R
  4. C
  5. Python
  6. C++
  7. JavaScript
  8. Haskell

ではそれぞれの言語の評価について述べていこうかと思う。

第8位 Haskell
Haskellはクソである。いや別にクソではないが、私は大嫌いである。なぜかというと死ぬほどわかりづらいからである。
序盤に機械語から遠い方が人間の言葉に近いなどと言ったが、あれは嘘である。Haskellは人間の言葉に近くなどない。Haskellは数学に近い。
あれは私の手に負えるものではない。

第7位 JavaScript
邪悪。
魔境といってもいい。
JavaScriptは主にWeb周りに使われる言語である。
Web周りは他の分野に比べて人口が多い。そして世の摂理として、程度の高い人間より低い人間の方が多い。必然的にWeb周りの検索結果はゴミである。
Web周りは環境の変化が著しい。そして皆がその時々のものの書き方を記事にして投稿する。必然的にいつのものとも知れぬ魑魅魍魎記事が無限に検索結果に現れる。しかもライブラリやフレームワークも無限にあるので検索結果は更に地獄の様相を呈する。
JavaScriptは初心者におすすめされることが多いが、学習難度はトップクラスであると思う。
私怨である。

第6位 C++
実を言うとC++はそこまで嫌いではない。
だがこの言語は言うなれば「改造を施されまくりにまくった結果めちゃくちゃに肥大化してしまった怪物」である。C言語にありとあらゆる多言語のエッセンスを加えまくった結果、全ての機能を把握することすら不可能な次元へ辿り着いてしまったのである。
「C++を完全に理解した」と言う人間は3種類である。
1、C++のことを全然わかってない人
2、C++に心折れ絶望した人
3、この世の真理を知りし者
である。

第5位 Python
昨今話題の言語であるように思う。それはAIや機械学習に多く用いられる言語であるからだろう。
正直特に欠点は無い。
唯一嫌いなところは他の言語では{}で括って深さを決めるところをインデントで決めることである。これが死ぬほど気持ち悪い。気持ち悪いが、全く使えないわけではないのでこの順位である。

第4位 C言語
シンプル イズ ベスト。
ポインタなどは全くの初学者からすると地獄のシステムであるが、意味と理屈さえわかってしまえばいこれ程卸しやすい言語もそうは無いだろう。
プログラミングをこれからしっかりと始めてみたい、その覚悟があると言う人にはC言語をお勧めする。(機械学習をやりたいとかならPythonを勧めるが)
唯一にして最大の欠点は機能がかなり少ないことである。
配列周りなどはかなり脆弱である。
この記事で挙げた言語の中で、配列の最後尾に新しい要素を追加する機能が存在しないのはCくらいなものである。
自作すれば作れないことはないが、それをするくらいならC++を使えばよい。

第3位 R
Rは統計処理特化の言語である。行列計算だとか、平均や分散を求めてみたり、回帰や分類を行ってみたり、データをプロットしたり、そういう処理がとても簡単に実行できる。
逆を言えばそれ以外のことは碌にできないのだが、出来る必要もないのがこの言語のいいところだと思う。
目的から手段が明瞭で、迷うことがないのが良い。
そして何より、Rを使うような人間は統計を学ぶ人間くらいであるので検索汚染がほぼ皆無であるという点も特筆に値する。

第2位 Processing
こちらはJavaベースのCG特化言語である。
こちらもCG以外に出来ることはないが、CGはかなり手軽に描ける。
もし、ちょっとプログラミングしてみたいな、という人にどれか一つ言語を進めるとしたら、私は一番これがオススメである。
というのも、どんな言語より手軽に目に見える見栄えの良い絵が描けるからである。
他の言語でウィンドウに画像を表示させようとすると結構苦労するのだが、Processingならちょちょいのちょいである。
超オススメ。

第1位 Java
無難。
大体のことはできるし、気持ち悪いところも特にないし、難しすぎないし、簡単すぎない。
どこでも動くのもいい。
初手でこれを学ぶのはヘビーだと思う。
プログラミングをガチでやりたい人が、C言語を学んだ後学ぶ言語である。多分。
Windowsで動くソフトさえ作れればいいやという人はC#の方がオススメである(ちなみにC#はC系とはあまり関係がなく、むしろJavaに近い)。

以上、好きなプログラミング言語ランキングである。

以下、余談。
どのプログラミング言語を学ぶべきかをフローチャート的に示す。

Q1.何か目的がある(例:機械学習がしたい、ゲームが作りたい)
Y→ Q3へ
N→ Q2へ

Q2.ガチでプログラミングをやる覚悟の準備ができているッ‼︎
Y→ C言語を勉強しましょう
N→ Processing楽しいよ

Q3.やってみたいのは
web周り→ JavaScript(+HTML,CSS)
機械学習・AI→ Python
スマホアプリ→ Java(Android) Swift(iOS)
PCゲーム→ Java, C#(Windows), C++
その他→ 頑張って自分で調べて

Macbook Airを2ヶ月ほど使って

2021-08-09 11:26:56 | 日記

私は生粋のWindows信者である。

Windowsこそが至高でなくとも最善のOSであり、Macを使う人間は意識高い系か変なものが好きな人間であると思っている。

そして私は変なものが好きなので、Macbook Airを買った。

 

というのは半分ほど嘘が含まれているが、すくなくとも私は今までの人生の殆どでWindowsを使ってきたし、これからもWindowsを使い続けるだろう。

ではなぜMacbookを買ったのかと聞かれれば、私は新しい物好きだからである。Apple謹製のCPUが搭載されたPCなど興味がわかないほうがおかしいだろう。(まぁ実際のところMacには前々から興味があったのでそれだけが理由ではないのだが)

ちょうどよくこれまで使っていたWindowsノートPCがお亡くなり(使えなくはないが)になったので、性能的にコスパが良いと言われるM1搭載Macbook Airを買うのも良いだろう、となったのである。

 

私は今自室ではWindowsデスクトップ、出先ではMacbook Airを使用している。

WindowsとMacのどちらを買うべきか、悩む人も多いだろう。

結論から言えば、どちらも一長一短であり、どちらが優れているかと言うのは一概には言えない、ということである。

 

よく、Macは対応するソフトが少なく、Windowsより汎用性が低いといわれる。

これはまぁ事実であるが、実際のところ対応してないソフトを使わないならばなんの問題もないことだ。

少なくとも、勉強目的程度のプログラミングをしたり、LaTeXでレポートを書いたり、ブラウザで動画を見たりする程度ならばなんの問題もない。

 

ただし、ゲームに於いてだけは話は別である。

Mac、とりわけM1搭載機に言えることだが、対応しているゲームは皆無と言っていい。

ゲームをしたくてPCを買うならば、Macは絶対にやめるべきである。

その点は、明瞭にMacがWindowsに劣っている点である。

 

ところで、MacBookを使う人間はよく「マウスはいらない」という。

これは真実である。

このトラックパッド、かなり優秀である。というか、トラックパッドをうまく使えるようにOSがデザインされている。

 

Windowsでのウィンドウの最大化と、Macでのウィンドウの最大化は別の概念である。

ウィンドウを2つ同時、あるいは複数同時に扱うという状況ではWindowsの圧勝である。

Windowsのウィンドウの最大化は、御存知の通り大きさが最大になっているだけなのだが、Macでウィンドウを最大化するとそれ単独のデスクトップが新しくできるような感じなのである。

Macの最大化では、最大化しているソフトの上に別のウィンドウを開くことは出来ない。Windowsのような画面も存在してはいるが、ウィンドウの大きさ変更がしづらいので、複数のウィンドウを使うのは大変である。iPadのようにSplit viewを使うこともできるが、左右分割しか出来なくて使いづらし、ウィンドウの移動も不自由で微妙である。

 

しかし、ソフトが単独で一つのデスクトップを作るメリットも有る。

このデスクトップは3本指スワイプで切り替えられるのだが、何かを見ながら文章を書く、というようなときに絶大な効果を発揮する。

Windowsではタスクバーのアイコンをクリックしてべつのウィンドウを開くかなければならないとき、Macならちょっと指を滑らせるだけで切り替えられるのである。

このメリットは画面が2つあれば消え失せるが、出先用のノートPCではそうもいかない。

調べ物をしながらプログラムを書くという作業も大変スムーズになる。

 

そしてなによりも素晴らしいのは、他のApple製品との親和性である。

スマホのSafariでみていたサイトのURLをコピーしたら、そのままMacで貼り付けが出来たときには戦慄した。

特に設定をするでもなくiPadをサブディスプレイとして使用できたときにはこれがAppleの力か...と打ちのめされた。

AirDropの便利さはiPhone-iPadで知っていたが、これをノートパソコンとできるのはやはり便利であった。

 

それから、使い勝手とは少し違うが、Macは画面が綺麗である。これは新し目のiPhoneなどの画面を見ればわかることであるが、なんとなく嬉しい。

 

というわけで、初めて使ったMacbookの感想としては、ノートパソコンとしてはかなり便利であるが、デスクトップで使いたいとは思わない、というところである。

MacBookは、PCとiPhoneの間の子のような存在であるという認識でいいだろう。

Macとは、「Appleが求めるiPhoneのような手軽さと美しさ+iPhoneにないパソコンの使い勝手−Windowsのような泥臭い使いやすさ」によって作られたノートPCである。

 

感覚として、

PCらしい使い方: Windows >| ゲームの壁・普及率の壁 |> Mac >>>>>>>>>>>>>>>>>| 携帯端末とパソコンの壁 |>>>>>>>>>>>>>>>>>>> iPad >>>> iPhone :スマホっぽい使い方

という感じであり、Macはどちらかといえば携帯端末寄りなので、サブのノートPCとして使うにはいい感じであるが、万能ではない、というあたりが落としどころであるように思う。

 

Windowsを使える人間が戯れにMacを買ったとしても、多分後悔はしないだろう。