私はほぼ未経験の状態で中途採用でコの業界に飛び込んだ人だ。学校で情報処理関連の勉強をしたことはなかったし、独学でプログラミングをかじっていた訳でもなかった。今の勤め先に就職する直前の約半年間、職業訓練で情報処理の勉強をしたぐらいだ。
そういった背景があるので、この間会社の新卒者向け就職説明会に「未経験で飛び込んだ人」代表で顔を出す機会があり、未経験(学校で情報処理の勉強をしたことも、プログラミングする機会もなかった人)でもコの業界でやっていけるかどうかについて話してきた。
ただ生来の話下手なので、内容がうまく伝わった気がしない。そこで、話そうとした内容をベースに、未経験でも技術的な面でキャッチアップできるかどうかについて書いてみようと思う。
その前に注意点。私は地方の組込み系ソフトウェア会社に勤めている。いわゆる中小企業のサラリーマンだ。SIだとか大手メーカーの人ではない。そして今のところシステムの実装の仕事が圧倒的に多い。そういった人の個人的な見解であることに留意してほしい。
私の見解としては、条件付きで「大丈夫」だと思う。未経験の人でも、専門教育を受けた人に追いつき、追い越すことができる余地がある。そして多分、専門性が求められる(だろう)分野の仕事としては、ソフトウェア開発は比較的キャッチアップしやすい部類に入る。
但し前提条件がある。
- 専門教育の有無に関係なく、コの業界で仕事している間は継続して勉強すること。この仕事は技術職/技能職的な側面が大きいし、ドッグイヤーな(という程でなくとも主要技術の変化が早い)分野だ。
- 未経験の人は他人より多く学習する必要がある、ということだけは覚悟しておくこと。
以下、この結論に至った理由を挙げておく。
プログラマは素質/適性の有無が大きい職種だが、適性の効果的な判定方法が無い
何を言いたいかというと、
- 素質がある人は、プログラムを書けるようになる。
- 素質がない人は、専門教育を受けてもプログラムを書けない。
- プログラマの適性を判定する決定的な方法は、今のところ存在しない。
- 適性を判定するそれなりに効果的な判定方法はあるが、その判定でふるいをかけられることは殆ど無い。
……という訳で、入社した時点では、専門教育の有無に関係なく素質/適性が無い人が含まれている*1。
専門教育を受けてきた人でも、適性がなければプログラムをうまく書けるようになれない。逆に、未経験で入ってきた人でも、適性があれば伸びて、直ぐに専門教育を受けてきた適性のない人を追い抜くことになる。
そして、あなたは適性がある人かもしれない。
但し、プログラミング能力の開花には数ヶ月〜2年ぐらいかかるらしいので、性急に判断してしまわないように注意すること*2。
業界全体として、技術レベルの低い人が意外と多い
嘆かわしいけど、本当のことである。分野にもよるだろうけど、歴史的事情やら何やらで、コの業界には技術レベルの低い人が結構存在する。
逆に言えば、その分だけ他の人より頭ひとつ抜け出すチャンスがあるということだ。キッチリ勉強しつつ経験を積んでいけば、彼らを追い越すことができる。もっとも、技術レベルの低い人に足を引っ張られて苦労することになるかもしれないけど ;)
ちなみに私の場合、幸運にも勤め先には優秀な先輩が多い。オールマイティに色々やったことのある人も多い。レベルアップを目指すには悪くない環境だと思う。
ドッグイヤーなので、学校で学んだことも(全てではないが)陳腐化する
仕事で使う主要技術の移り変わりが早いので、専門教育を受けてきた人でも自己研鑽を怠れば数年後には時代遅れになってしまう。
その反面、未経験者でも怠けずに勉強していけば、サボっている人に追いつき追い抜ことができる。
で、企業風土にもよるだろうけど、大抵の場合は仕事以外の場で情報収集したり勉強したりすることが必要になる。業務を通じて学ぶのは大事だが、しかし業務からのみ学ぶだけでは得られるモノの量は限られるし、偏りもでてしまう。
基礎教養的な知識の量がそれほど多くないので、他分野よりも学習コストは低い
電子計算機の歴史は半世紀ちょっとと浅い。しかも発展途上の分野で、ドッグイヤーと言われるぐらいに技術の陳腐化が激しい。今日正しいことも、明日には誤りとなることが意外とある。
それでも半世紀の内に基礎教養的な――あまり陳腐化しない知識が溜まってきたのだが、他の分野と比べると、それらの知識の量は少なめだと言える。今の所、独学でも何とかなるレベルではないだろうか。
基礎教養的な知識が少ないということは、学習時間が短くて済むということだ。また1つ学んだだけでも効果が大きい。10個のうちの1個と、20個のうちの1個の違いだ。
因みに、現在の技術の大半は基礎教養として学べる内容を発展させたものなので、基礎教養部分を学んでおくと最新技術の習得コストが下がる傾向にある。この辺りを意識して基礎を勉強すること。
未経験者は、学習の早い段階から仕事としてのソフトウェア開発に必要なことを学べる
学校では、仕事でソフトウェアを開発する際に必要なことを学ぶ機会が少ない。例えば『プログラミング作法』や『Code Complete』に書かれているような良い作法を学校の授業や講義で学ぶことは無いのではないかと思う。
そういった環境にいた人は、自学自習したのでもない限り、プロのプログラマとして必要な良い習慣を学ぶことなく数年間コードを書いていて、その間に妙な癖がついてしまった可能性がある。
彼らは(気が付いた人は)就職してから良い作法を学ぶことになるが、しかし幾ら若くて柔軟性があるといえども、一度付いた癖を直すことは難しい。繁忙期など、ついつい書き慣れたスタイルに戻ってしまうものだ。
しかし未経験で入ってきた人は、プログラミング経験の早い段階から良い作法を学べるチャンスがある。スタイルを確立する初期の段階で良い作法を取り入れ、癖にしてしまうことができる。
私の場合、入社2ヶ月後に『プログラミング作法』に出合ったことが良い方向に作用したと考えている。
テスターに関する専門教育がほぼ皆無
これは盲点かもしれない。
知らない人向けに書いておくと、テスターというのは、ソフトウェアのテストをする人。ソフトウェア開発では結構大事なポジションで、最近色々とクローズアップされるようになってきた。しかし未だに地位が低いことが多い。
今の所、テスターに関する専門教育はほぼ皆無に近い。座学でブラックボックス/ホワイトボックスに始まるソフトウェア・テストの知識を学ぶことはあるが、実践にまで結びついていない。
例えば専門教育を受けてきた新人が書いた課題プログラムでも、入力値チェックが非常に甘い。テストを専門にしていない私が突くだけでも、穴がぼろぼろと見つかる。勿論彼らはプログラムを提出する前に動作チェックしているのだが、チェック内容が大甘なのだ。
だから多分、専門教育を受けた人も未経験な人も、ソフトウェア・テストに関してはどんぐりの背比べで、それはつまり、テスターへの入り口の敷居が低いということだ。
ちなみに私は入社直後にテスト業務の手伝いを何度かしたことがある。その経験から感じたのだが、未経験者でも、例えばWindowsアプリを弄繰り回すのが好きな人ならテスターに向いていると思う。後は知識面を独学しつつ経験を積んでいけばよい。