I am うるぞー

エンジニアが楽しくラクして稼ぐ方法

プログラミング未経験者が最初に学ぶべき言語は何か

f:id:uruoikun:20171218184639j:plain

どうも、うるぞーです。
12月に入り、もう今年も終わりますね。
一年を振り返って、今年はエンジニアとして急激に成長(スキルも収入も)した一年になったなぁとつくづく思います。

さて、今回はプログラミングを今までやったことがない人が一番最初に学ぶべき言語は何か、ということを真剣に考えてみました。

最初に何の言語を学ぶべきか議論

ネットの掲示板だったりTwitterだったりでよく見かける『プログラミングをこれから学ぶ人が最初にやったほうが良い言語』議論。
初心者の人が質問をして、エンジニア・プログラマーの人が自論を言い合って揉めることも多いですが、これって正直答えなんてないと思うんですよ。

みんな一番最初に触った言語はバラバラなわけで、それから色々と経験を経た上で「この言語はあーだこーだ」「こんな言語は最初から学ぶべきではない」と語るわけで、主観的な意見しか出せないので誰も正解は知りません。だから議論になるわけですが。

なので今回のこの記事もあくまで僕の主観であって、正解かどうかはわかりません。
来年になったら考えが変わるかもしれないし、初心者が学ぶために最適な言語が生まれる可能性だってあります。
僕の言葉を信じて勉強を始めたけど、結果的に無駄だったということがあるかもしれない。

ですが、現役エンジニアのうるぞーが数日間真剣に考えて考えて、そこで僕が出した答えだということを知った上で現役エンジニアの一意見として読んでもらえればと思います。

結論

結論ですが、「何を重視して最初の言語に手をつけるか」が大事だと考えています。

機械学習をやりたい人間が最初にRubyをやるメリットは少ないので、最適な言語はPythonだと伝えていますし、Webアプリケーションを作りたいと言っている人にC言語から手をつけるメリットはないよ、と伝えています。
「Javaやっておいたほうがいいって聞いたのでなんとなくJavaやります!」だと自分のやりたいことや作りたいものが明確になっていないので継続しにくいと思ってます。

僕が考える、プログラミング未経験者の人が学ぶべきプログラミング言語を見つける方法は以下の通り。

1. 用途にあったプログラミング言語を調べる

まずは自分がやりたいことに対して、どんな言語が適しているのかを調べることが大切です。
「機械学習 言語」とか「Webアプリケーション 言語」とかで調べて、それをやるためにどんな言語があってどれがよく使われていて、自分にはどれが良いのか(この場合は学習のしやすさ等)を知ることが大切だと思います。
これが決まっていないと「この人がこう言ってたからこれやっとこ」というフワフワした動機でプログラミングを始めることになるので、つまづいたときにモチベーションの維持がしにくいです。

2. プログラミングをすぐに始められるかどうか

次に大切なのは、実際に「プログラムを書く」ことにたどり着きやすい言語を選ぶこと。
例えばMacを使っている人は最初からRubyとPythonがインストールされているので、ターミナルというツールを使ってパソコンを買った初日からプログラミング学習を始めることができます。
もしくはインストールが簡単そうな言語を選ぶことが『非常に』大切。

これが他の言語だと、まずインストールに失敗したり、環境構築ができなくて肝心のプログラミングにありつけずに挫折して勉強をやめてしまう人もいます。
実際に僕の周りにそういう人がたくさんいました。
パソコンに詳しくない人が環境構築のエラーにぶつかったときに対応方法がわからなくて「やっぱ自分にはプログラミングは無理だ」なんていう思考になってしまうのは機会損失だし、非常にもったいない。

だからプログラムを書くことにありつけやすい言語を選ぶのも考えた方が良いです。

3. 初心者が効率よく学ぶための適切な方法を調べてやってみる

前からプログラミングをやっていて新たに別の言語を学ぶ人と、今回からプログラミング自体を初めて学ぶ人では学習方法は異なります。
だから初心者の人がその言語を勉強するときにベスト(だと思われる)な方法を見つけてその通りにやってみることが大切かなと思ってます。

