見出し画像

たった5個の質問で、プログラミング学習に伸び悩んでいるあなたが何を勉強すればいいかわかる問診票

こんにちは!機械系大学生エンジニアのウメスです。

このnoteを最後まで読むとプログラミング学習で伸び悩んでいるあなたにふさわしいアドバイスを得ることができるとともに、
今後どのようにプログラミングを学習していけばいいのかの指標が手に入ります。

僕は大学からプログラミングをはじめ、プログラミング歴はもうすぐ2年になろうとしています。
僕はかつて、ある会社のインターンでプログラミング学習コースのメンターとして、50人ほどの学生さんのプログラミング悩み相談を受けてきました。

そこで、プログラミングで悩んでいる人の共通点があることがわかっていました。
ですので、今回は皆さんのレベルにあったアドバイスをしていこうと思います。

万人に共通するアドバイスはない

アドバイスをしていこうと思いますって言いながら、いきなり矛盾するかもしれませんが、全員に共通するようなアドバイスは残念ながらありません。

皆さんのレベルも特性も違いますしね。

以上を踏まえ、ぼくとしてはどのようにアドバイスしていけばいいのか、考えた結果、今回のような問診表形式で行こうと思いました。

問診表の回答をもとに適切なアドバイスができると考えたからです。
では早速行きましょう。

質問1 すでにプログラミングを始めている(具体的には、自分のパソコンにエディタを入れて、コードを書いている)

はい or いいえ

質問2 プログラミングの文法やモジュールの使い方の知識があらかた頭に入ってからでないと、プログラミングで製品やサービスを作ることは難しいと思う。

はい or いいえ

質問3 (どの言語でもいいですが、)何らかのチュートリアルを行っているが、正直成長している実感はない。

はい or いいえ

質問4 自分で何らかのプロダクトを生み出した(ポートフォリオでもよい)ことがない

はい or いいえ

質問5 プログラミングに関して調べるとき、英語ソースは読みにくいので、なんとしてでも日本語ソースを探す。

はい or いいえ

以上になります。お疲れ様でした。

では早速アドバイスをさせていただきます。
ちなみにですが、質問番号が大きくなるに連れて、レベルが高く、いいえと答えづらくなります。
つまり、読者の皆様はこの5つの質問の答えがすべて「いいえ」になるように学習をしていくと、着実にレベルが上がっていきます。

質問1について、
プログラミングをまだ始めていらっしゃらない方は何したいかによって始め方が変わると思います。
大体パターンとしては
・Webエンジニアになりたい
・普段の業務を自動化したい
・何になりたいわけではないけど、プログラミングやってみたい!

Webエンジニアになりたい人
最初はhtml&cssとruby(pythonでも可)をprogateという学習サービスを使って勉強することをお勧めします。
月額980円かかりますが、ケチっても仕方ありません。ちゃんと後でペイできるように頑張りましょう。

この時の注意点としては2つあります。
注意点1
progateに時間をかけすぎないこと一日どれぐらいやるかはわかりませんが、一週間で8時間を学習に割くとすれば、
だいたい2か月ほどでhtml&css(初級編で大丈夫)とrubyとruby on Rails(すべて)を完了させましょう。
注意点2
道場コースは必ず自力でやりましょう。いくら時間がかかっても構いません。

普段の業務を自動化したい人

この場合は何を自動化したいのかによるとは思いますが、
例えば、excelの自動化がやりたいとなったら、VBAマクロという言語を勉強する必要があります。
VBAの勉強にはこのページが本当にいいとおもいます。
ほかにも、googleスプレッドシートなどを普段の業務でお使いの場合は、GASという言語を勉強する必要があります。
GASの勉強にはこのページがいいと思います。

なんとなくプログラミングをやってみたいという人

この場合は環境構築など面倒なことが少なく入門でき、かつ、今後どんな事ややるにしてもある程度つぶしが利くPythonがいいと思います。progateからの入門をお勧めします。(webプログラマーになりたい人と同じ)

以上が終了したら、質問2、3の回答が「いいえ」になるように学習をしていきましょう!


質問2について、

これは半分間違いで半分正解です。
どういうことかをご説明しますね。

まず、半分間違いである点から。
プログラミングそのものの知識は(例えばエラーが出たり、コマンドが分からなかった場合は)調べてちゃんと実装できれば何も問題ありません。

初心者の人でよく見かけるのが、prog〇〇eを何周もしています!という人です。
正直に言いますと、これはあんまり意味がないかな~って思います。

なぜなら、ifとかfor、データ型などは自分でコードを書いてプログラムを書いて、覚えていきます。
また、APIの詳細などはやはり、エンジニアの人でもその都度調べて、どれをどのように使うかを決めているので、暗記する必要はありません。

つまり、完全に覚えないと、次のステップ(自分でチュートリアルをやったり、プロダクトを作ったりするステップ)に進めないことはありません。むしろ、自分で考えて、その都度調べて作った方が頭に残ります。

以上が半分間違いである点です。

半分正解である点

プログラミングでお仕事をしたり、自分で何かサービスを作り出したいとなった時に暗記しておく(頭に入れておく)必要があるのは、プログラミングそのものの知識というよりは周辺の知識になります。

プログラミングは単なる動けばいいというものではありません。
そもそもプログラミングでプロダクト(製品)を作るとはどんな事なのか、行程をご紹介しますね。

プログラミングでプロダクトを作る行程(ざっくり)
1お客さん(クライアント)と話合い、クライアントの問題を解決するにはどのようなプロダクトを作ればいいのかを決める。

2 1で決めた大まかな案を具体的な仕様書に落とし込む

3 2の仕様書をもとに実際にコードを書いていく(プログラミングする)

4 プロダクトのテストをする

5 リリースする(ローンチ)

