コラム

カテゴリ:システム開発

最速でプログラマーを育てるアクセライトメソッド ~Lesson1 コマンドとエディタ編~

programming_lesson1

こんにちは、システム開発部の大下です。

社内でのスタッフ教育には困難がつきものですね。

私は開発者として働き始めてから、新人に対してプログラミングの教育/研修をする機会が多く、今現在でも社内に新しいスタッフが入ってきた際は私が教育を担当しています。

何度も同じことを説明し続けるのは大変なので、ある程度自律的に勉強ができる教材を作成し社内教育に利用していまして、この度は弊社の開発者育成プログラムを公開することにしました。

以下、前置きです。

プログラミングを教えることの難しさ

プログラミングの技術には少々特殊な事情があり、学校や大学で大人数向けに一律のカリキュラムでプログラミングの授業を行ってもあまり良い結果になりません。というのもプログラミングは数学や理科の授業と異なり、知識や技術の個人差があまりにも開き過ぎているからです。キーボードを触ったことがない、エクセルを触ったことがある、自分で動画を編集できる、プログラミングもやったことがある、ゲームを書いたことがある等々。

そしてコンピュータの技術はハードウェアとソフトウェアそしてネットワークの組み合わせによって成り立っているので、得意な領域も人によって異なります。

そう考えると一律にプログラミングの授業をするというのは、小学校1年生から高校3年生までを一つのクラスに集めて数学の授業をやるような無謀さに近いです。

そのため落ちこぼれをなくそうと思えば「ホームページを作りましょう」といったような題材にならざるを得ないですし(プログラミングではないですが)、できる人だけついて来いというスタンスだと、授業初回から「プロトコルとは」みたいな多くの人にとって理解不能な授業が展開されるわけです(実際にこうした授業、ありました)。その結果として、授業に真面目に参加している学生ではなく、授業にも出ず誰に言われるまでもなくコンピュータに向き合っているサラブレッドタイプの人だけに技術が偏るといった状況になるわけです。

プログラミング教育は不要?

プログラミングを一部のPCサラブレッドの特権的なスキルにするのもいいですし、実際そのような技術者がIT業界をリードしているのは間違いないと思います。ただIT業界と一口にいってもそこにはいろいろな分野があって、システム開発、ゲーム開発、にはじまり、インフラ/ネットワーク構築、各種のミドルウェア開発、OS開発等多岐にわたります。OSやミドルウェアあたりは量産されるタイプのソフトウェアではないので数少ない優秀な技術者がけん引する体制で良いですが、システム開発や、最近流行りの機械学習については、ITと人間社会とのつなぎこみを人間がやっていかねばならない領域で、今後間違いなく優秀な技術者が不足してくる業界だと思います。

そこでプログラミングを効率的に教える手法が必要になってきます。プログラミング言語を体系的に学ぶのに適した書籍はたくさんあります。今後の長いエンジニア人生を見据え、書籍をじっくり学ぶのも良いでしょう。ですが今問題にしているのは、「勝手に勉強しちゃうほどサラブレッドなタイプ」ではない人であって、そうした人に対して書籍やネットで勉強することを進めるのはかなり反対です。

ググレカスの文化がもう一つの障壁

あとプログラミングの習得を阻む大きな障壁の一つに、ググレカスの文化があると思います。

日本のコミュニティーはとにかく質問する人に対して厳しいです。「エラーが起きました、どうしたらよいですか?」と質問すると即座に「どんな環境?何をしたらどんなエラーが出た?この情報では誰も回答できないよ!」とか「マニュアルは読んだ?」などと返され、「最低限自分で調べて質問できないなら向いてないよ」といった大変ご丁寧なアドバイスを頂けます。

分からないときというのは何が分からないかも分からないものであって、そういう状態であまりに手厳しい言葉を浴びせられるとやる気が萎えてしまうのも無理有りませんよね。

みんな苦労して技術を身に着けたものだから認識の甘い初学者にたいして厳しいのかもしれませんけどね。個人的にはこういった文化は早目になくなって欲しいと思っています。

