
Google Tech Dev Guide - myroon5
https://techdevguide.withgoogle.com/
======
lwansbrough
"Given a string S and a set of words D, find the longest word in D that is a
subsequence of S."

Found under "Foundations of programming" \-- this is exactly the type of
problem I'd expect as question one under this section. When it's made by
Googlers, that is.

I make a lot of cool stuff day to day, and usually that requires a lot of code
and knowledge about programming and topics that are rather advanced (currently
I'm building a distributed collaboration system with event sourced data in
Microsoft Orleans) -- but questions like this are just about the furthest
thing from what I want from a developer. We're gonna be in a lot of trouble in
the future if every developer is learning Google sanctioned code problems at
Google University on their Google Chromebook in Google Chrome on Google.com.
And I'm not even speaking about how disgusting that sounds -- just tell me how
that's going to breed diversity in thought?

If I came across this problem in my "Foundations of Programming" course
equivalent when I first started to learn how to code, well I'd probably be
enjoying my life as a woodworker right about now.

~~~
cromwellian
(Disclaimer: I work at Google). This is going to sound like a humble-brag, but
it isn't, I'm trying to give some life advice based on my experience: I have
used "CS" algorithmic thinking on multiple projects, I've even used facets of
abstract algebra and number theory from my Math degree to further my career
and it lifted me out of poverty.

Here's an example. A few years ago, I was researching ways to crunch down the
size of GWT (Java-to-JS compiler) output more. Besides obvious compiler theory
work on optimizations, I noticed that the code had a lot of common chunks that
could possibly be gzipped better. Knowing how bzip2 worked with the BWT
transform, I wondered if sorting JS code could improve gzip output, the result
was this ([http://timepedia.blogspot.com/2009/08/on-reducing-size-of-
co...](http://timepedia.blogspot.com/2009/08/on-reducing-size-of-
compressed.html)) and writeups like this were one of the ways I got noticed by
Google to get an interview. In other words, solving "useless puzzles" landed
me a dream job.

The gist of that article is by using edit-distance/levenstein distance to
'cluster' JS code fragments, you can improve the efficiency of GZIP by
bringing more code into its 32K window OR optimize the huffman codes it uses.
However, edit-distance doesn't know anything about the LZ algorithm's
mechanism.

Later on, I ran into the "LZ Distance Metric" in some papers while researching
about optimal clustering and wrote an updated post:
[http://timepedia.blogspot.com/2009/11/traveling-salesman-
pro...](http://timepedia.blogspot.com/2009/11/traveling-salesman-problem-
and.html)

It turns out optimally computing the LZ Distance Metric requires efficiently
solving the Longest Common Substring problem, which can be solved with a
generalized suffix tree in O(N + M) time.

In other words, if my only experience was doing web programming or standard
forms + database enterprise apps, I probably would have never been able to
even imagine this, because I wouldn't know what I don't know, whereas spending
time actually thinking about data structures and algorithms in my past,
prepared me for that moment, exposing me to stuff I would recall later when I
needed it. Moreover, trying to solve this problems exercises memories you
learned in college CS, so you don't forget them, especially the ability to
read papers and consume mathematical notation.

Another example: I have long had a love affair with number theory. It's why I
love cryptography, error correcting codes, block designs (See one of my own
puzzles to see if you can solve it:
[http://cromwellian.blogspot.com/2006/09/puzzles-you-cant-
sol...](http://cromwellian.blogspot.com/2006/09/puzzles-you-cant-solve-with-
google-one.html))

This led me to get into crypto. Early work on crypto during the cypherpunks
mailing list days in the 90s, designing anonymous remailers, anonymous
internet proxies, and digital cash algorithms, got me noticed, and led to a
job at IBM TJ Watson research, my first, real, non-consulting job (before that
I mostly wrote 6502/68000 assembly for games, and FastCGI+Perl). From there, I
applied HashCash proof-of-work in the mid-90s to anti-fraud in hacked clients
in 2-tier systems, patented an early re-CAPTCHA-like algorithm, and ended up
getting acqui-hired by a California company. Now, I was born and raised in
Baltimore City, grew up pretty poor, and had to start my first 2 college years
in a community college. This was a fantastic dream come true for me, and I
mostly credit it to serendipity made possible by being exposed to a lot of
stuff.

Later, internal to Google, I came up with the idea of applying Broadcast
Encryption used in copyright-protection systems (e.g. Blu-Ray AACS) and
turning them around for a good purpose: creating a serverless, peer-to-peer
group messaging social-network. That design was heavily based off of number
theoretical knowledge I had to dust off, and helped facilitate an internal
transfer to the team I'm on today.

