見出し画像

「Pathはユーザーと一緒に成長させていくプロダクト」エンジニアに必要なスキルとProgate Pathのタスク選定にこめた想い

Progate

Progateが2022年11月にリリースした、実務に近い学びを得られるプログラミング学習サービス「Progate Path」。Progate Pathの学習ではデバッグや機能の実装など、実務で活きる知識を学ぶことができます。

今回はProgate Path開発リードの島津に、Progate Pathで学ぶ内容の選定やユーザーに向けた想い、エンジニアに求められるスキルについて話を聞きました。

島津 真人(しまづ まこと)
​​大学院を卒業し、GoogleのChromeチームでSoftware Engineerとして5年間勤務。テックリードとして Service Workerの実装をする傍ら、STEP教育コースの講師なども行っていた。2021年4月より Progateに入社し、現在はチームリード兼テックリードとして新規サービス Progate Pathの企画・開発を進めている。

プログラミング教育のファーストステップは大学時代の「ロボコン」

ー はじめに、島津さんのエンジニア歴について教えてください。
僕が初めてプログラミングに触れたのは小学4年生の時でした。当時すごく暇を持て余していて(笑)。そんな時にシステムエンジニアの父に勧められたことがきっかけです。

プログラミングは「めっちゃ難しそう」みたいなイメージがあったので一度は断ったのですが、2回くらい誘われたところで「じゃあやってみるか」と思い学習を始めました。

ただ、最初に手に取った本が開発者用の関数がたくさん列挙されているようなリファレンスマニュアルで全く理解できませんでした(笑)。

その後で、もうちょっと理解できそうなものを探して、JavaScriptを使ってモグラ叩きゲームを作成したことが僕の「プログラミングで何か動くものを作る」ことの原体験です。

中学高校ではプログラミングからは離れていたのですが、大学ではロボコンに参加したりソフトウェア関連の研究室に所属したりして、そこからソフトウェア系の道を歩んでいます。

ー 前職のGoogle時代には教育コースの講師をしていたそうですが、プログラミング教育のファーストステップはいつだったんですか?

プログラミング教育の観点では大学時代のロボコンサークルが最初の経験になります。

ロボコンは年齢制限があって大学院生は参加できないので、メンバーが必ず3年で入れ替わるんです。

どれだけ勉強しても最長3年しか参加できないので、教育プログラムを改善していかないと後続の新入生が育たず、どんどんチームが弱くなってしまいます。そこで、ちゃんと後輩たちを育てられるような教育プログラムを設計しないといけない、という意識を大学2年生の時に持ちました。

そこから1年生向けのC言語の学習コースを作ったことがプログラミング教育のファーストステップです。

「知識の歯車」が噛み合うからこそ、学習に面白みを感じられる

ー 大学時代からとなるとかなり長くプログラミング教育に関わっている印象があります。当時から感じている課題感などはありますか?

知識って色々なことを知っていく中で、歯車みたいにカチッと噛み合って全部理解できるタイミングがあると思います。

ただ、そこに至るまでの過程で一つの知識だけを得ても「なんのための知識なのか分からない」と感じてしまうんです。

高校時代に「これってなんのために勉強してるの?」と言っている人も、「この研究にこの知識が活かされているんだ」と大学で知識が噛み合ったりするんですよね。

でも、この納得感を得られるまでのプロセスが遠ければ遠いほど面白さも感じられないし、やる気も減っていってしまう。この「知識の歯車が噛み合うポイントをどこに置くか」という点をずっと課題に感じています。

ー Progate Pathの中でも「知識の歯車」を意識している部分はありますか?

そこはとても意識していて、知識が噛み合う一部分を抽出してProgate Pathのタスクを作っているイメージです。

でも実際には「一つ一つの知識をちゃんと身につける」という部分に加えて、「身につけた知識を組み合わせてものを作る」という両輪が必要です。

Progate Pathでは後者の「動くものとして認識できる部分」だけを抽出していて、知識を得るための勉強は外部の本などに寄せてしまっているので、クリアするためにはかなり自分で調べる必要のある内容になっています。

ただ、実際のエンジニアの業務においても知識を噛み合わせる部分が必要で、達成したいことや作りたいものが先にあって、それを達成するために勉強する内容が決まってくるという順序になります。

Progate Pathの学習でもこの流れは共通していて、チャレンジタスクという一つのゴールがあって、それに対して分からないことは調べながら知識を噛み合わせて動くものを作っていく、という構成になっています。

Progate Pathのカリキュラムで学ぶ内容の一部

実務感へのこだわりとタスク選定での苦悩

ー 実際の業務というお話が出ましたが、 「実務感」へのこだわりはどこから生まれたんですか?

実務感へのこだわりに関してはGoogle時代に携わっていた教育プログラムでの経験がきっかけになっています。

例えばコーディングテストを通すための知識とか、競技プログラミングでのアルゴリズムとか、知識一つ一つの勉強はすでにある教材でできるのですが、結局「それを勉強して何になるのか」という一番面白い「動くものを作る」という部分を教えている教材ってあまりないなと。

Googleの教育プログラムではその部分をインターンという形で体験してもらっていたのですが、インターンだとメンターの数的にも受講できる人数にどうしても制限がかかってしまいます。「インターンに受かるかどうか」だけで面白い学習体験を得られるか得られないかの格差が生まれてしまっていると感じたんです。

そこで、たくさんの人が「動くものを作る」という面白い部分が体験できるような良い教材を作れないかな、ということをずっと考えていました。

ー 現在のタスクを選んだ理由や背景について教えてください。

