1. 自己紹介
1982年生まれのベテラン、いわゆる第二世代のプログラマーです。C++BuilderやDelphiから始めました(聞いたことがない方も多いでしょう)。DOS、UCDOS、Pctoolsを1年以上使ってきましたので、自分は古参の部類に入ると思っています。
私の座右の銘:
誰かに教わった技術や、すでに本がある技術は、もう時代遅れだ。
ある日、どうしても答えが見つからない問題に出会ったときは、喜ぶべきだ。なぜなら、あなたは最先端にいるからだ。
この2つは、私が約20年のプログラマ人生(16歳からプログラミングを始めました)で得た悟りです。これが私が経験してきたIT業界です。
2. IT業界の現状
以下、私のIT業界に対する非常に浅い見解を述べます。学歴が低く(短大(通信教育))、批判があればどうぞ。
90年代のIT業界の大ブームから現在まで、IT業界はますます成熟してきたと感じます。IT業界、あるいは社会全体は泡のようなもので、100%から70%に圧縮するときには多くの隙間やチャンスがありましたが、30%から10%に圧縮するときには、その隙間はどんどん少なくなっています。起業のチャンスも同様に減少しています。
現在、社会のルールはますます細かくなっており、そのルールに従って行動すれば社会がすべてを保障してくれます。しかし、突破を図ろうとするのは至難の業です。
今の学校の後輩たちは皆、とても迷っているように見えます。社会にはライブ配信、宅配など様々な稼ぎ方があり、それらは自分が学んできたこととは全く無関係です。大学で学んだことが社会と完全に断絶していて、どう社会と向き合えばいいのか分からないようです。
3. 個人的な悟り
以下、自分の悟りを述べます。
3.1. アイドルは何のためにいるのか?
幼い頃は力強い父親がアイドルでしたが、成長するにつれて様々なアイドルが現れます。先生であったり、年上の人であったりするかもしれません。
アイドルは尊敬するためにいるのでしょうか?私はアイドルは目標であり、追い越されるために存在すると思います(少なくともIT業界ではそうです。IT業界は発展が速すぎるからです)。
学校では自分の先生を超えること。私はこれがIT人の基本的な卒業条件だと思います。もし卒業時に先生すら超えられなければ、スタートが少し遅れていることになります。
3.2. 最初の仕事は非常に重要。
自分の専門を貫き、どんな困難があっても専門知識を放棄してはいけません。なぜなら、後の人生の仕事には多かれ少なかれ最初の仕事の影が残るからです。最初の仕事がどんなに辛くても、耐え抜くべきです。
3.3. 技術の蓄積。
これは長くなります。ITとは結局、様々な業界にサービスを提供するものです。突き詰めればサービス業であり、IT技術を使って様々な業界の発展を加速させるものです。したがって、純粋なITだけでは成り立ちません。機械設計や建築設計など、基本的にどの業界もITを必要としています。その場合、IT専門家は気の毒です。IT知識だけでなく、他の専門知識も学ばなければならないからです。なぜなら、あなたが書くソフトウェアはすべてそれらの専門分野のためのものだからです。つまり、少なくとも2つ以上の専門分野を学ぶ必要があります。
しかし、IT技術に特別な要求がある業界を除き、90%以上は管理系、様々な管理や業務プロセスです。このような業界では、業務プロセスへの理解がより重要であり、技術はそれほど重要ではありません(例えば、管理システムの場合、業務プロセスに詳しい人がいれば、新人を数ヶ月研修すればコードが書けるようになります)。そのため、いわゆる35歳の危機が発生します(35歳になると、若い人ほど残業ができず、給料も高いため)。
コンピュータはそもそも我が国の発明ではありません。我が国のソフトウェア産業は半ばからスタートしたと言えます。現在、多くの業務系プログラマは低レベルの技術を理解していません。なぜなら、コンピュータというものの基礎技術自体を我々は理解しておらず、力を込めようとしても、綿の上に足を踏み入れたように力が入らないのです。
4. 起業についての共有
以下、IT業界で個人の力で起業したい人に向けて書きます(私の意見に過ぎません)。低レベルの技術に注目すべきです。なぜなら、低レベルを理解して初めて真の突破が可能になるからです。
今の時代にIT業界で起業するのは本当に難しい。業務系でいえば、自分が持っているのは業務に精通した経験だけであり、コネも人脈もありません。長年技術に携わってきたため、対人コミュニケーションも得意とは言えません。
エネルギーや家庭の問題が許さない。女性は天の半分と言われますが、男性が起業する際に後ろ盾となる家庭がなければ、すぐに破綻します。
起業とは、自分の3年間を賭けて30年分の自由を得ようとする行為です。成功すれば30年の自由時間を手に入れ、失敗しても元の自分に戻るだけです。
35歳(未婚)までに、私は2~3回の起業のチャンスがあると思います。それを逃した場合、結婚後に再び起業するのは本当に難しい。
プログラミングに行き詰まったときは、プログラミングの固定観念を捨てて、現実の生活の中に答えを探すべきです。この言葉は理解しにくいかもしれませんが、私が以下に説明することで、多くの初心者プログラマの疑問が解消されるかもしれません。
どんな言語であれ、その本質は現実世界の記述です(教科書では「抽象化」と言いますが、私は「記述」の方が適切だと思います)。プログラミング言語を発明した人の立場に立って考えると、現在の世界を記述できる何かを発明しようとしているのです。
多くの言語の基底クラスはOBJECT、つまり物体です。すべての物体には属性(名前)があります。私たちの世界を例にとると、世界を1台のコンピュータと考えることができます。メモリは空気のようなものです。人(人の定義)は歩くことができ、火を使うことができ、性別があります。これは人の基本的な定義ですが、それはあくまで定義であり、仮想的で、空気を占有しません。これをインスタンス化し、継承という概念を適用すると、初めて空気を占有します。すると「誰々」という具体的な人になります。人はメソッド(歩く、走る、跳ぶ)を持ち、イベント(痛み、笑い)を持ちます(もちろん、継承後は各人の実装方法は千差万別です)。スキルはインターフェースに相当します。例えば、ある人が運転インターフェースを実装していれば、その人は車を運転できます。プライベートなものは自分だけが使えます。例えば、あなたの手や足は他人が使えません。プロテクトされたものもあります。例えば、あなたのお金(笑)。実は、プログラム内のすべての概念は現実世界に対応するものがあります。なぜなら、これらを発明した人々は現実世界を記述していたからです。だから、頭が混乱したときは、現実世界で答えを探すべきです。
- 知識爆発の時代。以前はこの言葉の意味がよくわかりませんでしたが、徐々に理解できました。つまり、現代は知識が膨大で、どんな専門分野や学問でも一生かけて学べます。かつては「チャンスは準備ができた人に訪れる」と言われ、人間の脳は無限だとされていました。しかし今は、準備には代償(時間とエネルギー)が必要です。脳は本当に無限なのでしょうか?昨年の誕生日を誰と過ごし、何を食べたか覚えていますか?80年代生まれの私たちは、ほぼ全員が約10年かけて英語を学びましたが、実際に使える人はどれだけいるでしょうか?「学ぶことは無駄にならない」と言いますが、そこには代償があります。10年学んで生み出した価値がごくわずかであれば、その10年で別の多くのことを学べたかもしれません。ネットでもよく聞く話ですが、おばあさんがアメリカに数ヶ月滞在して帰国後、私たちよりずっと流暢に英語を話すようになったという話があります。知識を使わずに「いつかのために準備しておく」というのは、現代では数世代かけても準備が足りないでしょう。私は実用主義者です。プログラミングを学ぶ際は、まず基礎理論をしっかり固め、その後、実際に使う部分だけを学ぶべきだと思います。すべてを学ぶ必要はありません。学びきれないからです。あるいは学習の代償が大きすぎるからです。問題を抱えて学ぶべきです。
5. 最後の一言
現在、多くの人がプログラミングを学ぶときに最初にオブジェクト指向を学びます。私はQbasicをお勧めします。その字面からも「基礎」であることは容易に理解できるでしょう。