プログラミングを学んで気付いた事。

プログラミングが流行っていますね。特に子供の間では。教育熱心な親御さんは、お子さんをプログラミング教室に通わせたいのではないでしょうか。
Programming
Kevin Ku
では大人はどうでしょうか。プログラミングは役に立つのでしょうか。
子供と違って、大人は様々なケースがあるので、一つにまとめることが難しいのです。

  • 学校に久しく通っていない大人は多いです。
  • 学校に戻ってプログラミングを勉強するお金も時間もない人が多いです。

オンラインでの講義もたくさんあるけれど、果たしてそれで十分か悩むのではないでしょうか。
一言で言えば、そりゃできるに決まっています。
プログラミングがどのように役に立つとか、どう活用できるか、考えてみました。

目次

0 – 私のプログラミング履歴

世の中でプログラミングできる人がコンピューターサイエンス学科卒かというと、必ずしもそうではありません。おそらくですが、芸術関連、会計士、音楽家、主婦(主夫)の方の中にもプログラミングできる人がいるでしょう。
私自身、世代的にプログラミングに触れた小学生の初期に入るかと思います。小学校の授業で単色のモニターのパソコンを覚えていますし、マイコンの時代の人間でもあります。仕事柄、父もパソコンを家で使っていましたが、父の作ったゲームで遊んだりしてました(自分では作らなかったですねぇ)。
メールも電話線につなげている時代からやっていて、パソコンがない生活は中学生くらいからありませんが、本気でプログラミングをしたことがありませんでした。物理学を専攻していたので、実験で機器を動かすためのプログラミングや、実験で得られた数値の処理のプログラミングをやるようになりました。その後、引き続き物理の実験でプログラミングを使い、HTMLなどが普及してからはそちらもいじることが多かったです。今のように美しいWebテンプレートが容易に手に入る時代でWordPressなどのソフトも充実していますが、昔のHTMLはコードが羅列されているようなものでした。
仕事に就いてからはパソコンで計算する事が大半になり、パソコン上で行う光学設計という仕事柄からプログラミングを習得しました。そういう意味では私は正式に『プログラミング』を習ったわけではなく、自学自習で得たものです。プログラミングを生業としているわけでもありませんし、知識は偏っています。
ただし、『自分に便利なソフトを作れるか』と言われたら、作れるわけです。その程度でもいいと思いましたし、その目的でプログラミングを習得することは誰でもできるかと思います。
蓄積した経験から、仕事とプライベートの手助けとなるコードを書いています。

  • 仕事の工数をが必要な事が多いのですが、普段の仕事のタイムテーブルを入力したものをプログラムでまとめたり部分的に出力して、半期や四半期の工数を分析しています。
  • 仕事で使っているソフトウェアがありますが、そのソフトを更に外部のソフトウェアで操作することもしています。また、数種類のソフトを連携して使うことも多いです。
  • 仕事のプロジェクトの管理シートを入力のみでわかりやすく表示してくれるコードを使っています。
  • 好んで使える家計簿ソフトがないので家計簿はExcelで管理していますが、Excelのスプレッドシートとプログラミング組み合わせて快適に使っています。また、市販のソフトがアップデートが廃止されたりした時に困りません。
  • 年賀状もLaTeXのテンプレートとPerlのスクリプトでPDFを出力して印刷していました。年賀状ソフトを必要とせず、普遍的なフォーマットです(今では手書きで年賀状を書いていますが)

このように仕事が楽になったりすることもあれば、生活の一部で使ったりしています。プログラミングはただ役に立つだけではなく、場合によっては達成が得られ、場合によっては創造性を掻き立てられて、やりがいすら生まれます。
その過程で、色々と経験してきたことや、先人に助言いただいた事もあるので、考えてみました。

1 – オンライン情報を活用しましょう

今ほどオンラインに情報が溢れている時代は過去にありません。特にWebと関係性の高いプログラミングに関しては、多くの情報があります。無料の情報はもちろん、無料または安価な講座やコースがあります。一昔前と比べて本当に多くの情報が手に入れられます。
私が最も使っている言語はExcelを多用している関係でVBAですが、何かやりたい時には、インターネットで転がっている似たような用途のコードを参照し、自分好みに変更して勉強しました。座学で色々と読むより、ひとまず何か作ってやろうといった感じです。
これからはPythonを勉強したいと思い、情報収集中です。Pythonは比較的簡単に習得でき、データ解析に使われてことから今後も使えるかと感じました。ちょっと試してみたところ、他の使い慣れた言語と共通しているところが多いので私には使いやすいと感じています。Pythonの講義を試し中ですが、今のところCodeacademyが最有力候補です。他の言語もありますが、ゼロから学ぶ事を想定してシラバスを構成しています。各レッスンも一部のプログラミングについて紹介しており、そのレッスンで学んだことを演習で実践します。コードが全く書けない人適しているだけでなく、私みたいに数種の偏った言語の知識しかない人間にも新しい言語がとっつきやすいです。学ぶ時も一つのリソースだけでやるよりは、二つのコースをやればより内容が定着するような気がします。

