見出し画像

C言語学習の価値

苦しんで覚えるC言語(通称苦C) でC言語を今さらながらに学習している。

Cは私の場合、大学生時代に初めて大学で触った言語だ。しかし、私はこの時は変数代入の概念で早々に挫折し、「ポインタ?なにそれ美味しいの?」という有様で、試験は答えの丸暗記でほぼ通ったようなものだった。

その後、ほどなくしてプログラマのアルバイトの機会を得て、 Perl 、 JavaScript 、 PHP 、 Java と使うようになっていき、そこで、リファレンスの概念やオブジェクトの概念など(もちろん、変数代入も)を理解して、それなりにやっていけるようになっていった。 C言語のポインタも要はリファレンス(参照型)のようなものだろうという理解で片付け、その後も、Tcl/Tk、bash 、sed 、 awk 、Apex, node と使えるようになっていったが、頑なにC言語は回避してきた。それほど学部生時代の印象が最悪だったのだ。

しかし、このタイミングで C を私は学習している( C++ でも C# でもない C だ)。それは何故か? 

一つには、 C を使うことでコンピュータが扱えるのは数字だけだということを身に染みて感じるため。一つには、メモリの使用イメージと管理の方法を習得するため。一つには、Cで書かれているオープンソースのコードを読めるようにするため。一つには、ソートをはじめとした基礎的なアルゴリズムを習得するため。

要は、一つ上のレベルのプログラマになるためだ。

各言語やライブラリは一枚皮を剥ぐと C の世界が広がっている(ことがままある)。本当にコアな部分は C で書かれているのだ。 だから、言語やライブラリの単なる利用者ではなく、開発にコミットしたいと思ったら C を知らないわけにはいかない。

そして、Cを学習してみて得たメリットがもう一つある。それは、 C はコンパイル言語であり、コンパイルには時間がかかるため、コンパイル&実行する前に注意深く設計、実装をする習慣が身に付くということ。この習慣がないと Try & Error を繰り返して実装するスタイルになるが、一回あたりの Try にスクリプト言語よりもはるかに時間がかかるので、累計で多くの時間を使ってしまう。まぁ、この辺りのことは Java でも身につきそうなものであるが。。。。

私は、スマホアプリの開発には React Native を使うのだけど、スマホアプリの開発はまさにコンパイルの時間が必要で、それは時間のかかる作業であるため、注意深く設計、実装するスタイルは重要になる。また、JSON データの効率的な取り回しについても C の学習で得られることの恩恵は大きい。

リンカーンは言った。

もし8時間、木を切る時間を与えられたら、そのうち6時間を私は斧を研ぐのに使うだろう。

C の学習は、まさに斧を研ぐ行為だと思っている。

この記事が気に入ったらサポートをしてみませんか?