mmyoji's diary

プログラミングとか日々のどうでもいいこととか

プログラミング初学者向け勉強メモ

早いことで、プログラミングを始めて1年と5ヶ月が過ぎようとしています。

僕自身まだまだヒヨッコで勉強すればするほど勉強しなきゃいけないことが見つかり途方もないですが、「多分こんな感じで勉強進めればもうちょっと効率良くできたんじゃないかな」ってのが最近見えてきたので、まとめておきます。

お金に困ってる友達とかには、「休みの日とかに業務委託できたらある程度は足しになると思うよ」と勧めてみたりしたんですが、何から始めればいいかわからないと思うので、友達のためにもまとめておこうと思いました。

新しく勉強を始める方の役に立てば、と思います。

想定する初学者

は良くわからないので1年半前の僕の状況

  • プログラミングほぼしたことない(大学2年ぐらいの時, C言語の授業取って3回目ぐらいで行くのやめた。プログラミングというより数学の授業だったため)
  • 文系
  • 新卒で営業職入って8ヶ月くらいで辞めた(社内政治にうんざりして)
  • 大学2年からMacユーザー。MacBook Pro触るのは好きだった。基本ネットサーフィンぐらいしかしてなかった。
    • 開発自体はVagrant(後で説明します)使って行うことを想定していますが、Windowsの方は少し大変かもしれません...

用語/環境に関して

初め何が一番辛かったって、言葉がわからないんですよね。まったく知らない単語だったりするので、聞いても聞き逃したりして、調べようにも調べれない、ってことが多々ありました。

僕が個人的にわけがわからなかった言葉などについてまとめておこうと思います。

ブラウザ(クライアント)

「ブラウザ」はわかりますよね。Webブラウザです。ChromeFirefox, Safari, IEのことです。

これを一般的に「クライアント」って呼んだりします。とりあえずクライアントって言われたらブラウザね、って理解でいいと思います。

あとはこれに対応するものとして「サーバー」ですね。色んなサーバーがあるんですがとりあえず、ブラウザで特定のURL(例えば google.com)を叩いたときに、それに対して返事してくれる裏方さんって理解でいいです。 あまりブラウザを開発するって人はいないと思うので、基本的にこの裏方のサーバーをゴリゴリ作っていくのがメインの仕事ですね。

クライアントサイドでも、「何を表示するか」「どう表示するか」「このボタンを押したらポップアップが出る」などをプログラミング言語で書くこともありますが、ここら辺も追い追い説明していきます。

厳密に言うと違いますが、ここの説明はニュアンスで大体理解しとけばいいかなと思います。

CLI(Command Line Interface)

コマンドラインとかって言ったりします。Macで言うと「ターミナル」っていうアプリが(厳密に言うと違いますが)これにあたります。

最初はこれが全然わからなかったです。

文字通り、実際にコマンドを打って、何かを行うもののことを言います(曖昧ですいません)

このアナログな操作方法に対して, GUI(Graphical User Interface)っていうものがあります。またMacの例で申し訳ないんですが、 Finder (ファイル管理ツール) とかがそれにあたります。

普通ファイルを開いたり、移動したりするときはFinderを使って目で動きを見ながら色々な操作をすると思いますが、CLIで操作すると以下のような形になります。

