{"id":126238,"date":"2015-05-15T10:19:21","date_gmt":"2015-05-15T08:19:21","guid":{"rendered":"http:\/\/mybroadband.co.za\/news\/?p=126238"},"modified":"2015-05-15T10:20:23","modified_gmt":"2015-05-15T08:20:23","slug":"googles-advice-to-become-a-great-software-engineer","status":"publish","type":"post","link":"https:\/\/mybroadband.co.za\/news\/software\/126238-googles-advice-to-become-a-great-software-engineer.html","title":{"rendered":"Google&#8217;s advice to become a great software engineer"},"content":{"rendered":"<p>Many people ask what they should do to become a great programmer, and here <strong><a href=\"https:\/\/www.google.com\/about\/careers\/students\/guide-to-technical-development.html\" target=\"_blank\">Google\u2019s Guide for Technical Development<\/a><\/strong> can help.<\/p>\n<p>Google is known for employing some of the world\u2019s best software engineers, and the company\u2019s guidelines are therefore of great value.<\/p>\n<p>The guide from Google is a \u201csuggested path for university students to develop their technical skills academically and non-academically through self-paced hands-on learning\u201d.<\/p>\n<p>\u201cYou 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,\u201d said Google.<\/p>\n<p>\u201cThe online resources provided in this guide are not meant to replace courses available at your university. However, they may help supplement your learnings or provide an introduction to a topic.\u201d<\/p>\n<p>The section below is a summary of Google\u2019s advice on how to become\u00a0a successful software engineer.<\/p>\n<h3 class=\"my-4\">Google\u2019s recommendations for academic learning<\/h3>\n<p>According to Google, having a solid foundation in computer science is important to become a successful software engineer.<\/p>\n<p>Google advises budding software engineers to use the guide at their discretion, and advises users to also learn things outside of this guide.<\/p>\n<p><strong>Introduction to CS Course<\/strong><\/p>\n<p>Take Introduction to Computer Science courses that provide basic instructions for coding.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs101\" target=\"_blank\">Udacity &#8211; intro to CS course<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/cs101\" target=\"_blank\">Coursera &#8211; Computer Science 101<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Code in at least one object-oriented programming language: C++, Java, or Python<\/strong><\/p>\n<p>Beginner Online Resources<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/programming1\" target=\"_blank\">Coursera &#8211; Learn to Program: The Fundamentals<\/a><\/strong><\/li>\n<li><strong><a href=\"http:\/\/ocw.mit.edu\/courses\/electrical-engineering-and-computer-science\/6-092-introduction-to-programming-in-java-january-iap-2010\/index.htm\" target=\"_blank\">MIT Intro to Programming in Java<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/developers.google.com\/edu\/python\/\" target=\"_blank\">Google&#8217;s Python Class<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/interactivepython\" target=\"_blank\">Coursera &#8211; Introduction to Python<\/a><\/strong>, <strong><a href=\"http:\/\/www.openbookproject.net\/thinkcs\/python\/english2e\/\" target=\"_blank\">Python Open Source E-Book<\/a><\/strong><\/li>\n<\/ul>\n<p>Intermediate Online Resources<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs212\" target=\"_blank\">Udacity&#8217;s Design of Computer Programs<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/programming2\" target=\"_blank\">Coursera &#8211; Learn to Program: Crafting Quality Code<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/proglang\" target=\"_blank\">Coursera &#8211; Programming Languages<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/cs.brown.edu\/courses\/cs173\/2012\/OnLine\/\" target=\"_blank\">Brown University &#8211; Introduction to Programming Languages<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn other Programming Languages<\/strong><\/p>\n<p>Notes: Add to your repertoire &#8211; JavaScript, CSS &amp; HTML; Ruby; PHP; C; Perl; shell script; Lisp; and Scheme.<\/p>\n<ul>\n<li><strong><a href=\"http:\/\/www.w3schools.com\/\" target=\"_blank\">w3school.com &#8211; HTML Tutorial<\/a><\/strong><\/li>\n<li><strong><a href=\"http:\/\/www.codecademy.com\/learn\" target=\"_blank\">Codecademy<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs256\" target=\"_blank\">Udacity &#8211; Mobile Web Development<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs255\" target=\"_blank\">Udacity &#8211; HTML5 Game Development<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Test Your Code<\/strong><\/p>\n<p>Notes: Learn how to catch bugs, create tests, and break your software.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs258\" target=\"_blank\">Udacity &#8211; Software Testing Methods<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs259\" target=\"_blank\">Udacity &#8211; Software Debugging<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Develop logical reasoning and knowledge of discrete math<\/strong><\/p>\n<ul>\n<li><strong><a href=\"http:\/\/ocw.mit.edu\/courses\/electrical-engineering-and-computer-science\/6-042j-mathematics-for-computer-science-fall-2010\/index.htm\" target=\"_blank\">MIT Mathematics for Computer Science<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/intrologic\" target=\"_blank\">Coursera &#8211; Introduction to Logic<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/linearopt\" target=\"_blank\">Coursera &#8211; Linear and Discrete Optimization<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/pgm\" target=\"_blank\">Coursera &#8211; Probabilistic Graphical Models<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/gametheory\" target=\"_blank\">Coursera &#8211; Game Theory<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Develop a strong understanding of Algorithms and Data Structures<\/strong><\/p>\n<p>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.<\/p>\n<ul>\n<li><strong><a href=\"http:\/\/ocw.mit.edu\/courses\/electrical-engineering-and-computer-science\/6-006-introduction-to-algorithms-spring-2008\/index.htm\" target=\"_blank\">MIT Introduction to Algorithms<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/algs4partI\" target=\"_blank\">Coursera Introduction to Algorithms Part 1<\/a><\/strong> &amp; <strong><a href=\"https:\/\/www.coursera.org\/course\/algs4partII\" target=\"_blank\">Part 2<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_algorithms\" target=\"_blank\">List of Algorithms<\/a><\/strong>, <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_data_structures\" target=\"_blank\">List of Data Structures<\/a><\/strong><\/li>\n<li>Book: <strong><a href=\"https:\/\/www.amazon.com\/Algorithm-Design-Manual-Steven-Skiena\/dp\/1849967202\/ref=sr_1_5?s=books&amp;ie=UTF8&amp;qid=1360133842&amp;sr=1-5&amp;keywords=algorithms\" target=\"_blank\">The Algorithm Design Manual<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Develop a strong knowledge of operating systems<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.youtube.com\/watch?v=XgQo4JkN4Bw&amp;list=PL3289DD0D0F0CD4A3\" target=\"_blank\">UC Berkeley Computer Science 162<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn UX Design<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/ud849\" target=\"_blank\">Udacity &#8211; UX Design for Mobile Developers<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn Artificial Intelligence<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/see.stanford.edu\/see\/courseinfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743\" target=\"_blank\">Stanford University &#8211; Introduction to Robotics<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/see.stanford.edu\/see\/courseinfo.aspx?coll=63480b48-8819-4efd-8412-263f1a472f5a\" target=\"_blank\">Natural Language Processing<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/see.stanford.edu\/see\/courseinfo.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1\" target=\"_blank\">Machine Learning<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn how to build compilers<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/compilers\" target=\"_blank\">Coursera &#8211; Compilers<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn cryptography<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/crypto\" target=\"_blank\">Coursera &#8211; Cryptography<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.udacity.com\/course\/cs387\" target=\"_blank\">Udacity &#8211; Applied Cryptography<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Learn Parallel Programming<\/strong><\/p>\n<ul>\n<li><strong><a href=\"https:\/\/www.coursera.org\/course\/hetero\" target=\"_blank\">Coursera &#8211; Heterogeneous Parallel Programming<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Work on projects outside of the classroom.<\/strong><\/p>\n<p>Notes: Create and maintain a website, build your own server, or build a robot.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/projects.apache.org\/\" target=\"_blank\">Apache List of Projects<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.google-melange.com\/gsoc\/homepage\/google\/gsoc2013\" target=\"_blank\">Google Summer of Code<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/developers.google.com\/\" target=\"_blank\">Google Developer Group<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Work on a small piece of a large system (codebase), read and understand existing code, track down documentation, and debug things.<\/strong><\/p>\n<p>Notes: GitHub is a great way to read other people\u2019s code or contribute to a project.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/github.com\/\" target=\"_blank\">GitHub<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/www.fogcreek.com\/kiln\/\" target=\"_blank\">Kiln<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Work on project with other programmers.<\/strong><\/p>\n<p>Notes: This will help you improve your ability to work well in a team and enable you to learn from others.<\/p>\n<p><strong>Practice your algorithmic knowledge and coding skills<\/strong><\/p>\n<p>Notes: Practice your algorithmic knowledge through coding competitions like CodeJam or ACM\u2019s International Collegiate Programming Contest.<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/code.google.com\/codejam\/\" target=\"_blank\">CodeJam<\/a><\/strong><\/li>\n<li><strong><a href=\"https:\/\/icpc.baylor.edu\/\" target=\"_blank\">ACM ICPC<\/a><\/strong><\/li>\n<\/ul>\n<p><strong>Become a Teaching Assistant<\/strong><\/p>\n<p>Helping to teach other students will help enhance your knowledge in the subject matter.<\/p>\n<p><strong>Internship experience in software engineering<\/strong><\/p>\n<p>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.<\/p>\n<h3 class=\"my-4\">More on Google<\/h3>\n<p><strong><a href=\"http:\/\/mybroadband.co.za\/news\/internet\/124828-google-and-mobile-friendly-websites.html\">Google and mobile-friendly websites<\/a><\/strong><\/p>\n<p><strong><a href=\"http:\/\/mybroadband.co.za\/news\/internet\/124836-robben-island-google-street-view.html\">Robben Island Google Street View<\/a><\/strong><\/p>\n<p><strong><a href=\"http:\/\/mybroadband.co.za\/news\/general\/124613-download-your-entire-search-history-with-google.html\">Download your entire search history with Google<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google\u2019s Guide for Technical Development provides tips on how to become a successful software engineer.<\/p>\n","protected":false},"author":23,"featured_media":126244,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sma_x_autopost_status":"idle","_sma_x_autopost_error":"","_sma_x_post_id":"","_sma_facebook_post_id":"","_sma_instagram_post_id":"","_sma_threads_post_id":"","_sma_x_attempts":0,"footnotes":""},"categories":[16],"tags":[167,35,30358,30356],"class_list":["post-126238","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-google","tag-headline","tag-programming","tag-software-engineer"],"_links":{"self":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/126238"}],"collection":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/comments?post=126238"}],"version-history":[{"count":1,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/126238\/revisions"}],"predecessor-version":[{"id":126308,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/126238\/revisions\/126308"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/media\/126244"}],"wp:attachment":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/media?parent=126238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/categories?post=126238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/tags?post=126238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}