プレスリリース
Recursionは、「世界で通用するエンジニアの育成」というミッションのもと、特に高いレベルのバックエンドエンジニアを目指して、コンピュータサイエンスを基礎から学べるオンライン学習サービスを提供しています。コンピュータサイエンスをもっと気軽にもっと効率良く学習できる機会をより多くの日本人に届けたいと、田島慎也とJeffry Alvaradoがカリフォルニアで創業しました。
2020年8月の創業開始以降、Recursionで学習した多くのユーザーが、ソフトウェアエンジニアとして高い素養を身に付け、メガベンチャー企業、自社開発企業などの内定を獲得されたり、転職して大きく年収が増加したりと、優秀なエンジニアとして活躍されています。
このストーリーでは、創業者の田島がRecursionが誕生した経緯を振り返りながら、開発にこめたこだわりとRecursionが日本のエンジニア、IT産業のために貢献できることについてお伝えします。
きっかけは創業者田島の挫折。基礎を学びたくても機会がなかった
「アメリカ企業で社会人経験を積んで、グローバルな視野を広げよう」と思い立ち、新卒で入社した会社を辞めて渡米。しかしすぐに挫折を味わいました。というのも、競争の激しいアメリカ、カリフォルニアで、英語が話せるだけの外国人なんて簡単に雇ってもらうことができなかったのです。何かに特化したスキルが必要だと感じ、大学時代に興味を持っていたプログラミング学習を始めました。
ネット上でも書籍でも、プログラミング初心者用の教材はあふれていて、簡単に学習を始めることができます。しかし学習した言語の簡単な文法は習得しても、「根本的な何か」が理解できていない気がしていました。まるでプログラミングが暗記科目のようで、教材と同じ成果物は作れても自力でゼロから作り上げるスキルとは程遠い状態。次第に焦りを感じ始めていました。
ちょうどその頃、Recursionの共同創業者であるJeffryと出会いました。彼はコンピュータサイエンス歴10年以上で、多くの企業からソフトウェア開発を任されていました。
Jeffryとはすぐに打ち解け、私自身のプログラミング学習の悩みについても相談しました。そしてJeffryとの会話の中で、私の学習方法ではソフトウェア開発の基礎となる最も大事なことが身についていないことに気づいたのです。それはコンピュータサイエンスです。
Recursion共同創業者
IT業界は日進月歩で、次々に新しい技術が生まれては廃れてを繰り返しています。エンジニアは常に新しい知識を吸収し続けなければいけません。しかしその中で変わらない知識の1つがコンピュータサイエンスです。1940年代にパソコンの原型が登場してから、ほぼ変わっていないすべての技術の根本です。しかし、エンジニアにとって必須の知識であるはずのコンピュータサイエンスを、当時の私は学習する方法がわかりませんでした。
日本にコンピュータサイエンスを広めたい。Recursion創業の経緯
日本ではコンピュータサイエンスの学位がなくてもエンジニアになることができます。未経験者や文系大学出身者でもエンジニアとして採用している企業は多いです。しかしアメリカでそれはほぼ不可能。つまり、日本のエンジニアの中にはコンピュータサイエンスの基礎力がないままエンジニアとして働いている方がいるということです。
日本のプログラミング学習教材の多くは、「特定の言語の習得」や「フレームワークを使って成果物を作る」ことに重きを置いていて、コンピュータサイエンスを学習できる教材はそれほど多くありません。コンピュータサイエンス専攻の大学も少なく、日本では学ぶ機会がなかなか得られないというのが現状です。
日本とアメリカのプログラミング学習の違いについてJeffryと話すうち、私と同じようにコンピュータサイエンスの基礎を学びたいエンジニアが日本には数多くいるのではないかと気づきました。
創業後に一時的にJeffryはMeta(元Facebook社)に入社するのですが、GAFAで勤務するようなエンジニアが書くコードを実際に見る機会はそうありません。私たちが作るコンテンツでその機会を提供できる。日本にコンピュータサイエンスを広め、IT産業の底上げに貢献したい。そんな思いがあってJeffryと二人でRecursionを立ち上げました。
「面白い」から続けられる。コンピュータサイエンスを効率的に学ぶ最高のカリキュラムと学習を継続しやすくなる仕組み
学習用教材として根幹を担う大事な部分ですので、カリキュラムは特にこだわりました。Jeffryがアメリカの大学のカリキュラムを参考にしながら草案を作り、それをシリコンバレーのエンジニアやコンピュータサイエンスの専門家など10人に添削してもらい、お墨付きをいただいてます。
学習順序にも工夫を凝らし、インプットした知識を次の章で活用できるようにすることで自動的に復習ができる仕組みを取り入れました。
青: チュートリアル、緑: クイズ、赤: コーディング問題
ウェブサイトによくある「リンク先に移動してまた戻って…」といった煩わしい手間をかける必要もありません。ただ「次へ」とページをめくっていくだけで、インプットとアウトプットを繰り返す流れに乗ることができます。迷うことなく、より効率的に短時間で知識を定着させることができます。
また、ユーザーが実際に触れることになる画面周りに関しては、キャラクターを入れたり、明るく楽しそうな雰囲気のデザインにしたりと、コンピュータサイエンスの堅苦しいイメージを一新できるようにしました。
学習者のダッシュボード
私たちは、学んだ知識を定着させるために、多数のコーディング問題を提供しています。Java、Python、JavaScriptなどを使って、面倒な環境設定なしでコードの練習が可能です。コードが正しいかどうかを自動でチェックするシステムを使用しているので、自分のペースで学習を進められるeラーニング教材です。
コーディング問題の例(「再帰」を定着させるための問題)
学習を継続しやすいような工夫も入れています。コーディング問題に合格したときのエフェクトや、初心者でも直感的に扱える操作性、レベルアップや達成感を実感できるグラフ表示など、「面白い」「すっきり」「続きを見たい」などのハマる要素を取り入れ、ゲームを楽しんでいるような感覚で学び続けることができます。
コーディング問題に正解した際のエフェクト
ユーザーの声を積極的に聞くスタイルがプロダクトの改善につながった。初心者から上級者までそれぞれが満足し納得できる難易度へ
開発にあたって、バックエンドはJeffryが担当し、フロントエンド側は私が担当することになりました。とはいっても開発当時の私はプログラミング初心者。実際には、Jeffryに見本コードを書いてもらって教えを請いながらの開発でした。
コンピュータサイエンスは専門用語が多く、もともと優秀なJeffryの説明では難しすぎて大変苦労しました。私自身が分からない部分は初心者ユーザーにもわからないはずと、Jeffryにフィードバックを送りどんどん修正していきました。
最初のコースが完成したところでテストユーザーを募集すると、全くの初心者から現役エンジニアまで250名の方が参加してくださいました。テスト後のフィードバックでは「はまった!」「おもしろかった」「次のコースを早く出してほしい」といった声をいただいて嬉しかったです。
なるべくダイレクトでフィードバックを受け取りたかったので、Discordアプリを使ってコミュニティを作りました。その他にも1on1でミーティングをしたり、Twitter(X)で交流を図ったりして、積極的にユーザーの声を聞き意見を求めました。
学習者に直接フィードバックを聞いてる様子
フィードバックを受けて、あまり実務に直結しない数学的な要素は削除したり、初心者にもわかりやすいよう、もう一歩踏み込んだ解説を増やしたりなど、初心者から上級者まで納得できる内容になってきたと思います。
自主学習でのボトルネックを解決するコミュニティ。ユーザー同士で質問に回答し合う文化が形成され活発なやり取りが実現
プログラミングの自主学習においてボトルネックとなるのは、疑問があっても誰かに質問することができないことです。検索しようにも初心者ではどういうワードで調べたらいいのかわからないので調べようがないのです。
この問題を解決するため、RecursionではDiscordアプリのコミュニティに専用の質問チャンネルを立ち上げ、ユーザーが質問を投稿する仕組みを導入しました。
この仕組みはかなり好評だったのですが、最初のうちは私とJeffryの二人ですべての質問に回答していたのでとても大変でした。アメリカと日本の時差もあって文字通り寝る間も惜しんで回答していたら、「いつもコミュニティにいらっしゃるけど、ちゃんと寝てますか?」とユーザーさんから心配されるほどでした。
やがて回答を手伝ってくださるユーザーさんが徐々に増えてきて、現在ではほとんどの質問をユーザーさん同士で教え合ってくださっています。コミュニティにおいてユーザー同士で質問を教え合う文化が生まれたのです。
ベータ版時の学習コミュニティ
このコミュニティはユーザー同士が気軽に交流する場としても活用していますので、コンテンツ以外の質問だったり、交流会の開催をお知らせをしたりなど、活発なやり取りが行われています。
エンジニアがより輝く未来へ。Recursionが貢献できること
昨年末に、バックエンドエンジニアになるためのカリキュラムを作成しました。
バックエンド開発では多様な言語を使うため、動的型付けと静的型付けの言語の両方を習得します。データ構造(配列、ハッシュマップ、連結リスト、キュー/スタック/デキュー、木、グラフなど)とアルゴリズムについて学びながら、実際にプログラミングを行います。これらの構造を使ったライブラリやツールを用い、時には独自のデータ構造を作成します。また、バックエンドのスケーラビリティや最適化に欠かせない計算量の概念も理解します。
次にオブジェクト指向プログラミング、ソフトウェアデザインパターン、データベースシステム(RDBMS)、ソースコントロール、オペレーティングシステム、ネットワーキングの知識を深め、開発プラクティス、アーキテクチャ、要件モデリングとプランニングを学びます。チームでの開発や複雑なコードベースの管理、様々な技術的要求への対応も経験します。
最後に実際のアプリケーション開発に挑戦して、バックエンドスキルを磨きます。プロジェクトには、RPCプロトコルの作成、UDP/TCPを用いたメディアストリーミング、LinuxベースのWebサーバのデプロイ、SNSやGoogle Driveのようなアプリケーションの開発が含まれます。
プロジェクト例(簡易的なテキストからクラス図を動的に作成)
スキルには、Java/PHP/C#、Node.js、RESTful、NGINX、AWS EC2、MySQL、SSL/TSL、UDP/TCPストリーム、Spring Boot/Laravel/.NET、memcached、Redis、JWT、Git、Dockerなどがあります。
Recursionでは、コンピュータサイエンスの基礎を習得した後、特に高度なスキルを持つバックエンドエンジニアの育成に力を注いでいます。ここで育った多くの優秀なエンジニアをメガベンチャー企業などIT業界に送り出すことができれば、日本のITレベルを底上げし、国際競争にも対応できるようになるはずです。
私たちはその未来を信じ、コンピュータサイエンスを学習できる環境をより多くの日本のエンジニア、エンジニア志望の方たちへ届けることができるよう努力し続けます。