現在IT企業への就職を目指して就職活動をしている人や、将来ITエンジニアになることを夢見ている人の中には、プログラム言語の勉強をしている人も多いでしょう。
今回はそういった勉強を頑張っている方々に向けて、何を重点的に覚えて、何を覚えなくて良いのかという勉強のコツを紹介しています。勉強に時間がかかっている人や、挫折してしまいそうな人は、是非参考にしてモチベーションをあげたり、学習効率を高めることに役立ててください。
プログラム言語の知識とIT業界の職種
ITエンジニアには色々な職種がありますが、最も有名なのはプログラマーではないでしょうか。プログラマーは、実際にプログラム言語を使って様々なソフトウェアを生み出す職種です。材料を必要とせず、何もないところから自分の頭脳で新しいソフトウェア製品を生み出すプログラマーという仕事は、とても夢があってやりがいの多い仕事の一つです。
プログラマーとして働くためには、当然プログラム言語を扱うスキルが必要になります。
プログラマーになることを目指している人の多くは、独学だったり学校その他でプログラム言語の扱い方を学ぶことになるでしょう。コンピューターやソフトウェアの歴史はそれほど長くはありませんが、急速な発展に伴って膨大な情報が溢れています。人によっては、プログラム言語に関連する全ての情報を暗記して覚えなければならないと考えてしまい、挫折したり学習に膨大な時間をかけてしまうこともあるでしょう。
プログラム言語の勉強において、文法や関数・クラス等の使い方などを知ることは重要です。それらを知らなければプログラムを作りはじめる事さえ難しいでしょう。ただ、全ての事を覚えて暗記しておく必要はありません。
プログラマーの仕事は調べられる環境
技術的な内容を覚えていて、知識が豊富な人は頼りになります。しかし、現代のインターネット社会においては、覚えていない内容などは簡単に調べることが出来るため、仕事の環境や職種によって「覚えておく事」の重要性は変わります。特に、プログラムを実際に制作する環境で仕事を行うことになるプログラマーは、同時に調べることが可能な環境であることが多く、細かな点は適宜調べながらプログラム作業を進める事ができます。
SEやPMといった上流工程のエンジニアは知識勝負
逆に、顧客等と直接対話しながらソフトウェアの技術面についても説明する能力が必要になるSE(システムエンジニア)やPM(プロジェクトマネージャ)といった上流工程のエンジニアでは、調べながらでは話にならないので、最低でも技術面の大枠や筋道を覚えておく必要があります。そういった役職の人は、技術的な内容を、技術知識がない人でも理解できるようにかみ砕いた解説が必要になります。プログラム言語の細かな仕様や都合などは、相手にとっては「関係ない事」なので、技術者以外との会話においては必要ありません。上流工程のエンジニアになれば、プログラム言語の細かな点は「何となく知っている」くらいの知識で問題なくなります。

ここからは、もう少し具体的なプログラマーの仕事を掘り下げながら、どのようにプログラム言語の学習を進めていくべきなのかを見ていきましょう。
現職のプログラマーの技術情報の取り扱い
昨今のプログラム言語は、それ自体のアップデートも多く、現職のプログラマーも全てを追って覚えていくことが非常に困難な状況にあります。プログラム言語が動作する環境や扱う技術範囲が広くなり続けているため、人間が記憶できるレベルの情報量を超えていることも要因の一つでもあります。
覚えていないプログラマーであっても、実際にIT現場で様々な製品を生み出して活躍しています。
彼らは、確かにプログラム言語を使ってプログラムを積み上げて、一つのソフトウェアを作り上げていきますが、その過程で使うことになるプログラムの各種機能やクラス・関数など細かいことを全て覚えているわけではないのです。
現職のプログラマーも調べながら仕事をする
現在のプログラムの開発環境では、インターネットに接続して行うことが多く、一部特殊な環境を除いて、プログラムの制作を行いながら調べ物をすることは十分に可能です。つまり、現職のプログラマーも、独学学習をしているITエンジニア見習いの人と同じように、技術情報を調べながら作っているのです。
もちろんよく使う機能などは覚えているため、調べる頻度は勉強中の人とは違うかもしれませんが、細かなパラメータ(引数)や、戻り値の扱い、エラー値の定義など、リファレンスなどを調べながら実装を進めるということは、IT現場でもとても一般的な光景です。
調べる方法としては、インターネット経由でリファレンスや公式の情報を参照する他、一般のWebサイトから他のITエンジニアの経験を参考にしたり、情報共有をしている掲示板のようなサイトでトラブル解決の方法を参考にするといったことも行われます。
参考情報の信頼性について
様々な情報を参考にしてプログラム制作や、資料作成をするといったことはプログラマーの日常業務のようなものですが、情報の扱い方には気を付けている部分があります。

