【プログラミング初心者向け】やりたいことから何を学ぶかを決める

何の記事??

プログラミング初心者向けに「何ができるようになりたいか」を軸にどんな勉強をすれば良いのかをまとめました。

「プログラミングって何?」や「何か一つプログラミング言語を勉強したけど他にどんなものがあるんだろう?」と思っている方は是非一度ご覧ください。

ちなみに僕も大学で一番最初に C言語を勉強して、何に使えるのかいまいちわからないまま勉強していました。
でも、やっぱり自分がやりたいこと(その時は Webアプリを作りたかった)がわかってそれに向けた勉強だと思った瞬間にプログラミングが大好きになり没頭しました。

同じ思いや悩みを持っている人の解決になれば嬉しいです。


プログラミングでできること

さて、まずはプログラミングでできることをまとめてみましょう。

  • スマホアプリ開発
  • Web アプリ開発
    • フロント(デザイン)
    • サーバーサイド(裏側の仕組み)
    • インフラ
  • ゲーム開発
  • データ分析
  • AI (人工知能)
  • ロボット
  • ハッキング

ざっとこんな感じでしょうか。
他にもプログラミングが担っている部分は多くありますが、今回はこの中でスマホアプリ開発を題材にしたいと思います。

それでは早速見ていきましょう。


スマホアプリ開発

それでは、スマホアプリ開発について見ていきましょう。
スマホアプリと一概に言っても、大きく二つに分けることができます。
それは「 iOS(iPhone)」と「 Android 」です。

日本では iPhone の普及率が高く iOS の方が需要がありそうと思われがちですが、エンジニアとして就職して、その企業でアプリをリリースする場合、どちらかだけということはほぼほぼありません。

iOS エンジニア, Android エンジニアのどちらの需要も十分にあります。

そのため自分が持っているスマホに合わせて、まずは勉強してみるのも手かもしれませんね。
また、iOS は公開するのに年間 $99(約1万円)かかることや Mac が必要なこともあるため今 Windows 使ってるなどの人は Android から初めてみるのがおすすめです。

ちなみに Android はリリースに当たって一回のみ $25 が必要になります。

それでは各 OS で必要なスキルを見てみましょう。

iOS

iOS の開発には主に二つ主流の言語があります。
一つ目は、「 Objective-C 」です。

C 言語をベースにオブジェクト指向機能を持たせた言語です。

オブジェクト指向の説明は、割愛しますが、非常に主流な考えのため(Javaなどに適用されている)後々に他の言語をやろうとしている人にとっては、おすすめな言語となっています。

そして二つ目は、「 Swift 」です。
swift は Apple が開発した言語であり、iOS の開発においてモダンなものになっています。

さて Objective-C と Swift の二つを紹介しましたが、ここでどちらを選ぶかのポイントを紹介します。

たしかにモダンな言語として Swift を採用している企業は非常に多い上に Objective-C の人気は下降気味であることは否定できません。
しかし、IT業界あるあるなのですが古いからといって需要がないかというとそうとも限らないのです。

一度作ったアプリは、その後新機能やバグの修正など保守を行なっていく必要があります。
数年前に Objective-C で作られた iOS アプリがあるのに社内のエンジニアが全員 Swift しかできなかったらどうなるでしょうか。

そんな中で Objective-C ができるエンジニアが転職面談にきたら喉から手が出るほど欲しくなりますよね。
ベンチャーに入りたいという方は Swift が良いかもしれません。(これからサービスを展開するなど)
しかし、意外に世の中のアプリは古い言語(Objective-C)で作られているという時代はいずれ訪れます。その時の強みになるのは Swift よりも Objective-C かもしれませんね。

Android

続いて Android です。

実は Android にも iOS と同じ状況が存在します。。。(もはやこの先ほとんどがこのパターンです笑)

一つ目は「 Java 」です。

比較的にメジャーな言語である Java で Android アプリの開発をすることが可能です。

二つ目は「 Kotlin 」です。

