前半課程

はてなで主に利用されているプログラミング言語「Perl」「JavaScript」を社員と同等の品質で書くために、講義と課題による集中的なトレーニングが行われます。言語やオブジェクト指向の知識に加え、データ構造やアルゴリズムといったコンピューターサイエンスの基礎力も試されます。また、今年はWeb APIと連携するiOSアプリ開発の講義を新設し、Webアプリケーションとスマートフォン開発が同時に学習できる内容となりました。

講義一覧

day 1

Building
Development Environment
and
Follow-Ups of Pre-Assignment

1日目

事前課題フォローアップと
環境構築

講師 id:nobuoka

2012年4月入社。アプリケーションエンジニア。最近はAndroidアプリ開発や自然言語処理に興味があります。

講師 id:hatz48

2012年4月入社。アプリケーションエンジニア。最近TypeScriptをちょこちょこさわっています。趣味はプログラミングと、ちょっとの登山。

インターンを有意義なものにするために

PerlとJavaScriptのそれぞれについて、文法構造や実行方法、テストの書き方、デバッグ方法などを学ぶための事前課題を課します。インターンシップに参加するまでPerlあるいはJSに触れたことがない人も、インターンシップ期間中の講義の内容に対して深い理解を得られるようになる、ということが事前課題のねらいです。

まずは取り組みやすい課題から

Perlの事前課題では、Perlの文法やクラスの記述方法、テストの書き方や実行の仕方を学びます。JSの事前課題では、JSの文法やDOM操作、ブラウザの開発者ツールを用いたデバッグ方法などを学んでもらいます。初心者にとって取り組みやすい課題設定にしており、初めてその言語に触れる人でも調べながら学んでいくことができるようになっています。

Welcome to Hatena Intern 2013

初日のオリエンテーションを終えて、夜は待ちに待った歓迎会。はてな自慢のまかないを囲みながら、インターン生の個性的な自己紹介プレゼンテーションが次々と披露されました。ウィットの効いたプレゼンや社員からの質問に、会場は瞬く間に笑い声であふれます。

day 2

Object-Oriented
Programming in Perl

2日目

Perlによる
オブジェクト指向プログラミング

講師 id:hatz48

2012年4月入社。アプリケーションエンジニア。最近TypeScriptをちょこちょこさわっています。趣味はプログラミングと、ちょっとの登山。

OOPをPerlではじめる

最終的にPerlでオブジェクト指向プログラミングができるようになることが目的です。Perlの基本的な文法・Perlでのオブジェクト指向の実装方法のほか、Perlを書く上でハマりやすいポイントの解説を行います。

コンテキストの理解を第一に

まずはPerl言語の重要な概念であるコンテキストについてしっかり理解してもらうことを目指しました。またPerlのオブジェクト指向には他のプログラミング言語とくらべて独特な部分があり、オブジェクト指向に必要な機能を自分で作り上げていく感覚があります。それぞれの機能の必要性などをよく考えることでオブジェクト指向への理解が深まったと思います。その上で、よりよい設計になるよう課題に取り組んでもらいました。

day 3

Database Operation with Perl

3日目

Perlでのデータベース操作

講師 id:nitro_idiot

2011年9月入社。アプリケーションエンジニア。Lisper。Clackを始めとした多くのCommon Lispライブラリを開発。

関係データベースへの問い合わせ

データベースの基本的な概念、およびアプリケーションでデータベースをいかに扱うかを学びます。特に関係データベースにフォーカスしており、実践編ではSQLを書いてPerlからMySQLに問い合わせを行う方法を紹介。パフォーマンスとセキュリティの視点からどのようにアプリケーションを設計すべきかを考えます。

パフォーマンスを最大化するための設計

この講義では、データベースとは何か、なぜデータベース管理システムが必要なのか、といった基本的なことから話を始め、さらにより良い設計をするにはどうすれば良いかまで踏み込んで話をしました。特にデータベースは役割上ボトルネックになりやすく、パフォーマンスには特に留意する必要があります。たとえば、はてなではO/Rマッパーのような抽象化フレームワークを使いません。抽象化はそれにかかるコストを隠し、パフォーマンスの低下を引き起こすからです。良いエンジニアを目指すならば、ただ動けば良いというだけではなく、良いアプリケーションを設計するにはどうすればいいか、という視点が重要です。

day 4

Web
Application
Development
with
WAF

4日目

WAFによるウェブアプリケーション開発

講師 id:skozawa

2012年4月入社。アプリケーションエンジニア。最近はGrowth Hack、ビッグデータ、自然言語処理あたりに興味があります。趣味はサッカー観戦です。

良いURIやMVCモデルを意識するために

Webアプリケーション開発の基本的な知識として、URI設計、Webアプリケーションの概要、MVCモデル、Webアプリケーションフレームワークを使ったWebアプリケーション開発について学びます。良いURIやMVCを意識しながら、Webアプリケーションの設計・実装をしてもらうことがねらいです。

アプリケーション開発とデプロイをしてみる

Webアプリケーションの構成やWebアプリケーション開発に必要となる知識を学び、講義用に作成したWebアプリケーションフレームワークを利用してWebアプリケーションを開発してもらいました。良いURI設計とは何か、アプリケーションコードの良い設計・実装とは何かを考えながらの開発です。MVCに沿って開発し、Controllerにはなるべくビジネスロジックを書かないなど、各コードの役割を考えながら、設計・実装することが重要です。最後に、開発用のホストにデプロイをしてもらうところまで進めました。

day 5

Event-driven Programming in JavaScript

5日目

JavaScriptで学ぶイベントドリブン

講師 id:nobuoka

2012年4月入社。アプリケーションエンジニア。最近は Android アプリ開発や自然言語処理に興味があります。

クライアントサイドの基礎