特に、リファレンスのような公式の情報でないものを参考にする場合には注意が必要です。
プログラムの制作作業や、デバッグなどの不具合修正を行っている作業の中では、どのような情報も参考にすることが可能ですが、取引先や上司やチームなどと共有する情報を資料や各種ドキュメントにまとめるという作業においては、「信頼性の低い情報」を情報源としては使うことができません。そういった場合は、公式の記述を引用して資料に明記するか、それが難しい場合は説得力のある他の情報源を引用するといったことが求められます。
プログラマーを目指すのであれば、「どこかの誰かが言っていた」という情報では誰も納得しない、ということは肝に銘じておきましょう。動くソフトウェアを作ることと、人に納得してもらうのでは、情報の扱いが異なるという事です。
現職のプログラマーの知識と経験
プログラマーは覚えていないという話を紹介してきましたが、それではプログラマーの知識というのはどういったもので、彼らは何を勉強しているのでしょうか。プログラマーは、プログラムを制作する際に一から十まですべてを調べているわけではなく、覚えているものは当然何も調べずにどんどん制作作業を進めていきます。
ここでは、現職のプログラマーが「覚える事」と「覚えない事」について、少し詳しく掘り下げながら紹介していきます。
「出来る事」と「出来ない事」を知る
プログラム言語によって、得意なことと不得意なことがあります。また、プログラムが実際に動作するOSやServerなどの環境によっても、プログラム言語の挙動や振る舞いも変化します。
プログラムを制作する上で最も重要なのは、出来る事と出来ない事を正確に判断する能力です。
出来ない事を、プログラマーの能力で出来るようにするということは、とても大変な事です。プログラマーがそういった無理難題を抱えることがないように、通常はSE(システムエンジニア)やPM(プロジェクトマネージャ)などが充分に内容を精査・調整してから実現するソフトウェアを決定していきます。
しかし、そういった上流工程を担当するエンジニアよりも、プログラム言語に近い位置にいて、より詳しい情報を得る機会が多いプログラマーには、彼らが判断するための正確な情報を提供することが求められます。最新のプログラム言語の動向や、便利な追加機能について情報を提供することで、より優れたプロジェクトの進め方に貢献できるだけでなく、自分自身の仕事も進めやすく快適になるでしょう。
恐ろしいのは「出来ない事を請ける」事
プログラム言語の勉強をする上で、出来る事に興味を持って学習を進めていく人は多いでしょう。新しいことが出来るようになることは楽しいものです。
しかし、現職のプログラマーやITエンジニアはその逆で、「出来ない事」を知ることを重要視します。何故なら、出来ない事を請け負ってしまうと、関係者全員が不幸になってしまうからです。

注文を出した人は「プロが出来ると言った」から信じたのに、後からそれが叶わないことが発覚したり、請け負ったエンジニアは実現不可能な現実を知って相手に謝罪をするということになりかねません。契約してしまっていて「実現が必須」となると、当初の話通り実現する方法を考えなくてはならなくなり、体力の限界が来るその時まで深夜残業も厭わず奮闘するといった地獄のような日々を過ごすことになるかもしれません。最悪契約不履行となり、企業として大きなダメージを受けることになりかねません。
そんなことにならないように、プログラマーやITエンジニアには、プログラム言語や環境の制約について、しっかりとした知識や理解が必要になります。
出来ないことだらけのITエンジニアにならないために
出来ない事を知ることは、IT現場でとても重要な事ではありますが、何を聞かれても「出来ません」という回答をするようなITエンジニアは信用されず、すぐに仕事がなくなってしまうでしょう。
私が新人エンジニアだった頃は「出来ません」という言葉は禁句だと教育されたものです。これは、新人の内は知識が浅く、指示をしている上司や先輩エンジニアは出来る事を知っているために起きている関係性です。出来ないのではなく、「出来る事を知らない」ということを自覚して、謙虚に学ぶ姿勢の大事さを教育しようとしていたと考えられます。特に若いエンジニアは自分の力を過大評価しがちで、私もそうだったのかもしれません。
しかし、現実にはプログラム言語やOS等環境の能力の限界というものが有り、出来ない事というのは明確に存在します。そういった時には、「必ず代案を用意する」必要があります。