Kotlin は Java を非常に簡素にしたものであり Android の開発元である Google が Android 開発の推奨言語としてあげたことで一気にモダンな言語になりました。

しかし、前述のように全てが Kotlin で作られているかというと、、、そういうわけでもありません。

また Java は Webアプリなどでも非常に実績が多いため Android 一本でいくぞ!という方には Kotlin をおすすめしますが後々 Web などにも手を広げてみたいなという方には Java をおすすめしています。

それ以外の方法

さて、ここまで iOS, Android 別々に紹介してきましたが実はどちらも同時に作れるものもあります。

それは「マルチプラットフォーム」と呼ばれるものです。

今回詳述は避けますが、以下のようなものがあります。

  • Unity
  • Xamarin
  • Flutter
  • Reacti Native

もちろん他にもあるのですが有名どころはこんな感じだと思います。

先に個人的な見解を述べると、、、プログラミングはやったことあるけどネイティブを勉強したいという人以外にマルチプラットフォームはオススメしません。

ただし例外的にゲームを作りたいという理由で Unity を勉強するのはアリだと思っています。

さて、先に自論を展開しましたが、なぜ Unity 以外のマルチプラットフォームをおすすめしないかというと、それは「挫折しやすいから」につきます。

「iOS, Android 一気に開発できるよ」という代償はもちろんあります。
それはある程度 iOS, Android に依存してくる部分がどうしても出てくることです。つまり iOS, Android それぞれの開発経験を基に考えなければならない部分が出てきてしまいます。これがなかなか厄介な問題でプログラミングの学習に集中できず最終的に挫折に繋がってしまいます。

また、これらのプラットフォームは比較的新しく技術系の記事があまり出てきません。
出てきたとしても上級者同士の QA だったりします。

これらが僕がマルチプラットフォームを一番最初に勉強すべきでないと思う理由です。

ただ、マルチプラットフォームが扱えるエンジニア(Unityをのぞいて)は、それほど多くはないので並行して勉強する分にはものすごい強みになるかもしれませんね。


Web アプリ開発

さて先ほど列挙した中にもありますが Webアプリ開発には大きく3種類あると考えています。

フロントはいわゆるデザイン部分である見た目の開発になります。
アニメーションだったり、華やかなデザインにするのかクールなものにするのか UI/UX の研究は「これで十分」ということはないため日々改善が繰り返されていますね。

ちなみに Netflix なんかは UI/UX を研究していてレコメンドにだす映画は、ファーストビューで見えるように(横スクロールで隠れないように)パードナライズされたおすすめ順を縦に表示しているようですね。
カスタマーにスクロールをさせないで見たいものに出会ってもらうというのがレコメンドに力をいれている Netflix の UI/UX のポリシーなんですね。

次にサーバーサイドですが、フロントの逆と考えてもらえばおおよそOKです。
バックエンドで、処理を行います。例えば「会員登録のためにデータベースに登録する」とか、「登録済みのクレジットカードから決済を行う」などの処理を行います。

最後にインフラです。
インフラは少しイメージが難しいかもしれません。簡単にいうとサーバーサイドやフロントが動くための土地や地盤を用意してあげる役目です。 例えば「データベースサーバーとフロントサーバーとAPI(サーバーサイド)サーバーを用意してデータベースサーバーにはセキュリティを強くするため APIサーバーからしかアクセスできないようにする」などです。

最近では、AWS, GCP, Azure などのクラウドが流行りでインフラエンジニアの仕事がなくなるみたいな話がありますが、なんだかんだ無くなりません(笑)
もはや本当にクラウドを使いこなそうとするとある程度のインフラ知識は必要になります。そういう意味ではインフラ/クラウドエンジニアになりますね。

フロント(デザイン)

フロントの開発には

  • HTML
  • CSS
  • JavaScript

は定番で必要になります。
HTML は大枠で CSS でサイトに色をつけ、JavaScript で動きをつけるイメージです。

