2022年06月23日に初出の投稿

Last modified: 2022-06-23

C を初めて学ぶという方に強調しておきたいことが幾つかある。

まず、Google などで検索すれば即座に分かるとおり、C のチュートリアルや講義ノートの類は非常にたくさん公開されている。正直なところ、C は産業規格やコーディングの業界規範など形式的な制約とかベストプラクティスを除けば、教科書の冒頭にたいてい書いてあるようにコンパクトな道具であるから、道具の使い方を学ぶだけなら簡単であり、無数にある事例が示しているように、チュートリアルだって言葉さえ覚えたら幼稚園児ですら簡単な内容で書けるとすら言っていい。逆に言えば、オンラインでまともなリソースを見つけるのは逆に難しいとも言える。ノイズがあまりにも多すぎるからだ。特に、仕事の役に立つ知恵や技巧や考え方ともなると、昔から、そしてこれからもそうであるように、他人のコードや意見も参考にしながらなのはもちろんだが、結局は自分で考えるのがベストである。というか、「自分で考えるのがベストである」というスタンスを確立できるのが、仕事の責任をちゃんと取れるプロのエンジニアなのだ。

でも、そこまでのキャリアを積むのに実装経験が5年はかかると言っていい。この5年という時間は、僕らがウェブ制作の会社で組んでいる PHP や Python や JavaScript のような命令群(実は、あまり「言語」と言いたくない)のキャリアを積むのに想定できる3年という実装経験よりも長く想定している。なぜなら、C で書く案件が少ないために、3年を費やしても仕事として C を使う案件に(もちろん最初のうちはヘルプや助手として)取り組めるチャンスが少ないからだ。極端な場合、僕のように現在の会社へ入って15年ほどのあいだに C で実装した案件が1つしかないということだってある(某新聞社のサイトに表示するバナー広告を幾つかの中からランダムに表示するプログラムだった)。これでは実務経験と言うには貧弱すぎる。

したがって、仕事でなくとも実装経験を積むには、何らかのオープン・ソースのプロジェクトに参加するのが望ましいのだが、皮肉なことに実装経験のない人に任せてくれるプロジェクトがあるかどうかは疑問がある。すると、最後に残るのは、自力でオープン・ソースのプログラムを書いて衆目を集めることくらいだろう。だが、そんなものを衆目を集めるくらいのアイデアや実装スキルによって自力で書くにしてもキャリアが必要だ。というわけで、そもそも最初から C で実装しているシステムを運用したりメンテナンスする特殊な(利害関係や収益構造の)開発会社にでも入らない限り、十分な実装経験は5年でも難しいと思う。

とにかく、オンラインで C に関するリソースを眺めていると、日本語は言うに及ばず英語でも無数のガラクタやクズがウェブに撒き散らされている。はっきり言えば、MOOC だろうと個人が公開している教材や解説サイトだろうと、99% はロクでもないゴミだ。K&R を真面目に活用すれば、そんなサイトにアクセスする必要など微塵もないと断言できる(*)。僕が思うに、K&R を手にしていても有効に C を習得できていないとか、あるいは C について殆ど扱いを呑み込めない人というのは、自分でコードを動かしていないのである。K&R を活用するには、というか全てのプログラミング・ツールを学ぶときにも等しく言えると思うし、更には英語や数学を勉強するときでも同じことが言える筈だが、テキストを読むだけではだめである。実際に使ってみないと、短期間で適正なレベルの習得は難しい。

==========

* K&R すら買えない貧しい国や家庭の子供ならどうか。もちろん K&R は C を習得する必要条件ではないから読まなくても C は習得できるから構わないが、たいていのオンライン・チュートリアルは K&R よりも情報量や記述の正確さや理論的な背景が段違いに落ちる。これは、大学で教えていようと実務家であろうと、ほぼ全てのプロパーの技術者が同意するだろう。したがって、そういう低レベルなリソースにしかアクセスできない人々が被るリスクを低減するサポートが必要であり、僕は、そういうリスクがある貧弱な教材で C を習得したままでも構わないなどと、技術者として言うつもりはない。無知や貧乏は、クズみたいなプログラムを実装したり公開して他人に迷惑をかける言い訳になどならないからだ。では、そういう低レベルなリソースしか利用できない人々が被るリスクを下げる方法はあるだろうか・・・現実問題として言えば、ある。もちろん公に勧められるようなことではないが、海賊版の電子書籍がいくらでも「落ちている」からだ。しかし、可能ならオープン・アクセスの電子書籍として有益なものを積極的に(勧められるレベルなら、だが)勧めたい。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook