
Guide for Technical Development - gits1225
https://www.google.com/about/careers/students/guide-to-technical-development.html
======
seasoup
The message: You don't have to learn much to be a software engineer just
master the discrete fields of object oriented programming, web development, ux
design, artificial intelligence, building compilers, and cryptography.

If you master one of these fields, you'll be doing well. I agree on taking an
intro to each of these, but only to figure out which one you want to
specialize in later on and because it's nice to know something about other
related fields. You won't master all of these in your career, so don't let the
list intimidate you.

~~~
64bit_snack
What is Google even trying to say with this?

You don't need a CS degree because you can learn everything for free on the
internet?

~~~
nostrademons
They're trying to increase the pipeline of software developers. One way to
solve the problem of not being able to hire the workforce you need is to train
more workforce. This guide is a very inexpensive way for them to increase the
top end of the funnel at basically zero cost or obligation to themselves. The
topics are pretty specific to the types of work you'd do at Google; they're
good, although the field of software engineering is much broader than what's
listed here.

------
brlewis
I wonder who at Google wrote this. HTML is listed as a programming language,
and JavaScript is written as two words.

~~~
fecak
I was thinking the same thing. This is sloppy writing. It reads as though it
was written by someone unfamiliar with the content, and possibly translated
from another language. Some of the grammar is a bit off from what you'd expect
from an official release of some kind from Google.

The capitalization of the word "university", and missing the capital H in
GitHub. The "Artificial Intelligence" bullet has a formatting error. Missing
articles ("work on project").

Not to mention it is vague. The "Learn other programming languages" bullet
lists several options, but doesn't say anything about how unrealistic it might
be to try and learn all of those languages (it says "and" instead of "or")

~~~
drinchev
These examples on their own discredit the post so much that it's a shame it
has "google.com" as a domain of origin.

~~~
jsudhams
Why is so much importance to written language? Why not practice casual writing
like casual speaking. I think many of these expectations put lot of pressure
on the people who wants to communicate in writing but that language to be
written is not mother tongue or might not even gone to high school.

~~~
hueving
The expectations are higher when it comes from a major company like Google,
especially when it's speaking from a position of authority on a topic like
what to do with your life.

------
drinchev
For anyone reading this. I strongly recommend to find a better resource than
w3school, suggested by Google.

The link is even broken, but this is a tiny detail.

W3School have bad reputation [1] and is considered bad.

