パソコンにもっと詳しくなりたいと思う人や、将来IT企業へ就職したいと考えている人の中には、プログラム言語を勉強したいけど、何の言語を勉強すればいいのかも分からず困っている人もいるでしょう。書店やネットの記事などでプログラム言語について調べると、あまりの選択肢の多さに驚く人もいるかもしれません。
今回の記事では、私自身がIT企業の開発現場や新卒採用で面接担当していた経験等を活かしながら、プログラム言語の選び方について紹介していますので、是非参考にしてみてください。
プログラム言語とは
プログラム言語には様々な種類がありますが、基本的には「コンピューターやソフトウェアに対して命令する」ための言語です。最終的には同じコンピューターの命令になるプログラム言語もあれば、特定のソフトウェアに対してのみ有効な言語など、動作環境や用途によって様々な種類のプログラム言語があります。プログラム言語で実際にプログラムすることをプログラミングということから、プログラミング言語とも呼ばれることがあります。
ここでは少しプログラム言語について簡単に紹介します。
プログラム言語を扱う職種
プログラム言語は、IT社会と言われる現代においては様々な場面で利用されていますが、最も利用されているのはソフトウェアの制作現場で、IT企業では欠かすことができません。特に「プログラマー」という職種では、勤務時間のほとんどをプログラミングに割くことになるでしょう。プログラマーは、ソフトウェアで必要とされることを実現するために、プログラム言語を使用して通訳するような作業を、建設業のように地道に積み上げていく、といった作業を行います。
近年のIT業界では、WindowsやLinux, AndroidやiOSといったコンピュータの基本制御をするソフトウェア : OS(Operating System)上で動作するプログラムを制作することが多くなっています。直接コンピュータを制御するプログラムとしては、IoTと呼ばれる電子機器の組み込み系などでは、小さく速く高機能といった高度なプログラムが追求され続けています。
IT企業では、プログラマー以外の職種でもプログラム言語を扱う機会はあります。ネットワークエンジニアやデータベースエンジニアなど、ソフトウェアを支える技術者の仕事の中でも、簡単なソフトウェアを制作してテストに活用したり、プログラム制作の作業のうち、ネットワークやデータベース等部分的な仕事を任される場合もあります。
プログラム言語は、IT企業以外でもITを扱う職種の一部では利用されます。業種が異なっていても、現在はどの企業もITを活用した業務効率化を推進する傾向にあり、大きな企業ほどIT推進課や情報システム部のようなITを専門的に扱う部署を設けていたりします。そういった部署に社内SEといった職種などで配属すると、小さな案件であれば部署内でプログラムを作って対応することもあるでしょう。社内対応が難しい技術的に困難な案件や、規模が大きな案件はIT企業へ発注するという業務の流れはよくあります。プログラム(ソフトウェア)を作ることを主目的とするIT企業との大きな違いは、主目的は問題の解決や業務改善であって、プログラム自体は手段の一つにしか過ぎないという点です。
プログラム言語と似たコンピュータ関連の言語
プログラム言語に詳しくない人は、コンピュータに言語を打ち込むものはプログラム言語とよく勘違いしてしまいます。本職プログラマーの人やIT企業の面接などで勘違いした発言をしてしまうと恥ずかしい思いをするかもしれないので、少し紹介しておきます。
インターネットのWebサイトなどで広く使われるJavaScriptや、Linuxなどで使われるShellScriptなどは、厳密にはプログラム言語ではありません。これらはスクリプト言語に分類されます。プログラム言語との決定的な違いは「コンピュータの制御ができない」点です。コンピュータの上で動いているソフトウェア上での限定的な動作を制御するための言語で、それ以上の事ができない点で大きく異なります。
JavaScriptは世界的に広く使われるようになっていて、現在のIT業界では欠かせない技術の一つですが、他のプログラマーが作ってくれたソフトウェア(ブラウザなど)がなければ動かすこともできないという位置付けの言語です。一方でPHPのような、Webサーバーなど特定のプログラムの上で動作するプログラム言語でも、プログラム言語自体の能力としてはコンピュータの制御も行えるというものもあります。
XML(Extensible Markup Language)やHTML(Hyper Text Markup Language)といったマークアップ言語もプログラム言語とは異なります。これらはコンピュータ上で利用される独特な言語ではありますが、構造化された文書といった位置づけで、プログラムとデータで区分けすると「データに該当する部品」となります。またHTMLは、IT企業での仕事としてプログラマーとデザイナーに振り分ける場合にはデザイナーが担当することになる分野になります。(プログラマーとしても、デザイナーからHTMLを受け取って必要な処理を施すという作業分担はよく行われます)
プログラム言語と比較してどちらが凄いといったものではありませんが、勘違いしたまま自己アピールしてしまうと、相手によっては逆に自分の知識不足をアピールすることになりかねないので注意しておきましょう。
プログラム言語の選び方
プログラム言語に多くの種類がある事が分かっても、実際何を選んで勉強を始めればよいのか悩んでしまうこともあるでしょう。また、有識者や経験者に相談しても適切な回答を得られなかったり、就職した後で勉強したプログラム言語の知識を活かせないという事例もよく耳にします。
ここではプログラム言語の選び方について紹介していますので、是非参考にしてみてください。
IT企業でのプログラム言語の選び方
まず最初に、ソフトウェア制作を実際に行うIT企業ではどのようにしてプログラム言語を選んでいるのかを紹介します。
プログラム言語には様々な種類のものがありますが、「コンピュータやソフトウェアに命令する」という能力で共通しています。IT企業で製作するソフトウェアが決まると、チーム編成やスケジュールなど必要な事を決めていった後で、製作規模にもよりますが、製作チームで「どの言語」で「どういう体制」で製作していくのかといったことを決めていきます。決める方法は話し合いだったり、チームの編成から自然と決まる場合や、リーダーの一声で決まるなど、状況によって異なります。
判断基準は、「対象となるソフトウェア」「動作環境」が最優先で、次に「作れる人」「作った経験」といったあたりになります。
いくら経験値の高いプログラム言語があったとしても、対象ソフトウェアの動作環境で動くソフトウェアを制作できない、または制作するのに適さないという場合は、残念ながら選択肢から除外せざるを得ません。
特殊な環境で動作する機器(新製品の電子機器や、新発売されるゲーム機等)の場合は、完全に新しい環境でまったく未経験のプログラム言語での作業を余儀なくされるといったことも珍しくありません。
プログラム言語は「作りたいソフトウェア」で選ぼう
就職などを目標にしてプログラム言語の勉強を始めたいと考えている場合は、自分が就職したいと思っている「会社が作っているソフトウェア」の種類や、自分が「どのようなソフトウェアを作る仕事をしたい」と思っているかで選びましょう。
IT企業で働いている人に「どのプログラム言語を勉強したらいいか」と聞いても、適切な回答を得ることが難しいのは、プログラム言語の選択においては「あなたは何を作りたいのか」が最も重要な出発点だからです。
私が同様の質問をよく知らない人から漠然と聞かれた場合は、とりあえず「C言語」と答えるかもしれません。しかし、近年C言語でソフトウェアを制作する機会はあまり多くなく、生産性も高いとは言えないため、多くの場合習得した技術を直接活かせる機会は少ないでしょう。具体的な目標を添えて質問されれば、その人にあった適切なアドバイスができるでしょう。
C言語は、学習するのが大変な言語ではありますが、現在広く利用されているプログラム言語の「設計思想の原点」のような優れた言語です。C言語を理解できれば他の言語を習得するのは比較的容易ですが、その逆はそうとは限りません。ここまで高度に発展した情報産業の中においても、今もなおC言語やC++といった大変な言語を使って、精密機器の制御ソフトウェア製造などで活躍しているエンジニアには本当に頭が下がります。
続いて、どんなソフトウェアでどういった言語が使われているかを紹介していますので、参考にしてみてください。
IT業界でよく利用されるプログラム言語の紹介
勉強を始めるプログラム言語を選択したいという方のために、分野ごとにどのような言語が選択されているかを紹介します。実際には企業やプロジェクトのリーダーの判断など、様々な要因で異なる言語が選択されることもありますが、近い言語を習得しておけば、きっとその知識は役に立ちます。
Web
現在の情報化社会で外すことができない分野の一つが「Web」です。一言でWebといっても、Amazonのような世界規模の巨大インフラから、小さな企業のホームページまで様々です。意外と知られていないかもしれませんが、スマートフォンのアプリなどでも、通信機能などでWebの技術を使って制作されているものも少なくありません。
執筆時点(2024年)ではWebの仕事は山積みで、驚くほど技術者が多く、技術者のスキルレベルの高低の幅が凄まじい業界・分野です。デザインとも密接なソフトウェアが多く、SNSやYoutubeなど流行に非常に近いソフトウェアを扱う分野である反面、技術やデザインの流行など盛衰の流れが速く、習得した技術が数年で使われなくなるといったことも起きる業界でもあります。IT業界の中でもデザイン性が重視されることもあるためか、業界内でも特に女性が多く活躍している分野でもあります。
プログラム言語としては、PHP、Rubyのようなインタプリタ言語が選ばれることも多いですが、JavaやC#のようなコンパイル言語も選ばれます。この判断は、前者はプログラムがそのまま実行されるため手軽な反面、プログラムの改変の危険性や実行速度の問題などがあるため、大規模なシステムなどでは、プログラムが改変できない状態になるコンパイル言語を選択するといった基準で行われたりします。
PHPは既存システムの拡張などの仕事も多く企業では必要とされる場面も多く、Rubyは開発効率を重視する企業などで積極的に採用が進められているようで、どちらもWeb業界を支える重要な技術です。
JavaやC#といったコンパイル言語は、Web以外の分野でも使われる言語なのがとても強く、JavaならAndroid、C#ならWindowsのソフトウェアといった別分野の開発を容易に行えます。通常業務では別の分野で活躍しているエンジニアが、教育などで大きな負担・期間を必要とせずWeb開発のプロジェクトに携われることもあり、IT企業側でもメリットが多いプログラム言語と言えます。
複数環境への対応だけでいうと、Javaはプログラム言語自体が環境に依らない言語として設計されていることもあり、その点においては最強と評価しても良い程です。ただし、環境を吸収する中間レイヤー(VM)のせいで成果物の速度が若干遅いという欠点があり、選択肢から外されてしまうこともあります。
スマホアプリ・ゲーム
多くの人が生活に必要不可欠と感じる程に普及したスマートフォンですが、スマートフォン上で動作するアプリやゲームなども当然プログラム言語で作られています。スマートフォン用のアプリ開発をする会社に就職したい人や、個人でアプリを販売して収益を得たいと考えている人は、迷わずスマートフォン開発で利用されているプログラム言語を勉強しましょう。
今のスマートフォンは、概ねiPhoneとAndroidの二強状態です。iPhoneはiPadなどもあって紛らわしいので、IT業界ではiOSと呼称されることの方が多いかもしれません。例外はありますが、近年は「スマートフォン開発」というと、iPadのようなタブレットも込みで扱われるようになっています。
iOSの開発は独特で、現在はSwiftという比較的新しいプログラム言語が利用されます。AndroidはJavaで製作するのが一般的です。もちろん他の言語で製作する手段もありますが、SwiftはNative環境/言語と呼ばれ、OS提供側(Apple)の想定している開発言語です。当然最速で最新の機能を利用できるため、IT企業では概ねこれらの言語で製作が進められます。Swiftはスマートフォンアプリだけでなく、Mac用アプリケーションやApple Watchなどの開発にも利用されるプログラム言語です。SwiftはAppleが2014年に電撃発表したプログラム言語で、IT企業は従来使われていたプログラム言語のObjective-Cからの移行や技術者の育成に追われることになりました。Appleは大企業で日本での製品人気は高いですが、これまで何度も技術の入れ替えをしてエンジニアのノウハウを泥に変えてきた歴史があるので、勉強を始める場合は、ある程度は愛で苦しみを乗り越える覚悟を決めておきましょう。
Androidの開発はJavaで行うのが主流です。iOS同様他の言語での開発も可能ですが、Native言語はJavaのため、IT企業の多くはJavaを使っていることが多く、低コストで複数プラットフォーム展開をする場合など、特殊な条件下では他の言語が選ばれることもあります。JavaはIT業界ではWebを含めて広い分野で利用されているプログラム言語で、世界的な技術者の数も非常に多いのが特徴です。これからプログラム言語の勉強を始めようと考えている人は、まずはスマートフォンアプリから勉強を始めて、その後Web分野へ勉強の範囲を広げていくといった勉強の進め方も良いでしょう。
スマートフォンの環境は日本市場はかなり特殊で、iOSが半分以上占めているので、日本向けのアプリやゲーム開発に携わる場合は、どちらを勉強していてもよいと思います。逆に世界的にはiOSは高額で敬遠されていることもありシェアは低下傾向で、今は30%を切っている状況です。将来の自分をイメージし、適切な言語を選択しましょう。
出典 : https://gs.statcounter.com/os-market-share/mobile/worldwide#monthly-202308-202308-bar
大規模な業務系ソフトウェア
販売管理システムや企業の基幹システムなど、大規模なソフトウェアを扱う企業への就職を考えているのなら、Javaなどの汎用性の高い言語を学ぶのが無駄がないですが、Windowsに絞るならC#なども選択肢にはいるでしょう。
ただ、この規模のプログラムということになると、新卒のプログラマーを簡単に制作・実装へ参加させるようなことはなく、恐らく一定期間の教育実習などを終えてから、徐々に実作業が始まってくるということになると思われます。また、大規模システムとなると、開発を効率よく安全に進めるために、パッケージやライブラリといった既存の製品群を持ち込むことも多く、自社のパッケージがあれば積極的に活用していきます。そうなると、プログラム言語の知識よりも、パッケージやライブラリの知識の方が重要になり、それらの多くは社外秘の技術なので就職してからしか学ぶことができません。
事前にプログラム言語の勉強をする上では、言語の文法や仕組みと共に、ライブラリやフレームワークといった既存資産の活用や、複数人でのチーム開発を経験するといったことが、就職活動をする上では役に立つことも多いかもしれませんので、可能な範囲で検討してみましょう。
C#についてもう少し補足すると、C#はWindowsアプリケーションの開発でよく利用されるプログラム言語で、非常に生産性が高く、開発環境も優れています。個人で所有しているWindowsのパソコン上で動作するソフトウェアを制作できるため、勉強のやりがいもあるでしょう。C#はWindowsアプリケーションだけではなくWeb制作も可能なプログラム言語ではありますが、Windows Serverを利用してのWeb開発は初期費用が高いこともあって業界では選択肢から外れることも多く、就職する企業にもよりますが、Windows開発程は仕事がないかもしれないことには留意しておきましょう。
IoT/電子機器への組み込み系
今は身近な電子機器にもソフトウェア技術が必要な時代になっています。冷蔵庫や電子レンジのような家電製品から、体重計や腕時計のような小さな機器にもソフトウェアが搭載されています。近年では機器がインターネットと繋がって多くの機能を提供することも多く、総称してIoT(Internet of Things)と呼ばれます。こういった機器のソフトウェアを制作する技術者を「組み込み系エンジニア」と呼び、現在のIT業界において、「最もコンピュータに近く、人間から遠い低級言語を操る難しい仕事」と言えるでしょう。
組み込み系の世界では、一部Android搭載機などもありますが、WindowsやMacといったいわゆるOSがないことも多いです。通常プログラマーは、OSが提供してくれる機能を呼び出すことで様々なソフトウェアを生み出すのですが、それらが一切ないため、直接ハードウェアを制御しなくてはなりません。中には電気信号的な0と1の羅列を処理するといった細かなプログラムも含まれてきます。
こういった細かなプログラムを制作する現場では、C/C++といった開発効率が悪い代わりに細かな制御が可能なプログラム言語が活躍します。最終手段は機械を直接制御するアセンブラ(アセンブル)言語が使われることもあるかもしれない世界です。アセンブラはかつての情報処理技術者試験でのCASLのような言語です。C++言語などは機器と近い部分での処理を実現することができることもあって、デバイスドライバなどの開発でも利用されることも多いですが、手続きが多く制作に時間がかかりすぎてしまうため、Webやスマートフォンなど人間に近いソフトウェアの開発には不向きで、ほとんど選ばれることはありません。
組み込み系のエンジニアは難しいと表現してきましたが、難しいの方向性が異なるだけで、プロのエンジニアはどの分野でも難しい部分はあります。組み込み系においてOSがないことをデメリットのように記載しましたが、逆に言うと「出来ることが少ない」とも言え、それは技術者にとっては覚えることが少なくて済むメリットともいえるでしょう。限られた小さな世界でできるだけ大きなことを実現する技術力が要求される反面、Webやスマートフォンのような分厚いドキュメントやマニュアルを読み解く必要性が少ないといった側面もあります。
AIを活用した最新技術関係
Pythonというプログラム言語を耳にしたことがある人も多いかもしれません。IT業界ではこの5年10年ほどで急速に注目され、利用されることも徐々に増えてきている言語です。PythonはAIの研究や開発で利用されてきた経緯があり、AI関連のライブラリやドキュメントなどはPythonで提供されているものが多く、今後AIを取り入れようとする企業はPython技術者の採用や教育に追われているのがここ数年の動きです。
最新技術が好きな人や、AIの未来に夢を抱いているような人は、是非Pythonを選択してみてください。これからのIT業界ではAIは避けて通ることはできない分野で、Pythonの技術はきっと役に立つでしょう。
ただし、Pythonに注目が集まったのはここ数年で、AI以外の分野への活用が模索され始めたのもごく最近の話であることには注意が必要です。既存の製品は他の言語で製作されたプログラムが多く、Pythonに求められるのはAIやその周辺技術というのが現状です。今後広がることが予想される分野であっても、現状Pythonだけしかできない技術者は、よほどの大企業でない限り採用に踏み切るのが難しいかもしれません。可能であれば、メインのプログラム言語 + PythonといったITの現場に合わせた勉強を検討してみましょう。Python一本に絞るくらい熱意があるのであれば、自分で起業して「最先端技術を他社に提供する」というのも一つの選択肢かもしれません。
複数のプログラム言語を習得するべきか
IT業界で働くプログラマーにはいろいろな人がいるわけですが、プログラム言語についての考え方に違いがあって、概ね2種類の人に分かれます。
- 一つのプログラム言語に特化する
- 複数のプログラム言語を使いこなす
どちらの方が多いかは企業によって様々です。請負が主流の企業では営業方針にも影響されますし、自社製品を制作する企業の場合、企画や企業のブランディング方針などにも影響されます。どちらが正しいとか優れているということではありませんが、両者はそれぞれエンジニアとして進む道が異なってきます。
ここでは、これからプログラム言語の勉強を始めようと考えている初心者の人たちに向けて、複数言語を習得していくことでエンジニアの将来にどのような影響があるのか簡単に紹介します。
複数のプログラム言語の習得で上流工程へ
複数のプログラム言語を習得するということは、特化して経験を積んでいるエンジニアと比較して、一つ一つのプログラム言語についての経験値が低くなるのは避けられません。各プログラム言語の仕様も日々変化している状況でもあり、特化していても追いかけ続けるのが大変なため、なおさら差は開く一方です。
それでも受託開発などの関係で、経験のないプログラム言語での開発を余儀なくされることは、IT企業で働くプログラマーにはよくあることです。それでも期日までに要求されているものを仕上げなければならないため、大変な思いをすることになりますが、知識や経験と共に、幅広い視野が得られることでしょう。
こういった経験を積み重ねていくと、細かな文法など知らないことはあるものの、概ねその環境での開発にかかる大変さ・コストなどが推測できるようになり、徐々に管理面の仕事もこなせるようになっていきます。SE(システムエンジニア)やPM(プロジェクトマネージャ)といった上流工程を担当するエンジニアの中には、驚くような数のプログラム言語の開発経験があることも多いです。そういった人たちの多くは、新しいプログラム言語を学ぶというより利用するといった感覚で、触れたことのない環境に臨んでいるでしょう。
複数の環境やプログラム言語の経験から、上流工程のエンジニアとして制作指揮やプロジェクトの進捗管理などで活躍するのに必要な、広い視野や考え方が培われ、他者からも評価されます。
特化した学習はスペシャリストコース
単一のプログラム言語を勉強し続け、最新技術を追い求め続ける人もIT業界にはたくさん存在します。その分野においては絶対に負けたくないという思いと、この分野なら自分に任せて欲しいという強い思いがある人が多く、SEやPMといった上流工程のエンジニアから特に頼りにされる存在です。
自分の慣れた分野で、誰よりも早く品質の良いソフトウェアを生み出し、信頼されて評価も高くなるという一方で、他の分野の仕事には手が出せないという企業内での取り回しの悪さがあり、この道を貫けるかどうかは企業内の人員の採用や教育方針に依るところが多い部分にもなります。
ただ、得意な部分と苦手な部分が明確になるので、転職などでのキャリアアップを視野に入れると、自分も企業もお互いに選びやすいというメリットもあります。複数の言語を習得していく場合でも、一つ得意なプログラム言語や環境があると、エンジニアとして有利になる場面は多くあります。
プログラム言語と相性の良い技術分野
ここからは少し余談ではありますが、プログラム言語の勉強を進めていく過程で、合わせて勉強しておくのにオススメな技術分野をいくつか紹介しています。
就職活動での面接などで、ただプログラムを勉強していたと漠然に自己アピールするのではなく、何々を扱うプログラムの制作について学んでいたというと、強烈なアピールになります。自分の目指す分野に近そうな技術を選んで、学ぶプログラム言語からそれを扱う方法を勉強するといった流れで、並行して学んでいくと良いでしょう。
ネットワーク
今はインターネットを含め、ネットワークを扱わないソフトウェアが想像できない程に一般的になっています。利用者としては繋がる・繋がらない程度の感覚で使っているネットワークですが、その裏ではエンジニアの方々が制作した膨大な技術の結晶が動いています。
プログラマになるということは、今度はそういった技術を使ってソフトウェアを作り、利用者に提供する側になるという事です。プログラム言語と並行して勉強を進める場合、ネットワークの原理を知り、環境を設定できるようになり、それをプログラムから利用するという一連の流れを学習していくと良いでしょう。
高度に発展した現代社会のITサービスでの利用シーンやソフトウェアの形態は様々ですが、ネットワークの技術はIT業界の中でも「かなり安定した古い技術で変化が少ない分野」です。一度学んでしまえば、よほどのことがない限りその知識が無駄になることがないので、とてもオススメです。ただし、基本的には目に見えない部分の勉強でひたすら地味なので、モチベーション維持のためにも、勉強で作るプログラムは少し見た目に関係したものにすると良いかもしれません。
データベース
情報化社会と言われる現代では、多くのものがデータ化された状態で管理されています。膨大な量のデータを扱うことに特化したソフトウェアはデータベースと呼ばれ、ネットワークと同じくらい利用頻度が高い技術分野です。
利用シーンとして想像しやすいのはAmazonのようなネットショッピング(EC)などの、商品の販売や売り上げの管理をするソフトウェアなどでしょう。見えにくいところでいうと、スマートフォンアプリのゲームのデータなどでも小型のデータベースが埋め込まれて利用されていることも多いです。
データベース技術は、エンジニアの力量がソフトウェアの品質やパフォーマンスに直接現れる分野でもあり、設計から利用まで独特な専門知識が必要になります。技術文書も多く学ぶこと自体は比較的容易ではあるものの、学んだ知識を如何に活用していくかが腕の見せ所という、やりがいのある分野です。
技術的には安定してはいるものの、データベース自体も更新や流行が少なからず存在しているため、ある程度は知識のアップデートは要求されます。ネットワークはハードウェアに近く、データベースはソフトウェアに近いといった印象の技術で、ソフトウェア制作現場では、データベース技術者がプログラムの制作を部分的に行うといった場面はよくあります。
プログラム言語と並行して勉強すると、想像以上に役立つソフトウェアが制作できることに驚くかもしれません。データの登録と集計を行うような単純なソフトウェアでも、内容によっては販売可能なレベルのものに仕上げることも夢ではない分野です。
サーバー
一般の人から見えることがないサーバーという技術分野は、ネットワークと同様とても地味ではありますが、日常生活で私たちは頻繁に利用しています。代表的な所ではWebサービスを提供するWebサーバーで、このサイトで呼んでもらっている文書もWebサーバーから提供されています。インターネットを介してサービスを提供する場合、サーバーを準備してそこにプログラムを配置して利用者に届けるという形態がとられることが多く、サーバーはインフラとしての役割が強い分野です。
制作するソフトウェアによってサーバーに求められる役割が異なり、サーバーを構築する技術をもったエンジニアが適宜準備・メンテナンスすることでインフラが支えられています。Webサービスを作るプログラマを目指していても、サーバーについての技術力がなければ、その制作したプログラムを利用者へ提供することができないということになります。
自分の制作するプログラムでサーバーが必要だと気づいたときからでも、是非サーバー技術についても学んでみてください。きっと勉強の過程で視野が広がり、プログラムについても理解が深まり、プログラマーとしての成長にもつながるはずです。
OS (Operating System)
意外と見落としてしまいがちですが、利用しているOSについての理解を深めておくことも重要です。特にWindowsのアプリケーション開発や、スマートフォンの開発を目指している場合には、他のプログラマとの差をつけるのに役立つ知識です。
具体的には、スマートフォンの場合だと、最新OSで提供されたカメラの機能を制御する方法だったり、Windowsの場合でも表面的なものではなく、例えばFirewallやユーザー権限など、少し難易度の高い分野について知識があると、自分の価値や評価を高めることに役立つでしょう。
特に企業で最新技術の活用方法を率先して習得すると、顧客の興味を惹くことができるため営業部門に喜ばれます。そういった最新技術について興味をもって触れていく習慣をつけておくと、就職した後にもきっと役立ちます。何より実践していて楽しい世界なので、折角プログラムを勉強してくのであれば、是非挑戦してみましょう。
プログラム言語の勉強を進めていると、気づいたらOSの機能を利用しているということもよくあります。最初のうちは、何がプログラム言語の機能で、何がOSの機能なのか判断が難しいかもしれません。Windowsとスマートフォンのように複数のOSに触れてみることができれば、理解に役立つでしょう。単純な例を挙げると、プログラムからファイルを操作するといった処理を行う場合、ファイルの入出力はOSの機能なので、OSが変わるとプログラムの書き方が変ったり、呼び出した後の挙動が変ったりします。そういったことを「意識して」勉強していくことが、プログラマとしての実力を高めることに繋がるでしょう。
デザイン
これはエンジニアにとって避けることができない分野なのに、技術と違って明確な答えがない世界のため、プログラマの中には学ぶことを嫌っている人もいるような分野でしょう。ですが、人の目につく部分があるソフトウェアの場合は、必ずプログラムとデザインが接する部分が存在します。
重要なのは、どのようなデザインが美しいとか流行しているといったことではなく、デザインを扱う方法だったり、デザイナーとの連携に必要となる技術的な知識です。
具体的な例では、顧客がデザイン的に「画面の要素を動かしてほしい」という要件を提示してきた際に、デザイナーでは技術的に対応が不可能といったことがIT現場では頻発します。それをプログラマがプログラムによって実現しなければならないといった流れは、Web制作の過程では日常茶飯事ともいえるでしょう。プログラムでデザインの制御プログラムが求められることは少なくないので、大体どのようにして作るのかを、プログラムの勉強をしながら少しでも触れるようにすると良いでしょう。見た目に結果が出てくるので勉強自体は楽しく取り組めるでしょう。
プログラム言語と並行して勉強する場合に限りませんが、世の中にある既存のソフトウェアやサービスを「技術者視点で見る事」も大事です。単純に見えるボタンの配置であっても、ユーザーの操作導線や視点の移動などを考慮して配置されていることが多く、自分で画面設計する場合に良い意味で「真似る」方法を覚えると役に立ちます。何故そのデザインやUI(User Interface)になっているのかを常に考えるようにすると、自然と利用者に配慮した良い画面が作れるエンジニアになっていくことでしょう。
自分の描くエンジニア像をめざして勉強しよう
プログラム言語には様々な種類があって、同じプログラマーという職種でも業務の内容は企業によっても様々です。
プログラム言語の選び方で重要となってくるのは、自分がどのようなプログラマー・エンジニアになりたいかといったイメージや、具体的にどういったプログラムを作るのかといった目的意識に他なりません。
プログラム言語は目的を達成するための手段の一つとして、できるだけ自分の将来に最適な物を選んで勉強を進めていきましょう。