quote from : https://www.google.com/about/careers/students/guide-to-technical-development.html
Technical Development Guide
This guide provides tips and resources to help you develop your technical skills (academically and non-academically) through self-paced, hands-on learning.
This guide is intended to target Computer Science students seeking an internship or university grad role at Google.
How to use this guide
- You can use this guide to determine which courses to take, but be sure stay on track with your courses required for your major to graduate.
- We encourage you to learn more outside of this guide. The more you know, the better!
- The online resources we’ve cited aren’t meant to replace courses available at your university, but they may help supplement your education or provide an introduction to a topic.
- The information and recommendations in this guide were gathered through our work with students and candidates in the field. It is a work-in-progress, living document, so be sure to periodically check back for updates.
Note: Following the recommendations in the guide does not guarantee a job at Google.
Tips and Resources
Follow our Google for Students +Page to get additional tips and resources, and connect with other students.
Recommendations and Resources
Take an “Introduction to CS” course | Focus on basic coding instructions
Online resources: |
Code in (at least) ONE object-oriented programming language (C++, Java®, Python®) | Beginner online resources:
Intermediate online resources: |
Learn other programming languages | Add to your repertoire:
Online resources: |
Test your code | Learn how to catch bugs, create tests, and break your software
Online resources: |
Develop logical reasoning and knowledge of discrete math | Online resources: |
Develop a strong understanding of algorithms and data structures | Learn about fundamental data types (stack, queues, and bags), sorting algorithms (quicksort, mergesort, heapsort), data structures (binary search trees, red-black trees, hash tables), and Big O.
Online resources:
|
Develop a strong knowledge of operating systems | Online resources: |
Learn UX design | Online resources: |
Learn artificial intelligence | Online resources:
|
Learn how to build compilers | Online resources: |
Learn cryptography | Online resources: |
Learn parallel programming | Online Resources: |
Work on projects outside of the classroom | Create and maintain a website, build your own server, or build a robot
Online resources: |
Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug | GitHub is a great way to read other people’s code or contribute to a project
Online resources: |
Work on projects with other programmers | This will help you improve your ability to work well in a team and enable you to learn from others. |
Practice your algorithmic knowledge and coding skills | Practice your algorithmic knowledge through coding competitions like CodeJam or ACM’s International Collegiate Programming Contest.
Online resources: |
Become a teaching assistant | Helping to teach other students will help enhance your knowledge in the subject matter. |
Gain internship experience in software engineering | In the U.S., internships take place during summer (May–September). Applications are usually accepted several months in advance. |
https://www.google.com/about/careers/students/guide-to-technical-development.html