偏見と無知が炸裂するプログラミング言語とエディタ私感

BEEHIVE BLOG PREMIUM

というわけで自己満足の知識マウント記事を書いてみる。この記事で語っていることは全てオレオの妄想に過ぎないので、適当なことを言っていてもスルーしてもらいたい。

プログラミング言語私感

紹介する言語の選定基準は適当。

なんとなくしかわからない用語集:

用語名 解説
コンパイラ コードを実行する前に機械語などに変換するための物。変換処理自体をコンパイル・コンパイリングと呼ぶ。
インタープリタ 実行前ではなく実行中に随時、機械語への変換と似た様なことをやるもの。
コンパイラ言語 実行するにはコンパイラで先にコンパイルする必要がある言語のこと。実行中は機械語を実行していることになるため実行速度が速い。
インタープリタ言語 コンパイルしなくてもその場でインタープリタにより実行できる言語のこと。随時変換処理をするので総じて実行速度が遅くメモリも食う。遅いとは言ってもパフォーマンスが必要なものでなければ十分実用的な速度。
静的型付け それぞれの変数(情報を入れる箱)に入れられる情報の種類(型)をあらかじめコード内で一つ一つ宣言する形式のことを言う。記述は面倒だが厳格なシステムが作れる。コンパイラ言語はほとんどこの形式である。
動的型付け 情報の種類(型)を実行中にプログラムが推測して勝手に割り当てる形式のことを言う。記述は楽になるだが初歩的なミスが見つけづらくなる。インタープリタ言語はほとんどこの形式である。
高級言語 機械語を直接叩けない人間でも扱える程度に難しいプログラミング言語のこと。この記事で紹介するものは全て高級言語である。
オブジェクト指向 物を作成して操作する様なイメージの概念のこと。難しく考えずにこの指向・概念が取り入れられた言語は表現力が高いとでも思っておこう。
ガベージコレクター プログラムが実行中に随時確保していくメモリ上の領域の中でいらなくなった領域を勝手に開放してくれるもの。最近の言語にはほぼもれなく付いているから安心だ。
スクリプト言語 記述が簡単なプログラミング言語。インタープリタ言語の様なものとでも思えばいい。

C

歴史が長く実績も豊富で安定した静的型付けのコンパイラ言語。プログラミング言語にも時代のトレンドに応じた流行り廃りはあるものだが、Cは今でも一定のニーズを満たしている。汎用性が高く、ソフトウェア、システム、ハードウェア、ゲーム開発までこなせて、言語自体はほとんどのプラットフォームで動作する。また、実用的な高級言語の中では最速の処理速度を誇っている。OSの開発にも使われている。

Cだけだとわかりづらいので日本語ではC言語とよく言われたりする。

最近の言語にはほぼもれなく付いているオブジェクト指向やガベージコレクターといった要素がない。
それもあって言語仕様自体は意外とシンプルで、構文はやや取っ付きにくい上に色々と面倒くさいのは事実だが、ガッツリとプログラミングを始めたい人が初めて触る言語としては悪くない。ただしポインタとメモリ管理の概念がしっかりと理解できないと確実に死ぬので要注意。

逆にCが分かると、最近のプログラミング言語が裏で何をやってるかも分かるようになる上に、Cだけでも一応色々作れるようになる。さらにはCから派生している言語やCに影響を受けている言語を学ぶ時にもほんのちょっと楽だ。この辺からチクチクとプログラムを書いていくことが楽しいと思えるようになるのではないだろうか。

とはいえこの後に出てくるC++はCの実質上位バージョンだ。C++も勉強するなら似た様な内容を学び直す期間が長くなってしまうので、C言語自体はドットインストールでも見て手短に終わらせよう。
ドットインストール C言語入門 (全22回)

この記事は有料となっております。続きを読むには、BEEHIVE BLOG PREMIUMを購読(月額880円)してください。

続きを読む

C++

ようこそC++地獄

Cから派生したムキムキマッチョ版C言語。シンプルだった言語仕様はどこに行ってしまったのか。Cに詰め込めるものは全部突っ込んでしまえ、オブジェクト指向、スマートポインタ、テンプレートなどなど…C++という名にふさわしい拡張っぷりだ。いやいやそれだけじゃあない。C++03、C++11、C++14、C++17、様々なバージョンの違いも含めれば、その膨大な言語仕様を端から端まで理解した上で、それを全て完璧に使いこなすのはほぼ不可能に近い。

ガベージコレクターはないので相変わらずメモリ管理が必要。