上記の中でも JavaScript の部分は移り変わりが大きいです。

  • Node.js
  • Vue
  • React
  • JQuery

僕はフロントの開発が本当に苦手で・・・
ただ最終的に企業で働いて分担があるにしても自分でアプリを作るときは、最低でもフロントは必須になるのでサーバーサイドを目指す人も作れることは作れるけど・・・くらいの勉強は必須だと思います!!

サーバーサイド

おそらく一番長くなりそうな項目であり、プログラミング言語の紹介が多くなりそうです(笑)

JAVA

まずは王道の Java です。
本当にプログラミングを初めてやるし Webアプリを作れるようになりたい(もしくは何やりたいかわからないけどエンジニアになりたいな)って方はやっておいて損はないと思います。

よく「Javaなんて化石だ、やる意味ない!!」みたいなコメントを見ますが、これは色々飛躍しすぎだと思っています。たしかにベンチャー企業に勤めたくて、この先何年もそのサービスの保守や開発をやっていくのであればそれにあった言語を学ぶのが良いかと思います。
ただ実際エンジニアになって SES(経験したことない) でも R&D(研究開発)(現職) でも自社サービス(経験済み)でも Java くらいできても良いのかな〜と思う場面をよく見受けます。

それに Java ができると他の言語の習得もだいぶ早くなると思います。
特にやることが決まっていなくてどうしようかな〜という人は是非一度 Java を学んでみてください。

オススメは Java がある程度できるようになったら Spring Boot というフレームワークで Webアプリを作ってみることです。競技プログラミングは実務ではあまり意味がありません。先にアプリを作ってみたほうがよっぽど勉強になると思います。

競技プログラミングはたしかに楽しいし僕も好きですが、ある程度自由にプログラムが組めるようになってからでも良いのでは?と思っています。

それに Java は、とてもメジャーな言語でありわからないことも調べれば丁寧に解説がある記事が多いこともオススメする理由です。

PHP

意見が色々飛んできそうな PHP ですが、個人的には一番最初にやらなくても良いのかなと思っています。

というのも、汎用的なプログラミングの勉強にならないと思っています。
Web アプリを作る目的だけであればもちろん PHP は最高に簡易的な言語で僕も大好きです。WordPress だったりお名前.com の共有サーバー上でも PHP は動きます。

ただ他の言語を習得しようとした時に、、、あれ?別物・・・?ってなることが多いです。

とはいえ、PHP で作られているものが多いというのも現実です。
よく企業研修で Java か PHP をやらせるところが多いですが、それは PHP の実績の多さからですかね。

個人的には何か他の言語を学んだ後でも良いのではと思っています。

Ruby

僕個人の意見をいうと一番好きな言語です。(大学時代の研究テーマにしたくらいです)
さて、個人の意見はおいといて、、、Ruby は近年メジャーな言語になってきました。

というのも Ruby on Rails という Webアプリを作るためのフレームワーク(Java でいう Spring Boot) の活躍が大きいです。

簡単に Web アプリを作れるという意味で多くのプログラミングスクールが題材にしています。
Mac には標準で Ruby が入っていることもありたしかに取り掛かりやすいですが、ご自身のキャリアマップをよーく考えてください。

この先 Ruby をメインでやっていきますか?
たしかにベンチャーではよく Ruby 一本とか Ruby 至上主義なところがあります。

ただもしあなたが将来的に汎用的なプログラマになることを求めているのであれば、二番目の言語にすることをオススメします。

Ruby はそのわかりやすさから他の言語がわかればすぐに習得できます。
それからでも良いのではないかと思っています。

Perl

Perl で作られたシステムを僕はお目にかかったことがありませんので多くのコメントはできませんが、あまりオススメしません。

理由はずばり「強みにならない」からです。
僕もまだまだ業界歴(社会人歴)は長くはない上に SES のように色々な現場を経験する立場ではありませんが、本当に出会いませんし、Perl で作ろうとはなりません(笑)
よほどの理由がない限り、上に記載のプログラム言語を習得することをオススメします。