JavaScriptの言語コア部分や、HTML文書をプログラム上から操作するためのDOMやHTTP通信のためのXMLHttpRequestといった、Web開発のクライアントサイドの基礎を説明します。この講義を通して、Web開発に必要なJSの基礎知識を身に付けます。

クセを理解して様々な場面の礎に

JSの言語自体は難しいものではありませんが、イベント駆動の非同期処理が多用される点やHTML文書に対するDOM操作など、慣れないと難しい部分はいくつかあります。講義を通して、それらを学んでもらおうと考えました。最近ではブラウザで表示したWebページ上での処理だけでなく、スマートフォンアプリの開発やコマンドライン上でもJSが使われるようになってきていますので、本講義で学んだ内容は様々な場所で活かせると思います。

day 6

iOS App Development
Using Web APIs

6・7日目

Web APIを利用するiOSアプリ開発

講師 id:cockscomb

2012年11月入社。アプリケーションエンジニア。最近はAppleのファン活動をしています。iPhone買うのに徹夜で並んだらめちゃめちゃ疲れました。趣味はObjective-Cです。12エンジニアインターンシップ参加。

Webサービスとアプリの
大事な関係

Web APIを利用したiOSアプリを開発します。今日のWebサービスではスマートフォンアプリが重要な役割を果たすことが多いので、WebアプリケーションをAPI経由で利用するアプリを開発することで、その連関や設計の差異について踏まえてもらうことがねらいです。

これからはアプリの視点からも開発を

iOSアプリはWebアプリケーションと似ている部分も大きく異なっている部分もあります。そういったことを肌で感じ、両方を学んだ上で俯瞰した視点からアプリケーション開発を見られるようになってほしいと考えていました。特にAPI設計の難しさや、クライアントアプリケーションのMVCなど、悩む部分も多かったのではないかと思います。また今回はObjective-Cのモダンな機能やUIStoryboardを利用して、iOSアプリ開発らしい部分を活かすようにしています。このことでその特徴をより体感できたのではないかと思います。2日間で新しい言語・環境で一通りの機能を作るという講義で、難易度が高かったはずですが、全員が最低限の機能のほか独自の工夫を加えていました。

day 8

Implementation of
Hot Entry Algorithm
Using Real Data

8・9日目

実データを用いた
人気エントリーアルゴリズムの実装

講師 id:yanbe

2011年4月にエンジニアとして入社。サービスの検索やレコメンデーション機能の改善、スパム判定システムの刷新などを担当。2013年8月にディレクターになりました。

講師 id:tarao

2013年4月入社。アプリケーションエンジニア。元々はプログラミング言語の設計や型理論が専門で、最近はHaxeとKokaが気になります。趣味は開発環境のカスタマイズ。2008年のインターンシップ一期生でした。

人気コンテンツを抽出する「しくみ」

既存のソーシャルメディアの人気コンテンツ抽出アルゴリズムを紹介しつつ、ソーシャルメディアのトップページにふさわしい人気コンテンツを上手く抽出するアルゴリズムの設計と実装を行います。ソーシャルメディア内のユーザーの行動から良質なコンテンツを抽出する、難しさと奥深さを学ぶことがねらいです。

情報選択につきまとうトレードオフ

抽出する際には、コンテンツの新鮮さ対コンテンツの人気度、コンテンツの分析の深さ対ランキングの更新頻度、コンテンツの多様性などいろいろなトレードオフがあります。限られた演習時間の中で、本講義の主旨である人気コンテンツ抽出アルゴリズムの設計と実装に集中できるように、実際のはてなブックマークの人気エントリーの計算に利用されているのとおおむね同じ公開データを、簡単に得られるAPIを用意しました。各自が実装したアルゴリズムの実装を、用意された開発環境にデプロイした上で、その内容の発表とデモを行ってもらいました。

day 10

Web Service Planning
and
Designing Workshop

10日目

Webサービス企画・設計ワークショップ

講師 id:nmy

2007年5月入社。ディレクター。現在は、はてなスペースを担当。趣味はJリーグの京都サンガの応援とオンラインゲームをプレイすることです。

ワークショップ形式で学ぶ

Webサービスの企画・設計手法の1つの例を、実際に手を動かしながらやってみるワークショップです。まず企画・設計の手法として一般的にどのようなものがあるかを学び、その中から課題と解決策の洗い出しや、ペーパープロトタイピングによる設計を行います。

設計の質を向上させる方法

企画・設計の手法は様々で、この方法が正解というものはありませんが、中でも特に重要と考えているポイントに絞って、実際に自分でやってみるワークショップ形式の講義です。企画時には様々な要因を検討しておく必要がありますが、その中でも特に重要な「誰の」「どんな問題を解決するのか」をまず明確に定義して、その解決方法を考えます。設計については、ペーパープロトタイピングによるUIの設計と、それを用いてテストを行い、開発を行う前にテストして設計の質を向上させる方法について説明しました。

day 11

Infrastructure of Hatena

11日目

はてなのインフラ概要

講師 id:hagihala

2012年8月入社。DevOpsエンジニア。最近はchef(サーバ管理ツールを構成するシステム)に苦しんでいます。趣味は器械体操。

はてなを支える技術を紹介

はてなのサービスの内側について、若干Confidentialな内容も織り交ぜつつ紹介する講義です。大規模なWebサービスを動かすためにどんな土台が必要か、その全体像を知ってもらうことがねらいです。

最適化のための
丁寧なこころくばり

システムプラットフォーム部の活動や、はてなのサービスを動かすために使われているハードウェアやネットワーク、ミドルウェアの現状について説明しました。また、サービスを落とさないため、大量のトラフィックに対処するため、コストを低く抑えるためにどのような工夫を凝らしているか解説しました。