Skip to content

Guide for Technical Development

Having a solid foundation in Computer Science is important to become a successful Software Engineer. This guide is a suggested path for university students to develop their technical skills academically and non-academically through self paced hands-on learning. You may use this guide to determine courses to take, but please make sure you are taking courses required for your major in order to graduate. The online resources provided in this guide are not meant to replace courses available at your university. However, they may help supplement your learning or provide an introduction to a topic.

Using this guide:

  • Please use this guide at your discretion
  • There may be other things you want to learn or do outside of this guide - go for it!
  • Checking off all items in this guide does not guarantee a job at Google
  • This guide will evolve or change - check back for updates Follow our Google for Students +Page to get additional tips, resources, and other students interested in development.

Recommendations for Academic Learnings

  • Introduction to CS Course
  • Take Introduction to Computer Science courses that provide basic instructions on coding.
  • Code in at least one object oriented programming language: C++, Java, or Python
  • Learn other Programming Languages
  • Notes: Add to your repertoire - JavaScript, CSS & HTML; Ruby; PHP; C; Perl; shell script; Lisp and Scheme.
  • Test Your Code
  • Notes: Learn how to catch bugs, create tests, and break your software
  • Develop logical reasoning and knowledge of discrete math
  • Online Resources: MIT Mathematics for Computer Science, Coursera - Introduction to Logic, Coursera - Linear and Discrete Optimization, Coursera - Probabilistic Graphical Models, Coursera - Game Theory
  • Develop strong understanding of Algorithms and Data Structures
  • Notes: 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.
  • Develop a strong knowledge of operating systems
  • Learn UX Design
  • Learn Artificial Intelligence
  • Learn how to build compilers
  • Learn cryptography
  • Learn Parallel Programming
  • Work on project outside of the classroom.
  • Notes: Create and maintain a website, build your own server, or build a robot.
  • Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug things.
  • Notes: GitHub is a great way to read other people’s code or contribute to a project.
  • Work on project with other programmers.
  • Notes: 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
  • Notes: Practice your algorithmic knowledge through coding competitions like CodeJam or ACM’s International Collegiate Programming Contest.
  • Become a Teaching Assistant
  • Helping to teach other students will help enhance your knowledge in the subject matter.
  • Internship experience in software engineering
  • Notes: Make sure you apply for internships well in advance of the period internships take place. In the US, internships take place during the summer, May-September. Applications are usually accepted several months in advance.

tech/software engineering