例えば「Ruby 初心者 勉強方法」とか「Python 初心者 勉強方法」とかで調べてみるとブログ記事やらQiitaなどのサイトが引っかかります。

f:id:uruoikun:20171218185531p:plain

その人が実際に勉強した過程とか、使ったサイトとか本とかが紹介されています。
初心者はどんな勉強方法で進めていけばいいのかなんて判断つかないので、まずはその人の言ってることが「正しそう」「自分に合いそう」と思う勉強方法をそのままやってみること。

最初はどんな言語も学ぶことはほとんど一緒で「変数」「if文」「for文」「配列」「ハッシュ」などのプログラミング言語の根底の部分を学ぶことになります。
一度学んでみると「なんだ、Javaだったらこんなに書かなきゃいけないことをRubyだったらこれだけで書けるのか!」とか、色々わかってきます。

以下のコードはその例です。
Javaで「どうも、うるぞーです」と表示させるためだけのコードは以下の通りです。

public class HelloUruzo
{
    public static void main(String[] args)
    {
        System.out.println("どうも、うるぞーです");
    }
}       

それに比べ、RubyやPythonはたった1行のコードで表示させることができます。

puts 'どうも、うるぞーです'
print 'どうも、うるぞーです'

こんなシンプルな出力だけなのにコードを書く量は劇的に違います。面白いでしょ?
一つの言語を勉強することで自分の中で一つの軸を持てるようになり、それを基準に他の言語の特性を知ることができます。

それを身に持って体感するためにもまずは実際にパソコンのキーボードを叩いて手を動かすこと、本を眺めるだけではなく実際にコードを書いて実行し、結果を確認するようにしましょう。
自分で書くことで身体にコードが馴染んできます。

4. 毎日継続的にコードを書くこと

正しい方法を見つけたら、あとはそれに従ってコードを書いて身体に覚えさせていくだけです。余計なことは考えずにコードを書いてプログラミングを理解することだけに集中しましょう。

...と口で言うのは簡単なのですが、大半はここで離脱します。
つまり、みんな継続的にプログラミングをしないから知識が定着しないんです。
仕事が忙しかったり、めんどくさくなって勉強しなくなったのがきっかけでズルズルやらなくなっていきます。

当たり前のことなので今更声を大にして言うことでもないんだけど、これが一番大事。
これができている人はプログラミング力がめきめき伸びていくし、そうでない人は全然スキルはつきません。

じゃあどうやって継続させるか、というのは後術します。

この方法に従えば、文系理系関係なく、誰でも必ずプログラミングできるようになります。

うるぞーの言語経歴

僕もプログラミング学習に苦戦した人なので、初心者の不安はわかるつもりです。
参考程度に僕のプログラミング言語の経歴をご紹介しておきます。

僕は大学に入ってから本格的にプログラミングの勉強を始めました。
情報系の学部なのでプログラミングの授業が必修で、それ以外の授業も実際にプログラムを書いていくものが多かったので、毎日たくさんのコードを書いていました。

一番最初に触った言語はJavaです。
なぜJavaを最初に勉強したかというと、僕の学部で必修の言語になっていたからです。
だから理由をもって自分でJavaを選んだわけではなくて、「やれ」と言われたからやっていただけです。

今思えばJavaはオブジェクト指向を学ぶには最適の言語で、他のどんな業界にいったとしてもやっていけるベースの力を身につけやすい言語だなと思います。
大学の先生たちもいろんな言語があることを知った上で、「Javaを勉強したほうが長い上でエンジニアとして生きていくための根底を築きやすい」と考えたのかもしれません。
ちなみに、僕の一個下の代からは必修言語がJavaからPythonに変わりました。

