#はじめに
jacksuzukiさんの記事
「ロシアの天才ハッカーによる【新人エンジニアサバイバルガイド】」
を読んで、非常に興味深かったので、この中で
「技術的なスキルをマスターしよう。もっともよい教材のリスト」
として紹介されていたGoogle社作成の資料を翻訳してみました。
検索しても日本語訳が見当たらなかったので、
翻訳してみましたが、
もし他に適切な翻訳や、
誤記、誤訳などありましたらご指摘下さい。
ちなみに具体的な参考資料の記載がありますが、
原文が米国を対象として記載していますので、
日本国内のサービス(dotinstallなど)は記載されていません。
#原文
原文はこちら:Technical Development Guide
#以下翻訳です
##技術向上ガイド
このガイドは、自分のペースで実践的な学習を通して、あなたの技術的な(学問的、非学問的)スキルの向上を助けるためのTipsや資料を提供します。
このガイドは、Googleでのインターンシップ先を探しているコンピュータサイエンスの学生や大学院生を対象としています。
##このガイドの使い方
-
このガイドはあなたがどの分野を選択するかを決定するために使用できます。
ただし、あなたが卒業するために選択した専門分野には居続けて下さい。 -
私たちはあなたがこのガイド以外についても幅広く学ぶことをお勧めします。
より多くを知ることは、より良いことです! -
私達が引用しているオンラインの資料等は、あなたの大学の単位として使えることを意味するものではありませんが、
これらによって、あなたの教育の補完やトピックへの導入に役立つでしょう。 -
このガイドの情報と推奨事項は、学生や候補者達と共に仕事を通して現場で収集しました。
注:ガイドの推奨事項に従うことは、Googleで採用することを保証するものではありません。
##Tipsと資料
追加されたTipsや資料を入手するために「Google for Students +Page」をフォローして下さい。
そして、他の学生達と繋がって下さい。
##お勧めの方法と資料
・「コンピューターサイエンス入門」コースを学ぶ
基本的なコーディング手順について焦点を当てる
オンラインの資料:
・Udacity - Introduction to Computer Science
・Coursera - Computer Science 101
・(少なくとも)1つのオブジェクト指向プログラミング言語でコードを書く(C++, Java®, Python®)
初心者向けのオンラインの資料:
・Coursera - Learn to Program: The Fundamentals
・MIT Intro to Programming in Java
・Google's Python Class
・Coursera - Introduction to Python, Python Open Source E-Book
中級者向けのオンラインの資料:
・Udacity's Design of Computer Programs
・Coursera - Learn to Program: Crafting Quality Code, Coursera - Programming Languages
・Brown University - Introduction to Programming Language
・他のプログラミング言語を学ぶ
自分が使える言語のレパートリーを増やす:
・JavaScript®
・CSS & HTML
・Ruby®
・PHP®
・C®
・Perl®
・Shell® script
・Lisp®
・Scheme®
オンラインの資料:
・Codecademy
・Udacity - Mobile Web Development
・Udacity - HTML5 Game Development
・自分のコードをテストする
バグの発見方法、テストの作成方法、自分のソフトウェアの壊し方を学ぶ
オンラインの資料
・Udacity - Software Testing Methods
・Udacity - Software Debugging
・論理的な推論や離散数学の知識を向上する
オンラインの資料:
・MIT Mathematics for Computer Science
・Coursera - Introduction to Logic
・Coursera - Linear and Discrete Optimization
・Coursera - Probabilistic Graphical Models
・Coursera - Game Theory
・アルゴリズムとデータ構造を深く理解する
基本データ型(スタック、キュー、および多重集合)、
ソートアルゴリズム(クイックソート、マージソート、ヒープソート)、
データ構造(2分探索木、赤黒木、ハッシュテーブル)、そしてビッグ・オーについて学ぶ
オンラインの資料:
・MIT Introduction to Algorithms
・Coursera - Introduction to Algorithms Part 1 & Part 2
・Coursera - List of Algorithms
・Coursera - List of Data Structures
・Coursera - Book:The Algorithm Design Manual
・オペレーティングシステムを深く理解する
オンラインの資料:
UC Berkeley Computer Science 162
・UXデザインを学ぶ
オンラインの資料:
Udacity - UX Design for Mobile Developers
・人工知能を学ぶ
オンラインの資料:
・Stanford University - Introduction to Robotics
・Stanford University - Natural Language Processing
・Stanford University - Machine Learning
・コンパイラの構築方法を学ぶ
オンラインの資料:
Coursera - Compilers
・暗号学を学ぶ
オンラインの資料:
・Coursera - Cryptography
・Udacity - Applied Cryptography
・並列プログラミングを学ぶ
オンラインの資料:
Coursera - Heterogeneous Parallel Programming
・課外プロジェクトに取り組む
ウェブサイトを作成し維持する、自分自身のサーバーを構築する、またはロボットを構築する
オンラインの資料:
・Apache List of Projects
・Google Summer of Code
・Google Developer Group
・大規模システムの小さな部分を担当する(コードベースで)、既存のコードを読んで理解する、ドキュメントを精査する、そしてデバッグする。
Githubを利用するのは他人が書いたコードを読んだり、プロジェクトに貢献するための素晴らしい方法です。
・複数のプロジェクトで他のプログラマー達と働く
これによって、チーム内で上手く働くための能力を改善し、他の人達から学ぶのに役立ちます。
・自分のアルゴリズムの知識とコーディングスキルを磨く
CodeJamやACMの国際大学対抗プログラミングコンテストのようなコーディング競技を通して自分のアルゴリズム知識を磨く
・ティーチングアシスタントになる
他の学生の勉強の補助をすることは、学びたいと思っている分野の自分の知識を高めるのに役立ちます。
・ソフトウェア工学におけるインターンシップの経験を積む
米国では、インターンシップは夏季(5月 - 9月)中に行われます。
通常、申し込みは数ヶ月前に受け付けています。