ざっとまとめると以上の5ステップになります。(3と4は若干前後するかもしれません)

どうでしょう?皆さんのイメージで言うとプログラミングといえば、3番が思い浮かぶのではないでしょうか?
しかし、実際の現場で効率的に仕事をしていく上では、すべての工程がとても大事です。

3以外の工程では、やはりプログラミング周辺の知識がないと仕事になりません。

プログラミング周辺の知識が必要なほかの理由
これは質問3とも被るのですが、プログラミング周辺の知識があるのとないとでは、チュートリアルなどをして、手を動かして勉強していく際にも、効率に大きな差が生まれます。

具体的な例を見ていきましょう。
webサービスを作るうえで人気なRuby on Rails(以下Rails)というフレームワークがあります。
フレームワークが何かということはひとまずおいておいて、実際そのRailsのチュートリアルを見てみましょう。

https://railstutorial.jp/chapters/beginning?version=5.1#sec-development_environment

どうでしょう。いきなり、IDEコマンドラインなど(本当に初歩の初歩なんですが)難しい言葉が出てきますよね。
周辺知識がないといきなり知らない言葉ばかりで、学習効率がガクっと落ちます。
英語でたとえると、知らない単語ばっかりの文章は読みにくいですよね。

では、どんな知識があるといいのか。以下に簡単にまとめてみました。チュートリアルを始める前に、ざっと以下の言葉が説明できなくても、理解できるようにしておきましょう。

プログラマ全体
・ターミナル(シェル、コマンドライン)
・OS
・データベース
・プログラミング言語の種類と特徴
・CPUやメモリ
・Unixコマンド
・モジュール
・git
・オブジェクト指向
webプログラマー(何らかのサービスを作りたい人)
・サーバー
・リクエストとレスポンス
・フロントエンドとバックエンド
・フレームワークとは
・プロトコル(通信の仕組み)
・同期処理と非同期処理
・DOM
webプログラマー以外
・アルゴリズム
・データセット
・スレッド
・計算量(具体的に計算できると嬉しい)
・ガーベージコレクト

以上に上げた知識を事前に持って、プログラミング学習に励まれるといいかと思います。

質問3ではいと答えた人

まずチュートリアルはある程度回数をこなした方がいいです。
ボリュームにもよりますが、大体3周ぐらいが目安でしょうか。(すでにプログラミング経験のある場合は、1回で大丈夫です。ドキュメントを読むほうがためになります。)

それで、チュートリアルから少し離れて、自分でオリジナルの機能をつけていきましょう。
プログラミングで何かを作る時は、チュートリアル通りにできるものなんて何もありません。
ですので、この自分オリジナルの機能をつけるというのは非常に勉強になります。

何を作ればいいか迷う人は以下の点に着目した機能を追加してみてください。
・CRUD(追加、読み込み、更新、削除)
・APIを用いた機能(googlemap,twitterAPI,InstagramAPI)
・認証機能(ログイン)

質問4ではいと答えた人
ポートフォリオは必ず作ってください。
なんでもいいです。くだらないテーマでもなんでも。
お仕事をもらおうとすると内容ももちろんある程度大事ですが、技術面があるかどうかが大事です。

採用しようとしている人はそこを見ようとしています。
具体的には以下の条件を満たしていると、採用する方からも一定の評価をもらえるでしょう。
・Git(必須。しかもドキュメントがしっかりとしていることが大事。バージョン管理もちゃんとできていると吉)
・何らかのサーバーにアップされていて、パソコンやスマホから見ることができる(採用担当が必ずしもエンジニアとは限らない)
・なぜ、その言語とフレームワークを用いて開発しようとしたのか(技術選択の理由)

質問5ではいと答えた人
日本語ソースよりも英語ソースの方が、最新のものが多く、信頼度も高いのが多いので、英語ソースで読むことをお勧めします。
というか、いずれ英語ソースを読まざるを得ない状況になります。
どうしてかというと、使っている技術が少し専門的になると、それだけで、日本語ソースの量が劇的に減るからです。
例えば、先ほどご紹介した、Railsなどは日本でも結構有名なので、日本語ソースがふんだんにありますが、例えばReactといわれるJavascriptのフレームワークは最近フロントエンドの開発では主流になりつつあるのですが、技術的な変遷が早く、正しい情報を追うためにはどうしても、英語ソースを読む必要があります。

今なら、google翻訳がかなり強いので、英語ページに行ったら、右クリックをして、迷わず翻訳してしまって下さい。

とは言っても、英語ソースを読むことはとても大変ですよね。
実際、僕がメンターをやっているときも、その悩みを抱えている人が結構多かったです。
ですので、学びはじめは日本語でプログラミングを勉強しながら、英語を勉強しつつ、レベルが上がれば、英語ソースで勉強してみるといったプロセスを踏んでいくといいと思います。

英語の勉強についてですが、この場合、別に書ける必要はあまりないので、単語を学んでいくことになります。
高校生が使うような英単語帳を使ってまずは勉強しましょう。
そして、英語ソースを読み始めたら(読む必要に迫られたら)Ankiというフラッシュカードアプリを使って英語を勉強していくといいと思います。

わからない単語に出会う度に、調べて、フラッシュカードに登録→勉強を繰り返します。
また別記事に書こうと思うのですが、このAnkiプログラミング学習でもかなり役立ちますので、ぜひ使ってみて下さい。
https://apps.ankiweb.net/  (英語で書かれてますが、検索すれば日本語の検索記事も出てきますので)


以上でこのnoteは終わりです。
今現在プログラミング学習のコミュニティを作成しようと思っています。ぜひ参加したいという方はコメントしていただけると嬉しいです。

一定数(5人以上)で作成しようと思うので、よろしくお願いします!

この記事が気に入ったらサポートをしてみませんか?