プログラミングを学ぶ方法がわからない
最近、プログラミングをどうやって学べばいいのかわからなくなってしまった。
筆者はドワンゴに雇われている。ドワンゴに入社して早4ヶ月になろうとしている。ドワンゴに雇われている名目は、C++の啓蒙である。C++の啓蒙にはC++の教育も含まれる。したがって、筆者はそろそろC++の教育をしなければならない。
筆者は、プログラミングを教育する最良の方法は、参考書を執筆することだと考えている。直接対面して教えるのは非効率的だ。文章を書いておけば、大勢が学べる。では、どのような参考書を執筆すればいいのか。すでにC++11のコア言語の参考書は書いた。
C++14対応も、正式なC++14規格制定後に行わなければならない。そしてライブラリは、もし他にやる人がいないのであれば、やらなければならないだろう。
しかし、これらの本は、C++をこれから学び始める人向けではない。C++を学び始める人向けの入門書も、そろそろ考えなければならない。
東京に来て数カ月、筆者に対して、C++を学びたいと直接告げてくる人が何人もいた。興味深いことに、私に直接会ってC++を学びたいと告げた人たちには、共通の要望があったのである。
その要望とは、コンピューターの基礎的な操作方法から教えてほしいというものである。ターミナルやBashのようなシェルの使い方、基本的なCLIコマンド、GCCやClangなどのC++コンパイラーでソースコードをコンパイルする方法、Makeなどのビルドシステムの使い方、はては、ソースコードであるテキストファイルをテキストエディターで編集する方法にまで及ぶ。これはC++以前の話だ。
不思議だ。何故こういった、プログラミング以前の基礎的なコンピューターの操作方法から学びたがるのだろうか。筆者は、このような基礎的なツールの操作方法で苦労した覚えがない。かといって、筆者は基礎的なツールの操作方法の達人ではない。ただ、必要な箇所だけ、その都度調べて使っているだけだ。したがって、筆者はこのような基礎的な操作方法について、教育できるほどの上級者ではない。
なぜ、彼らは、こういった基礎的な操作方法の教育を必要としているのだろうか。すでに、これらの基礎的なツールの操作方法のドキュメントは、いくらでもネット上に文章として存在する。筆者よりもはるかに、それぞれのツールの上級者によって書かれた文章が存在する。いまさら筆者が中途半端な知識で解説する必要はないと思われるのだが、いったいどういうことだろう。
筆者は長い間、不自由なMicrosoft Windowsユーザーであったが、2年前、GNU/Linuxに転向した。それまでVisual StudioというIDEがあり、テキストエディター、ビルドシステム、C++コンパイラーの操作が、マウスだけで行える環境から、CLIのC++コンパイラー、GNU Make, Vimの環境に移った。操作方法が完全に変わったが、しかし、それほど苦労はしなかった。もちろん、まだGNU Makeの機能をすべて把握しているわけではないし、Vimを上級者のように使いこなせてはいないが、特に操作方法に苦労はしていない。いずれも有名なツールのみを使っているので、わからない操作方法は、調べればすぐに分かる。誰かがすでに同じ問題にぶちあたって、解決方法をドキュメント化しているからだ。
かつて筆者が、15年前、2年前に、それぞれ乗り越えていったはずのプログラミング以前の基礎的なツールの学び方を、筆者は覚えていない。それほど苦労した覚えがない。
しかし、現実にC++を学びたいと望むものは、C++以前の、基礎的なツールの使い方から教育されたいと願っている。自分で調べればすぐに分かることを、教えて欲しいらしい。
これはいったいどうしたものか。このような基礎的なツールの操作方法を自力で調べられない者は、後々も必要な情報を自分で調べられないであろうから、本物のC++プログラマーとはなれないであろうと、切り捨てるのは簡単だ。しかし、それでいいのだろうか。
ある同僚が言うには、この手の人は、最小限の労力で目的を達成する方法を求めているのだという。C++でプログラミングをするという目的はあるが、そのために費やす労力は最小限にしたいという。
しかし、この手の基礎的なツールの操作方法というのは、いくら学んでも損はしないのだ。たしかに、Bashの大部分の機能は、C++プログラミングをする上では、直接役には立たない。GCCの全オプションを覚える必要はない。今や、Makefileは自動的に生成する時代だ。ユーザースペースのコードを書く上で、カーネルの知識が直接に役立つことはない。しかし、基礎的なツールをひと通り触っていれば、いつか役に立つ機会があるかも知れないのだ。以外なことに、思いもしなかった知識が、後々になって役に立つものである。
「学問に王道はない」とはよく言ったものだ。
理想はともかく、全くの初心者には、おそらく足がかりが必要なのだろう。そういう基礎的なツールの使い方を触りつつC++を始めるまでの段階を解説した、入門書を書くべきであろうか。第一章、GNU/Linuxのインストール方法、第二章、パッケージマネージャーでC++コンパイラーをインストールする方法、などなど。
とにかく、なにかやるとしよう。
せっかく、100人入るセミナールームが使えるようになったのだから、勉強会も積極的に開催していきたい。
ドワンゴ広告
筆者はドワンゴに雇われている。ドワンゴに雇われている名目に、ドワンゴの宣伝がある。宣伝をしてほしいとは言われたが、どのように宣伝せよ、とは言われていない。そこで、筆者は自分が正しいと信じる方法で宣伝をしている。
そもそも、広告とは、本来必要のないものである。ドワンゴが優秀なエンジニアを求人しているのは、いまさら言うまでもない。ドワンゴに限らず、まともな企業ならば、優秀なエンジニアは常時喉から手が出るほど欲しいに決まっている。広告など、いまさら行うまでもないのだ。
そして、広告というのは、極めて邪魔なものである。もし広告が邪魔だと感じられてしまうようであれば、それは広告としての機能を果たしていない。むしろ逆効果である。即座にadblockのフィルター行きになることは確実である。特に、優秀なエンジニアであれば、adblockは当然使っているであろうから、なおさらだ。現に筆者は、自分のブログの広告をadblockで消している。読者も当然消すべきである。
そのため、筆者は、消さずとも許容できる広告を書くことにした。許容できるとはいったいどういうことか。他ならぬ筆者がadblockで消すほど邪魔でもないと感じるのであれば、あるいは、読者も許容できるかも知れない。
矛盾するようだが、筆者にとって許容できる広告は、adblockで消せる広告である。広告は広告であるとマークアップで意味付けするべきである、もし、広告がCSSセレクターで指定しにくいマークアップであれば、許容できない。そのような広告を使うWebページ自体が許容できない。
したがって、このドワンゴ広告は、adblockのようなユーザー指定のCSSで消しやすいマークアップをしている。
これにより、広告が邪魔だと感じられるようであれば、即座に消されてしまうわけだ。広告が邪魔だと感じられないような努力を強いられる。
もし、読者がこのドワンゴ広告を邪魔だと感じているが、消す方法が分からず、消し方を調べようともしない場合、残念ながら、読者は本物のエンジニアではないと言わざるを得ない。
ドワンゴは本物のエンジニアを募集しています。
CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0