読者です 読者をやめる 読者になる 読者になる

C言語とは

まだ引っ張るのか、と言いつつ

C言語とは何か?
「僕にとって」
懐かしい故郷の様なもの。
メモリに関して色んな事を教えてくれた父親のような言語。
プログラムに関しての基礎的な考え方はC言語から学んだと言っても過言ではない。
そして失敗を赦さない頑固で厳しい言語。


ついでに言うとJavaは、クラスとかインターフェイスとか、
抽象化に関してとか、初期化とか、配列外アクセスとか、
父親が赦してくれなかったところにかんして、
色んな優しさを教えてくれた、
ちょっと失敗しても赦してくれる母親のような言語。
あと妙に貞淑。


Pythonはつきあっていると楽で楽しい。
何となく触りたくなるし、
触れていて嬉しさのある恋人のような言語。
まだまだよく知らないこともあるけど。


とか。
結構自分の中でも言語の立ち位置が違う。


odzさんやきむら(K)さんの指摘をうけて

でも、冷静に考えれば、それと「学習に向いているか」、「(ある面において)優れた言語か」というのは全然関係無い話だよね。

論理飛躍 - odz buffer

まず、C言語はすべての人に対しては「学習に向いていない」ということを考えた。
それは単体では非力であるから。
if、for、while、switchなどといった基本的な文法はさておき、
まず万人にとってはポインタの理解に障害がある。
配列の操作、文字列の操作、コンテナ、
ないしは描画命令、及びデータファイルの操作などがあまりに低レベルで、
それらを楽に扱うことはできないので「やりたいことによっては」学習コストが不毛である。


「そういう意味では」やっぱり常に最初に学ぶべき言語、ではないんだよな、と。
そして、高級なアセンブラとして扱うのでなければ決して優れた言語ではないということ。


ただ、よく「C言語は学んでみたい」という声をよく聞く。
少なくとも別の人物、四、五人から聞いた。(Javaとか別言語をやっている人から)
じゃ、どうして「C言語」を学びたいの?
ってきくと……「やっぱりC言語って基本だから」みたいな答えを聞いたりする。


Javaをやっている人がC言語を学んで何かメリットがあるだろうか?
とか考えてみた。


もしかして無い? のかなぁ。
もちろんC言語のソースを読みたいとか、Cのモジュールが書きたいというなら別なんだけど、
ポインタを学んでも(Javaなどを使い続けるなら)役にはたたないし、


ただし、コンピュータの仕組み(と厳しさ)を知るためには


JavaBlack氏の言う

  • 言語仕様がシンプルである.
  • 今現在も実用レベルの言語である.
  • 抽象化の度合いが低いので,内部実装に関する理解の程度が作ったコードの品質にダイレクトに出る.
  • 抽象化の程度が低く,ソースコードを追うことでノイマン型コンピュータの仕組みや動作を理解しやすい.
初心者向けの言語 - カレーなる辛口Javaな転職日記

は結構本質を捉えていると思う。
今時の言語しか使ったことがない人は、
抽象化されすぎた環境に慣れすぎてしまっているんじゃないかなぁ。
それ自体は悪いことはないんですけど。
楽をするために抽象化を進めてきたのだし。
ただ、今時の言語ではコンピュータの仕組みを知ることが難しいのは本当で、
Javaなどからいきなりアセンブリに降りていくのは困難を伴うだろうからC言語はその間の階層に位置して、
コンピュータに近づくための門戸として存在するのは適切であるようにみえる。


またid:m-matsuokaさんからもTBをいただいた通り、

パソコンの上だと、ユーザーに使いやすいように抽象化されたレイヤーの上でコンパイルしたバイナリを動かすことになるので、コンピュータを知らない人には具体的な原理が掴みにくくなっているのだと思います。

C言語は簡単なハードと組み合わせて学ぶのが良いと思う。 - プログラマーm-matsuokaの生存記録

コンピュータとの密接な関係を築くには必須とも言えるのかもしれない。


配列外(メモリの予期せぬ領域)に触ったり、
未初期化の変数に不意にアクセスしてしまったり、
0アドレスにアクセスしてしまってもウンともスンとも言ってくれない(ことがある)。
それがC言語
メモリも頭の中でどうやって使っているかイメージしないといけない。
それがC言語
ある意味、今使っている(C言語でない)言語がどういうレベルで抽象化しているのか理解が深まる。
それがC言語


あえて茨の道を進みたいMな人はC言語
深く深く潜りたいならC言語
メモリを触って痛い目を見たいのならC言語
面倒なくらいが好みならC言語


C言語学んだ方が良いよ、くらいの感触でC言語を学ばない方がいいのかも。
とにかく楽な方が良いです、という人はRubyとか。


と、あまりに引っ張りすぎたのでそろそろ自重します。