初めて勉強したときは「なんでJavaなんか選んだんだよ!」とよく文句を言っていました。
僕は昔からWebサービスを自分で作りたいと思っていたのに、Javaはハードルが高すぎてなかなか作れなかったので学ぶ意欲が薄かったんです。役に立たない言語を学んでいる感じがして。
課題だから、必修だからというネガティブな理由でプログラミングをしていたので、大学時代は正直プログラミングが好きではありませんでした。

「授業と課題」という逃れられない環境に身をおいたのでトータルで3年間みっちりJavaを勉強していたわけですが、その他にもC言語で画像処理をしたりSwiftで簡単にアプリを作ったり、趣味程度にPythonを書いたり、簡単なWebアプリケーションを作りたくて独学でRubyを勉強しました。
ちなみにJavaで簡単なAndroidアプリを作ったりしていましたが、かなりコンピュータサイエンス寄りのことばかりやっていたのでサービスって感じのものは作ったことありません。

学んだ流れで言うと、
Java → C → Java → Ruby → Python → Swift → Ruby
って感じです。

根底にはJavaがあって、それを元にいろんな言語を基本独学で勉強していきました。

一個プログラミング言語を習得したら他の言語を習得するのは簡単です。
だからまず何かの言語をしっかり理解するのが大切。

独学でJavaをやるのはかなりきついです。
やりたいことはシンプルなのにたくさんコードを書かなきゃいけなかったり、最初は理解できないのでこれはおまじないとして覚えてね、というコードも多いのでよくわからないけどとりあえず書いてるみたいなコードがたくさん出てきます。

よくわかってないものをとりあえず書いてる時ほど、つまらないことはなかったです。

ただ、今の僕がいるのは最初にJavaでみっちりオブジェクト指向を学べたから、というのにつきます。
Rubyを仕事で使う上でJavaで学んだオブジェクト指向が役に立っているなと感じることが多いです。 だから上級エンジニアになるための根幹をきっちり固めて、先生(orエンジニア)に教えてもらえる環境がある人はJavaから始めるのは良いと思います。

僕が昔からオススメしている【ProEngineer 】は無料のプログラミングスクールで、JavaとPHPを学ぶことができます。
このように教えてもらえる環境に飛び込めるなら、Javaを最初にやるのはオススメです。

詳細はこちらの記事で書いています。

▶︎無料のプログラミングスクールで年収600万以上を目指せる

独学でやっていこうという人にはハードルが高いように思うので、あまりオススメできません。

Web系でエンジニアをやるならRuby

僕はWeb系のエンジニアなので、Web系エンジニアにアドバイスはできます。
なのでWeb系エンジニアになりたい人に向けて書いていきます。

大学時代からずっとWeb系のエンジニアになりたかったわけですが、大学のRubyの授業だけでは実際のアプリケーションまで作ることはできなかったので結局独学して習得しました。

なぜWebサービスを作ることができるJavaを学んでいたのにRubyを新たに勉強したのかというと、ベンチャー企業の多くがRubyを採用しているからです。
なぜベンチャー企業がRubyを採用しているかというと、作るスピードが他の言語よりも断然早いから。
その時の僕は起業をするために自分でWebサービスを早く作る必要があったので、早く作れる言語とフレームワークを探していて、そこで見つけたのがRuby on Railsでした。

僕がRuby on Railsという技術を使って簡単なブログサービスを爆速で作るという動画をあげました。
それを見てもわかる通り、早く作るための土台が整っているのが魅力の言語です。

見ての通り、フレームワークにのっとってコードを書くことで凄まじいスピードでサービスを作ることができるんです。
5行のコマンドを打つだけで簡単なブログ機能のあるサービスを作ることができると思うとすごいですよね。

そういう理由から、僕はRubyを使ってWebサービスを作ろうと決めました。あとは適切な勉強方法を見つけて、本を買ってひたすらにコードを書きました。
Web系の言語というとJavaもPHPも有名ですが、僕個人としてはRubyがよかった。ただそれだけです。

初心者の人でもとりかかりやすいと言われいるプログラミング言語はRubyとPythonです。
PythonでもWebサービスを作ることができますが、業界的にあまり主流ではないような気がしています。求人とか見てもWebサービス系はRubyが多いです。

