見出し画像

自分の中にプログラミング習得法を探す旅(その3:Perl編)

シリーズ3部作の最終話です。

イントロダクション+JavaScript編はこちら↓

シリーズその2:VBA編はこちら↓

ここまでを一度整理すると、

・最初に触れた言語はJavaScriptでしたが、これは趣味でした。
・職業プログラマデビューはVBAでした。
・ついでにJavaやSQLなども勉強しました。

ここで、それぞれの言語ごとの特性とそれに対する自分の認識や状況別で整理してみます。これは自分のスキルマトリックスを把握する作業になります。



10年くらい前のスキルマップ


・JavaScript … ブラウザの中で動くスクリプト言語という認識。
 スキル値:商用サービスでのコーディング経験が0。

・VBA … マイクロソフトのOffice内でしか動かない言語。
 スキル値:実務経験豊富。

・SQL … データベースを操作することに特化した言語。
 スキル値:実務経験豊富。

・Java … この中ではずば抜けて汎用性が高い。
 スキル値:残念ながら入門書の写経で学習がストップ。

このような状況でした。これが10年くらい前(2008年とか2009年とかそのくらい)。


つまり大雑把にまとめると、

・汎用性の低い言語の経験が豊富で

・汎用性の高い言語の経験がほとんどない

という状態だったのです。



フリーランスになるためのスキル構成


特定の会社に務めて、指定された環境でおとなしくコーディングしている分にはこれでもいいのです。そういういびつなスキル構成でも会社が守ってくれますから。

ところが独り立ちしてフリーランスでやっていこうとなると完全に話が別です。

厳しい現実をサバイブしていくための道具として
・より汎用性が高く
・より軽く
・より自分の思考と直結した
プログラミング言語が必要になります。


いま振り返ると、私の10年前のプログラミングスキルのマトリックスのままでフリーランスになるのはちょっと危ういです(※顧客のオーダーにもよるので一概には言えないですが、自分の置かれていた状況では貧弱なスキル構成だった、ということです)。



スキルの棚卸し


ではフリーランスになるために、どういうふうにスキル構成を変更すればよいか。
これも正解があるものではないですが、私の経験を例にひとつひとつ見てみましょう。


まずは手持ちのスキルを棚卸ししました。


1)SQL:サブ言語として継続使用
まずSQLは「常にサブとして持っておく言語スキル」という位置づけです。なのでSQLは吟味から省きます。正規表現などと同じで、至るところに浸透しているサブ言語だと思ってください。だからある意味プログラマで食っていくなら誰しも「全く知らない」ではすまされないものになります。

2)VBA:サブ言語だがほぼ棄て
次にVBA。これもフリーランスで独立してコーディングしていくならサブ言語に成り下がります。いろんな意味でパワーと自由度の両面が足らないですね。あくまでも汎用性に着目するとそう言わざるを得ません。
ただし(繰り返しますが)顧客がVBAでの開発をオーダーしてきているなら話は別です。それで未来永劫食っていけるならVBAだけを極めるという選択肢もあるかと思います。(私はそうではなかったです。)

3)JavaScript:一旦棄て
さて、もし、もしですよ、10年前のスキルマップの状態で、今(2019年)どの言語を深堀りしようかと検討するなら、迷わずJavaScriptでしょうね。2015年以降のJavaScriptは文法的にも改善されました。また、Node.jsが一般に普及したおかげでブラウザの世界を飛び出ることに成功し、言語としての利用価値が大きく向上しました。
今やサーバサイドからフロントエンドまですべてJavaScriptでコーディングすることが可能です。
…とはいえ、これは最近の話。10年前はちょっとそういう状況ではなかったです。

4)Java:一旦棄て
残るはJavaですが、いま思えばJavaプログラマでやっていく道も悪くなかったんじゃないかと思います。
10年前の時点でJavaは十分成熟していましたし、コーディングやコンパイルが軽量かどうかは若干疑問ですが、汎用性や自由度の面では申し分ない言語と言えると思います。
まぁ、こういうコメントをここに書いているということは、フリーランスで独立した当時の自分はJavaの道を選ばなかったわけです。

(Java余談)
少し前にScalaというJavaの姉妹言語を勉強してみましたが、書いていてとても楽しい言語だと思いました。あと、ProcessingというJavaベースのヴィジュアルプログラミングをやってたときもとても楽しかった思い出があります。Javaはとにかく守備範囲が広くて柔軟な文化を持った言語だなぁという印象が強いです。


このような棚卸し結果でしたので、結局新たに『自分の軸になる言語』を探す旅に出ることにしました。



自分の軸になる言語


実際に独立したのはなんやかんやあり2012年でした。

ここまで書き出したような「いびつなスキル構成」は自分でも認識しており、2010年くらいから細々と改善に取り組んでいました。

つまり賞味2年間ほど、いろんな言語をかじって回ってました。

改善のコンセプトは「自分の軸になるプログラミング言語を探す(VBA以外で)」というものです。

1)C言語:知識的なベースができた
最初に取り組んだのはC言語でした。
割合有名な「苦しんで覚えるC」(略して「苦C」)という初心者向けのお勉強サイトがあるんですが、ここに載ってることを一通りやりました。
あとC言語の入門書も何冊か消化しました。
で、結局C言語は消化不良を起こしました(笑)。
そういうわけでC言語が身についたとはあまり言えないのですが、それでもいろんなところで使われているこの超メジャー級言語の概要がわかったことはプログラマ人生において大きな収穫でした。

2)PHP:縁がなかった
次にPHPをちょっとだけやりました。当時はPHP5でした。
独立後にWEBアプリを作ることが仕事の中心になるような道を選んでいたら、このままPHPを書き続けていたと思います。
でも、そうはなりませんでした。
だからPHPという言語との相性がどうとか言う前に、業務で使う機会があまり多くなく、自分の仕事場からこの言語がフェードアウトしていった、という感じでした。

