はい、どーもどーも皆さんこんにちは、日夜会社の為に戦う、社畜じゃないよ☆企業戦士です。
わたくし、職場でより柔軟で幅の広い仕事をして行く為には、豊かな心が必要だと思うのです。
そのために、笑うことってとても大切です。心に余裕があってこそ、仕事にも余裕が出てきて、納期にも余裕が出ます。
社運をかけた一大プロジェクトの重大局面で、まさかの致命的バグ!あぁっ上司の顔色が危険水準!
さぁそんな時も、心の余裕を見せる時です!
アハハハハハ!ここでバグかぁ!アハハハハハ!と呵々大笑して最大のピンチをも笑い飛ばしてしまう人間としての桁外れの余裕を見せつければ、余裕がなくパッツンパッツンになっている上司も、釣られて余裕をもって・・・え?なになに?明日から君の机のあたりに余裕ができそうだ?会社の人件費にも余裕ができそうで嬉しい?ちょっ待っ・・・
目次
私がどうやってプログラミングできるようになったか
まず結論から申し上げてしまいます。
わたくし、プログラミングできるようになってません!アハハハ!
おっとチャンネルはそのままで!
できるようになったと大きく出られるほど立派なものではないのですが、見ての通りのデキの残念そーーーな人間ですが、しかしだからこそ!プログラミングでどこで引っ掛かって挫折するか、この身をもって分かるのです!なんという自己犠牲の精神!
ここではそんな尊い犠牲に基づいたポイントを、ご紹介していきましょう。
第一関門・プログラミング入門書の極厚極悪さ
「ワトソン君、凶器はなにかね?」
「はい・・・現場に血のついたこれが転がっていました」
「どれどれ・・・「簡単!すぐわかるプログラミング入門!」だと・・・。全然簡単そうな厚さをしてないじゃないか!なんという危険な物体だ!!」
はい、まずそもそもにプログラミングの入門書、往々にして厚いんです。
冬場は鍋敷きに。夏場はひんやり枕代わりに。できそうなくらいに厚いのです。
もちろん薄いのもありますよ?
しかし薄くて簡単そうな本は、優しそうに見せかけて人の心の隙間に付け込んでくる罠だったりします。
ただでさえ複雑なプログラミングを、ただでさえ私のような頭の悪そうな(当社比)プログラミング入門者に教えようという時に、ざっくり、簡単に、短く説明するんですよ?
余計に、分かるわけがない。
説明が省略されすぎて、そこがなんでそう飛躍したのか分からない、なんてざらです。
だからある程度まともな入門書は、厚くなりがちなのです。
慣れない人にとって分厚い本は、その重厚感に「マジカッケー!」と憧れるものの、迂闊に仰向けに寝っ転がって読みながら寝落ちしようものなら、顔面に落ちてくる恐怖の警策となります。喝!!
この厚さ故に購入時は「さぁ今からプログラミング学ぶんだぞ、これを終えたらプログラマーだぞ」という重厚な充実感に満たされるのですが、途中からその重さと同様に心の重しと化していくのです。
C言語のヒラリーステップ・・・ポインタ
世界の最高峰であるエベレストには「ヒラリーステップ」という有名な難所があります。
これはエベレストに初登頂したサー・エドモンド・ヒラリーにちなんで名付けられた場所で、エベレストの登頂を阻む壁となっているところです。
さて、私が初めて手に取ったプログラミング入門書は、Cでした。中学生の頃だったでしょうか。
世代が世代なので、当時にSwiftとかKotlinといった言語がまだ存在しないのはもちろんのこと、Javaでさえも出来て間もない、そんな頃でした。
プログラミング言語として古典的なものはCOBOLやFORTRAN、メジャーなものはBASICかCやC++、スクリプトでJavaScript、CGIスクリプトとしてPerl、ド素人目線で知っているのはそんなあたりでしたでしょうか。
なぜC言語にしたかと言えば「プログラマーの友人が勧めたから」というだけです。
その友人が同じ中学生なのにバリッとBASICでもCでもJavaScriptでもPerlでも扱っていたために、それに憧れて始めた、そんな感じです。
もちろん最初はおなじみのHello worldです。
当時はWindows95が出てセンセーショナルな時代でしたが、ズブの素人がWindows APIなど扱えるわけもなくってか最初からそんなものが出るわけもなく、DOSの画面に「Hello world」と出るだけです。
まぁはい。リアクション難しい。Hello worldって出たからなんなのよ。
それでもまずは変数を理解して、関数の基礎を理解しつつ、for文などを「へー」とやる気もなく眺めて越えて行った先に、出てきます、ヤツが。
ポインタ。
エベレストでいうヒラリーステップ。
ギターでいうFコード。
たくさんのプログラミング入門者の屍の山を築き上げた、悪名高き憧れクラッシャー。
なになに・・・ポインタとは、変数のアドレスを格納するものです。
アドレス?メモリ?
変数と同じように扱える?じゃぁ変数でいいじゃん!!
ポインタのポインタ?はい??ニシローランドゴリラの学名はゴリラゴリラゴリラです的な何か??
ポインタが必要である意味が分かりませんでした。
でも入門書って、分かっても分からなくても「ひとまず読んだ」となると、先へ進むんですよね。
これが、脱落のスタート地点になります。
分からないモヤモヤを残したまま先に進んでいけば、モヤモヤがかかる部分は全て分からず、どんどんどんどんモヤモヤが拡大していきます。
そして内容を理解しないまま読み進めるという行為は、もはやただの作業以外の何物でもなく、モヤモヤもいつしか視界0メートルくらいに濃霧になった頃、気が付けば、もうその本に触れることはなくなっているのです。
こうして、プログラミング入門者は一度死にました。
C言語プログラミング学習に挑む、再び
そんな入門書があることさえ忘れ去っていたようなある日、挫折した苦い経験とともにふと思い出すわけです。
あー、本棚の一角になにかダークサイドがあるな、と。
そして勇気を振り絞って、ふたたび手に取るのです。
内容などとっくに忘却の彼方ですから、また最初から読み直します。
Hello world。またお前か。
でも一度読んでいるのですから、気は楽です。
変数?あっ知ってる!
関数?おぅ分かる分かる!
for文?if文?オッケーオッケー!
なんだ俺プログラミングできんじゃん!!楽勝じゃん!!と。
そんな調子に乗った入門者に、ヤツは再び襲いかかります。
変数のアドレス。
変数のように使える。じゃぁ変数でいいじゃん。
配列のようにも使える。じゃぁ配列でいいじゃん。
参照渡し。矢切の渡し的な何かか??
そうしてモヤモヤしつつも、ひとまず先へ進めば、そこは深い霧に包まれて我が身しか見えぬ深奥なる幽玄の世界。
どうしたことだ・・・瞼が重い・・・ついでにこの本も重い・・・全てを投げ出して、今はただこの闇に抱かれて眠りたい・・・。 こうして、プログラミング入門者は二度死にました。
ある日突然越えて見える、その先の世界
二度までも討ち死にを遂げた入門者は、もはやそこがブラックホールで全ての光を掴んで逃さぬほどに本棚の一角をダークサイドに取り込むその重圧に耐えかね、入門書を処分してしまうのでした。
それから久しい、ある日のこと。
ふと思い出されるわけです。やっぱプログラミングできるようになりたい、と。
友人がガンガンに進化し続ける凄腕スーパーエンジニアと化していたこともあります。なんでもできるその姿は、まぁ、憧れますよね。
そうしてまた挑もう、そんな気持ちになったわけです。
最初に入門書を手に取った頃は、なんとなく「CをやってからC++」のように、ピカチュウからライチュウに進化するように、ゴンベからカビゴンに進化するように、あれでも卵から生まれる育つ気のないカビゴンとかいない?ええとなんの話だっけ?
・・・ゴホン。なんとなくCからやらないといけない気がしていたわけですが、友人に確認するとアッサリ「C++からでいい、ってか別物」とか言われるわけです。あれ?昔はなんでCやったんだっけ?
で、C++の入門書を手に入れ、三度目の正直とばかりに、また始まるわけです。
Hello world。もうなんというか一種の呪いですよね。自分が死ぬ時の走馬灯にたぶん出ると思います「Hello world」。これから死ぬのにHello world。
でも以前はprintfだったものが、coutになってます。おっなんか進化してる!それでもHello worldだけど!
そして以前と同じ道を、みたび通ります。
でも以前と違うことは、ヤツが来ること、そのヤツに何度も討ち死にしている過去を、痛いほど覚えていることです。
それに打ち勝つだけの意思がなければ、三度目の挑戦はしません。
そうして、ヤツにたどり着くのです。
で、なぜポインタを使うのか、を理解はしきれないものの、どう動くかは理解して、先へ進んでいきました。
構造体。クラス。コンストラクタにデストラクタ。クラスの継承。
過去見なかったものを見られるのは、楽しくもあります。おっこれなら行けそうだぞと。
オーバーロードとオーバーライドとかいう巧みに討ち死にさせようという罠もちょっと結構ひっかかりながら華麗にかわしつつ、なんと!ついに!入門書を終える日が来るのです!!
やったーーーー!!!これでプログラミングできるようになった!!!
とっくにバリバリのプロになっている友人に言うと「お、じゃぁちょっと手伝ってみる?」と来て、うんうん是非やるやる!!と。
「じゃぁこのC言語で書かれたARM9エミュレータのライブラリがあるのね、これを継承したクラスがあるから、複数インスタンス化に対応できるように改修してもらえるかな?」
オッケーオッケー入門書を終えたこのプログラミングマスターの俺様には造作もないことさ!
どれどれ・・・えーと・・・なにこのコードの量は・・・どこがどこにどう繋がってるの・・・てかマクロ多用しまくるのマジやめて・・・
こうして、プログラミング入門者は三度死にました。
プログラミング、何度でもやればいいじゃない
冒頭申し上げたように、今でも私はプログラミングはできません。エンジニアではありません。
友人は「コードを1行でも書けばエンジニア」とか言いますが、これ以上Hello worldを書いたら来世の産声は「Hello world」になってしまいます。
でも、その後なんとなく読んだ、DXライブラリを使ってゲームを作るような本で、イテレータの事とか、ポインタをインクリメントする事とか知っていく中で、なんとなーーーくポインタの存在意義が分かったようなつもりになったり。
仕事上で出てきたWordPressとかLaravelで、やむなく一部分のコピペ差し替えとかする中で、ほんのわずかにPHPに触れたり。
ExcelでもVBAなんて触ったことも無いのに、スプレッドシートのGoogle Apps Scriptで、リファレンスとかハウツー記事読みながらなんとかかんとか自動更新のJavaScript書いたり。
わけわからんでも、コピペでも、ハッタリでも、なんだかんだ触れていれば、ほんの少しずつでも出来るようになる気がします。
そしてプログラミングって、ツールです。
本来やりたいことが先にあるはずで、じゃぁそのやりたい事をかなえられるなら、コピペでもなんでもいいんですよね。プロじゃだめかもですが、趣味でやる分には。
で、コピペで上手く動かないのをなぜだって考えたり、少しだけ改良してみたり。
そんなことで、実務を少しずつ学んでいけるんだと思います。
何度挫折したって、またやりゃいいんです。
挫折したままでいいなら、別にそれは必要が無いというだけのこと。
必要ならまたやることになりますし、今は昔と違って、google先生はなんでも教えてくれます。求めよ、さらば与えられん。
ロジカルな思考を身につけるにもいいかもしれませんし、今後ますます需要が高まっていくプログラミング、皆さんも是非、ゾンビのようにしぶとく蘇って挑んでみてください!
(あと仲の良い友達がスーパーエンジニアだととてもチートなので、オススメです。)
(※編集部注:本コラムは執筆者の個人の考えによるものです。当サイト・運営会社の見解ではありませんので、予めご了承ください。)