見出し画像

コードクリサリスのイマーシブプログラムの到達点

コードクリサリスのイマーシブプログラムを卒業すると、エンジニアリングの観点で、どの程度のレベルに到達するのでしょうか。

一つの例で言うと、Googleにもオファーをいただいて入社した卒業生がいました。当然イマーシブプログラムに入学した誰しもがGoogleからオファーをいただけるわけではありませんが、具体的にはどのようなスキルを身につけるかをお話しします。

イマーシブプログラムではコンセプトを十分に理解して応用を『自分で』きかせられることを重視しています。それを達するために以下のレベルに到達してもらいます。

1. アルゴリズムを言語化して考え出せて、コードに落とし込める
2. 一通りのデータ構造を理解してそれをコードに落とし込める
3. ライブラリやパッケージを自分で書ける
4. ReactとVueを使える(2019/11/12時点)
5. インターネットを理解してサーバサイドのプログラムを書ける
6. CI/CDを使ってアプリケーションを迅速に改善する

アルゴリズムを言語化して考え出せて、コードに落とし込める

アルゴリズムを言語化して考えだす作業は、プログラミングにも必要ですし、なにより論理的思考能力が試されます。論理的思考能力が試せるということもあって、これはソフトウェアエンジニアとして就職するときの試験に出てきます。お題を与えられて、コードを書くのではなく、ホワイトボードにコードを書くためのアプローチを書けと言われます。つまり、コードで試行錯誤して書くのは許されず、論理的に言葉で説明しながら論理を構築するプロセスを見られます。

ソフトウェアエンジニアは書ければそれで良いわけではありません。論理的に考えてアウトプットしないと、綺麗に書けないし、品質の悪いコードを書くことで時間を浪費するからです。コードクリサリスでは、アルゴリズムを言語化してコードにすることはもちろん、ホワイトボードでロジックを組み立てる練習もたくさんやります。

また現場でも当然使えます。たとえば性能の良いコードを書こうと思ったら、効率の良いアルゴリズムを書くことが求められます。論理的思考を深め、また現場で質の良いコードを書くために直接的にも間接的にも必要なのがアルゴリズムです。

一通りのデータ構造を理解してそれをコードに落とし込める

データ構造も就職の試験で頻出するお題なのでやはり理解していて自分で使える必要がありますし、アプリケーションによってはどのデータ構造が向いているかを自分で判断できるスキルが必要です。

たとえばneo4jというデータベース製品があるのですが、これはgraphというデータ構造を使っています。概してSNSに向いているのですが、ではなぜそれが向いているのか、使いこなせるかが必要になってくるわけです。なのでデータ構造をマスターします。

ライブラリやパッケージを自分で書ける

コードクリサリスではライブラリやパッケージを自分で書くこともします。ライブラリやパッケージはツールなのでそれを使うことで開発の時間を圧倒的に短縮できることが価値です。先人たちが「もっと楽に開発したい!」と考えて作ってくれた宝物なわけですが、これらを使いこなすためには内的な動きの理解が必要です。

なぜ内的な動きの理解が必要かというと、だいたいエラーに遭遇するかカスタマイズして使うときに必要になります。エラーといっても機能的なエラーから性能的なエラーまでいろいろありますが、内的な動きを理解していないで使っていて、意図しない動きをすることはざらにあります。またカスタマイズして使いたいときにも内的な処理を理解していないと拡張できません。

要はさらっと作って終わり=プロダクトとして使うことのないアプリを作るスキルだけ必要なんだという場合ならまだしも、プロダクトとして使うアプリを開発するなら、内的な動きの理解は必須です。なぜなら開発している間にもエラーにはたくさん遭遇するし、プロダクトは多種多様なのでそれに合わせるスキルが求められるからです。

ReactとVueを使える(2019/11/12時点)

フロントエンドに関しては2019/11/12時点でReactとVueをマスターします。2019/11/12時点というのは、コードクリサリスでは日々新しい技術をウォッチしてカリキュラムをアップデートすることもタスクになっているので、注目すべき技術やエンジニアリングで標準になりそうなツールを採用するからです。

で、ReactやVueに関してもコンセプトから勉強して、vDOM(仮想DOM)の動きを自分で再現させるコードを書いたりプロジェクトベースで自分たちで試行錯誤しながら作ったりするので、応用が効くレベルでマスターしてもらいます。

そうすると今までの卒業生は卒業のプレゼンやプログラム中のプロジェクトでは、React Native、Flutter、Unity、Android Studioなどなどでの開発をしてきました。要するに卒業までになんでも自分の興味のあるものを使いこなせるようになります。

インターネットを理解してサーバサイドのプログラムを書ける

インターネットがどのような技術で構成されているかを理解することは超重要です。HTTP, REST, API...基礎を理解するとさらにHTTPのヘッダーはどんなことが設定されているとか、GraphQLとか、OAuth等の認証まわりとか、ひとしきり勉強します。これによってひとしきりインターネットを語れるようになり、アプリケーションを開発できるようになります。

そしてインターネットを理解したうえで、チャットやIoTで使うSocketを使ってみたり、データベースもRDBからNosqlを使ってみたり、Go、Rails、Pythonなどなどでバックエンドを開発してみたりを、個人または卒業プレゼンでしていきます。バックエンドも技術をなんでも選べるソフトウェアエンジニアになれます。

CI/CDを使ってアプリケーションを迅速に改善する

そして忘れてはいけないのがCI/CDです。継続的に素早くアプリケーションの改善サイクルをまわして世の中に価値を提供するためのツールがたくさんあるのですが、もちろんそれもしっかり習得します。作って終わりではなく、価値を提供し続けられるソフトウェアエンジニアになります。

コードクリサリスのイマーシブプログラムで学ぶとどのレベルまで引き上げられるのかをご紹介しました。これは今提供している英語のプログラムでも、2020/5/4から提供する日本語プログラムでも同じです。ご興味があればコードクリサリスまでお問い合わせください。

この記事が気に入ったらサポートをしてみませんか?