「楽しくなるまでが大事」~多言語プログラマの私の学び方
近年、PCソフトウェアのマクロやシステム開発、あるいは 場面によって表示を変えるWebページ制作など、色々な場面でプログラミングを学びたいという人が増えてきた感じがしますね。
これを読んでいるあなたも、そのうちのひとりでしょうか。だとしたら、どんなプログラムを書くにも共通の「勉強の仕方」には興味があると思います。
ここでは、20年以上様々な言語でプログラミングをしてきた私の学び方を書いていきます。
「学ぶことが楽しい」と思えるまでが大事
何を先生にするか考える
私は高校受験も大学受験も頑張らず、中レベルの高校から受ければ入学できるような短大工学部に入った人間なので、決して「できる」タイプではありません。
ただその短大は入学できるレベルからするとぜいたく過ぎるほど良い先生がたくさんいて、学ぶ楽しさを教わりました。
月~金曜は1時間半の授業を4~5コマ、土曜に2コマ、それぞれレポートもあり遊ぶ暇もほとんどありませんでしたが、あのときほど「勉強楽しい」と思ったことはないですね。
おかげでいまも自主的に学ぶときは楽しいです。良い先生に学ぶのは、学ぶ上で大いに有利です。
でも、自分にとって良い先生を見つけるのは意外と容易なことではありません。
スキルが高い人が良い先生になってくれるとも限りません。先生の教えることが分からずついていけないのでは、自分にとっては合わない先生だと思います。
プログラミングについて言えば、たいていWeb上に各言語の「公式」サイトがあり、それが基本の先生となります。
でも公式は初心者には分かりづらいことも多いので、個人で教えている人(サイト)の中から自分にとって「教え方が分かりやすい」と感じる人を先生とするのもよいですね。
私は特定のサイトを参考にすることはあまりありませんが、それでもよく見るサイトはありますね。
ただ、同じことを学ぶにも複数の人の書いたページを参考にし、書いてある内容は極力公式サイトと比べます。今では使われていないバージョンで解説されていたり、参考にした3~5サイトすべてが違う説明だったり、実際と違う場合もあったからです。
やってみるのがいちばん
そして学んだことは「やってみる」。これが楽しむのに一番大事なことだと思います。
小さいころ、積み木やブロックを好きな形に組み立てたことがあると思います。
そのとき、どうやったら望む形になるのか? と考えたと思います。試行錯誤中はストレスを感じたかもしれませんが、望む形ができたときは嬉しかったと思います。
つまり「考える→できる」という思考の流れが楽しかったのではないでしょうか。
プログラミングでもその思考の流れは同じだと感じています。
プログラミングのばあい、「プログラム言語」は「積み木やブロック」に相当します。「プログラムの実行結果」は「作りたい形」、「コードを書く」は「積み上げるまたは組み立てる」ですね。
なんとなく分かってもらえたでしょうか。
作りたい形を想像しながら、どうしたらそうなるか考える。これを忘れずに進みます。
プログラムも、想像した通りに作って狙った通りに動いたときは嬉しいものです。
まずは自分が楽したいことをPCにやらせる
自分が「楽したい」ことを探す
多くのばあい、まずは「望むことをやってくれるアプリを探す」と思います。
プログラムを作れる人も同じです。自分が望むことを完璧にやってくれるアプリが存在するなら、自分で作る必要は感じませんね。
でも、「PCやスマホでやれそうなのに、やってくれるアプリが見つからない!」ということはあると思います。
「自分は欲しいけれど、他人はそこまで欲していない機能」
です。
たとえば「このアプリは便利だけど、ここが不満」というものがあれば、その不満を解決するものが自分の欲しい機能です。
そういうとき、プログラムが組めれば自分で作る選択肢が出てきます。
ここでプログラム未経験者の多くは
「アプリなんかいきなり作れないよ」
と思うようですが、自分だけのための機能を作るのに
「他人も使える完成したもの」は、いりません。
自分だけのためなら、「こういう入力をすると動かない(エラー)」「この条件だと不正確な結果しか出ない」というものでも、自分が「そういう入力はほぼしない」「その条件では使わない」のなら、問題はないのです。
万一、環境が壊れること(動かすほどPCの調子が悪くなるなど)があっても被害を被るのは自分だけですし、そもそも初心者のうちからそんな状況になることはほぼありません。
そしてその自作のプログラムを使っているうちに改善したくなったり、別のものを作りたくなったりしたらしめたもの。プログラミングが楽しくなったと言えます。
あとは自然と自分から勉強してしまいます。
Javascript、Perl、PHP、VBAはほぼ独学で書けるようになりました
簡単なところからはじめる
私が最初にプログラムを書いたのは工学部時代でした(専門は機械系だったので、プログラミングは本格的には学んでいません)。
理論も教えてもらいましたが、実際に納得できたのは「自分で書いて、動かして、エラーをなくして、完成」という工程をひとつこなしてからです。
「文字入力とプリンタ出力だけ」というとても簡単なプログラムをコピー&ペーストし、若干の改造を加えて動かし、初めて理屈に興味が出たのです。
ですから、新しい言語を学ぶときは
「本や参考書に書かれているものをコピペして、ちょっと改造して動かしてみる」
くらいから始めます。
これをしないと後でつまらない記述ミスを繰り返したりするので、「分かってるし」と思っても1回はやるようにしています。
そうやって実際にできたこと
私はある店のWebページ作成とWebショップの商品登録を仕事にしていました。
お店のサイトでは店の紹介や企画のお知らせ、
Webショップでは月平均100件ほどの商品登録や新着お知らせやセールの告知・メルマガ発行などです。
▼商品情報を、自社データからカートシステムへの登録用Excelファイルにマクロ(VBA)で組みなおす
▼上記処理の中で、Webページ表示用項目を成型する(HTMLを書き出す)
▼セール期間中だけバナーを出す、終了までのカウントダウン(Javascript)
▼特定の商品を買った人にだけカートページに注意書きを表示(Javascript)
▼Perlで会員限定商品紹介ページの作成・更新
▼PHPで会員限定商品買い物用ページを作成・表示
▼新着等の商品お知らせメルマガの基本文面をExcelのマクロで作成
▼商品登録用の画像作成をある程度自動化するためPhotoShopのScriptを作成(PhotoShopのScriptはJavascriptが使われています)
▼イベント企画の管理システムをPHPで作成
(管理画面でイベントを登録し、サイトには「募集→しめ切り→実施中→終了」の流れに合わせて内容を変えて表示。申し込み受付はセキュリティ対策が難しいので借りたフォーム)
▼サーバ上のファイルとPC上のファイルの更新日時を比較して、PCの方が新しければ「更新し忘れ警告」を出すVBS(Windowsのタスクスケジューラから一定時間おきに起動)
学び方が分かれば、これくらいは独学でも問題なく書けるようになるということです。
基礎は本で、関数の仕様など細かい部分はネットで
基礎だけはやっぱり本
実はプログラミングの基礎は、言語が何かとはあまり関係ありません。「考え方」が分かればたいていの言語で書けるようになります。
その最も大事な「考え方」をきちんとモノにするには、内容を吟味された上で発行されている本が一番です。順序立てて書いてあるものがほとんどなので、順に読んでいくだけでカンのいい人はすぐにモノにできると思います。
ただ、身近にプログラマーやコンピュータ系エンジニアがいないばあい「どんな本を選んだらいいか分からない」と思います。
そういうときは自分が読めそうな参考書を5冊、ザッと読みます。今は図書館にもその手の参考書はたくさんあります。基礎はほぼずっと変わらないので、古本でも学べます。
そして、その中で一番「使いやすい」と感じた本をじっくり最後まで勉強します。
このとき、実践重視で行きます。本に書いてある例題を、最初はそのまま、そのあと少しずつ書き換えて動かしてみます。
書き換えてエラーが出たら、例題と見比べて原因を探します。それでも分からない時はエラー内容を丸ごとWebで検索してみます。
エラーをWeb検索するのが普通になったら、やらせたい処理もたいていWeb検索で調べて書けるようになっています。「どういう単語で検索すればいいか」分かっているからです。
私は主に関数の仕様などを検索しています。公式サイトのリファレンスを見れば最新の情報が分かり、この点は本よりも役に立ちます。
基礎を学ぶ本は自分が勉強したい言語のものがベストですが、自分がやりたい用途に使える言語ならどれでも大丈夫です。
ただし「配列」の説明に絵や図を大きくのせてある本がおすすめです。一番最初につまづきやすいのが配列だと思うからです。
環境
環境とは、プログラムを「動かす場所」または「その場所の状態」のことだと思ってください。学ぶためには実践してみなければならず、プログラムを動かす環境は必須です。
▼Javascript
ブラウザとテキストエディタ(※)があればできます。
▼Perl、PHP
Webサーバの機能が必要です。初めての場合はXAMPPをインストールするのが早いでしょう。
▼VBA
Excelのマクロを加工することから始めるのが手っ取り早いですね。マクロを有効にする方法はこの辺を参考にしてください。
プログラムを書くためのエディタは、最初はシンプルで軽いTeraPadあたりがおすすめです。他にも良いエディタはたくさんありますが、「ちょっと複雑なものを書くようになったら」で充分だと思います。
(Windowsのメモ帳はおすすめしません。まれに意図しない場所に改行や不可視文字が入ることがあるためです)
書き方の幅を広げる
ここまできたら次はプログラムの動きの効率化をめざし、処理速度を上げていきます。同じ処理をするのでも、書き方で処理速度がまったく違うことがあるからです。
簡単なプログラムでも、少なくとも2~3パターンの書き方をして速度を比較します。
具体的には、処理の最初に現在時刻を取得し、処理終了直前の現在時刻(ミリ秒・マイクロ秒単位の時刻)と最初に取得した時刻の差で求めるのが簡単です。
この「処理速度を上げる」は、「同じ処理で違う書き方」をゲーム的に学べる点がいいです。
そして「同じ処理で違う書き方」を覚えることは、速さだけでなく、改造・改善がしやすいなど「メンテナンス性」「流用性」を上げることにもつながり、「長く使えるプログラム」を書けるようになります。
この「メンテナンス性」「流用性」の高いプログラムを書くようになってくると、近年重要視されている「構造化」「オブジェクト化」もだんだん容易になります。これはプロになれる可能性も高いということです。
余談ですが、私の知る限りIT系エンジニアは能力重視なところが多いので、給与の男女差はほぼありません。女性にもおすすめしたいです。
設計(自分が作りたい機能を作るまで)
ここまで書いてきたように実践重視で本1冊ぶん勉強すれば、プログラムの設計もなんとなく分かるようになっています。
「この処理とあの処理を組み合わせれば、自分のしたい処理ができるだろう」と想像できれば、頭の中にぼんやりとでも設計ができている証です。
まずは「させたいこと」を明確にするために、欲しい機能などを漏れなく書き出します。細かければ細かいほどいいです。
プロはそれをフローチャートをはじめとした他人が見て分かるドキュメント(設計図)にまとめます。
自分のためだけに作るならドキュメントは特に必要ありませんが、後々の改善や他のプログラムを作るときの参考のため、自分があとで見返して分かる程度には書いておくほうがいいです。
実際に私も、「書いておけばよかった!!」と思ったことはたくさんあります。
「小さい・短いコード(プログラム)だからいいや」と書かなかったために、「以前似た処理させたな」と思ったコードがすぐに見つからなかったり結局ゼロから書いたりして余分に時間がかかってしまったときは後悔しますね。
設計までできるようになれば、プロに片足をかけています。さらに書いて、他の人の例も参考にして、実践していくと、他人も使えるものを作れるようになっていきます。
でもやっぱり独学は不安、という人へ
(興味はあるけどできるかな…と不安な方へ)
社会人で勉強が習慣になっていない人は案外多いと思います。
私のようにそもそも学生の頃から勉強が習慣になっていない人もいれば、毎日帰宅したらくたびれていて仕事中に仕方なくする勉強以外はしない・できないという人も多い印象です。
だからこそ、私は楽しくなるまでが重要だと思っています。
慣れないうちは「毎日10分以上」進めるのがお勧めです。始めてすぐ楽しさを感じた人はもっと長い時間やってもいいですが、そうでない人は焦らないことです。
それでも「やりたいはずなのにやる気がしない。なぜかできない…」というばあいは「やる環境」を作ることが大事です。
「誰かと一緒にやる」「塾に行く」など、「やっているところを人に見られる環境を作る」「お金を払った分は取り返さないと、と思う」ことですね。
でも「一緒にやる人がいない」「人に見られる環境を作れない」「どこに塾があるか分からない」「ネットの塾は合うかどうか分からないので選べずにいる」という人も多いと思います。
そこで
この記事を読んで私と一緒に勉強してみたいあるいは教えて欲しいと思ってくださったこれから始めるかた、一緒に勉強してみませんか。
あなたが作りたいものをヒアリングして、その中から期間中にできそうなものを一緒に考えます。(人数限定、無料)
進捗調査は週1~2回、2~3ヶ月の予定
お問合せはDMで。
一緒に楽しみましょう。
この記事が気に入ったらサポートをしてみませんか?