2014年1月2日木曜日

私がプログラミングに興味を持った理由

工学系の大学を出て、メーカーでエンジニアとして働き始め、コンピュータシミュレーションを専門とするようになったにも関わらず、恥ずかしながらプログラミングを避けてきました。

大学1年時に、C言語を使った情報処理入門という講義があったのですが、さっぱりわかりませんでした。全くついていくことができませんでした。演習系のクラスだったので途中途中で課題が出され、プログラムを書いて実行結果と共に提出しなければならなかったのですが、自分の力ではどうすることもできず、近くにいたデキる人に毎度お世話になっていました。

そのときのことがずっと残っていて、プログラミングに対する苦手意識を生んでいると思っています。(今でも苦手、という意味です)

大学の研究室に所属したことのある方ならよくわかると思いますが、各研究室の雰囲気は様々で、始業時刻のようなものが決められている厳しいところもあれば、放任主義のところまで、千差万別です。私が所属していたのは典型的な後者で、研究、実験はもちろん行っていたものの、それ以外の時間は各自何をしていても構わない、といった感じでした。私は、と言えば、体育会の部活に所属していましたのでそちらの練習に行ったり、インターネット使い放題を良いことに、研究室に入り浸って遊んでいるような状態でした。

今思えば、それだけの時間を持てるのは人生の中で限られていて、何て無駄なことをしていたんだ、と後悔が止まりません。今の大学生は私が学生だった時よりも勉強や、社会に出て役立つようなことに積極的に関わったり、留学したりと、ものすごい意識の高さを感じます。


研究室に所属してからは、実験結果のデータ分析をするのにExcelを使い始めました。そこで初めてゴールシーク機能を知ったりして、実験結果の分析をしたりしていましたが、扱うデータ量がさほど多くなく、プログラムを書いて自動処理するほどではありませんでした。

大学を卒業して実験・研究技術者として働き始めると、学生時よりも格段に早く実験をまとめなければならなくなり、その作業に追われてスキルアップの時間を確保するどころではありませんでした。帰宅後や休日は学生時代と変わらず運動をしたり、ゲームをしたりして過ごしていましたので、ここでももったいないことをしていたと思います。

様々な事情で今の会社に転職しましたが、仕事で求められるスキルは前職時とさほど変わりませんでしたので、当初はプログラミングを覚える必要に迫られてはいませんでした。しかし、最近の効率化の流れは急で、お客様からも様々な自動化処理に関する問い合わせを受けるようになりました。それに対応するため、会社で開発しているソフトで使えるプログラミング言語Pythonを覚えよう、というのが私の動機です。ここまで読んでくださってありがとうございました。


2014年1月1日水曜日

プログラミングに初めて独学で挑戦しようとする人が挫折する理由(私の場合)

問題1:自分が作ってみたいプログラムに必要なことが全て書かれている資料がない

世の中には、本やインタネット上含めて、様々なプログラミングに関する資料が出回っていますが、どれもプログラミング言語の文法の解説に終始していたり、ごく簡単な動作を実現するプログラムを例示しているだけのものがほとんどです。
中には1つのツールとして完成していて、コピペすればそのまま使えるソースコードを載せているものもありますが、それらとて自分が作りたい思い描いているものとはどこかが違うのです。違うからこそ、自分オリジナルのものを作りたいと考え、プログラミングを覚えたいと考えるはずです。
ですから、自分の理想がすでに形になっているものはこの世にはない、と割り切れるのに時間がかかります。

問題2:プログラミング言語の習得と実際のアプリケーション開発の間を埋める良い資料がない

プログラミング言語を覚えるための資料はたくさんあります。最近ではCodecademyのような、オンラインで、無料で、インタラクティブに学べるサービスもあります。Codecademyは、英語に拒否反応がなければとても良い教材だと思います。日本語化も少しずつ進められているようなので、今後より多くの人が利用するようになるのではないかと思います。
Codecademyの良い点は、文法だけでなく、応用例として簡単なアプリケーションを作ってみるレッスンも用意されていることです。これをやってみると、実際のアプリケーションに文法をどう適用するのかがわかりやすくなります。
しかし、それでも実際に作ってみたいものとのギャップは大きく、どうすればよいのか路頭に迷うことになります。(私はCodecademyでPythonのレッスンを全て終え、加えてPythonからのNHTSAのAPI利用についてのレッスンにもトライしてみましたが、やはりよくわかりませんでした)

問題3:どんな言語を覚えればよいのかわからない

世の中を見渡してみると、プログラミング言語は本当にたくさんあります。私もWikipediaのプログラミング言語一覧を見て驚きました。聞いたこともないものばかりです。それでも、C,Visual Basic,Ruby,Python,Java,JavaScript,PHP,Perl,FORTRANなどはよく耳にするほうでしょうか。また、iPhone用アプリ開発にはObjective-Cという言語が使われているはずです。とにかく、目的に応じて様々な言語が作られ、また派生しており、何を選べばよいのか、素人には皆目見当もつきません。逆に、何を作りたいのかがはっきりすれば、使う言語も決まってくると言えますが、その「何か」を表現するのが難しいと感じます。

問題4:言語を覚えるのに何から手をつけてよいかわからない

図書館や本屋、インターネットを検索すれば、使いたい言語について書かれた本や情報は何かしら見つかります。しかし、本当に本当の初心者が初めから独力で読み進めて、本来の目的のものを完成させるのに適した資料はないと思います。

言語というだけあってそれぞれ文法があるため、文法を解説した本やサイトは数多く見つかりますが、その言語を使って何ができるのか、を書いたものは比較的少ないです。もちろん、具体例から入っていく解説書もありますが、それらの例が自分自身の直面している課題と少しでも違っていると、途端にわけが分からなくなってしまう、というのが実感です。何しろプログラミングのことを何も知らないわけですから、プログラムのどの部分が何を意味しているのかが分からないわけで、応用が効かないからです。 そのため、とりあえず一通り文法を覚えようとするか、具体例のプログラムを書き写してみて動作を確認してみるか、の2通りになります。
そういう意味ではCodecademyは良いと思いますが、問題2のところでも書いた通り、教材と現実の差が大きく、先へ進めないことになり、問題1に戻るわけです。 

SyntaxHighlighter