Python

続いて Python です。
AI が話題になったり米国の大学で教える言語がPython になったというニュースから Python ができれば AI が作れる!!みたいな風潮がありますが、正直ベースでそんなことはありません。

たしかに Python には、統計学や AI を作るためのライブラリが多く用意されていますが、それだけで AI は作れませんし AI が絡まない Web アプリをわざわざ Python で作る必要もないというのが僕が経験してきた中で感じたことです。

AI を作るのと Web アプリを作るのではワケがちがうと考えています。
Web アプリを作りたいのであれば Python よりも Java, PHP, Ruby を学ぶほうが近道です。

AI を作りたい方向けの勉強方法も記事にするのでご確認ください。

インフラ

さて未経験でいきなりインフラに興味があるという方は、だいぶシステムのことを調べられている方だと思います。もはやこの記事いらずです。

インフラだけを勉強するのはなかなか難しく(その上にのっかるアプリケーションありきのため)、この場合は早めにインフラエンジニアとして就職して実務で身につけるか、一旦アプリケーション開発もできるように勉強するかの二択だと思います。

さてインフラエンジニアですが、
最近の主流としてインフラ部分はできるだけフルマネージド(責任をもってメンテナンスをしてくれる)なクラウドサービスに移行しようという意見が色々な企業で出ています。

従来自分たちでメンテナンスしていたオンプレミスからクラウドに移行するのをサポートするビジネスなんかもあり、今後 20 年はそれだけでやっていけるレベルにクラウドへの期待は大きいです。

クラウドで特に有名なのは以下の三つです。

  • AWS
  • GCP
  • Azure
AWS

Amazon が提供するクラウドサービスでクラウドサービスの中でもダントツのシェア率を誇っています。

実は Amazon社の売り上げの多くも占めているとか・・・

AWS には、「AWS 認定ソリューションアーキテクト」という資格があります。

資格なんてなんの意味があるんだ??という意見もありますが、 自分の実力を示すために必要なものだと思っています。

最近の企業HP なんかではクラウドの資格を何人保持しているとか記載するところもあり、企業に箔を付けるものなんですよ。

GCP(Google Cloud Platform)

GCP は Google が提供するクラウドです。

あの Google が提供するんだから・・・みたいな期待もありますが、その期待通り素晴らしいサービスばかりです。

ただ AWS と比べ導入の敷居が高い(Google のエンジニアにとっては簡単なのかもしれないが)こともありいまいち爆発的な人気になりません。

ただ分かってしまえば色々なソリューションがあり、僕は GCP が好きなのでプライベートでも GCP を使用しています。

GCP も資格があります。あまり有名ではないのですが持っておくと面接などの時に話のネタになるかもしれませんね

Azure

Azure は Microsoft が提供するクラウドサービスです。
サポートが上の二つに比べ手厚く(お金もかかるが)金融系などでは Azure を使っているイメージです。

Azure はあまりプライベートでやるものではないのかなと思っています。
インフラエンジニアになったら業務で覚えましょう!!(笑)


ゲーム開発

ゲームと言っても

  • ブラウザゲーム
  • スマホゲーム
  • 据え置きゲーム
  • ・・・

と多くの種類があります。

以前紹介した Javascript や Ruby といった言語でもゲームは作れるのですが汎用性を持たせるために僕は Unity をオススメします!!

Unity 自体はフログミラング言語ではありません。いわゆる開発ツールです。
Unity の中では C++ や C# 、Javascript が使えたのですが、C# 以外は廃止が決定しており C# 一択になりました。

とはいえ、ゲーム開発のための C# はある程度勉強しやすく、ゲームも出来上がっていく様子が目に見えるため少しずつできることが増えている実感がわきやすいと思います。

ゲーム開発したい方は是非一度 Unity を勉強してみてください。

データ分析