stepup

初めからできる人には教えられない

文化とは別の問題として、プログラミングの得意な人は素人にプログラミングを教えるのがあまり得意ではないという問題もあります。一般的に、努力せずにほぼ無意識的に習得できてしまった技術や学習内容を、それらを無意識的には習得できない人に伝えるのは大変困難です。教えるときに一番苦労するのも、自身では全く悩まずにできるようになってしまったことを言語化して説明しなければならないときではないでしょうか。

私の場合は、一般的なプログラマとは異なり、効率的にアルバイトをすることを目標にプログラミングを勉強し始め、インターネット環境も聞く人もいない状態で挫折しそうになりながらC言語とJavaを勉強しましたので、初心者が躓くポイントは痛いほど良く分かります。(ちなみにC++は挫折しました。) そしてその際、数冊の本を通しで学習しましたので、バイブル的な良著がいかにたくさんのことを体系的にカバーし、そしていかにすぐには必要もないことまで盛りだくさんに説明されているかも知っています。はっきり言ってプログラミングの開発当初からそれほど膨大な知識は不要です。

開発に必要な学習期間は1週間から1月

では開発をスタートするまでにはどのくらいの学習を積む必要があるのでしょうか。

学習スピードには個人差がありますのである程度の幅はあるものの、開発に必要な学習期間は1週間から1月を見ておけば良いと思います。

ただし、教えてくれる先生は各自手配してください。環境や基本について導入をしてくれる先生がいることは短時間での修了に向けてほぼ必須になりますが、無理ならばより多くの時間をかけるという手もあります。
今回カリキュラムを公開する目的は、社員教育の実施者が楽に指導をするためであって、残念ながら学習者の独学を全面的に支援するものではありません。

では前置きも長くなってきたのでそろそろ開始しましょう。
ひとつ大事なことを言い忘れました。基本コンセプトは 「LAMP構成でウェブサービスをつくる」です。
Linux環境が用意できない人は WindowsならCygwinかXAMPP環境を、Macなら標準でUnixの機能が使えますね。

Lessonは合計で6つあります。

Lesson1 ~Linuxとエディタ~

一つ目の課題は Linuxとエディタです。

以下教材のガイドです。

1.はLinux上のコマンドの基本中の基本の学習です。ファイルとディレクトリの操作ができれば、差し当たりパーミッション、検索、エイリアス、ショートカットキーなどの学習は後回しです。このくらいならすぐに行けそうですよね。

2.はプログラミングに必要なテキストエディタの使い方です。Linux上ではviとEmacsのいずれかを選ぶのがスタンダードです。vi 対Emacsというのは長きにわたって宗教戦争をしているので、あまり深く考えず好きな方を選択して下さい。私はviの使い方しかわからないのでEmacsを使いたい人にはご自身で調べてみてください。どちらも現時点ではそれほど深く学ぶ必要はありません。

またご自身で設定できるのであればIDEを使うのも大変良い選択でしょう。サーバ上で直接開発ができないので事前に諸々設定が必要です。IDEって何?という人はおとなしくviかEmacsを学んでみましょう。

なお、viは変態的で恐ろしくとっつきにくいエディタであるという悪い噂もありますが、そんなことは全くありません。使いこなすまでには慣れが必要とはいえ、ファイルを開いて編集して保存するだけなら1時間あればできるようになるでしょう。(それが変態的?)

まとめ

いかがでしたでしょうか。
初回は下準備ということでプログラミング言語は扱いませんでしたが、次回からは早速プログラミングを行っていきます。

あまりにも説明が少ないと思いましたか?
実際の開発もひたすら調べながら行うものです。まずは与えられた課題をこなすべくいろいろ調べて取り組んでみましょう。

次回はみんな大好きPHP編です。

大下知樹

この記事を書いた人

大下知樹

営業/設計をメインに、空いている時間でプログラミングも担当。目的の達成にこだわり、言語にはこだわらない。初学者に優しいPHPが好き。