なのでこれから独学でプログラミングを勉強してWebエンジニアになりたいのであればRubyをやるのをオススメしています。需要がある言語で世界中でエンジニアが不足していますので、海外で仕事をしたい!という人にも良いと思っています。

個人的にもこれまで触ってきた言語の中で一番Rubyが書いていて楽しいですし、飽きがこないです。このまま他の言語を学ばずにずーっとRubyエンジニアやろうかなと思っちゃうくらい。

Rubyに興味ある人はぜひググってRubyのいろんな情報をゲットしてみてはいかがでしょうか。

給料低くてもいいから企業でエンジニアとして仕事をする

先ほど「どうやって継続してプログラミングするか」というのを書きませんでしたが、一番いいのは給料が下がっても低くてもいいから企業のエンジニアとして働くことで、やらざるを得ない環境を作ることかなと思っています。

これは僕が現在正社員として働いている会社のエンジニアの方も言っていましたし、フリーランスエンジニア仲間の人も言っています。

プログラミングができないときから企業になんとか入って、その中でプログラミングを勉強するのが一番成長できると考えています。

自分を変えてくれるのは強い意志か環境だけです。
自分で環境を作れない人は、環境が整った中に飛び込むのが一番。

これは僕の実体験ですが、独学で学んでエンジニアをしてたときよりもいろんなエンジニアと一緒に仕事をしながらプログラミングした時のほうが成長率の伸び幅がすごいです。
僕も自分で環境を作るのが得意ではないので、その環境に飛び込んで優秀なコードを盗んで学んでいきました。
また企業に入ると自分の書いてるコードをダメ出し(いわゆるコードレビュー)されまくるので勝手に矯正されています。

良いスポーツ選手になるために良いコーチを見つけるように、良いエンジニアになるために良いエンジニアに教えてもらうのが一番成長早いです。
独学で一生懸命頑張るのも大切ですが、それを正してもらう環境を作ることも大切です。

独学でやっているとデメリットあって、自分の書いているコードが正しいのか正しくないのかが判断できないことです。
動くけど汚いコードは後々自分の首を絞めてきます。(これも実体験)

ということで、まず独学でプログラミングを勉強してアルバイトでも良いので企業に入ってみることをオススメします。スキルを磨いて実績を作ることができれば、あとは勝手にエンジニアとして成長していきます。

【まとめ】好きな言語を見つけよう

仕事をしていると、「この人本当にプログラミング好きなんだな」と思う人によく出会います。
平日は仕事をしっかりやって、土日は自分でプログラミングの勉強をしたり勉強会に参加したりハッカソンに参加したりと、毎日プログラミングに触れています。

そりゃ毎日やれば誰だって上手くなるわな!と常々思うわけですが、やっぱり「好きこそ物の上手なれ」で好きでプログラミングをしている人は本当に勉強熱心だしこだわり持って仕事しています。

初心者がプログラミングを好きになるために、プログラミングを楽しんですることが必要だと思っていて、そのために自分の好きなプログラミング言語を見つけることから始めると良いのではないかと考えています。

あまり知られていないかもしれませんが、Rubyはプログラミングを楽しんでできるように作られた言語なので実際書いていて楽しいです。
そんな言語を見つけてプログラミングのスキルをつけていくのがオススメです。

この記事の通りにプログラミング学習の第一歩を始めてみてはいかがでしょうか。

プログラミングをこれから始める方のお役に立てれば幸いです。


<関連記事>

▶︎ 未経験者がエンジニアとして就職/転職をするために必要な3ステップ

▶︎ 無料でプログラミングを習得!現役エンジニアがオススメする学習方法

▶︎ プログラミングを挫折せずに学び続けるために僕が意識した3つのこと

▶︎ 新卒フリーランスエンジニアの僕が考える、プログラミングに向いている人の5つの特徴

▶︎ 【2017年度】プログラミング言語ランキングベスト15を解説します!