As part of an extended project at work, I am going through various resources about software engineering and assessing whether they will be helpful learning material for other staff at the lab. Therefore, this will hopefully be the first in a series of posts on handy software engineering courses and the like.

First on my list was the Google Tech Dev Guide, and I had high hopes that it would contain lots of useful material on software development given the prominence of Google in this sector. Spoiler: it didn’t live up to the expectations.

Google Tech Dev Guide Landing
Page

There are many different “paths” available with the guide, and I opted for the Foundations of Programming, following the “recommended sequence” therein.

Google Tech Dev Guide Foundations of
Programming

Review of Course

Learning Objectives: Having been trained as a computational physicist, my software engineering skills exist but have been developed sporadically, as and when I needed them. I am looking to round out my proficiency in and awareness of software engineering good practices.

How would you evaluate your skill level in the material covered by the course? Intermediate.

Was the course too easy or too difficult? The majority of the problems were quite easy. Not trivial, but not helping me learn much new.

Was the course useful to you? Yes and no. For my stated learning objectives, it fell short of the mark. I have not gained the general software engineering skills that I wanted. However, there were some important fundamentals of computer science that I was exposed to, predominantly by the first problem of the course. E.g. Big-O notation, analysis of algorithms, greedy algorithms, profiling Python code, hash tables, binary search, etc.

What did you like? The first problem “Find longest word in dictionary that is a subsequence of a given string” on the surface seemed easy but had some nice lessons to be learned and computer science concepts underlying it. Well worth the effort to go through it, and there is still more that I could have done. A separate lesson links to a YouTube video on hash tables was a nice introduction to this fundamental data structure.

What did you not like? The majority of the course is solving coding problems, and the ones I did were below my experience level and quite easy. I am all for learning by doing, but this course lacked a structured tuition component. Moreover, some of the problems require Java, which is not a language I am planning to learn or use in the immediate future. The resources on testing and debugging did not look good so I didn’t even bother.

How would you rate the course overall? 6

Other comments? My stated learning objectives were obviously misaligned with the content of the course, but even still, I think there are better learning resources out there than this one. It should also be noted I did about a quarter of the content because of this.