There's nothing wrong with straightforwardly engineered apps, screens, forms,
databases. Most of the world subsists on this. But sometimes, in fields of
graphics algorithms, AI, mapping, bioinformatics, AR, VR, you encounter
situations that aren't straightforward, and then it becomes valuable to be
able to be confronted with a super-frustrating, mind bending puzzle, and bring
all the weapons to bear on it. Can't you just Google-search it? Sometimes. I'd
argue more often than not, you'll "flesh-based search engine it", by tracking
down your local Jeff Dean clone and asking them for hints.

But IMHO there's no harm in being challenged like this anymore than being
asked to complete basic training to be in the military, even though you might
just be a tech-support soldier. You never know when you'll need those brain
muscles, and if you're lucky, like I was, it could be a life altering
opportunity. I don't think Google interviewers are interested in you solving
the problem and getting the correct answer, they are interested in seeing how
you work: how you think, how you communicate and ask questions of the
interviewer, in other words, how you'd work as a member of the team. There's
no shame in asking the interviewer questions, it's what you'd ask a coworker
if you're trying to solve the problem.

It's not the end result, but the process.

~~~
pathseeker
>There's nothing wrong with straightforwardly engineered apps, screens, forms,
databases. Most of the world subsists on this.

Most of Google subsists on this. Interviewing everyone for skills that only
come up when you are pushing the boundaries of CS is pointless. 99% of
engineers at Google fling protos and do menial translations on them.

Have a separate "CS" group if you want and apply the CS questions to them. For
the rest, interview instead on their ability to write maintainable, testable,
scalable software. Google would be worlds better off for it. It's shocking how
incompetent the org is as a whole at delivering and maintaining quality
software.

~~~
cromwellian
I don’t think product excellence is a function of the interview process, it’s
mainly a function of what you are promoted for, and rightly or wrongly,
launching new things tends to give you a better career trajectory than fixing
or maintaining old stuff.

~~~
kamaal
That's an unfortunate consequence of the OKR process. If the company has to be
chasing near moonshot projects all the time. Then they also align resources
towards it. That means money is chasing those projects.

There is a huge incentive to keep launching new things. To keep doing
something big. Its the classic throw-pizza-at-wall-see-what-sticks approach
except the experiment is run among a huge group of people. So eventually some
Pizza sticks.

But even in that case. I hear '20% time projects' culture have long been dead
for now. So that means the projects have to come some one from the top to get
some resources.

------
acroback
I have been putting off a Google interview for a whole year now.

I have real experience building Cluster Filesystems, Distributed Caches,
TCP/IP Control plane software and low latency Ad platform for more than a
decade.

Sounds good on paper, but I can guarantee I cannot solve most of these puzzles
without actually solving them beforehand. Why? Because I do not have cycles or
time to solve these on my own. I have a system to build, Engineers to help and
a product to ship. Family obligations do not help.

Seriously, Is this normal? What does this tell me? I should not appear for
Google interview and waste their and my time.