また、本を使って必要な部分のみを参照して使えるので便利でシンプルです。そのページを開けば思い出せることも多いと思います。今の時代、Pythonに限らずわからないことがあれば検索すれば一発で答えが出てきますが、紙媒体で検索するのはまだまだ有用です。特に、良い書籍であれば章の並びとかがまとまっているので、検索もしやすいです。
オンライン講義で気を付ているのは、タイトルや説明で惑わされない事です。特に『ビギナー用』と紹介されているのは気を付けています。作成者の心理として、初心者向けのみに作っている方は全体構成を考えていない可能性が高いので、初心者向けよりも順序立って説明してくれそうな講義を購入したいです。ただし、実際に体験してみないとわからないところはあるので、レビューを参考にしたりできれば実際に受けた人の意見を聞くのがいいと思います。返金保証が付いている講義を買うという手もあるでしょう。

2 – どの言語を選びべきか悩む事はないです

どうせ学ぶなら、『最適な言語』を選びたくなりますよね。ただし、初心者ならばプログラミング自体に慣れるために学ぶといいと思います。ほとんどの言語は共通している部分はあり、途中でプログラミング言語を変えても大きな支障はないと思います。
要は一つの言語が習得できるのなら、複数のプログラミング言語を習得できるので、問題ないと思います。スタート地点は思っているよりかは関係ないと思います。プログラミング言語も合う合わないがあるので、最初は直感で選んで途中でより自分に合った言語に乗り換えるのはアリですね。例えば、私はVBAが好きですが、これからPythonを勉強しようと思っています。Pythonを選んだのも、『データサイエンス関連でよく耳にするから』『見た目が奇麗だから』程度の理由です。ただし、途中で気に入らなければ容赦なく変えますね。
ちなみに、『初心者なんだけどどの言語から勉強したらいいか』と検索しようものなら、それぞれの『派閥』の人達からそれこそたくさんの偏った意見を目の当たりにするに違いないです。結局選べなくなるので、初心者であれば余計に上級者が差として感じている機能は大して影響はないものです。
もちろん、プロのプログラマーになるのが目的ならば選ぶ言語は重要なので、慎重に選ぶべきですね。その分野の仕事で求められているプログラミング言語を習得する必要があるでしょう。最終的にやりたい仕事をゴールとして、そこから逆にスケジュールを引いてどの言語を身に着けるかリバースエンジニアリングすればいいのです。

3 – 毎日プログラミングすること

大袈裟かもしれませんが、毎日プログラミングすることをおすすめします。せめて、30分くらいとか。少しづつでいいので、継続的に使用するのが上達の近道です。特に、やり始めの時は。時間のある週末にまとめてたくさんやろとすると長続きしないような気がします。プログラミング言語とは言え、『言語』なので、週末だけにやってしまうと逆に言うと五日間の空白ができてしまい、習得に時間がかかります。みなさん忙しいのは承知の上で、時間を作っていいのではないでしょうか。ソーシャルゲームに使っている30分をプログラミング言語を習得するための30分に変えたらいいと思うのですが・・・。個人的な見解では、プログラミング言語に限らず、何かを習得する時は一日に一時間費やす方が、土曜日に十時間費やすよりいいと思います。
個人的な経験になりますが、少しづつやる方が忘れにくいと思います。数日経ってしまうと色々と忘れてしまうのですね。もちろん、仕事とは直接関係のない勉学としてプログラミング言語取得しようとしている訳ですから、仕事が忙しかったり家族関係のイベントがあったりすると時間が開いてしまう事もあります。結局、間をおいてしまうとキャッチアップするために時間を割くので、総合的に時間がかかってしまう訳です。
役に立つものをプログラミングできるまでは少しづつ積み重ねているので、自ずと時間はかかります。少し役に立つものを書けるようになるまでは数か月はかかるでしょうか。達人になるにはもっと時間がかかりますね。
とは言え、30分以上の時間取れるのならば、時間をかける程上達は早いと思います。多くの場合、プログラミングは集中力を要する事が多いので、一行もコードを書かずににらめっことかもよくあります。特に、新しいコンセプトを理解しようとする時は、無作為に書くことはあまりなく、コードを視覚的に理解してつなげる事もあります。
かなりの荒行になりますが、私はブートキャンプも興味があるんですが、そんな時間はなかなかね・・・。