一見ものすごく取っ付きにくそうに見えるこの言語は、意外と実行速度も派生元のCとほぼ変わらないし、汎用性の高さもそのまんまだ。さらには通常のCとの完全互換も備えている(つまりCのコードは全てC++でも動く)ので事実上Cの上位互換である。CとC++の両方が選択肢に入る段階でもうCのみを使う意味はあまりない。

まずはCの基礎を固めた上で、オブジェクト指向などの確実に恩恵を受けられるところから始めていこう。逆に言えばCをある程度理解してないとC++は到底無理ということでもある。

ロベールのC++教室
ちゃんとやるなら書籍からいってもいいだろう。
ロベールのC++入門講座 | ロベール |本 | 通販 | Amazon – アマゾン

C#

Microsoftが考えたさいきょうのC++。のように見せかけたDelphi。JavaとC++のいいところどりをして出来たC#はVisual Studioとの相性がいい。というよりVisual Studio専用といっても過言ではない。

Javaの影響を受けているので、Javaと同じくインタープリタ・コンパイラというインタープリタ式でもコンパイラ式でもない形式で、.NET(JavaはJVM)というバーチャルマシン上で動作する。つまりC#のコードは.NET用のマシン語にコンパイルされ、.NETがインタープリタのようにそのマシン語を解釈するということ。

…ほとんどWindowsでしか使われていないのでマカーにジョブチェンジした私にこれ以上言えることはない。

Java

30億のデバイスで動くプログラミング言語。
30億のデバイスで動いて客先のPCで動かないプログラミング言語。

C++のオブジェクト指向の概念を引っこ抜いて出来たJavaは、C++より圧倒的に取っ付きやすい言語だ。オブジェクト指向さえわかればあとは心配いらない。Cを拡張してオブジェクト指向化させたC++とは違い、最初からオブジェクト指向を意識して作られた言語なので、オブジェクト指向のものが書きやすい。気がする。

C形の言語にも引けを取らない人気の言語で、歴史も実績もある。汎用性もプラットフォーム対応も問題ない。C->C++と行くぐらいなら最初からJavaを書けるようになった方がいいかもしれない。

AndroidのアプリはJavaでできているので、Androidアプリを作りたい人はJava一択。

Java 入門

Objective-C

よくAndroidと比較されがちなiPhoneで動くiOSのアプリは、数年前までこいつで動いていた。実は私が割とはじめの方に触れた言語の一つでもある。用途は色々だが、実際の所はiOSとMacの標準開発言語としてでしか使われていない。

C++がCを直接拡張してオブジェクト指向をとっつけた言語であるならば、Objective-Cは「通常のC」と「C製のオブジェクト指向を再現したシステム」を一緒にしたようなもので、同じオブジェクト指向を持つC系言語でもC++とObjective-Cでは使い勝手は全く違う。

まずメソッドの呼び方がまったく違う。あと@と[]がめっっちゃうざい。あとメソッドがめっっっちゃなっっがい。ゴミ。うんち。

C自体をを直接強化して出来ているC++とは違い、Objective-CはCとObjective-Cの間で「C製のオブジェクト指向システム」というある種のインタープリタのようなものが挟まっている感じ。とはいえコード自体は普通にコンパイルする形式なので、動作速度はCやC++に劣るものの、バーチャルマシン上で動作するJavaやC#よりはそれなりに速い。Cのコードはそのまま動く。

Swift

Objective-Cに見切りをつけたAppleが考えたさいきょうのモダン言語。

時代遅れ感の出ていたObjective-Cとは打って変わってちゃんと今時のモダンな言語になっている。

Objective-Cよりも(ごく僅かだが)速いし、Optional Typeでnilに対するメソッドコールがなくなるし、型推論があるし、Extensionもいい感じだ。ライブラリがまだまだ足りない感じなのでちょっと厳しいが、これだけでも十分ありだ。

Objective-C製のiOS/MacアプリのSwiftへの移行は少しづつだがちゃんと進んでいるし、新たに開発する場合の言語はほぼSwift一択なのでは。

これは図解付きでとてもわかりやすい。
誰でもわかるプログラミング入門を目指し隊〜Swift編〜

Kotlin

小鳥みたいな名前がかわいい言語。

Javaとの完全互換性を持ったAndroidの次期標準開発言語(?)ということしか知らない。

JavaScript

Javaの子孫のような顔をしているが、実は全く関係のないスクリプト言語。

ここ最近では世界的に圧倒的な人気を持つ言語の一つだが、日本国内でJavaScriptを書くと(特に無限ループ)もれなく兵庫県警に逮捕されるので要注意だ。


……

世のウェブサイトの動的な部分はほぼ全てこいつで動いている。個人的にスクリプト言語は大好きマンだけどこいつだけは何故かあまり好きになれない。けど選択肢はこれしかない。そんな言語。

