ソフトウェア・エンジニアリング・イマーシブ第1週目のまとめ
第1週目にCode Chrysalisの学生がしたことは、テスト駆動型開発、Reactの仮想DOMと再帰についての学習です。
簡潔に言うと: 第3コホートで授業が始まりました! Reactの仮想DOM、再帰、およびテスト駆動型開発を学びました。
こんにちは、私はヤンと言います。私はCode Chrysalisの共同創業者の1人で、今週の活動について報告します。
生徒は一般的に使われているユーティリティライブラリを書き直し、テスト駆動開発の手法を活用してReactの仮想DOMを作成し、再帰の練習を沢山行いました。
さらにマシュマロやスパゲッティを使ってラピッドプロトタイピングの重要性についても学びました。
Code Chrysalis は東京を拠点としながらも、シリコンバレー精神を基盤にした12週間の短期集中型ソフトウェアエンジニア養成学校です。Code Chrysalis についてもっと知りたい方は:https://www.codechrysalis.io をアクセスしてください。
お申し込みをお待ちしております!
価値と目的を探すため/第一期生(CC1)のビルさん
ビルはカナダで育ち、トロント大学でコンピューターサイエンスを専攻し、卒業後に東京で就職しました。大企業でソフトウェアエンジニアとして働いていましたが最近仕事を辞め第一期生としてコードクリサリスのプログラムへ参加しています。
こんにちわ、ビル!中国とカナダで育ったんですよね。日本に来たきっかけは何でしょうか?
大学3年生の時に交換留学生として東京大学で1年間学びました。
日本はすごく面白い場所で今まで住んだ場所のどことも全然違っていて、とてもためになりました。多くの新しい発見や考え方を得ることが出来ました。交換留学が終わった時に、更に数年過ごしたいと考えるようになりました。
それで、トロント大学を卒業後に東京に戻り就職しました。
大学でコンピューターサイエンスを専攻にした理由を教えてください
シンプルに本当に好きだったからです。カナダのミドルスクール(カナダでは〜13歳)の時にプログラミングを始めました。それはいつも大好きな科目で、大学でコンピューターサイエンスを専攻にするという選択はとても簡単でした。
どのようにしてミドルスクールでプログラミングを始めたのでしょうか?
8年生の時に情報工学のクラスがあり、 Scratch(by MIT) というプログラミング言語を使用しました。子供にはすごく良くて、私は夢中になりました。家でも Scratch アプリを開発し始めました。
本当にプログラミングにハマってしまい、それからもっとプログラミングをして、高校でもコンピューターサイエンスのコースを受講しました。その時は Java 言語でしたね。それ以来、興味は尽きません。
8年生の時にプログラミングを学ぶ過程で難しかったことはありますか?
あまりありませんでした。それどころかむしろ、本当に楽しくて、カッコイイものを作っては友達に見せたりして、古き良き思い出ですね。
日本に住んで働いてみてどうですか?
日本に住むことはすごく心地よいです。日本は清潔だし、安全で、便利。交換留学生の時に良い友達も出来ましたし。しかしながら、仕事は本当に大変でした。私にとって、インターンシップも未経験だったため、フルタイムの仕事は初めてでしたから。本当に打ちのめされたような経験で、時間と責任感が全く異なりました。単にコードを書くだけでは仕事とは呼べません。大学では、少しバグがあっても提出できますし、単に点数が低くなるだけで、グレードもAを取ることが出来ます。しかし、仕事だとバグがあれば必ず修正が必要になります。
日本の大企業で働くことは簡単でしたか?
実際、少しつらかったですね。大企業は個人的には難しいかなと。同じビルに何千人もの人が入っていきますが大半は見知らぬ人で、一握りの人しか知らないですし一緒に働きません。ここの人たちは少し歩いて会話を交わしたりすることよりメールやチャットメッセージを好んでいて、あまり慣れませんでした。
多くの友人達と一緒に素晴らしいことを成し遂げれるような心地良い環境で働きたいと思っています。
他も理由がありますか?
自身の仕事に夢中になれなかった気がします。従わなければいけないとても堅苦し構造がありました。多くの時間を会議に費やす必要があったり、手続きに対応しないといけなかったり。
私はソフトウェアエンジニアであり、他の情熱的なソフトウェアエンジニアと同じで、この業界を選んだのはイケてるプロジェクトを構築するのが大好きだからです。以前の仕事ではもどかしさを感じていました。私はもっとチャレンジングでやりがいがあるタスクをこなす事ができると思っていました、しかし、順序を踏まないといけませんでした。また、多くの古いプロジェクトのメンテナンスタスクにアサインされ、それは本当にうんざりで面白くありませんでした。それに加えて、全員が流暢な英語を話すことが出来ず、それがさらに難しくしていました。
なぜコードクリサリスを選んだのでしょうか?
おかしな話なんですが、実は最初にコードクリサリスを見つけたのは Angel List でした。
インストラクターのポジションでインタビューを受けたのですが、ヤン(コードクリサリス CTO )は"もう少しシニアのエンジニアを探している”とのことで、それで私が"代わりに生徒になるのはどう?"と(笑)
私はまだコンピューターサイエンスとプログラミングに関して学ぶことがたくさんあります。今まで試したり学んだりしたかった触れたことのない多くの技術があり、コードクリサリスのプログラムでそれが出来ています。
ヤンとの話を通して、会社と学校の雰囲気はまさに私が探し求めていた場所ですごく感激しました。
彼らは上司になるかもしれませんし、先生になるかもしれませんが、また友人でもあります。
みんなひとりの人間です。共に働くのはその次です。
私はコードクリサリスのミッションが好きです。ミッションには正当な理由があり、本当に日本と多くの日本人のデベロッパーとユーザーに利益をもたらしてくれると私は信じています。ここで学んでいようが働いていようが私の立場に関係なく、ここの組織の一員になろうと決めてから最終的な結果はあまり気にしていません。私が好きでここにいて、ここで好きなことをしているのですから。
今学んでいることはとても有意義で、技術も向上しています。毎日次は何だろう?と、やる気がみなぎり、ワクワクしています。確実に私を良い道に導いてくれています。
具体的な夢はありますか?
今言えることは、シンプルに自分が大好きだからこれをやっているんだ、というような環境に身を置きたいです。
具体的な夢?起業家になること、または同じ目標を持つ人のために働くことですね。
クリエイティブになれる場所に身を置きたいですし、多くの人がしているような受け身の姿勢ではなく積極的に自分の信念に貢献したいです。
将来のコードクリサリスの学生に向けてアドバイスはありますか?
もし本当にソフトウェア、テクノロジー、IT産業が好きで、更にもっと学んでより能力を高めたいのであれば、コミュニティに参加してください、確実にコードクリサリスはあなたのための場所です。
集中型で、とてもチャレンジングです、しかしそれらは非常にやりがいがあり満たされます。あなたが感じる不安なことはどれもあなたの現在のレベルを超えさせてくれます。もしこのコースに全力を尽くすと決めたのであれば、 最後までしがみついてください。私がしたように最後にはあなたの人生が変わるかもしれません。
ビルさん、ありがとうございました!これから本コースに向けて頑張ってください!
ビルは現在コードクリサリスの第一期生です。こちらで LinkedIn と Facebook で直接コンタクトをとることが出来ます。
コードクリサリスは東京を拠点にした12週間の短期集中型ソフトウェアエンジニア養成学校です。 興味を持ちましたら是非こちらまでご連絡ください! hello@codechrysalis.io
お申し込みをお待ちしております!
CircleCI を活用して生徒のコードレビューを自動化!
https://circleci.com/docs/2.0/hello-world/
コードクリサリスでは、生徒の進捗を確認するために、継続的インテグレーションとユニットテストを活用し、教育プロセスの一部をオートメーション化することにしました。私たちのカリキュラムのテストカバレッジはほぼ100%であり、生徒には関わる全てのプロジェクトでテスト駆動開発(TDD)を実践することを強制しています。私たちは継続的インテグレーションを私たちの評価プロセスと統合し、迅速なコードレビューを生徒に提供し、インストラクターは生徒の状況を把握できるため、より良いフィードバックを提供することが可能になります。
継続的インテグレーションとは何でしょうか?なぜ必要なのでしょうか?
(https://aws.amazon.com/jp/devops/continuous-integration/)
継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行する DevOps ソフトウェア開発の手法です。継続的インテグレーションという用語が最もよく使われるのは、ソフトウェアのリリースプロセスのビルド段階または統合段階を指す場合で、自動化の要素 (たとえば、CI やビルドサービス) と啓発の要素 (たとえば、頻繁に統合することを学習する) の両方が含まれます。
継続的インテグレーションの主な目的は、バグを早期に発見して対処すること、ソフトウェアの品質を高めること、そしてソフトウェアの更新を検証してリリースするためにかかる時間を短縮することです。つまり、
現在2017年7月時点でよく知られている継続的インテグレーションは以下のサービスが挙げられます。簡単に良い点悪い点を挙げてみました。
良い点 | 悪い点 | |
---|---|---|
Jenkins | 汎用性が高い 無料 全てコントロール可能 |
ラーニングコストが高い サーバーと運用する人が必要 属人的になりやすい |
CircleCI | エンタープライズ版に無料版が有る 簡単に利用開始できる Docker をサポート |
バージョン 2.0 がまだベータ版 プレミアム版の料金プランが高い |
TravisCI | 対応しているプログラミング言語が豊富 Docker をサポート |
プレミアム版の料金プランがCircleCIより高い エンタープライズ版に無料版が無い |
最終的に CircleCI を選択しました。主な理由は、
- 簡単に利用開始できる
- 料金が比較的安価(無料版も有る)
です。スタートアップには心強い味方です。
CircleCIの基本的なセットアップ
私たちの学生がプルリクエストを作成しそのコードに対してテストを自動的に実行します。
CircleCI の基本的な動作原理
学生がGithub上でプルリクエストを作成するとGithubはWebhookを利用してプルリクエストの内容をCirleCIへPOSTします。CircleCIはDockerコンテナーを利用します。Dockerコンテナーを知りたい方はこちらを参照ください(https://www.docker.com/what-docker)。 端的に話をすると、Docker コンテナーはDockerイメージという環境のスナップショットを利用しており、実行すると独立した“コンテナー”という環境上でテストを行うことが出来ます。非常に多くの様々なコンフィグレーションがあり、Dockerを活用することでより簡単に、そして首尾一貫した開発プロセスにすることが可能になります。
チュートリアル(https://circleci.com/docs/2.0/hello-world/)にもある通りcircle.yml ファイルを用意して設定する方が一般的です。コンフィグレーションをファイルで管理でき、かつ設定がより柔軟に出来るためです。しかし、ファイルを利用せずにCircleCIの管理画面上で設定しました。その主な理由は学生に設定ファイルを見せないようにするためです。見せたくない理由は主に以下の通りです。
CircleCI 上の設定
- CircleCI 上でプロジェクトを追加
- プルリクエストのみをビルド対象にする
- 環境変数を設定(セキュリティ上公開したくないため)
- TEST_UTIL_REPO: git@github.com:codechrysalis/???.git
- TEST_UTIL_PATH: utils
- TEST_ID: exercise1 or else
- テストコマンドを設定
- Dependency Commands
- Test Commands
- 他のリポジトリをプルするためパーミッションを付与
Github の基本的なセットアップ
管理画面
- プルリクエストのみCirleCIへPOSTするように設定
- master ブランチへのマージを禁止
- テストが全て成功した場合のみ生徒のブランチのマージを許可
プルリクエストのサンプル画面
- プルリクエスト作成後
- テスト失敗時
- テスト成功時
うまくいかなかったこと
セットアップ自体はシンプルだったのですが以下の問題が出てきました。
- CircleCI の詳細エラーを Github 上に表示することが出来なかった
- 生徒がテストのエラーの詳細を知るには CircleCI へログインが必須
次回はこの問題をどのように対応したか記事にしたいと思います!
お問い合わせ
コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください!hello@codechrysalis.io
プログラミングを学ぶことに興味を持ちましたら是非こちらでお申し込みをお待ちしております!
最後までお読み頂きありがとうございます。それではまた!!!
自身が心から共感でき、100%の情熱を持って取り組めるようなサービスの開発に携わりたいです!/第一期生(CC1)のクミコさん
こんにちわ。コードクリサリスです。
第一期生(CC1)のインタビュー記事第1弾です。
プロフィール
愛知県出身。高校卒業後にカナダへ1年間留学。その後就職したゲストハウス会社でWebの力を目の当たりにしたことがきっかけで、Web関連の勉強ができる大学に入学。卒業後はSEとしてSIerに入社するものの、コードを書く機会がほとんどなかったため、Web業界へフロントエンドエンジニアとして転職。ソフトウェアエンジニアとして更なる成長を求めコードクリサリスに入学。現在に至る。
経歴を詳しくお聞かせください(主に、英語に関する話になっちゃいましたね)
幼い頃から海外に漠然と憧れを抱く少女でして(笑)。高校卒業後に2年間仕事をして資金を貯め、英語力向上の目的でカナダに留学しました。最初の1ヶ月は語学学校へ通ったのですが、生徒が多く費用対効果が悪いと感じたので、スピーキング専門の学校に転校したり、チューターレッスンを受けたり、現地人と一緒にバックパッカーで働いたりしながら、実践的な英語力を磨きました。日本に戻ってからは、英語を使ういくつかの仕事に就きました。
なぜプログラミングに興味を持ったのでしょうか?
帰国後、外国人専用のゲストハウス会社で働いていたのですが、同僚のWebデベロッパーが手がけた予約サイトが素晴らしくて、それをきっかけに会社が飛躍的に成長していくのを目の当たりにしたんですね。Webの力、プログラミングの力を感じ、私もそのようなスキルを身につけたいと考えるようになりました。
どのようにしてプログラミングを勉強したのでしょうか?
Webについての講義があり、かつ学費免除の奨学金制度がある大学を探して(笑)入学しました。メディアサイエンスという学部だったのですが、Web制作やJavaについて少し学ぶ機会がありました。その他にも、マーケティングやWebビジネスなど幅広く勉強しました。入学当時、私は既に27歳になっていたのですが、年齢は全く気にならず、他の学生に混ざって楽しい大学生活を送りました。
その後は?
卒業後、SEとしてシステムインテグレーターに入社しました。面接時には開発工程でコードを書くに携われると聞いていたのですが、実際のプロジェクトでは海外へのアウトソーシングがほとんどで、上流工程に携わるのみでした。コードを書く仕事以外はキャリアとして考えていなかったため、1年と数ヶ月で見切りを付け、フロントエンドエンジニアとしてWeb業界へ転職しました。
なぜコードクリサリスに入学を決めたのですか?
バックエンドを含めシステム全体を理解したい、ソフトウェアエンジニアとしてもっと成長したいという気持ちが強く、コードクリサリスへ申し込みをしました。スキルアップには様々な教材やアプローチがありますが、オフラインで集まり、対面でコミュニケーションをとりながらプロジェクトベースで学ぶのが一番効率的だと考えたこと、また、コードクリサリスはアメリカのコーディングブートキャンプの流れを組んでいたことに魅力を感じ、こちらに決めました。
プレコース期間中ですが感想をお聞かせください!
想像以上にハードで(笑)。JavaScriptはある程度理解していると思っていたのですが、読書課題のJavaScript本はすごく内容が深いですし、プロジェクト課題も難易度が高くて、驚きました。学びが多くてすごく楽しんでいます!まだ仕事もしているため、1時間早く起き、スキマ時間を活用しながら、課題に取り組んでいます。
将来の夢は?
自身が心から共感でき、100%の情熱を持って取り組めるようなサービスの開発に携わりたいです!
将来の仲間に向けてメッセージをください
まだまだ始まったばかりですが(笑)。そうですね、Webの業界は、素晴らしい学歴がなくても、経験がなくても、モチベーションと行動力さえあれば、必ずエンジニアになれると思います。ですので、少しでもこの業界に興味を持っていたら、悩まずすぐに行動に移してみてほしいですね。一緒に運命を切りひらきましょう!
クミコさん、ありがとうございました!これから本コースに向けて頑張ってください!
コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください! hello@codechrysalis.io
お申し込みをお待ちしております!
第一期生の紹介
こちらが6人の愛すべき学生です!
彼らを少しだけご紹介します!
- 4人が女性で2人が男性
- 3人がソフトウェアエンジニア、またはWebデベロッパーとしての経験あり
- 2人がコンピューターサイエンスの学士号を保持
- 2人がコンピューター工学とハードウェア工学の学士号を取得するために現在就業中
- 1人がバイオメディカル工学の修士号を保持
- 2人が以前英語教師の経験あり
- 4カ国の出身者: 日本、イラン、アメリカ、カナダ
- 1人は完全に初心者で、テクニカルアサイメントに挑戦する丁度1ヶ月前から勉強を開始
合格率
アメリカからアフリカのブルンジまで世界中から入学申し込みを頂けたことを非常に光栄に思っています。 全員が日本に訪れてプログラミングの勉強を望んでいましたが、最後には合格率は25%未満となりました。
キャリアチェンジ
私たちはプログラミング未経験の方々に対して入学を許可しませんが、ソフトウェアエンジニアとして共にキャリアチェンジを望む方々は、私たちのコーディングブートキャンプに申し込みを強くオススメします。私たちはプログラミングは素晴らしく、キャリアチェンジや起業家として独立することが可能なスキルだと信じています。
コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください! hello@codechrysalis.io
プログラミングを学ぶことに興味を持ったあなた!是非お申し込みをお待ちしております!
最後までお読み頂きありがとうございます! それではまたお待ちしています!
オリジナル版はこちら。
なぜ JavaScript か?
どんなアプリケーションもJavaScriptで開発出来る、次第にそうなるだろう。
Jeff Atwood, co-founder of Stack Overflow
私たちのカリキュラムは JavaScript を使用するが特に JavaScript に依存してはいない。生徒たちはこの広大なテクノロジーという荒野を自分たちで探索して学ぶためのスキルを身につけ自信を付けることが出来る。私たちは基本に基づいて様々なものを構築することに注力しており、そのようなマインドセットを届けるのに JavaScript は最適な言語だと信じている。
なぜ JavaScript か?このような質問を非常に多く頂く。私たちの考えはこうだ。
– JavaScript は昔とは違う
JavaScript は過去10年で信じられないほど進歩した。過去のJavaScript に対する誤った知識は非常に多い。しかしながら、AJAXの登場により JavaScript が復活を遂げ、劇的に成熟していくこととなった。また、Nodeの登場によりブラウザー以外にも益々 JavaScript が適用できる範囲が広がった。
– JavaScript からは逃れることは出来ない!
Web アプリケーションの開発をする上では JavaScript は今のところ避けて通ることが出来ない。Ruby, PHPなどは避けて通れるが、JavaScript は決して避けて通れない。
全ての web ブラウザーは JavaScript エンジンがビルトインされている。このようなある意味アドバンテージのある言語は他にはない。これがすぐに変わることはないだろう。
– 初心者にも敷居が低い
JavaScript はプログラミングを始めるのにはすごく簡単な言語である。前述したが、web ブラウザーがあるコンピューターには既に JavaScript エンジンが備わっている。つまり、セットアップがとても簡単であり、すぐに JavaScript を書き始めることが出来る。必要なものはブラウザーとテキストエディタのみである。
– 高級言語ではない
JavaScript は 特別なコンパイラーやエディタを必要としないため高級言語ではなく、比較的早く実行でき、またクライアントサイドによる処理も可能である(通信やサーバーの負荷を抑えることが出来る)。
– JavaScript コミュニティは革新的、活動的、そして優位性が有る
過去3年で、JavaScript は完全に成熟しており、偽りなく正に full-stack 言語になりつつ有る。コンスタントに新しい、オープンソースのフレームワークやライブラリが登場し開発されている。A large portion of the most popular open-source repositories on GitHub are written in JavaScript. JavaScript は Github で最も人気のある言語であるだけではなく、去年と比較して 97% も伸びている。以下に Github 上で最も活発なリポジトリのグラフがあり、 JavaScript が圧倒的にリーダーになっている。
– JavaScript が遠くない将来を支配している
繰り返しになるが、JavaScript はブラウザーの言語である。ブラウザーは私たちの日常において切り離せないものであり離れることは出来ない。つまりは、JavaScriptからも離れることは出来ない。 更に、JavaScript は巨大で強力な多くの会社によってサポートされており、個人や1つの会社によってコントロールされることはないため、より持続性のある言語になる。
– 流れは Web アプリと Mobile アプリへ
ブラウザーは更に強力になり、通信はより安く信頼性が向上する。注目すべき点はネイティブアプリから web アプリと mobile アプリへ流れが変わってきていることだ。
– 最後に
プログラミングを学ぶことに興味を持ったあなた!是非お申し込みをお待ちしております!
JavaScript: The World’s Most Misunderstood Programming Language by Douglas Crockford
Quora: Why is JavaScript so popular?
The Principle of Least Power by Jeff Atwood
Why JavaScript: If You Could Learn Just One Programming Language, It Should Be JavaScript by Aziz Ali
オリジナル版はこちら。