Some of the replies here suggest that Googlers just push protobufs? Damn, that
is one hell of an interview to push protobufs around :(.

Glad, atleast they are upfront about puzzles, so that's good.

~~~
linza
I don't work for Google and i haven't interviewed with them. In our company
(low level systems engineering) we ask similar question, with the following
rationale:

I don't want to test if you can build systems, your resume already says so and
there is but enough time to assess this properly anyway.

But, can you be bothered to try to solve problems outside of your comfort
zone? Will you humor me as an interviewer for one hour with something that is
maybe new to you?

If you rise to the challenge and attempt to solve these problems,i extrapolate
to the systems engineering part.

~~~
arvinsim
I find this amusing because lots of people put bullshit on their resumes that
one has to filter them out.

I already have my hands full trying to filter out the posers and assessing for
culture fit. I don't have time to ask a candidate for some questions that
aren't related to the role at hand.

But hey, you do you.

~~~
linza
Fair enough, maybe we (rather small company in central Europe, but with gift
profile customers) are an outlier here but I'm my hiring experience there
weren't really any imposters. Usually they come from companies we know well,
it are new grads in which case the question of experience is moot anyway.

------
peterwwillis
I checked out the "cloud infrastructure" section and there's no challenge
questions or code snippets. It's less of a _" Tech Dev Guide"_ and more of a
_" Here Are Some Bookmarks I Found, Check Off The Ones You Read"_. It's not a
terrible idea, but more of a suggested reading list than a "guide".

There's at least 10 years of such articles and videos piled up on the
internet. Going through them all will take a long time, and even if it covers
working with Google products the way Google wants you to, it's not necessarily
the way you're going to use Google products at your company.

What _I_ really want is a single place where all of this can be documented,
first as overviews, and then deeper knowledge that isn't exposed by blog posts
or books, or even official documentation. I want an authoritative tech
encyclopedia built on knowledge shared by a community of experts.

I'm trying to cobble something like that together right now, but it's
surprisingly hard to organize in a way that isn't just a list of quick start
guides for tools. And then there's what you present first, and how. Do you
need to know Git merging strategies before you learn build pipelines, or can
you just make some assumptions and wait til later?

~~~
mtyurt
I've just checked the Cloud Infrastructure section and couldn't see your point
there. There are readings for fundamentals, then basic practices, then online
courses in udacity and kube-bootcamp, then step-by-step guides to deepen the
knowledge.

I think they have accomplished a good thing here: a curated list of sources to
get into the cloud computing/infrastructure world.

I don't think they can talk about every step in the development lifecycle, it
would be very very opinionated. It leaves the reader/developer no space for
elasticity and freedom of choice to what to learn/practice. After acquiring
the fundamentals, we should all choose our own path by discovering.

------
akhilcacharya
I'm impressed by the coding interview resource guide [0], which for once seems
to include questions of realistic difficulty for a new grad interview (if
slightly on the easier side).

[0][https://techdevguide.withgoogle.com/resources/types/coding-i...](https://techdevguide.withgoogle.com/resources/types/coding-
interview-question/?no-filter=true#)!

------
siliconvalet
"Why not follow one of these paths curated by university computer science
faculty and Google engineers?"

The fact that Google equates their engineers with university faculty is either
incredibly delusional or arrogant.

~~~
jsolson
Google employs a non-trivial number of former university faculty as
engineers...

~~~
joshuamorton
And a nontrivial number of current university faculty.

(Fei-Fei Li recently left, as a notable example, and I can name 3-4 profs from
my alma mater who are also employed at Google in various capacities)

~~~
jsolson
Indeed, and even stranger arrangements. I know one professor who comes to work
for us every summer (with hilarious HR boundary condition consequences every
year).

------
otras
On a similar note, Google used to have a "Guide to Technical Development" page
for students. It now redirects to this link, but you can still find it
archived [0].

[0]:
[https://web.archive.org/web/20160628051101/https://www.googl...](https://web.archive.org/web/20160628051101/https://www.google.co.in/about/careers/students/guide-
to-technical-development.html)

------
ramenmeal
Did a quick once over on the lessons titles, didn't see anything mentioning
SOLID or programming patterns and paradigms.

~~~
oxw
Patterns and paradigms can be taught easily on the job, and can be overly
specific. The "advanced programming" course teaches genuine problem solving.
Breaking down a problem into it's mathematical components to develop an
optimal solution. It builds you into a good engineer, not a programmer that
can spit out patterns to fit a problem.

------
gd2
Tried out cloud computing. Went to the first lesson, clicked the link for the
YouTube of the first video class, described as "What is the Cloud? Watch this
lively video for a quick overview of the Cloud landscape. Though it's a couple
of years old, it's a great intro."

But got hit with a "this video is not available" YouTube page. A YouTube
search for the same title brings up lots of possibles.

I'm hopeful about this.

~~~
myroon5
The link to
[https://priyankamandikal.github.io/posts/gsoc-2016-project-o...](https://priyankamandikal.github.io/posts/gsoc-2016-project-
overview) in 'Wikipedia accuracy review' also seems broken. Removing the
trailing slash seems to fix it

------
tgb29
The first video for the Cloud Computing path, 'What is the Cloud?', is
unavailable:

[https://techdevguide.withgoogle.com/paths/cloud/what-is-
the-...](https://techdevguide.withgoogle.com/paths/cloud/what-is-the-cloud/#)!

~~~
pmontra
And the videos in the ML course don't play for many people.

[https://support.google.com/machinelearningeducation/thread/5...](https://support.google.com/machinelearningeducation/thread/51878)

All MOOC sites have videos that play well in every browser. Google makes money
by selling something else so apparently it doesn't care much about the quality
of this site.

------
known
Indian data scientists prefer learning from YouTube over IIT’s online courses
[https://qz.com/india/1498100/why-indian-techies-prefer-
youtu...](https://qz.com/india/1498100/why-indian-techies-prefer-youtube-over-
iit-and-iiscs-courses/)

------
MikeLui
Is withgoogle.com a new subset of educational resources from google? Going
directly to withgoogle.com just redirects me to google.com. My first instinct
was suspicion when I saw the link.

~~~
adtac
It's legit. Also used for GSoC:
[https://summerofcode.withgoogle.com](https://summerofcode.withgoogle.com)

------
jhcl
Are there sections on ethics and respecting an individuals privacy in there?

------
fhdhehfhzhe
wtf is this?

[https://techdevguide.withgoogle.com/resources/former-
coding-...](https://techdevguide.withgoogle.com/resources/former-coding-
interview-question-flatten-an-iterator-of-iterators/#)!

What a shit interview question.

~~~
saagarjha
Why do you think so? It seems to me to be a reasonable question to ask that
can be written in the time frame of a typical interview.