実は現在公開しているタスクも一発ですんなり決まったわけではなくて、決定するまでには結構な紆余曲折がありました(笑)。

当初はさっきの歯車を噛み合わせる、みたいな話もかなり漠然としていて、すごく難しい問題を作ったらいいのかとか、本当に実務で使われているようなコードを書くとか、色々なアイデアがありました。

ただ、議論を重ねる中で「本当に実務で使われるようなプログラムを書いても実務感は感じられない」ということが分かったんです。

ただただ言われたプログラムを書くだけだと、「やらされている感」が出てしまう。ユーザーさん自身が「ああいうコード書いてみようかな」「どの書き方にしようかな」と考えられる選択の余地を残すことが、実務感につながるな、ということに気づきました。

ー 確かにProgate Pathのタスクはゼロベースでのコーディングではなく、デバッグ系の内容がメインになっていますね。

そうなんです。

「これを教えたい」というテーマ選定というよりは、今回だとProgateでも公開しているTweetアプリの作成というテーマを題材として取り上げ、それに実務として機能追加していくには何を勉強する必要があるのか、という順に検討していきました。先に学習のゴールを決めて、そこからブレイクダウンしてコンテンツを作成したようなイメージです。

やっぱり、学習するゴールが見えていないと面白みや知識が噛み合う感覚を味わうことが難しくなってしまうので、まずはひとつのゴールに対して紐づくような学習項目を設定しています。

その上で、「ジュニアエンジニアレベルのスキルを身につけられる程度」という難易度設定でタスクを選定していきました。

Progate Pathのタスクセット一覧

「ユーザーと一緒に成長するプロダクトに」Progate Pathのこれから

ー 今後の方向性としてはどういったコンテンツを増やしていきたいですか?

方向性としては「幅」と「深さ」の2軸があると考えています。

幅を広げる方面で言うと、例えば「型」の概念。TypeScriptとかだと型の概念が特にちゃんと存在しているのですが、これはどの言語にも活きる知識です。

こういった個別の要素を勉強すれば汎用的に活きる基礎知識はたくさんあるのですが、現状のProgate Pathではまだ直接的にはあまり教えられていません。

深さの面で言うと、データベースを「使う」だけではなくてパフォーマンスチューニングをする、といったようなもっとコアな部分。

今はジュニアエンジニアレベルという難易度を設定しているのですが、より強いエンジニアになるためにはもっと先の勉強をしていく必要があるので、将来的にはそういった内容のコンテンツも作成していきたいです。

ー Progate Pathは現状はジュニアエンジニアレベルの知識習得がゴールとなっていますが、入口としてどの程度のレベル感の人に受講してほしい、といった設定はあるのでしょうか?

入口のレベル感で言うと、学習を始めるだけなら「Progateでロードマップにあるようなコンテンツをいくつかクリアしました」程度のレベルでも十分に始められると思います。

逆に、そのくらいのレベルでも始められるようなコンテンツを僕たちが用意していくつもりです。

ただ、一番重要なのは「やる気」。ちょっとプログラミングに興味あるな、みたいな人は一旦Progateで広く色々な言語に触れてもらって、その上で「エンジニアになりたい」「難しくても何かを作ってみたい」という熱意を持っている方はぜひProgate Pathにチャレンジして欲しいです。

ー 技量ではなくやる気が重要というのは少し意外でした。やる気を重要視していることには何か背景があるのでしょうか?

やっぱりプログラミングを仕事にしていこうと思ったら、粘り強く調べるとか、分からないなりに動くものを作ってみるとか、そういった粘り強さが必要になります。

Progate Pathの学習段階で振り落とされてしまっていては、実際に技術世界に入ったとしてもついていけなかったり、誰かの助けがないとやっていけないような状態になったりしてしまうので、粘り強さは一番重要かなと。

一つ一つ調べた後にやってみて、自分で次のステップに進めていくアクションを考える、という「粘り強く前に進む力」も技量の一つだと思います。

ー 島津さんのこれまでのエンジニア人生の中で一番根気が必要だった仕事の思い出はありますか?

Google時代の実装に2年くらいの期間がかかったリファクタリングプロジェクトにはめちゃくちゃ根気が要りました。

コードリーディングと設計、実装手順の分解だけで1〜2ヶ月くらいの期間をかけたのですが、条件分岐が複雑なことと分からない領域がどこまで分からないのかの把握からしていかないといけないという(笑)。自分が今何を分かってないのかを明確にしていく作業がすごく大変でした。

ー 最後に、Progate Pathのユーザーに向けて伝えたいことはありますか?

つまづいてしまったポイントはぜひ教えて欲しいなと思います。

Progate Pathとして、「再現性のある教育」を届けていきたいと考えています。やる気がある人が、人手を介さなくてもどんどんクリアして学習を進めていけるようなスケールする教育の仕組みを作っていきたい。

たくさんのユーザーさんがいる中で、同じところでつまづいている人ってすごくたくさんいると思うんです。そういった同じところで詰まっているもの同士でそこを解決できるかもしれないですし、開発側としてコンテンツに反映できる可能性もあります。

そういった相互の情報共有の場としてDiscodeのコミュニティも開設しているので、ぜひ使ってみて欲しいです。

僕たちもユーザーのみなさんをサポートしていきたいですし、これからユーザーのみなさんと一緒にプロダクトを成長させていきたいなと考えています。٩( ’ω’ )وヨッシャ!

本気でエンジニアを目指すあなたに送る、最新プログラミング学習「Progate Path」

Progateでは一緒に働く仲間も募集しています!


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!