4 – 日常を自動化する

一般の方は、『プログラミングする』と聞くと、販売に値するソフトウェアやネット上のアプリとか思い浮かべるでしょう。
それらが最も親しみやすく有名な例なのは間違いないですが、もっとシンプルな理由でプログラミングも可能です。様々な作業の自動化が可能です。最新のアプリより華やかではありませんが、自分に取って役に立つプログラミングが組める訳です。
人間と違って、コンピューターは精度の高い反復作業が得意なのです。
例えば、YouTubeの字幕をTranscirpt#TKとして保存したい場合、実際の言葉とタイムレコードが保存されます。数十分に及ぶインタビュー形式の動画のTranscriptだと、文字と数字が入り乱れて読みにくいです。読みやすくするためには数百数千行の文字間のタイムレコードを削除する必要がありますが、これをプログラムを書いてボタンひとつでタイムレコードを削除するスクリプトが作成可能です。華やかではありません。販売もできません。でも自分の作業効率は圧倒的に上がりますね。
これがプログラミングの密かなメリットです、少なくとも私には。明日から転職してプログラミングを生業にする訳ではないのです。プログラミングする事で仕事とプライベートで作業効率が上がるのです。これが楽しくてたまりません。
要はプログラミングやコーディングを目的とする訳ではなく、オートメーションを目的とすれば、プログラミングを学ぶ理由になるかもしれません。ほとんどのデスクワークでオートメーション化が役に立つはずであり、プログラミングもほんの少しできればいいのです。レポート用のデータ収集をオートメーションできます。ルーティーンメールの返事を定型文化してオートメーションできます(GmailはJavaScriptでプログラミングできます)。
でもこれらの例はオートメーションとは言え、プログラミングでもあるのです。前面に出るプログラミングではないかもしれません。でも紛れもなくプログラミングです。今からプログラミングを学んだとして、それを生業にできる保証はありません。しかし、プログラミングを今の仕事に取り入れる事で、現在の仕事での立ち位置が変わり、ひょっとしたら評価も上がるかもしれません。
プログラミングの言えるレベルではないですが、私はHTML記事の編集とパブリッシングをMarkdown形式で行なっています。Markdownはプログラミング言語と呼べない程のものですが、コードらしきお約束ごとがあり、それにコンバータをかける事でMarkdown形式の文書がHTMLにもLaTeXにもなる優れものです。最近のダイナミックパブリッシングは直感的ですが、マウスでクリクリするのがモノ書きの妨げとなります。これを仕事に取り入れているのですが、他の人がダイナミックパブリッシングで四苦八苦しているところをサクサクとテキストベースで記事やレポートを書いています。
『プログラミング』を『オートメーション』とマーケティングした方が良かったりして。

5 – うまく行く時は嬉しいですが、うまくいかない時はフラストレーションがたまります

プログラミングは時に挫折感を抱かせます。
良く言えばコンピュータは指示通りに動いてくれるのですが、残念なからコンピュータは間違った指示通りに動いてしまう事もあります。ひとつのミス、例えばカッコひとつが異なる場所にあるだけで正常に作動しないものです。
プログラミングとはミスの連鎖で、その出どころは正直過ぎるコンピュータから放たれたものです。
おそらく全てのプログラマーが経験している事で、全てのプログラマーの思考プロセスです。プログラミングをするには論理思考が必要です。論理思考が必要ですが、それよりも大事なものがあると私は思っています。
数々の失敗を超えて行く気概、だと思います。
映画とかでプログラマーが休む間も無くコードを打ち続ける描写があるので、一般の方々はプログラミングが非常に流動的な作業と思いがちですが、とんでもない。普通のプログラミングは簡単な操作を行う数行のコードを書き、検証して・・・うまくいかない、の繰り返しです。その数行の為に取り巻くコードを一部一部検証したり、エラーメッセージを解読したり、オンラインで同様のエラーを探したり。得てしてエラーは自分のせいで、一文字のタイプミスだったりするものです。
多くのプログラマーは大なり小なりうまくいっていない部分を直す作業がほとんどだと思います。
ではなぜわざわざそんな苦行に耐えなければいけないのか、ですが・・・ミスやエラーが大変な分、それが解決された時の喜びが大きい訳です。うまくいった時の感動が大きいのです。
おそらくですが、プログラマーとして上達すればする程、それだけ難しい問題が生じて、解決も難しくなる訳です。でもプログラミングは才能はあまり必要ないのです(トッププログラマーは別にして)。難しいけれど頑張った分報われるのです。
なので、どんなプログラマーも初めて直面する問題は難しいのです。『そんな事もできないのか』と罵る人がいたら無視していいです。初心者にミスが多いからといって、今後良いプログラマーになるかならないかの指標にはならないのです。