基本的にはブラウザで動く言語だが、Node.jsとかでサーバーサイドの言語としても使えたりする。ElectronやCordovaなどのデスクトップ/モバイルアプリの顔をしたウェブサイトという形でクロスプラットフォームなアプリを単一のソースコードで書けてしまうものも出ていてなんかすごい。ちなみにDiscordのデスクトップアプリはそのElectronを使って開発されていたりする。

コールバック地獄H E L L。Promise地獄H E L L

ドットインストール はじめてのJavaScript

Dart

Googleが考えたさいきょうのJavaScript。になる予定だったもの。

「JavaScriptがいろんな意味でアカンから自分たちでJavaScriptの代替言語を作ろう」というコンセプトで開発されたDart。いよいよ本命のChromeでDartを動かせるようにしようという段階まではこぎつけたものの、Mozilla/Microsoft/Apple等の主要ブラウザ開発元がDart対応を渋り、泣く泣く白紙にされた可哀想な子。

今ではブラウザ統合を諦めて別の方向性に向けて再スタートしている。

TypeScript

Microsoftが考えたさいきょうのJavaScript。JavaScriptのコードへコンパイルされる静的型付けなJavaScriptである。

以上である。

Ruby

世界的にも有名な数少ない国産のスクリプト言語。汎用言語だが大抵の場合はRuby on Railsを使ってウェブサービスを動かしてる子。

文法の自由度はすごく高い。メソッドを重ねてなんでも1行で書いてスマートに書けた様な気になれる言語(違う)。チクチクとプログラムを書いていく言語があるとするなら、こいつはガツガツと書いていく言語。

国内発ということもあって日本語の情報は豊富。国内の人気もそれなりに高い。初心者の人はこの辺の言語で始めるのが多分一番挫折しにくい。兵庫県警に逮捕される勇気があるなら実行環境(ブラウザ)がすぐそばにあるJavaScriptとかでもいいぞ。

これはインタープリタの宿命でもあるが、処理速度が遅くてメモリをバカ喰いするイメージが頭から離れない。次のメジャーアップデートであるRuby3.0では2.0の3倍速くなるらしい。ほんとぉ?

無難。
たのしいRuby 第5版 | 高橋 征義, 後藤 裕蔵, まつもと ゆきひろ |本 | 通販 | Amazon
こっちも良さそう。
3ステップでしっかり学ぶ Ruby入門 | WINGSプロジェクト 竹馬 力, 山田 祥寛 |本 | 通販 | Amazon

Python

人工知能や機械学習系で有名になったスクリプト言語。処理速度が求められそうな機械学習系でなんでわざわざスクリプト言語を?と思うかもしれないが実際の機械学習の処理は当然もっと速い言語で動かしていて、そこをPythonで操るような使い方をするらしい。

慣れてる人にとっては書きやすいのかもしれないが、個人的にはインデントでブロックを指定する構文が気持ち悪い。普通にブロックを閉じさせてくれ。

来年サポートが終了されるというのに今だにpython2と3のコマンドの両方が存在するのも気持ち悪い。プログラミング言語が後方互換を捨てたアップデートをするとこういうことになるんだね。

PHP

マイナーバージョンが一つ上がるだけで前のバージョンのコードが動かなくなるスクリプト言語。プログラムを組むというよりバージョン対応をする作業。

Rubyと同じようにウェブサービスの開発によく使われている。Rubyは汎用言語だがこいつはウェブに特化している。WordPressとかもPHPで動いている。

Perl

テキスト処理に強く、歴史もある安定性の高いスクリプト言語。なんかCっぽいけど結構書きやすい。

Ruby、Python、PHPなどに影響を与えた言語でもあるが、そんな子分たちとは違ってこいつは後方互換をめちゃくちゃ大事にする。基本的に古いバージョンのコードは新しいバージョンでも大体動く。最新バージョンのPerl6でこそまるで別の言語のように生まれ変わっているが、Perl6はPerl5と並列して開発され、ある意味で別の存在として扱われている。

Lua

NScripterを拡張するためのスクリプト言語(違う)。

Haskell

プログラムが書きにくくなりそうな言語。

俗に関数型言語と言われる様なやつで、オブジェクト指向が物の単位を作成して対象を操作するイメージなら、こいつはデータを直接操作する処理を積み重ねて実装する様な感じ。実は自分もよくわかっていない。

なんか怖そう。

Go

Googleが考えたさいきょうの社内プログラミング言語(?)。面白いロゴとは裏腹に面白みがないことが特徴である。

Google社内における大規模開発に使用するために開発された(??)言語であり、難解な仕様を排除することでGoogleの新しい人材に難しいことを教えなくても、そいつらをプロジェクトの即戦力にできる様に(???)に開発された言語でもある。

