1日目

Perl/Scalaによるプログラミングの基礎

サーバサイドプログラミングに利用される「Perl」「Scala」の2コースに分けて実施しました。オブジェクト指向や関数型プログラミングといった言語のパラダイムの説明から、データ構造や制御構文などの言語仕様、テストの書き方までを学習します。データモデリング、モデリングに対応するオブジェクトの実装に加え、テストについての課題を用意し、言語に対する知識を深めてもらいました。

講師

id:KGAPerl

はてなのサーバサイドで長らく使われてきているPerlの基本的な文法やオブジェクト指向のやり方、設計の勘所、テストの書き方、Perlならではのはまりポイントを中心に解説しました。翌日以降につまずかないよう、なるべく初日にPerlの罠にはまってもらったり、積極的に質問をしてもらえたりするような雰囲気作りを心掛けました。インターン最初の講義ということもあり少し緊張していた様子でしたが、集中して講義や課題に取り組んでもらえていたようでした。

id:itchynyScala

はてなでは、Mackerelをはじめ複数のプロジェクトでScalaが用いられています。講義では、Scalaの基礎的な構文や言語の特徴、テストの書き方などを説明しました。変数の扱いやエラー処理のやり方を通じて、Scalaらしいコードはどう書けばいいのかを中心に学んでもらいました。インターン生は「Scalaを書くのは初めて」と言っていましたが、講義後はしっかりとScalaの構文を使いこなして、きれいなコードを書けるようになりました。

2日目

Perl/Scalaによるデータベースプログラミング

アプリケーションで取り扱うデータを効率性や信頼性に考慮して操作するには、データベース管理システムを活用することが重要です。この日は、最もよく利用される関係データベースを中心に、データベースの基礎的な概念や、Perl/Scalaで書かれたプログラムからデータベースを利用する方法、ソフトウェアのモデリングや設計について学びました。課題では、CLIで動作するブログシステムの実装に取り組んでもらいました。

講師

id:masawadaPerl

講義ではSQLの基礎に始まり、アプリケーションからどのように利用するかまでの解説を行いました。特に後半では、実際にサービスで稼働しているものに近いコードを交えて、どのような設計を心掛けるべきかについても学べるよう講義を実施しました。SQLを扱うのが初めてという学生もいましたが、課題ではしっかりと動くきれいなコードを書いてもらえました。

id:mechairoiScala

データベース管理システムは、Webアプリケーションのデータを効率良く安全に操作するために重要な技術です。講義では、関係データベースの基礎的な概念を理解し、データベース管理システムを利用するアプリケーションの設計とScalaによる実装について学ぶことを目指しました。

3日目

Perl/ScalaによるWebアプリケーション開発

Webアプリケーションフレームワークの使い方や、MVCパターンによる設計の仕方、セキュリティに関する知識を学び、Webアプリケーション開発における基礎的な技術を身に付けます。課題では、前日の講義で作ったCLIのブログシステムをベースに、Webアプリケーションとして動作するブログシステムを実装しました。

講師

id:t_kytPerl

HTTPの基礎的な知識、Webアプリケーションフレームワークの使い方、MVCパターンによる設計、セキュリティに関する知識を解説し、基本的なWebアプリケーションを開発できる技術を身に付けてもらいました。課題では、前日までの課題で作ってもらったCLIツールをWebアプリケーションとして実装しました。はてなでは薄いWAFを採用することが多いため、Railsなどにはない雰囲気に戸惑ったかもしれませんが、問題なく取り組んでいただけたようです。

id:hatz48Scala

ここまでで習得した内容をもとに、ブログサービスを作りました。HTTPなどのWebアプリケーションの要素技術からMVCといった設計手法までを学び、実際にScalaでアプリケーションを実装しました。

4日目

JavaScriptによるイベント・ドリブンプログラミング/Swiftによる実践的iOSアプリ開発

4日目は、コースによってJavaScriptまたはSwiftの講義を行います。Web開発に取り組むコースでは、JavaScriptによる動的なページ操作について学びました。講義では、言語のコアになる部分からjQueryの利用方法まで、重要なポイントを一通り学習します。この日の目標は、筋の良い基礎技術を習得して応用部分にも対処できる力を身に付け、クライアントサイドに必要な技能の基盤をしっかり作ること。課題では、これまでに作成したブログシステムに対して、非同期でページ内容を変更するなどの機能追加を行いました。また、アプリコースへ進む参加者には、XcodeやStoryboard、Auto Layoutなど、iOSアプリを開発するために必要な全般的知識に関する講義を用意しました。

講師

id:amagitakayosiJavaScript

