I often like to read through some of Google careers information for insight into what I should be focusing on learning while still in school.  Recently, I stumbled upon Google's Technical Development Guide, targeted towards Computer Science students that are looking to get a job at Google.  This guide gives online supplemental resources for students.  In my opinion, this guide is intended to ensure that CS students understand that they will not likely be successful while relying solely on school curriculum to gain the knowledge necessary to be a developer. Let's take a peek at what they suggest... To say the very least, this guide is extensive with action items ranging from taking an Introduction to CS course to learning Artificial Intelligence, to learning Parallel Programming.  Their list seems to approach being a well-rounded developer from two angles: 1) Gathering technical skills and broadening programming language knowledge and 2) Gaining experience working in team environments and on teams outside of usual school structure. What does this list entail?
  • Take an Into to CS Course
  • Code in (at least) ONE object-oriented programming language (C++, Java, Python)
  • Learn other programming languages: JavaScript, CSS + HTML, Ruby, C, PHP, Perl, Shell Script, Lisp, Scheme. 
  • Test Your Code
  • Develop logical reasoning and knowledge of Discrete Math
  • Develop a strong understanding of algorithms and data structures. 
  • Develop a strong understanding of operating systems. 
  • Learn UX design
  • Learn Artificial Intelligence
  • Learn how to build compilers
  • Learn Cryptography
  • Learn Parallel Programming
  • Work on projects outside of the classroom
  • Work on projects with other developers 
  • Practice your algorithmic knowledge and coding skills
  • Work on a small piece of a large system (code base), read and understand existing code, track down documentation, and debug
  • Become a Teaching Assistant
  • Gain internship experience in software engineering
You may be thinking, "this list would take a life time to master".  In many cases, that is the truth, but I think the goal is to have a decent understanding of all of these areas then use that knowledge determine an area to master.  For instance, I plan to specialize in Artificial Intelligence in grad school, but it's still important for me to understand the other areas because they all work together.  Regardless, this list gives us a glimpse into what Google expects from future Software Engineer applicants.  Google accompanies their list with links to online resources that students can use to accomplish these tasks.  I've highlighted in blue the tasks that I have worked on since beginning my CS degree program.  I did this to demonstrate just how obtainable this list is, especially when tackled over time. Bottomline...  I believe the biggest takeaway in this situation is that students shouldn't rely solely on their school's curriculum to give them all of the knowledge they need.  I have been an advocate of supplemental learning and have mentioned it in many blog posts before this one.  What's more interesting is that supplemental learning has gone from being a way to be competitive while job hunting, to being an expectation for many successful organizations.  As technology advances, developers will need to have a broader skill baseline in order to be successful.  Personally, I believe this Technical Development Guide is a tool that any aspiring developer should use, not just ones that want to snag a job at Google!
Want a job at Google? Google’s Technical Development Guide!

Take a Look
It's been a month since school let out and I have had a chance to recuperate from a vigorous semester full of... Math... Now that I'm not longer seeing integrals in my sleep, I've had the change to devise some set goals to accomplish this summer.  The realization that this will be the last summer where I will have a considerable amount of free time, I decided that it would be best to spend my time wisely.  Although there are no plans of forgoing sleeping in and reading Word of Radiance for hours, I do have a plan to add a substantial amount of productivity to my summer vacation. So, what are my goals, you ask? Well, before I get into my goals, another epiphany was that although I have learned quite a bit in the past couple of months,  I don't really have any way of showing what I've learned.  Apart from cheesy homework assignments, I haven't really had the time to work on any resemblance of a portfolio.  To add insult to injury, my website, at the time, looked like a drunken toddler made it in the midst of a temper tantrum.  In other words, I really have no way to showing what I've learned, nor do I have concrete representations of what I would like to do with my programming knowledge upon graduation. What a nasty web I have woven for myself...  But, this summer I aim to change the status quo.  The first step was to update my drunken toddler website, which I'm in the process of doing now.  But, there are some other major tasks that I really want to get to which are: Unity 5 Training & C# Learning Swift for iOS Learning Android Studio Blender Maya UX Design Foundation Sass I know... a lofty list.  I will probably get to possibly 1-2 things off of this list, but I believe that it's good to have aggressive goals, even if I only get to a quarter of this list, it would be greatly beneficial to me.  Either way,  I plan to blog throughout the summer, sharing my experiences with what I learn.  It should be an interesting ride. :)
My Summer Goal List

Take a Look
  What is a MOOC?  Simple, it's a massive open online course, where major universities make lectures and learning materials available to the public.  Ivy league universities such as Harvard and Yale have offered their courses to the public.  There are programs such as Coursera and Udacity that facilitate courses, allowing the general public to take college level courses, for free in most cases.
MOOCs – What’s the hype all about?!?

Take a Look