6 – 色々作りましょう

音楽でもそうだと思うのですが、ツールを学ぶ(音階、コードの種類)よりも、とにかく実践した方が覚えるのが早いと思います(実際の曲を練習する、実際の使えるプログラムを作る)。プログラミングにおいては、まずは自分のために何かを作るといいと思います。
もちろん、本や講習で学べる事は多いのですが、実際の使えるものを作るのが早いといいです。実際に使えるものを作ろうとすると、自分が何ができなくて何ができるかわかるからです。更に例を重ねると、イタリア語を教室で学ぶのとイタリアのレストランで注文をする方が上達が早いです。
『作る』過程はシンプルでいいです。高機能のiPhoneアプリは作ってはいけません。小さな事でいいのですが、自分にとって便利で、できれば人に見せられるものがいいです。私はかつてTwitterに投稿したらFacebookとTumblrに自動投稿するWebアプリを作りました。また、初期のExcelで画像を自動で取り込んで並べる事もしました。

7 – 『View Source』を使って真似る、そして学ぶ

あるプロジェクトの為に、コードを書き始めたとして、ゼロから始める必要はないのです。既にあるものをいじり、分析し、どのように動いているかを見てもいいのです。私はウェブの黎明期にウェブサイトを作っていましたが(まだ『ブログ』という単語がなかった時代)、最初はどうしたらいいかわからなかったので、ひたすら『View Source』をして他人のコードを分析していました。今ではCodepen.ioなどのサイトで、コードの例文がたくさんあるのでとても便利です。それらの一部を拝借して自分のコードに組み込むのはいいと思います。
オープンコードはそういう意味では素晴らしいです。法的にも道徳的にもセーフです。実際のところ、高級なソフトウェアも部分部分はそういったオープンで探せるコードの集合体だと思うのです。

8 – 自分のためのツールを作り、プログラミングする

そのうち、本格的なソフトウェアは作れなくとも、小さい作業をしてくれるプログラムならば作れる事がわかりました。
自分の作業が楽になるコードを書いている時は、モチベーションが違います。授業や例でプログラミングを習っているだけでは、難しくなった時のモチベーションが続きにくいです。しかし、自分の為にプログラムを書いていて、その成果によって自分の仕事が楽になれば、モチベーションは明らかに違います。多少の障壁があっても頑張ろうという気持ちになる訳です。
ひとつ、モチベーションを持続させる手段としては、既に興味や意欲を持っている分野の中で役立つプログラミングをする事です。音楽、ゲーム、絵画、など、好きなものの中で便利なプログラムがあったら欲しくなりませんか。プログラミングを趣味と絡める事で、楽しく実用的に学べると思います。『以下の数値を昇順に並べる』ような無機質な目的だとモチベーションの上がる訳ないです。

9 – 学び続ける

意外にも、プログラミングに長けている人はコードを覚えている事は稀で、Googleなどで検索しながらコードを書いている方々が多いです。とある作業の復習や、コードの詳細の確認をしているそうです。私も、知っていても、確認の為に検索して時にはWebで見つかったコードの方をプログラムに利用したりします。
正直にいうと、細かい内容が多いので、いちいち憶えてられないのが本音です。過去に何回もやった事がある作業でも、細かなところが異なる場合が多いので、記憶を頼りに思い出しながらプログラミングするのは結構効率が悪いものです。
プログラミングといっても一種の検索作業でもあります。同じ問題に対して新しいアプローチがあるかも知れません。年数を重ねる毎に、新しい言語や新しいフレームワークが発見されていき、古いものは進化したりします。そういう意味ではプログラミングの学びに終わりはないかもしれません。

10 – 他人から学ぶ

黙々とプログラミングしていて、ふと孤独を感じる事があります。コンピュータとの対話がエラーメッセージばかりですし。もちろん自分で問題の解決方法を探すのもいいのですが、他の人に聞いてみるのも同じくらい良いと思います。私は仕事場が理系の関係から、周りにはプログラミングができる人が多く、色々と聞いています。
オンラインで問い合わせる場はたくさんありますし、少し敷居は高いですがプログラミングの学会や講習会もあるので、他のプログラミング人種と交流する事も可能です。
私の場合、息子もプログラミングを始めており、一緒に色々と課題を見つけています。

GR019620

Swift PLaygroundsの演算子の章まで進みました。なかなか面白いプログラムができています。
プログラミングを楽しんで学べ、かつ便利なものを作れるとなるなら、デメリットは少ないのではないでしょうか。少なくとも私はこれからも学び続けるつもりです。

タイトルとURLをコピーしました