データサイエンティストは、「21世紀で最もセクシーな職業」といわれ話題になり人気が出てきました。

ずばりデータ分析だけであれば、プログラミングよりも Excel 統計や BIツール(分析ツール)を勉強することをオススメします。

しかし、実際にデータ分析をする際には(現に僕も仕事で悩んでいますが)、データを集めることやデータを整形することから始まります。

その時プログラミングができないと困ることが多いです。

データサイエンティストになりたい方は、Python を必須で勉強しましょう。
深くは追わなくて大丈夫です。プログラミングはだいたいこういうことができるんだなぁということがわかれば大丈夫です。

その次に
データ分析をテーマにした Python の本をやってみてください。

統計の知識があることが前提ですが、本を使っての学習はここまでで大丈夫だと思います。

データ分析の勉強はとにかく手を動かすこと。
そこでオススメなのが「Kaggle」「SIGNATE」というデータ分析のコンペです。

www.kaggle.com

signate.jp

Kaggle は英語ですが、他の参加者のプログラムを拝見することができます。これがものすごく実用的であり真似てみることがものすごく勉強になります。

だいたいの参考書に書いてあることは結構データが綺麗な状態になっていることが大半です。しかし実際に働いてみると綺麗なデータというのはまずありません。

Kaggle はそういう意味でもデータサイエンティストになりたい人はやるべきだと思っています。

ある程度自由にデータ分析ができるようになって、かつ英語が嫌な人は SIGNATE への挑戦をオススメします。
SIGNATE はたまに人材採用ありのコンペをやっていることがあり、実績が認められればそのまま入社なんてこともありますね!!

AI 開発

続いて AI 開発ですが、正直データ分析と同じ勉強方法で良いと思います。

それはデータ分析を行なってしまえば AI 開発というのはほぼほぼできているに等しいからです。

データサイエンティストとしての力を身につけたらその時に AI や機械学習の本を一冊で良いので読んでみてください。きっと理解できると思います。

もし理解が難しい方は、少し数学を勉強する必要があるかもしれません。しかし、その頃にはおそらく皆さんは初心者ではなく、ご自分で何を学ぶべきかわかるようになっていると思います。

それとデータサイエンティストも同じことが言えるのですが、分析を行うために少なくともクラウドを利用する場面が出てきます。
総合的な力も必要となるため他の開発部分にも手を伸ばすと良いかと思います。

ロボット

続いてロボット・・・と行きたいところですが、あまり経験がなく割愛させてください。

ただ興味がる方は「組み込み」や「IoT」といったワードで検索してもらうと詳細が調べられると思います。

また安価なラズベリーパイという小型コンピュータもあるのでそちらを調べてもらえればと思います。

ハッキング

さて次はハッキングについてです。

ハッキングというとサーバーに侵入して個人情報を抜き取るなど、悪いイメージがあるかたも多いのではないでしょうか。
映画とかではだいたい悪いことをしていますね(笑)

ただそういう人たちのことは「クラッカー」と呼び、セキュリティを守るためのハッカーのことを「ホワイトハッカー」と呼びます。

実際にハッキングを行うには、あまりプログラミングは使いません。
どちらかというネットワークなどの知識を学ぶことが重要になります。

しかし、だいたいセキュリティ担当者に求められることは「この Webアプリで大丈夫かな?」「このサーバー構成で大丈夫かな?」といった課題です。

そういう時に Web アプリ開発の知識が役に立ちます。
ハッキングを学びたい人はまず Web アプリ開発から学ばれると良いかと思います。

逆に Web アプリ開発で職業にしたい方は、是非一度セキュリティについて学んでみてください。


最後に

また入りたい企業や携わりたいサービスに合わせて学ぶことはモチベーションに繋がり、ここに記載した通りでなければ無駄ということは一切ありません。

ただ何をすれば良いんだ・・・これができて何になるんだろう?という人たちのロードマップ的存在になると嬉しいです。

是非質問でもなんでもコメントください。

それではまた次回〜