出来ない事が明確になったら、合わせてそれを「回避するためにはどうすればよいのか」を調べ、方法を模索・検討しておきます。取引先など、プログラマーに無理難題を与えてくる人々は多くいますが、そういった人たちを納得させるためにも、判断を仰ぐための代案は役に立ちます。
ここで大事なのは「相手のために」というのが念頭になければなりません。
どちらの選択をしても、必ず相手に利益やメリットがなければなりません。無理難題を提示した相手が悪いのだから、と投げやりな案には絶対にしてはいけません。
出来る事は有効なアピールカード
出来ない事と違って、出来る事は企業や個人の能力をアピールすることができる有効なカードとして使えます。
プログラム言語の学習を進めると、出来る事を多く学んでいくことができますが、その中でも特に「他の環境では時間がかかる」とか「不可能な事が実現できる」といった点は、大事にしましょう。これは、プログラマーとしての切り札のようなものでもあり、そのカードをどういった時に切るのかは状況やあなたの判断次第です。カードを切らずに日々の仕事を快適に進めたり、カードを切って相手にそのメリットを提供することで点数稼ぎをするといったこともできるでしょう。
プログラムの部品化で知識と経験を積み上げる
また、プログラマーは日々の仕事の過程で、再利用可能部品を製造することができ、そういったものを活用することで、他のITエンジニアとの差別化を図っていくことができます。それらを多く備えたエンジニアの制作するソフトウェアは品質が高く、コストも安いということになり、信頼されて仕事も多くなっていきます。それが、ITエンジニアやプログラマーの経験というものなので、目の前の仕事を乗り越えるだけでなく、次回以降のことも考えながら、少し苦労してでも出来るだけ汎用的に仕上げることで、自分の武器を増やしていくと良いでしょう。
プログラマーを目指して勉強している人も、勉強する過程で作ったプログラムを、次の作品に活かす工夫をしたり考えたりすることは、とても意味のある事なので、是非挑戦してみてください。
一回触ってみておくことは大事
プログラム言語について、文法やクラスの使い方などを「覚えておく」必要はあまりなく、それぞれの機能などで実現可能な事と実現することが難しいことを「理解しておくこと」が重要であることを、これまで紹介してきました。
その上で、プログラマーとしては、ドキュメントやリファレンスなどを読むだけではなく、実際に一度使って試してみておくことはとても重要な事です。触ってみて初めてわかる事というものがあり、それらを体感しておくことが、色々な場面で役に立つのです。
この過程は、代案を検討する際に実際に行うことも多いですが、意識して試してみる癖をつけておくとよいでしょう。これが、SE(システムエンジニア)とPG(プログラマ)の大きな違いでもあり、現場での役割分担にもなります。資料で知っているだけの人間と、実際に使った場合の実感を知っている人間との間に認識の違いが生まれることもあるので、そこはコミュニケーションを取ってその差を埋めていくことになります。経験を積んでいくと、何を調べて何を体感しておく必要があるのかが見えるようになってきて効率も良くなってくるものです。
また、個人で色々とプログラム制作している人でも、色々な技術や環境を触ってみることで、それぞれの良いところ・悪いところから、新しいアイデアや効率化の手法を思いつくこともあるでしょう。
調べ方や情報量の把握もしておこう
初めてのものに実際に触ってみると、分からない事や知らないことが多いため、頻繁に「調べる」という行動をすることになります。実はこの過程はとても大事で、調べる目的のものだけでなく、そのプログラム言語や技術が提供しているドキュメント類やリファレンス類の「量や品質」を知ることが出来ます。また、合わせてITエンジニアが何を参照しながら制作を進めていけばよいのかも把握できます。
調べ方や、情報量の過多を知っておけば、まだ触っていない部分についても「おおよその予測」が立てられるようになります。この件についてこれだけ情報があるなら、他の件についても同様に情報が得られるだろうという予測です。逆に言うと、情報量が少ない環境や技術については、他の事についても同様に情報不足で苦労したり時間がかかるという予測が立てられるということになります。
「覚える事」と「調べる事」を分けて学習しよう
情報が多い現代においては、一人の人間がすべてを覚えるということは現実的ではありません。要所や全体像を把握して、効率よく忘れ、効率的な調べ方や進め方を学んでいきましょう。困った時には、書籍やインターネットがあなたの助けになってくれるでしょう。プログラム言語の提供元も、開発者の人向けに便利なオンラインリファレンスなどを提供してくれる時代で、分厚い資料を探さなくても目当ての情報に短時間でたどり着くことができます。
プログラム言語を習得してくことは、自分が出来る事が増えていって楽しい事でもありますが、それを仕事にすることを目標にしているのであれば、そのプログラム言語の不得意分野についてもしっかり把握し、代替案や解決する方法についても並行して学んでおきましょう。