島までは遠い 〜サークルアラウンド株式会社代表佐藤のブログ〜

佐藤正志@サークルアラウンド株式会社のことが少しわかる場所。プログラマーを育てるトレーナーとして、現役のソフトウェア技術者として、経営者の端くれとして、想うことをつづる。

あまりに熱い「弊社トレーニング利用者の声」に応えたくキーボード叩きます。

f:id:ms2sato:20180822215141j:plain

はじめに

travy.hatenablog.com

こんなに熱いメッセージをしていただけたら、黙ってなどいられようか(いや、黙っていられない)。

もう、大筋は本当に尤もだという内容で、弊社のトレーニングについてとても理解していただいていると思います。 今回トレーニングした弊社側からの目線や補足も交えてお伝えできれば幸いです。

トレーニングの流れ、概要

面談

最初の経緯はちょっと省略しますが、面談の際に下記のようなことは伺えました。

  • WEBサービスを作れるエンジニアとしての就職を考えられている。
  • 既に独学でそこそこいろいろ試されている。調べて問題解決できそう。
  • モノを作るのは好き

人に頼る前に事前になにかやってみて、より高みを目指そうとしたり、さらに速度を上げたい人は総じて良いマインドなので、大歓迎だと思いました。

RubyClimbing で腕試し

あとは実際に作っているものや基本部分が本当に備わっているかはお互い不安であったりもしたので、まずは下記で腕試しを勧めました。面談から伺える実力が本物であれば無料期間の二週間で難なくこなしていくだろうから、お互いにとって無駄が少ないと判断してのことです。

circlearound.co.jp

ある程度の実力が備わっていないうちに個別トレーニングを受けられると、結果的に生かせないというケースがあるので、このステップは弊社にとっても、受講する方にとっても良い試金石となるステップだと思っています。記事にもありましたが、Rubyの基礎の基礎(プログラミングの超基礎)を確認し、SinatraでWEB開発の基礎概念を固めてから、Railsを学ぶような構成になっています。

実際にはサクサクとこなされてしまい、担当の小笠原も「よくデキる人だ」という評価をしていたので安心がありました。

個別トレーニング でより良い作法を学ぶ

このあと私がバトンタッチして個別トレーニングを担当させていただきました。過去に書いたコードを事前に見せていただいたりして「『とにかく力技でどうにかしよう』という条件であればどうにか動くものは作れる」と判断していたので、中心になっているのは「より良いコード」であったり「実際の開発現場でも見慣れている形のコード」のような、コードのスタイルを学ぶことでした。Railsであったので、例えば以下のようなことです。

  • アソシエーションを適切に使う
  • enumを使う
  • 画像をアップロードして保存するなどのような基本的な画面構成に慣れる
  • よくあるgemの操作に慣れる

題材としては先のブログでもありましたが元々書いていたものを1から作り直すという経験を通じて行いました。実は「良いものとの差分を理解すること」は実力アップの一つの条件でもあるので、あえてこういう方法を提案することがあります。終わってからその差に気づいて貰えたのは私としても「してやったり」感がありますね。

基本的にはGitHub-Flowのような形でIssue、Pull Request レビュー、マージの流れで進みます。最初はIssueをこちらが出してやってもらうようなことが多いですが、慣れてくれば自身でIssueを出して開発を進めてもらい、こちらはレビューだけするような流れになっていきます。

ちなみにインデントとかスペースとかは慣れると自然にできるようになりますし、ツールでも補えることですが「どういうものが読みやすいのか」を学ぶのには良いと思っています。

チームトレーニングで実践

個別トレーニングはあくまでも自分のコードだけの世界です。つまり「自分にわかるコードしか基本的には存在しない世界」だということですね。 実際の開発現場に入って驚かれた方もいると思いますが、自分が書いたものではないコードを読み解くのは結構(いやかなり)大変なことだということです。このトレーニングの題材のコードはそれでもなるべくコンパクトに作られたものですが、練習になるいくつかのポイントを持っていて「基礎概念を理解していないとソコソコ苦労する」コードになっています。

最初の方でコードを読む際のコツやどこから読むと全体が掴みやすいかなどのポイントを共有しました。この時は同時に二人の受講生の方がチームだったので、確か問答しつつやっていた気がします。コードを読むのが苦では無い様子だったのでキャッチアップが早かったですね。

一緒に誰かが開発しているということは、gitでもコンフリクトが起こりますし、それを解消しながら進まなければいけないという事になります。個人では起こらないことを体験しながら身につけていっていただきました。 また、Issueだけで内容を掴みきれないようなものをあえてチャレンジしてもらったりすることで、必要なコミュニケーションや考え方の勘所を掴んでもらえたはずです。

考察

私が今回一緒にやらせていただいて改めて思ったのは「深く考える訓練」をどこかでできている人はやはり理解や成長の速度が違うということです。かなり順調に伸びていかれていたのはこの点が大きな理由だと思っています。また、考えが深いことは適切に行動できる可能性が上がりますし、振り返りを行って改善することもできるのでしょう。

いわゆる技術という括りにハマらない根底の基礎スキルを伸ばすことは全体的に加速させるのでとても重要であるし、私達もとても大事にしている考え方です。今回のケースは本人が元々備えている素養にもかなりうまくハマったケースであると言えると思います。

「典型的な型にはまった内容を学校教育のように体験したい」というだけの場合には弊社の個別トレーニングはあまり適していないと考えていて、廉価版のRubyClimbingのようなサービスを検討していただいています。

個別のトレーニングであることもあり、いわゆる「同じ目標に向かう仲間」的なものができたりは殆どしません。しかし、目的が自己研鑽であり、昨今オンライン/オフラインでコミュニティを探すことができるようになり始めていることからも*1、それは大きな価値では無いと思います。たとえ一人でも、それでも学習を続けられる基質こそがずっと支えてくれるマインドだと私は考えています。

おしまいに

週末の25日にトレーニングをまるごと説明する会を開くので、ぜひ聞きに来てくださーい。

techdrive.connpass.com

*1:例えば TechBaton など