余談ですが、WordPressを個人のブログで使っていてたので、ちょっとしたカスタマイズやメンテなどをするのにPHPの知識は大いに役立ちました。



Perlとの出会い


はい、ものすごく長い前置きにお付き合いいただきありがとうございます。ここまで来てやっと私はPerlという言語に出会いました。2011年ごろだったと思います。

その当時の自分にとって、レベル的にしっくりくる入門書があり、手軽に使えて、かつ、独立後の仕事で取り扱う問題領域をしっかりカバーしてくれるパワーとスマートさが備わっている言語、そういうものを欲していたわけです。

※当時はこの入門書の第5版で勉強しました。


2011年だともうすでにPerlはあまり主流ではなく、また、将来性がないと見られていて、RubyやPythonにその地位を奪われてたと思います。
こういうトレンドに関することも今だから言えるのであって、当時はそういうことは別に考えていなかったし、気にもなりませんでした。

というのもPerlを使用する目的が純粋に自分のためであったからです。自分に向いてて、自分が使いやすければよかった。Perlを就職の道具にするつもりもなかったし、Perlを使っているチームに入って仕事をするわけでもなかったので。



Perlと正規表現に夢中になる


2011年から2012年にかけて、Perlと正規表現は本当にがっつり勉強しました。夢中になってましたね。

独立するまではサラリーマン生活をしていたわけですが、行きの電車の中、昼休みの1時間、帰りの電車の中…これらの時間はオライリーの本を読みまくりました。

※Perlの入門書と合わせてこの本も隅からすみまで読み込みました。集中して読むのにファミレスに行って5時間読みふけってたこともあります。


そして家に帰ってくると、Macのターミナルを立ち上げて、ひたすらコーディングしまくりました。

幸い、自分よりも一足先に独立して営業活動を展開してくれていたメンバーがいましたので、その方から提示される「お題」を中心にして実務に直結するプログラミング課題に取り組むことができました。

Perlを仕事で使おうとすると、必然的にUnixの仕組みやWEBの仕組み、それからコードを管理するためのバージョン管理ツール(Gitなど)を勉強することになります。
こういった多種多様なツールをうまく組み合わせてプログラミング環境を便利にしていくという考え方自体が、それまで他のプログラミング言語を勉強してきた歴史の中であまり意識されなかったことで、とても新鮮に感じました。(そして大きく影響を受けました。いわゆるオープンソース文化というやつですね。)



Perlがネイティブになった


Perlの勉強はとにかく楽しかったという印象が強く残っています。

自分でやると決めて、自分で独学という勉強方法を選択し、自分でトレーニングメニューを組んで、自分の力だけでやり抜きました。

そうやって習得したPerlを使って飯を食えるようになり、それに伴って、自分の書いたコードに責任を持つようになりました。

だから、Perlを学んだ経験を通してやっと大人になったという感覚があります。
それまでにいくつかのプログラミング言語を習得してきましたが、この感覚はPerlがはじめてでした。

どこからか借りてきた受け売りの言葉ではなく、自分がネイティブで話す日本語のように、自分という存在の中から自由と責任の混合物として吐き出されるものとして、つまり、自分自身の言葉としてPerlのコードを書くようになりました。

そこのところが、趣味で使ったレベルのJavaScriptや、サラリーマンプログラマとして書いていたVBAなどと比べて、非常に大きな違いです。

この「ネイティブ感が持てるようになるかどうか」が、「プログラミング言語を習得したと言えるかどうか」と自分的には同じ意味になります。あるプログラミング言語が自分自身の思考とつながっており、書き出すコードに責任を持てる…この状態を達成できてば、プログラミングができるようになったと言っていいと思います。



まとめ


・自身のスキルを棚卸ししてスキルマップを把握しよう。
 ※図にして『スキルマトリックス』を作ってみるのをおすすめします。

・いろんな言語をかじってみるのは全く無駄になることはない。どんどんやればいい。

・でも結局は自分が本当に惚れ込んだ言語と出会わないと「ネイティブ感」はつかめないのではないか、と思う。

・自分の思考と直結した言語で書き、書いたコードに責任が持てるかどうかでプログラミングの習熟度がわかる。


自分自身のこれまでの経験を通して言えるのはそんなところでしょうか。



余談


Perlをがっつりやったおかげで、プログラミングの基礎ができました。一旦基礎ができてしまうと、2つ目3つ目の言語を習得するのはそれほど難しい話ではありません。

私の場合は、RubyやPythonを業務で使うために勉強したときは、Perlの知識をかなり応用できたので、どちらも1ヶ月かからずに業務用のコードをガンガン書き始めていた記憶があります。

また、それまで親しんでいたパラダイム(どういう考え方でプログラミングしていくか)が異なる世界観の言語にも果敢に挑戦していけるようになりました。いまの自分があるのはLispという言語を勉強したことがかんなり大きいです。Lispの学習過程では、それまでのプログラミングに対する固定観念をぶっ壊し、再構築させられました。Lispの仕組みや哲学的な部分はそれくらい当時の自分にとっては衝撃でした。



余談2:ビギナーへのメッセージ


これからプログラミングを勉強しようと思っている方は「とにかく最初が一番大変なんだ」というのを覚えておいていただきたいです。

逆に言えば、最初の学習障壁を乗り越えてしまえば一気に学習の自由度が上昇し、やってみたかったこと、憧れていたことにどんどん挑戦して行けるようになります。ですので、最初だけぎゅーーーーっと我慢して、踏ん張って、ぜひともその壁を乗り越えてほしいです!

この記事が参加している募集

自己紹介

この記事が気に入ったらサポートをしてみませんか?