( # の後ろに書いてるのは コメント と言って、実際にコンピューターに実行されない部分のことを言います。開発者のためのメモみたいなものです。)

# ファイルの移動
$ mv ./Documents/memo1.txt ../

# ファイルの削除
$ rm ./Documents/memo2.text

この mvrm などを Unixコマンド と言います。色んな種類があって最初は意味がわかりませんが覚えてくると楽しくなります。

僕は未だに基本的なコマンドしかわかりません。

OS, 開発環境

並列して説明するのはおかしいかもしれませんが。。。

OSはMacOSWindows, Linuxのことです。MacOSLinuxベースで作られてて、LinuxにはCentOSUbuntuなど色んな種類がある、ってのは覚えておくといいかもしれません。

ちなみに僕はMacBookProで開発してますが、仮想開発環境にUbuntuを使って開発をしています。

OSが異なると、CLIでのコマンドの書き方や最初にインストールされているパッケージなどが異なるため、アプリケーションを開発するときや準備をするための手順などが異なります。

自分がどのOSで開発をしているか、は常に意識しておく必要があります。

もし自分がCentOSで開発をしていて、Railsの開発環境を作りたいなら、「rails 環境構築 centos」などのようにググればいいですね笑

外部サービス

これは説明するとキリがないんですが、アプリケーション開発をする上で色んなサービスを使うことがあると思います。

大きい規模の会社であればセキュリティ上の理由や社内のリソースが十分にあったりするので自前で作ったりもできますが、

世の中には素晴らしいサービスがたくさんあるのでそれを活用しながら開発する方が効率良かったりします。

その中で割とメジャーなものをざっくりと箇条書きにしておきます

  • github: ソースコードの管理、開発者間でのコードレビューなどで使用。「サルでもわかるgit」も合わせて見ておくといいでしょう
  • AWS: Amazonが提供している色んなサービスの総称(?)みたいなものです。EC2, RDS, S3あたりは知っておいてもいいかもです。
  • heroku: PaaS(Platform as a Service) の代表格。インフラを自分で準備したりするのめんどくさいのでその部分を担当してくれる良いサービスです。
  • Stackoverflow: 世界的に有名なQ&Aサービス。エラーメッセージとかをコピペしてググった場合大抵このサービスの投稿が出ます。
  • Qiita: Stackoverflowに似てますが,こちらは知識共有サービス。プログラミング専門のブログみたいな感じでしょうか。

勉強プロセス

ようやく本題に入ります。まずどういう手順で勉強するのがいいか、ってところですが、最初の2ヶ月くらいはとにかくがむしゃらにコード書いてみて、「あ、こういう感じで動くんだ」っていうのがわかればいいと思います。

あまり体系的に勉強しようとしてもわからないことが多すぎて挫折してしまうのがオチだと思うので。

僕の場合は定番ですが、 Railsチュートリアル を進めました。バイトで入った会社からは「1週間で終わらして」って言われましたが、全然ダメでした。何もわからないままとりあえず終えたって感じでした。

教えてくれる人がいればその人に教えてもらいながらやるのが一番だと思います笑

けどこのチュートリアルは開発環境の構築から書いてくれているのでしっかりやればこれだけでRailsに関してはかなり勉強になります。

  1. RailsチュートリアルをやってRails, Rubyに慣れる。
    • わからない単語とかは都度ググる。これは常に必要なことなのでクセにしてください。
    • Rubyに関しては、初心者でもほぼ無料で楽しくRubyを学べるコンテンツ11選 - paiza開発日誌 ここに書いてあるサイトでRubyWarriorってやつがおもしろそうでしたが、サイトがちょっと重くてイライラするかもしれないので、都度コマンドライン(MacでいうとTerminalっていうアプリ)で irb って打って実際にRubyを実行するのが楽しいと思います。僕も未だに「あれ、これって合ってるっけ?」って自信がないときはirb起動して書いて確認してるので。
    • HTML, CSS:
    • MySQL:
      • RailsではActiveRecordという、SQLRubyでラップしたもの(ORMapperと言います)を基本的に使うのでSQLを書くことはないと思います。
      • MySQLわかってた方が後々便利だったりもするので余裕があれば勉強しておくといいと思います。これもドットインストールでいいかと思います。
  2. JavaScript
    • AltJSのCoffeeScriptもしくはTypeScriptを勉強することでJavaScriptの理解も深まると思うのでどちらかを学習するといいと思います。RailsはデフォルトでCoffeeをサポートしているのでそっちがいいかもです。(個人的にCoffee好きなだけです)
    • 有名なライブラリはjQuery.(けど徐々に使われなくなってる?オワコン扱いされてる気がします。僕的には小さいアプリとかならまだまだ全然使えると思ってますが笑)
    • Rails自体FWですが、フロント(JS)のFWもいっぱいあります。最近アツいのはReact.jsですかね.他にBackbone.jsやAngular.jsなど数えたらキリがないですし、流行り廃りが激しいので全部勉強しようとかは思わない方がいいです笑
  3. デザインパターン, 設計
    • GoFとかで調べると出てくると思います。
    • 未だに僕もよくわかってないですが、キレイなコードを書けると(思うと)気持ち良いので勉強しておくと良いと思います
    • 最近僕が教えてもらったのはDDD, DCI, PofEAAなどです。実際に適用するかどうかは採用しているFWにもよるので、コードを呼んだりするときに知っているといいかもって感じですかね。
  4. ネットワーク, インフラ
    • 設計とかより先にこっちやった方がいいかもですが、そもそものネットの仕組みやwebサーバー/アプリケーションサーバーとかを理解しておいた方が仕事では役立つと思うので、ここら辺はちゃんと勉強しておきたいところですね。
    • Vagrant, Dockerなどの仮想環境, コンテナなども知っておくべきでしょう
    • 新卒ソフトウェアエンジニアのための技術書100冊 - クックパッド開発者ブログ ここから自分に足りてない本を探して読むのが最近個人的にハマってるところで早めにやっときたかったところです。Wishlistに買いたいやつを入れまくってます。
    • 上記とも被りますが WEB+DB Press の書籍は結構基礎的なものが多いので、迷ったらそっちを買うようにしてます。かなりオススメです!

終わり

あくまで僕が「こういうの知りたかった」ってのを元に書いてたり、ニュアンスで理解しとけば、って感じなので間違いとかあるかもですが、そこらへんは個人ブログなので大目に見てください!

あまりにひどいところとかは後日直しますmm