JavaScriptを用いたWeb開発について学びます。講義は、言語の基礎からブラウザのAPI、ライブラリを用いた実践的な開発という順序で進めました。小手先の知識にとどまらず、言語仕様の変遷やWeb開発環境の変化についても解説し、今後の学習に役立つよう心掛けました。課題では、前日までの講義で作成したブログシステムに対し、JavaScriptを用いて自由に機能を追加してもらいました。基本的な通信処理から、アニメーションによるユーザー体験の向上を狙った機能まで、さまざまな工夫が見られました。

id:cockscombSwift

モダンでリッチなSwiftをフル活用してのiOSアプリ開発は、私たちにとってまだまだ研究する余地のある分野です。今回の講義では、その最新のノウハウを盛り込むことを目指しました。インターン生にとっても、Swiftでクライアントサイドのアプリを開発するのは、前日までのWebアプリ開発とは考え方も異なります。最初は少し戸惑いながらも、次第にプラットフォームに慣れ、最終的には工夫を凝らして独自の面白い機能を追加するまでになりました。作りたい機能の実現のために進んで新たなことを学ぶ姿には、教えている側としても刺激を受けました。

5日目

AWSハンズオン(特別講義)

アマゾン ウェブ サービス ジャパン様から講師を招き、ハンズオンセミナーを開催しました。クラウドサービスプラットフォーム「アマゾン ウェブ サービス」(AWS)の基本的なサービスの紹介や、AWS LambdaなどAWS マネージドサービスプログラムに関する概要説明とハンズオンを行い、モバイル系サービスのデモを実施。APIGW+AWS Lambda+Amazon Cognito+Amazon DynamoDBでサーバレスアプリを構築する手順を、実際に手を動かしながら学びました。 AWS Solutions Architect ブログ: 【開催報告】AWSハンズオン at はてなサマーインターン2016

6日目

自由課題

6日目は、これまでの講義を通して作ってきたブログシステムに新機能を加える自由課題に取り組んでもらいました。サービスの企画やアイデアをどのように出すかのワークショップとしてエレベーターピッチを行い、自分で企画した新機能を実際に実装します。作った機能をプレゼン形式で発表し、スタッフの投票で成果を競う発表会も行われました。

7-9日目前半

Web開発におけるコンピュータサイエンス - 機械学習編

初の試みとして、機械学習に関する講義を用意しました。担当するのは、はてなで機械学習を実際の機能開発に応用しているエキスパート。大規模データを用いた実践課題を通して、機械学習の勘所と実データに対する応用の仕方を説明しました。まずは簡単な二値分類器などを一から実装し、ロジスティック回帰、ニューラルネットワークなどの学習方法から最適なものを見つけていきます。最終目標は、機械学習を用いて大規模データから面白い結果が得られるようなアルゴリズムを仕上げることです。

講師

id:takuya-a

機械学習はなんでも簡単に解決できる魔法の技術のように思われがちですが、もちろん現実はそんなに甘くありません。機械学習の講義は、はてなサマーインターン初の試みでした。機械学習の基礎原理から理解してもらおうという質実剛健なカリキュラムで、トピックの数も多く、とてもハードだったと思います。演習もレベルの高いものを用意していましたが、インターン生たちは講義の内容をしっかり実践できていて、想像以上の出来でした。3日間にわたる講義と演習で、いつでも現実の問題に機械学習を使える技術が身に付いたと思います。

id:tarao

初日は機械学習の基礎を身に付けてもらうために、自由度は低いものの歯ごたえのある課題に取り組んでもらいました。想定の範囲内で実装上の苦労に遭遇しつつも、全員素早く課題を終えることができました。2日目からの課題では、Webサービスに実際に組み込むような機能に落とし込む際の方法論を学んでもらいました。課題の期間内でプロダクトレベルの品質にまでもっていくのはほぼ不可能なくらいの高い難易度に設定してあったので、実際の開発における精度改善の難しさを知ってもらえたと思います。

9日目後半

インフラ

後半日程に向けた最後の講義です。はてなの本番システムのインフラの構成例からWebサービスの基本とインフラの勘所、現場では無視できないコストの話も踏まえた講義を行いました。実際のスループットとレイテンシの数字を交えて、障害やパフォーマンスに強いインフラ設計を説明します。課題はありませんが、後半日程に向けて現場のWebサービスのインフラを強く意識した講義を用意しました。

講師

id:ichirin2501

はてなのWebサービスを支える基本的なインフラ構成について学びます。特にアプリケーションエンジニアから見たインフラを意識した講義を行いました。また、後半課程に向けて実際の数字も紹介しながらパフォーマンスの影響とその技術について学ぶことで、現場の心構えをしてもらうことを目指しました。

実践パートへ