見出し画像

スキルが自分のものになってるか

スキルマニアの松山です。わりといろんなスキルを持ってるほうだと思います。

もともとMacのネイティブアプリ開発してて、MacOS8〜OSX。QuickDrawではやりきれず、OpenGL覚えて、OSXではCocoa使っていろいろ作って。そのあとiOSへ。並行して、PIC学んでマイコンやって電子工作やって、エッチングとかでPCB自作。展示業界の様々開発に行き、ハードもソフトも様々やって。openFrameworksや、Arduino、RaspberryPi、Python、C++、swift、CAD、CAM、工作、簡単なメカ設計...

他にもGUIデザインとかデザイン作業。プランニングとか、プロデューサー、ディレクター、経営者など様々な役回りのスキル。

そんな自分からして、スキルを身につけるということはなんなのかを考えてみようと思う。

基礎は一つ目のスキル

自分の場合は、小学生の頃からやってたBASICだろう。プログラミングの学びのスタート。

画像1

上記gifはWikipediaのN88-BASICから。
 INP関数でテンキー(0から7)の状態を確認 by Chihoukou

もともと独学でN88-BASICを学んでたけど、よくわかってなかった。小学生に「任意の〜」とか「N番目の〜」とかそういう表現はなかなか難しく、掲載されたサンプルプログラムを写経して実行、数字を変えてなんとなく理解というのをやってただけ。ちょうどその頃できた小学校のプログラミングクラブみたいなのがかなり有益な時間となり、基礎の理解ができた。

そのあとは、マイコンBASICのおかげでどんどん深まり、簡単なゲームとか作ってた。

なんか、この頃は楽しくてしょうがなくて、ひたすら繰り返しプログラム書いてて、似たようなのを何回も作り直したり、思いついたことを表現しようと格闘してた。この時間はかなり有益で、おそらく自分の基礎がここでできた。

(PC-9801とかは電源入れてしばらく放置するとN88-BASICで起動し、フロッピーに保存などできないがプログラミングはできる状態になるので、それで学校のパソコン使って勝手に遊んでた)

部活で学んだこと

話は変わって、高校(高専)の時に弓道をやってた。弓道というのは基礎しかない。理想とする射をするためにひたすら反復で練習する。究極に美しく弓を引くと、それは必然的に的に当たるということになっていて、それを目指す。

そんな弓道をやる中でもスランプとか壁とか何回もある。何かを極めようとすると、そういうことが度々あるもので、それを乗り越えながら上を目指していくわけだ。スランプとかにはまると、まるで後退したかのような感覚になり、劣等感みたいなものに支配される。それを乗り越えると、スランプ以前よりも安定したいい状態になったりするわけで奥が深い。

プログラミングの世界の美

数式にも美しいとかあるように、プログラミングにも、美しいプログラムとかそういう概念はある。なんとなく、弓道をやってた自分としては、そういうのがたまらない。美の追求。

プログラミングの世界で美の追求というと、それは書き方という表面的なことにとどまらず、アルゴリズムの秀逸さやコード設計の一貫性とか、そういうのが重要になると思う。それを追求するってことは、同じ機能のコードを何度もチューニングする作業になる。ちゃんと動くものなのに直すというストイックな作業だったりもする。

車輪の再発明

プログラミングの世界ではよく耳にする言葉だ。

すでに発明済みのものを知らずにゼロから作ってしまうことを無駄な行為として話す時に使う言葉だ。

これは少し違うと言いたい。

たとえば、何かを新規に学ぶときは、真似して作るという模写みたいなことを修行の一環でやることがある。模写は再発明を意図的にする行為だ。

そして、自分を振り返ってみると、自分の書いたコードのみを信じて、でも自分のしたことはいい加減だという前提で、何度も書き直して美を追求する。ある意味、これは反復練習。反復練習というのは、とても効果的なもの。反復練習の大事さは弓道でとてもよく理解している。

その反復練習は体に覚えさせるという言葉で語られるかもしれないが、自分が思うに、これは体が覚えるのではなく、脳が覚えるのだと思う。反復を繰り返すと、すごく複雑な動きも一言で表せる一つの動作に変換され、意識せずとも一連の動作が呼び出せるようになる。

脳の訓練だとしたとき、プログラミングのような思考作業においても有効であると考えられると思う。

過度に無駄を避ける

再発明を嫌って、既存のオープンソースコードを探し、中のコードも読めないまま鵜呑みにして使うということしか重ねてない場合、反復的なトレーニングを経験せずに進んでいくことになると思う。

自分のコードを使い回すためにライブラリ化して二度と書き直さないというのもあるだろう。再発明を悪としすぎた結果だと思う。自分が思うにそれは過剰で、学習機会を失ってると思う。

自分の場合は、同じ書き出しを何回もタイピングしていく行為をよくやる。openFrameworksなんかだと、いつもゼロの状態から書き出し、最低限のGUIとかsetup()内にかくいつもの書き出しを毎回タイピングして書いてる(補完は使う)。

毎回ほぼ同じ書き方をするわけだけど、毎回書いてる。コピペしない。そうやってると、なんか時々違和感を感じて、新しい書き方にチャレンジしたりする。そうやってるうちに最適な書き方が更新され、新しい学びがあることがある。

新しい言語やフレームワークを覚えるときもそうなる。体に覚えさせると意識して反復する。(タイピングが好きなだけなのかもしれないが、効果はあると思ってる)

まとめ

体が覚えててスラスラ書ける状態の言語やプラットフォームを一つでも持ってると、それは基礎として機能し始める。基礎があると、他の新しいスキルを習得するスピードが断然はやくなる。

脳を使う作業も反復は有効。ゼロから作るという経験がゼロだと、時に底力に欠けるのではないか、と思う。

これはただのおっさん現象かな。。

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