プログラミング学習方針の再整理

年始からPythonの勉強を始めて1ヶ月。
1月が終わるキリが良いタイミングで方針転換を決めました。

背景

勉強を始めた段階ではエンジニアとしてのキャリアの登り方のイメージが湧いていなかったのが正直な所です。今月何人かエンジニアの方にお会いし、相談をしていました。(yentaや前職経由、Twitter,Wantedlyなどで連絡しました。)

「基本的な文法を学ぶ」までは行ったものの、その先何がしたくて未経験の段階でどこまで勉強していれば良いのかが見えていなかったことが原因です。

改めてやりたいことと、そのための使用言語、学習計画を整理します。

プログラミングを学ぶ目的

  • 将来PMに戻る時に、チーム開発の流れが自分で解像度高く理解できている状態にする。

前職ではビジネスサイドの代表として、開発チームのPMに入っていました。 しかし、開発の詳細が理解できず、判断をエンジニア任せにしてしまうことが多々発生していました。今後Web開発が絡むPjtを担当する上で、20代のうちに一度実装部分まで深く潜ることは必須だと体感したためです。

  • 海外に移住するなどの将来設計を見据えて、働き方の幅を持てる状態にする。

ビジネスサイドの多くの職種は、(もちろん極めようと思えば奥は深いものの)何でも屋になりがちです。リクルートでの業務設計・ディレクションがキャリアのスタートのため、「色々やっていて忙しいんだけど、いざ副業とかしようとすると、提供できる価値が見えにくい」問題があるよね、と同期とよく話していました。
1つの職種を深く学んでいる状態があると、いざという時に自分の身を軽く保つことができるなと感じています。

補足:なぜエンジニアか

新卒の面談の常套句ですが「それって他の●●でもできるじゃん(上記だとWebマーケティング、デザイナーあたりが該当するでしょうか)」の反論?がよくきます。そんなこと言い出したら前に進まないじゃんとは思いますが、あえていうとしたらこんな所です。

  • 仕事の進め方が合っている

「科学的な適職」にも紹介されていた、「仕事の仕方の適性に合った職種を選んだ方がパフォーマンスを発揮でき、ストレスもたまらない」の考え方によるもの。
僕はどちらかといえば防御型です。どう漏れなく効率よく潰し込めるか、の思考回路のためどちらかというとデザインよりエンジニアリング寄りの思考だと捉えています。

www.onomimono.com

  • 自分でサービスそのものを作れるようになりたい

新卒で就活をしていた頃から、「サービスをつくって、届けるまでの流れを循環させたい」ことがやりたく、業務設計のできる会社に入りました。

当時は言葉として知らなかったですが、カスタマーサクセス界隈で言う所の「Flywheel」みたいなことに興味があったんですね。

blog.hubspot.jp

作りたいものができた時に、仕事でもプライベートでも自分でミニマムに着手し始められる状態を作りたいためです。

業務目標

  • 3ヶ月以内(2020年4月末)に自社開発のベンチャーにエンジニアとして就職する

開発だけの切り出しではなく、コンセプトから一気通貫して経験できる自社開発への就職。まずは雇用形態にはこだわらず、チーム開発の実務経験とFBが受けられる環境を重視。

  • 就職後半年以内(2020年10月末)に簡単なチケットであれば、自分に割り振られた部分は質問せずに実装までできる

自分でPMをしていた時の感覚として、ここまで到達できればまずはチームに入ってやっていけるという感覚があるためです。

学習目標

  • 2ヶ月半(2020年4月中旬)で掲示板系のサービスを2周以上作る。 何人かのエンジニアの方に伺った所、以下のような言葉が印象的でした。

    大体のwebサービスチュートリアルとかで作る掲示板の応用みたいなもんだから。 そのためあまり、最初の段階で奇をてらったものを作るより、一般的なサービスを、自分で理解しながら作ることに慣れたいと思います。

使用言語

今までPythonを勉強していましたが、一時休止して、「Ruby」に変更しようと思います。 最初にPythonを選択した理由は以下でした。

  • もともと趣味で多少の勉強経験があった
  • 業務改善系の開発にも興味がある
  • 将来的に機械学習分野にも進みたい