コンパイラ言語でRubyとかよりは速いし、それでいてC系の言語ほどコンパイルに時間もかからない。らしい(よくわからない)。覚えるのは簡単だがそれ以上にもそれ以下にもなれなさそうな言語。例外やテンプレートもないくせに妙にハマりどころが多い。

Rust

Mozillaが考えたさいきょうのシステム開発言語。CやC++をかなり意識した言語ではあるが、それらとほぼ匹敵する速度を持ち、ガベージコレクターがなくても高いメモリ安全性を持っていたり、パターンマッチがいい感じの進んだ言語。

Firefoxの新エンジン開発で今まさに使われている言語で、Rustのもう一つの特徴である並行性の強さが存分に発揮されている。

Crystal

コンパイルができるRuby。コンパイル言語とスクリプト言語のいいところだけを合わせた様なずるい言語。公式のスローガンは「Fast as C, Slick as Ruby」で、「Cのように速く、Rubyの様に巧み」という意味。

実際に構文と標準ライブラリのメソッドはRubyをほぼ100%と言っていいほど真似している。静的型付けなので流石にRubyのコードが全てそのまんまCrystalで動くわけではないが、型推論があるのでごくごく簡単なものならRubyのコードがそのまんま動いてしまう。それでいて速度はCよりちょっと遅い程度である。

とりあえずさっさと1.0を出してWindowsとWebAssemblyに対応してくれ。

エディタ/IDE私感

プログラムのコードを書くなら何かしらのテキストエディタかIDEが必要だ。俺はメモ帳で書くんだ、と言う強い意志があるのならそれでも構わないが、プログラミングを仕事、もしくは趣味にしている人ですらメモ帳だけでプログラムを書いてる奴は一人も居ない。

どうせすぐ飽きてしまう、挫折してしまうだろう、と言う人でもとりあえず何かしらのエディタは持っておこう。どれも大差はないのでなんでもいい。

エディタとIDEの違いだが簡潔に言うと、エディタはコードの編集だけができるもので、IDE(綜合開発環境)はエディタの役割と+αで例えばWindowsのアプリならその開発に必要なツール(UIを設計したり)を全てまとめたりしているものだ。IDEは基本的に十数GB以上はするので、とりあえずプログラミングに触れるだけならエディタで十分だ。というよりIDEは基本何かに特化している物なので、誰しもメインのエディタは別に持っているはずだ。

ここに、近年で実用的に使えるメジャーなエディタやIDEをまとめてある。

Xcode

Appleが作ったObjective-CやSwiftを使ってiOSやMacのアプリを開発するときに絶対に必要なIDE。これがないとUIの設計もテストもアプリの公開もまともにできない。iOS/Macのアプリ開発以外にも一応CやC++などを使ったコマンドラインツールなどを開発できるが、それなら普通のテキストエディタを使ってコンパイルはコマンドを打ってやったほうがいい。

Macにしか対応していないので、WindowsでiPhoneのアプリを開発したい人は素直にMacを買おう。

Visual Studio

Microsoftが作ったC/C++/C#とかを使ってWindowsアプリとかを開発できるIDE。Xcodeよりもずっといろいろなことが出来る印象。

Mac版もあるが、開発できるものは限定的だ。

有償版と無償版があるけど機能の違いはほとんどない。

Sublime Text

特別目立った機能はないがシンプルで使い勝手のいいテキストエディタ。動作はとても軽快で、Windows、Mac、Linuxのどれでも動く。

拡張機能でさらに使い勝手を良くしたりすることもできるが、コマンドベースの操作が基本で、エディタ自体の設定はファイルを直接いじらないといけないのでややとっつきにくいかもしれない。

一応おすすめ。

Atom

GitHubが開発しているテキストエディタ。これも主要プラットフォーム3つ全てで動作する。

このテキストエディタの開発のために作られた、Electronというクロスプラットフォームなデスクトップアプリが単一のJavaScriptソースコードで開発できるフレームワークをオープンソースで公開されている。

実はこっちはあまり使ったことがない。

Visual Studio Code

先述のVisual Studioと名前がかぶっているが、同じMicrosoftが作っているテキストエディタ。Atomと同じくElectronで開発されているのでMac/Linuxでも動作する。

テキストエディタのスタンスは保っているがIDE的な要素も兼ね備えている高機能エディタ。語るより使ったほうが早い。おすすめ。

CotEditor

こっとえでぃた。かわいい。Mac専用。

なにがなんでもMacのネイティブUIでテキストエディタを使いたい変態向け。

Vim


GPL, Link

コマンドライン上で動作するエディタ。すべてをキーボード上で完結させたい変態向け。

おわり