[1] [http://www.w3fools.com/](http://www.w3fools.com/)

~~~
afarrell
For example: [https://developer.mozilla.org/en-
US/Learn/HTML](https://developer.mozilla.org/en-US/Learn/HTML)

But really, if you want to learn html+CSS, you need to spend a bunch of time
just making layouts if you want to get a mental model into your head. It is
just too finicky to reason about otherwise

~~~
WorldWideWayne
I prefer W3Schools over MDN since W3Schools gets right to the point. MDN would
rather have you read three paragraphs on the history of the feature you're
trying to use, but I usually don't need a full history on my reference cards.

~~~
lloeki
MDN contains both guides[1] and reference documentation[0] (which I happen to
have read some minutes ago). While I have seen the occasional digression on a
particular history point that explains some particular design choice, I found
references to be often concise, complete, to the point, and correct (even
across browsers, providing details if need be). BTW w3schools apparently
contains squat about MutationObserver.

[0]:
[https://developer.mozilla.org/en/docs/Web/API/MutationObserv...](https://developer.mozilla.org/en/docs/Web/API/MutationObserver)

[1]: [https://developer.mozilla.org/en-
US/docs/Web/Guide](https://developer.mozilla.org/en-US/docs/Web/Guide)

------
keerthiko
Hmm, I was a little disappointed with the list for a few reasons

\- Mostly just stuff that you learn along the way if you remotely like coding
and go to an engineering school

\- Doesn't talk about what to NOT spend/waste too much time on in favour of
the listed things

\- Doesn't list getting familiar with any version control systems. Obtuse as
they may be, it's a must-learn skill for a software developer before being
able to contribute to production code.

~~~
gabipurcaru
You seem to be contradicting yourself -- "just stuff that you learn along the
way" vs "Doesn't list getting familiar with any version control systems".
Aren't version control systems "stuff that you learn along the way" in your
opinion?

IMO, any resource like the one in the OP is going to get bashed ("not the way
I would learn stuff"). Might as well learn something from it.

~~~
exelius
No, you pretty much don't need to bother with version control systems unless
you're writing code on a team with others. And even then, students will likely
never deal with any of the complexities that arise in the real world like
branch merges, continuous integration, etc.

In general, school teaches you the content without the tradecraft. You'll need
both to be a "rockstar" developer, and I don't see how you could ever get the
tradecraft without working in the industry.

~~~
juliangregorian
I can't see any decent school not teaching version control. It's immensely
valuable even to the solo developer. Hell, my shitty school taught us
Microsoft SourceSafe, which was hilarious because two team members couldn't
work on the same file simultaneously. You'd get lots of late night phone
calls: "Check in the damn file so I can edit it!"

~~~
JoeAltmaier
That's a misconception. If you set the VSS 'lock on checkout' flag, then yes
it sucks. Its a mistake to set that on a project, yet its the default (?!)

There are adequate merge tools available in VSS, like any other source control
tool. Disabling them is silly.

I consider source control to BEGIN when two people check out the same file. If
you can't do that, then its really version control.

------
gedrap
Eh, I agree with most other commentators, saying that it's quite
dissappointing and fairly confused why it got 300+ upvotes. Probably the
influence of google.com domain. I even double checked the URL if it's not some
publicly editable page that happened to be under google.com.

If I had to pick one tip for a junior developer, I'd say slow down when it
comes to adopting methodologies, techniques and use your own judgement. What's
the benefit of doing? What are alternatives?

When you learn about OOP design patterns, it's easy to suddenly see them
everywhere. Factory here, singleton there, and with a bit of imagination
observer goes here. Not everything should fit into one pattern or another. One
of the benefits of the patterns is that it might make the solution cleaner,
easier to understand. If it increases the complexity - don't (or at least
think more about it)!

When you learn about Agile (although nowadays it's a very ambiguous term and
loads of stuff goes under this label), it's tempting to start organizing
standup meetings, plan everything under sprints, assign story points, do TDD,
etc. But think twice before going for it. What do you get back? Maybe the
morning standups are not beneficial for the team, and just distracts everyone?
Maybe story points are not worth the overhead of agreeing on, allocating them,
etc and your team can do just fine without them?

If some methodology doesn't really stick to your team, maybe it's an indicator
that they are totally fine without it? For example, maybe you haven't had a
morning standup for a week and no one has brought it up, everything's going
smoothly. Not saying that the listed methodologies are wrong, they are not,
just sometimes they are not beneficial.

Same goes for a new language, a new promising framework, etc.

Be critical.

------
mauricemir
Interesting they don't mention any Database related tech ie set theory relvars
and PL/SQL et all (plus the no sql query language)

~~~
bsdpython
Databases weren't part of the core CS curriculum at least when I was a
student. I still don't understand why since it seems as core to understanding
modern software as anything to me.

~~~
mauricemir
No wonder some told me that new devs often cant write a simple SELECT
statement or use a database from the command line.

~~~
kamaal
It doesn't just stop there. They tend to rewrite a lot of things that you
could do in SQL on NoSQL databases(Irony..) albeit the implementations are
half written, buggy and break on adhoc inputs.

Even more worse, these sort of things come and bite people while these design
schemas. After NoSQL database fashion has taken off, schema design,
performance tuning et all are rapidly getting rare skills to find people with.
This results in all kinds tech debt.

Much could be avoided by having good SQL skills.

~~~
zxcvcxz
> They tend to rewrite a lot of things that you could do in SQL on NoSQL
> databases(Irony..)

You do realize most "NoSQL" databases are "Not only SQL"?

------
sanxiyn
I second the recommendation of Udacity's Software Testing course and Software
Debugging course. Software Testing is taught by the author of csmith, and
Software Debugging is taught by the author of delta.

I feel that most CS curriculums could be improved by teaching more of testing
and debugging. Do you know why it is not done?

~~~
S4M
> I feel that most CS curriculums could be improved by teaching more of
> testing and debugging. Do you know why it is not done?

I always thought this kind of skills was learned best through experience, by
writing buggy code first, then fixing the bugs, then realizing that some
testing could have helped to find the bug much earlier on...

------
geekrax
Even Google knows that it's called "Javascript", not "Java Script":
[http://i.imgur.com/kEpux5f.jpg](http://i.imgur.com/kEpux5f.jpg)

~~~
jsnk
I cringed when I read "Java Script".

------
agounaris
Learn UX, AI, Cryptography, parallel programming, compilers, maths... lol
don't let those guys/girls or HR write those guides they put all the keywords
in there

------
jpwagner
Interesting, when I use the phrase "learn xyz" i mean "become very proficient
at xyz" (maybe a notch below expert).

This post and the comments here seem to indicate that most people take it to
mean "get an intro to xyz" (a notch above novice).

------
melling
UX Design is just one mobile Android course.

[https://www.udacity.com/course/ud849](https://www.udacity.com/course/ud849)

Design has become so important that it would be nice to see a lot more
resources. Learning to program is relatively easy these days because of the
large number of resources. Design is still a dark art.

------
kin
This is a guide for technical development. What I think is useful is DevOps
knowledge and knowing your way around Unix or even Windows. Spinning up VMs
and setting up your dev environment is often times more than just following
directions because there's always some special case you run into that requires
some knowledge and experience to solve.

------
escherize
I realize it's not a guide for the exact same thing, but How To Become A
Hacker[1] has many things to say about leveling up.

The 'hacker attitude' is especially well summed up, imo.

[1] [http://www.catb.org/~esr/faqs/hacker-
howto.html](http://www.catb.org/~esr/faqs/hacker-howto.html)

------
kornakiewicz
I bet that if this list would be published on other domain rather than G, it
would be not even taken serious.

------
gonzo41
Does the advice of "just learn to use a few different languages and build a
CRUD app that has a cloud hosted database" not hold true anymore?

A really good learning experience is having a crack at making the same app for
both android and IOS (much frustration with objective c) For a newbie stuff
like persistence storage, learning MVC, learning objective c, java, android
and iOS, sqlite, and all the other stuff in between (Xcode is awful).

aAl of the other CS stuff is valid. Although i feel like you probably won't
have the necessary buy in to learn algorithms and data structures well if you
don't have a degree / GPA on the line.

~~~
djur
Do you still need to buy an Apple computer in order to develop iOS apps? As
long as that's true, I don't think "make an iOS app" belongs in any general-
purpose advice for aspiring developers.

~~~
gonzo41
True, most schools run both, or at least my university did/does. but for the
self taught, go android, more phones thus cheaper to get into the game.

------
ken47
Does anybody else notice and question the lack of functional programming on
that list?

~~~
MichaelGG
It's Google. They're notorious for using... less than advanced languages, to
put it nicely. (C++, Java, Python, Go) Obviously it works for them. But just
imagine if the founders had been more inclined to a LISP or an ML.

~~~
GFK_of_xmaspast
We'd still be using yahoo?

------
hanief
I compiled a list of online courses on Computer Science and Electrical
Engineering the other day. The curriculum is based on my old CS college
syllabus. Maybe it can be useful for students. Feel free to add something on
the comment.

[https://docs.google.com/spreadsheets/d/1oZ6eY7WqVNGgyRSF9F8L...](https://docs.google.com/spreadsheets/d/1oZ6eY7WqVNGgyRSF9F8Lqf4vCGWaHcWYLGgjfmWj3PU)

------
Bostonian
I don't see much about scientific computing, such as the topics covered in the
Numerical Recipes books, many of which are relevant to data scientists.

------
paxtonab
It's nice to see a curriculum that hand picks courses from a few different
MOOCs and other relevant resources - that has definitely been a weak point of
MOOCs as most of them don't have enough depth/breadth on their own for you to
learn all of these things.

I also think this is a great point:

"Work on project outside of the classroom. Notes: Create and maintain a
website, build your own server, or build a robot."

------
lambdaelite
It's interesting to compare this list with the topics covered by the Software
Engineering Book of Knowledge or the Software Engineering PE exam.
Requirements engineering, formal documentation, estimation, project
management, and ethics all seem to be overlooked in Google's guide.

I guess this is sufficient to be an engineer at Google, but this wouldn't be
close to sufficient in other industries.

~~~
quonn
That's software engineering 101. Everyone learns that in school. Of course
Google still needs all of that, just like everyone else. But you can pick up
the knowledge part (that is actually tested in exams) very, very quickly.

~~~
Iftheshoefits
No, you can't pick it up "very, very quickly." That is a dismissive and
indirect way to assert that engineering is somehow easier or requires less
intellectual rigor than "higher" disciplines like CS or math.

~~~
quonn
I tried to make it very clear that you can pick up the knowledge-based part -
or that part that you can learn at school or using books, which is also the
part that is tested in exams - quickly. In that respect it is indeed easier.

What may not be that easy is the experience to make good decisions. But there
is no clear path for that, except being an engineer for a sufficiently long
time. This piece was targeted at students and you can't just tell them: "Keep
working somewhere else for 10 years".

------
yzh
I think for parallel computing, this udacity course is very nice too:
[https://www.udacity.com/course/intro-to-parallel-
programming...](https://www.udacity.com/course/intro-to-parallel-programming--
cs344)

------
cwt137
Hmm. They have something on testing, but nothing on requirements writing or
project management.

------
natch
This is explicitly a guide for university/college students, and maybe that
should be reflected in a title edit. Otherwise the article could be read as
Google assuming that a university context is the only time and place to learn.

------
greedoshotlast
The message: these are the kinds of employees we want to hire.

If you follow these guidelines there is a good chance we would hire you.

Universities: make sure you are teaching students these skills if you want us
to hire your students.

------
randomsearch
Lots of criticism here, but very little of it constructive. Please could those
people criticising the list explain exactly what is missing, or what should
not be on the list?

~~~
fecak
Regardless of what should or should not be on this guide, it's on Google's
Career pages and is being served up to students interested in a career at one
of the most admired employers in the world. Not only is it on the career
section, it's on a section specifically targeting software engineers, which
are considered a key component to Google's success. And the page is incredibly
sloppy, both to those in the industry and probably many who don't even code
but are in the industry (recruiters, non-technical hiring managers, etc.).

~~~
mauricemir
Google need to think about this from a "Brand" perspective.

Likewise some of Googles published API's are "in need of improvement" \- which
is polite civil service speak for your on a PIP

------
ramisama
I wonder why Go is not in the list of recommended languages

~~~
longlivegnu
Maybe a lack of resources out there or Google thinks if you learn a more
generic language you will mold easier

~~~
ctvo
Maybe they're a large company and Go is a system's language used by a subset
of the company. And maybe it's not important to learn for general technical
development with no specific problem to solve.

------
jedberg
IT makes me sad that they have to specify this: "Checking off all items in
this guide does not guarantee a job at Google"

------
mparramon
This reminds me of my 0 to web developer guide:

www.developingandrails.com/2015/01/crash-course-on-modern-web-development.html

------
KedarMhaswade
> Add to your repertoire - Java Script, ...

Should I ignore this as a typo? How am I to rely then on this as a classified
information?

------
umbs
Surprised, computer networks and protocols are not listed. Isn't that
knowledge essential?

------
GFK_of_xmaspast
This seems mostly fine, a robust undergraduate education should cover most of
those bases.

------
auvi
Lisp and Scheme? Scheme is a Lisp. I think they wanted to say Common Lisp and
Scheme.

------
theaccordance
Grammar and spelling aside, this is a good reference for those Ask HN "How do
I get an internship/first job" posts.

