一応、わたくし、高校生のころからプログラミングをたしなんでいる。
- 高校生某高校 総合学科出身(情報処理系科目選択)
COBOLやったり、基本情報の勉強したり
- 専門学校大原情報ビジネス専門学校 情報処理系卒業(2年)
ひたすら基本情報やって、応用情報やって、VB6・C・Javaに触れる
- 就職中小メーカー就職
C++(BCB)から始まり、Java・VB.net・C#などなど
かれこれ、二十年ぐらい経とうとしている。
触れた言語はCOBOLに始まり、C・C++・C#・VB6・vb.net・Javaなどエトセトラ。基本的なところは抑えている。
今は幸か不幸かWEB系を扱っており、名ばかりのIoTプラットフォーム()と日々、戦っている。
ノンプログラミングでシステム開発! と歌いながら、何もできないじゃねぇか!!!(プログラミングの方がマシじゃ!)
と、まぁ、私の愚痴はさておき(そう言いながらつい頭にきて、先日転職エージェントのお世話になった)
完全自論だが、私なりにプログラミングをマスターするコツを語ってみようと思う。
と思っている人に少しでもビビッと来るような記事を書ければと思う。
簡単にまとめると
となる。
では早速、ひとつずつ、読み解いていこう。
プログラミングをマスターするには
高額なセミナー・教材は一切不要
何故かと言うと、本当に出来る人ほどそんなものを利用していないからだ。
趣味でやっている人の方がはるかに凄い
これをマスターすれば○○○は完璧! とあるように、セミナーや教材は特定の言語に特化している。
ちょっと考えれば分かるが、その言語自体が廃れてしまったらその価値は一瞬にして失われる。
お高いセミナーとか教材は会社のお金で行くもの! 会社で行けない(行かせてもらえない)セミナーは色々と怪しい!!!
基礎知識は独学で十分
独学だと基礎知識が十分につかずに、周囲に迷惑をかけるし、自分も後々に困る!
と言う人も居るだろうが(そして高価なセミナーや教材を勧める)、私はそう思わない。
基礎知識など何となくで良いのだ。後は、ひたすら実践あるのみ、経験を積まないとプログラミングスキルが身につくことはまずない。
学生時代に多少でもプログラミング言語に触れたことがあり、なんとなーくだけど分かるという人は不要なくらいだ。とにかく実践を詰め。
Cを例にして極論から言うと、ポインタが値ではなくアドレス(番地)であることが分かっていれば十分だ。
C++やJavaならクラスという概念があったな~ぐらいで良い。
いやいやいやいやいや、ダメでしょ
厳密に言うとそうなのだが、心配しなくていい。
余程、プログラミングに長けた人と遭遇しない限り、それらを完璧に熟知した上で組まれた行儀良いお綺麗なプログラムに遭遇することはまずない。
私とてそのようなお行儀の良いソースコードと巡り会ったのは、下記記事に出没している例のどらえもん先輩ぐらいである。
彼の書くコードはとても美しかった(そして、さらっと見ただけの私には理解不能だった)
記憶に新しいだろうが、セブン・ペイを覚えているだろうか? あの大手企業のセブイレブンすらあのようなずざんなものを出してくる始末なのだ。
(まぁ、あれは指示を出す側の人間がダメダメだった上に、発注先の下請けもあまり宜しくなかったことによるダブルコンボのようだが)
もう一度、言う。
基礎知識を全て熟知した上で組まれたコードなど、この世に早々ない。
下手すると、それこそグーグルとかアップル社レベルにならないと拝めないんじゃないかとすら思う。
そういうところに就職できるスキルがある人は確かに、土台である基礎知識からしっかり学んだ方が良いと思うが、大半の人は残念ながらそうではない。勿論、私も含まれる。
だからこそ、基礎知識は「ふーん」レベルで良い。ここまで来たら
だからといって学ぶのを止めるワケではない。後で分からなくなった時に、そのまま放置せずに改めて調べる癖をつけておけば良いのである。
出来れば、私で言うところのドラえもん先輩なる人物──要は師匠を見つけると良い。分からなければエキスパートに聞くのが一番である。そして、技術を盗み出し、自分の血肉にしよう。
残念ながらそういう人が居ないという人は、Google先生に聞いてみると良い。分かりやすいサイトに巡り会えたり、実践を詰んだことで理解できなかったものが唐突に理解できるようになることがある。
優れている人のプログラムを見て、組み方や手法を学ぶ
これが一番重要である。
私は未だにドラえもん先輩のソースコードを持っている。実践経験を詰めば詰むほど、いかに計算されつくした美しいソースであるか、身に染みて分かるのだ。
言語以上に学ぶものが多い
美しい以外のなにものでもない
これらが出来ていると、仕様変更の際に何処を修正すれば良いのかすぐに分かり柔軟に対応出来たり、機能ごとにプログラムが切り分けられて作られていると他のプログラムへの転用が容易に出来る。
これらの積み重ねはとても大事で、使いやすい手持ちのプログラムが増えると、次にその機能を使いたい時に改めて作る必要がなくなる=時間節約! けど、その分のお金は貰える! とまさに一石二鳥なのである。
とある方がとても美しいイラストを仕上げるのに一時間かかったとする。それを一時間で描けるようになるまでには何十時間、何百時間の積み重ねの末にあることをご存知だろうか。当然その分の対価は頂くべきなのと一緒であり、通ずるものがあるのだよ。
そんなことを知らず
機能ごとに作る? そんなの簡単なんじゃないの?
と言う心ない人も居るが、なら自分でやれ。
と、言うのはさておき、これが実は言葉で言うほど簡単ではない。
ザラである。
適切な値を引数にとり、適切な値を返却するプログラムは言うほど簡単に作れない。少しでもプログラミングをたしなんだことのある者なら分かるハズだ。
だからこそ、この人はすごい! と思う人を身近に見つけたのなら、その人のソースを全て入手し、隅から隅まで見てみよう。
気づけることがたくさんあるはずだ。
デバッグ手法を覚える
一番、重要である。
と、言うか、これが分からないと実践向きのプログラムが組めないのはおろか、未知のバグが起きた際に対応が出来ない。
統合開発環境を使っていれば大概、デバッグ機能がついており、ステップ実行だとかブレークポイントだとか監視式だとか出てくるだろう。まずはその辺を使えるようになろう。
統合開発環境がない場合は何らかのログを仕込み、そこから読み取るカタチになる。Linuxならsyslogを使えばいいし、会社でログを吐き出せるプログラムが組まれたものがあるならそれを利用すれば良い。
ログさえ出力出来れば、処理のステップや変数の値を出力することで、どの時点でエラーが起きたのかを絞り込むことが出来る。
言語名や統合開発環境名+デバッグでぐぐれば大体、分かるだろう。寧ろ、そこでひっかからないようなものはマイナーなので、初心者は避けた方が無難である。
プログラムを書いている人の気持ちになろう
前振りで基礎知識は独学レベルで十分と言ったが、それには理由がある。プログラミングはどちらかと言うと知識よりも、センスを問われる仕事である。
経験者・未経験者問わず、向いている人は向いているし、向いてない人は何処までも向いてない。よくブ〇ック企業が人材欲しさに「初心者や文系でも大丈夫!」と言っているが、あながち間違いではなかったりする。
特に個人で請け負うならともかく、会社だとしたら尚更プログラムを新規開発するこはマレだ。新規開発だとしてもほんの試作だったり、土台は今まで作ってきたものを組み合わせて──というのが大半だろう。
プログラムを一から作ることはほぼない。他人が作ったプログラムを読み解き、バグを見つけ出し、修正することが大半だ。文系に必要な読み解く能力が鍵なのだ。
大事なのは己の技量よりも、プログラムを作った人間の気持ちをトレースすることのだよ!!!
そういう意味では小説を読み書き出来る人は、プログラマ向きなのかもしれない。
手近なところだとwordpressのcocconのPHPを読み解くことは、本当にとても良い教材だと思うので、興味ある人は触れてみて貰えればと思う。
まとめ:とにかく実践を詰み、尊敬すべき師匠を見つけよう
ぶっちゃけ、学校で学ぶことや教材系はほぼ役に立たない。だからこそ、基礎的なものは何となく知っていれば良い。
知識なんぞ無くてもインターネットで調べれば良い。未だに私は文字列⇔数値変換をいちいち調べていたりする(ガチで)
それでも不満なら職業訓練校なり、有名どころの学校(大原など)に行けば良い。とりあえず、どんなに有名だろうと個人が出すようなセミナー・教材には手を出すな。
就活や転職する時のことを想像してみれば良い。面接を受けた際、「〇〇さんのセミナー・教材で学びました!」はかなりうさんくさいが、「職業訓練校に行きました」「大原の社会人講座で学びながら、独学でもこんなことしました」「学校は行っておりませんが、VBAでこんなものを作ってみました」の方が信用度も増すだろう。
まぁ、少し邪道ではあるが、精神がタフであり、給料いらんと割り切れる人はブ〇ック企業に入社し、学ぶのもアリだと思う。色々と忍耐強くなれるだろう(ただし、私としてはあまり勧めない)
ではでは、この辺で。
コメント