しかし、英語文献が多いことや、開発での求人数の少なさを考慮すると上記の目的・目標のためには今学ぶべき言語ではないなと判断しました。

変更後の言語としてRubyを選んだ理由は

  • 日本語の文献が数多くある

英語が読めない訳ではないですが、日本語の方が理解が早いことは間違いないです。英語もついでに勉強できるし、いっかと考えていましたが、今は純粋にプログラミングの学習速度を上げることを優先します。

  • ベンチャーを中心とした中規模企業の自社開発に用いられている

PHPも案件は多いものの、自分の目指したい姿を考えると、ベンチャーで多く使用されている言語を選択する方が無難かと。

Pythonと同じように、業務改善系の開発をすることとも相性がいいため、勉強のモチベーションになります。ビジネスサイドでは、意外としょうもないことを日々繰り返していたりするので、その辺りはサクッと自分で解決できるようになりたい。。

  • Pythonと書き方が似ている)

せいぜい1ヶ月なので、そんなにサンクコストを気にしている訳ではないですが、勉強した分を活かせるというのはモチベ維持にとって大きいです。

主な勉強方針

Rubyの勉強(2週間)

Pythonの経験から、最初のうちに詳細まで踏み込みすぎるよりも、よく使うものをコンパクトに繰り返す方が効果的な体感がある。

  • ドットインストール(ザッとRubyでの書き方を覚える)
  • たのしいRuby(基礎文法を固める)
  • Ruby プログラミング 50 題 (PDFコンテンツ、練習問題)

(にしてもRubyで検索した途端、書籍もWebサイトも選びたい放題になるのは面白いな。。)

Ruby on Railsの勉強

まずは上記Rubyを固めてから調べる。

■参考にしたWebページ一部

eng-entrance.com

PHPはなんといっても、その「とっつきやすさ」にある。プログラミング初心者ならば大体のケースで、PHPがオススメとなる。 要は学習コストが低いのだ。 また、PHPは世の中にあるほとんどのレンタルサーバーがサポートしているため、スクリプトさえUPすれば、動かすことができる。 これはまだサーバー構築スキルの無い初心者にとっては、大きなメリットだ。

www.sejuku.net

Rubyは記述がシンプルで日本語で参照できる記事や書籍が多いためとても学びやすい言語で、実際の開発現場では変わらず重宝されています。

どういう形態でリモートワークにしていくか、受託開発を行っていく場合はどのような企業と出会えるか、にもよるのですが、どちらにおいても「Ruby」の方が有利に働きやすいと考えます。 Rubyを採用している所は、バージョン管理や開発の運用が整っており、新しい技術やアジャイルと呼ばれる短期スパンで小さな開発を繰り返す開発体制などを積極採用する企業(チーム)が多いです。

diveintocode.jp

フレームワークの統一化で車輪の再発明を防ぐRuby
・我流を許し、既存のWebを使い続けられるようにしているPHP

remublog.net

案件の値段が高く、募集数が少ないのがRubyである一方、案件の値段が低く、募集数が多いのがPHPです。

jp.quora.com

案件はざっと見る限りでは、PHPの方が多いようです(WordPress案件は実質PHP案件)。ただし、PHPは結構土方みたいな仕事や奴隷みたいな案件が多いので、漠然と単価や仕事の質を考えるとRubyの方が良いとは思います。とは言え、食い詰めてしまった時に「土方仕事」があるのは良いことですからね。

特に、Pythonの書き方はかなりRubyと似てるので習得し易いです。

tech-camp.in

www.sejuku.net

いままで主要言語として利用されていた「Ruby」や「PHP」は年々利用者の数が減少しています。

framgia.com

初心者の方にとって体系的により学びやすいのは、こちらの『現場で使える Ruby on Rails 5速習実践ガイド』となるかと思いました。追記なので補足文のようになってしまっていますが、初心者の方が1冊を選ぶのであれば、ぜひこちらの『速習実践ガイド』を手にとって頂ければと思います。

magazine.rubyist.net

qiita.com