15 ms·
Google Tech Dev Guide
- lwansbrough 8y ago"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.
- duality 8y agoSo you like the algorithms and data structures used to build a distributed collaboration system with event sourced data in Microsoft Orleans, but not the algorithms and data structures used for string search.
- lwansbrough 8y agoHonestly I don't care about the algorithms and data structures used for string search, or event sourcing for that matter. I use that code to build stuff. There's a vanishingly small portion of the population devoted to these problems, and indeed most of those people are probably working on search at Google or something similar. Calling them "foundational" is a joke. They're important, absolutely -- we all use them daily. But expecting every developer to be able to implement a search algorithm? That's the kind of dumb interview question I'd walk out on. Programming is much more than algorithms. Algorithms are the tools we use to build problems. You don't expect a tradesman to build his tools himself, do you?
- MikeLui 8y agoWhat would you consider foundational?
- lwansbrough 8y agoAlgorithms aren't foundational, in my opinion. Once you understand the syntax of programming, you can start learning about the applications of that syntax, which for 99% of developers rarely ends up in the shape of an explicit algorithm. It's not all bad, debugging is foundational for sure. I'd place a person's debugging skills, their ability to predict bugs, system design, knowledge of common (applicable) libraries (more so knowing when to use them, not method signatures), and perhaps even ethics above algorithms. Probably many more but there's a couple to start. Having never needed to build my own sorting algorithm in 14 years of coding, I'm pretty confident I don't need an engineer who can do that, either.
- gowld 8y agoYou seem to have a nonstandard definition of "foundation". It doesn't mean "introductory" or "beginner"; it means "what everything else is built upon".
- lwansbrough 8y agoI’m thinking of it more as foundational from the perspective of a programmer’s skill set, not the code itself. So in that sense, your ability to debug is foundational to your ability to code anything more than the most basic programs. Granted, they do provide both of those paths.
- saulrh 8y ago> Having never needed to build my own sorting algorithm in 14 years of coding, Neither have I. What I have had to do is recognize when I could do what I needed to do without sorting the array, understand various requirements when I'm writing comparison functions, understand why std::list::sort exists when std::sort is right there, debug a stalling mapreduce job, recognize when a library I'm using has done a stupid and written an intrusive data structure that sorts in N^2, etc. Are you seriously claiming that you'd be able to do any of that if you didn't know how sorting algorithms worked? If those things aren't in the documentation, or if you run into the intersection of that thing and some other issue, you're hosed unless you know the math. For that matter, why are you so focused on sorting? You know what I have to write all the time? Tree and graph traversals. Why does it matter if I use a stack or a queue if my traversal will visit every node anyway? Why can I get away without maintaining a set of visited nodes in one case or the other? Hell, I have to implement something very much like a toplogical sort once a year or so. That's not something you'll ever learn by groveling over for loops in fifty languages. I agree that you rarely need an explicit "algorithm". What you do need, regularly and consistently and on a basic level to write correct code that is usable in the real world, is knowledge of algorithms. In a perfect world everyone would know from reading the docs and from staring at stack frames that their code gets slow when they use particular data structures and libraries. We do not live in a perfect world. The engineer that cannot write a single sorting algorithm is not the one that just uses library functions for everything and is fine in the end. The engineer that cannot write a sorting algorithm is the one that writes a jumble of for loops and you improve runtime from eight minutes to eight seconds by replacing it all with hashes. The engineer that cannot write a sorting algorithm is the one that designs an API that fundamentally requires server-side session state that grinds to a halt at ten QPS. These are people that I have worked with. In every case the fundamental issue was that they had "started learning about the applications of the syntax" and never studied formal CS theory.
- akanet 8y agoThat's certainly your opinion, but the subsequence problem is a very general, abstract question that offers the candidate a number of ways to arrive a progressively better solution by following their intuitions. It's not the greatest interview question, but it's certainly not the worst. This website appears to be for people who already know how to code, and offers many different paths as well.
- m0zg 8y agoIt doesn't. This seems like a typical Google interview question. If you didn't know how to solve it before the interview started, you aren't going to figure out anything other than a brute force solution in 45 minutes. And brute force solution will not get you a good grade in a tech interview at Google. It's idiotic: once you do get hired by Google, easily 80% of your work is copying one proto buffer into another, and the remaining 20% is mostly yak shaving and figuring out how things work in the absence of documentation. Dynamic programming should be the least of their concerns.
- ascar 8y agoThat's probably the issue with algorithm solving is not software engineering and if you mostly select on the first, you do not necessarily get good people in the second, broader and more important area. Then you end up with a terrible system to work with. It's like hiring construction engineers only based on their performance in structural analysis. Sure, it's important that the house doesn't collapse, but this will not get it build.
- snaky 8y ago> figuring out how things work in the absence of documentation That would be great interview test actually. Given a bunch of unknown code, add some simple functions, not breaking it apart. Keeping the style (not only syntactically) would be a bonus.
- m0zg 8y agoYes, I actually implemented such a thing at a company I worked at after Google. We'd give the candidate a fairly simple and self contained codebase, and ask them to add a simple, incremental feature in the span of an hour. No limits on legitimate internet access, stack overflow, etc, and using their favorite text editor (we had several already set up). This worked great for us, as it selects for people who can solve practical problems in code they're not familiar with, which is bulk of the work of any software engineer.
- jrochkind1 8y agoSeems like a pretty normal algorithms problem to me. Anyone that's taken a CS curriculum has done plenty of them.
- lwansbrough 8y agoYes, and that's just about the only time they'll do them. That's the problem.
- izacus 8y agoOnly if you work on something basic your whole career.
- jrochkind1 8y agoThe point is that simple exercises like that develop your algorithmic and computational thinking. You can't start out building an ecommerce site, you have to learn to program first. It's like... Karate Kid "paint the fence", it wasn't because Daniel's martial arts career was going to involve fence painting, heh. But because it developed certain skills. It would be a problem, I guess, if people found it so boring that it deterred them from learning (I don't know what the Karate Kid analogy here is; I think miyagi MEANT to make Daniel do something boring to prove himself, which is probably not appropriate for learning to program), then more interesting exercises might be beneficial. Everyone learns differently, but when I was learning, I found exercises like that fun myself. Because I enjoyed programming, the same way some people enjoy crossword puzzles (I don't). Of course it was a long time ago, perhaps "kids these days" require more flashier puzzles, I don't know. I'm a better programmer for having taken a 'compilers' course, but I've never written a compiler since and probably never will again (but who knows). There's a reason "foundations of programming" are foundations. It's not because you will do those tasks again in your career. But because they will teach you concepts and methods and skills you will use forever.
- akhilcacharya 8y agoI think it would have been much more useful for me if I had learned to code this way. I've compared the CS curriculums at top schools and lower tier schools like mine - the difference in content and breadth is very real, and a significant part of why folks from top schools have the careers they do.
- fatjokes 8y agoI'm glad you do cool stuff day to day and not need this. But I would disagree that what you do is foundational, whereas string matching is absolutely foundational.
- lwansbrough 8y agoString matching, like == or string.compare? Anything more complicated than that and you're not building anything that isn't already available.
- steve_musk 8y agoThe point isn’t to build something new, but to learn CS foundations. Being able to think through this type of problem is absolutely worthwhile.
- komali2 8y agoWhy is it worthwhile? Given finite time, a person could instead learn how to use a new established framework, API, or even programming language.
- mav3rick 8y agoBecause APIs and languages change every few years. Concepts and foundations don't. If I move to a company using a new language, I am good enough to pick it up because the design of my sofware is more about the data structures and their interactions.
- deleted 8y ago[deleted]
- losvedir 8y agoHuh. I was thinking it seemed like a fairly reasonable question. You sort D by length, and then iterate through it doing a kind of string matching. Both of those operations are pretty "foundational" in programming, right? I'd be curious what you think a better question would be. It's not for brand new programmers - it says the pre-req is a couple of previous computing courses.
- teraflop 8y agoNope, that would find words that are substrings, not subsequences.
- Waterluvian 8y agoWhat is a subsequence then? I thought you are looking for words that show up in the long string. I visualize sliding each word across the string until it lines up with the same characters.
- tylerhou 8y agoThe subsequences of a string X are any strings Y such that Y is X with zero or more characters dropped, with the condition that the original characters of X must remain in the same order. As an example, the string "help" has 16 subsequences: ["", "h", "e", "l", "p", "he", "hl", "hp", "el", "ep", "lp", "hel", "hep", "hlp", "elp", "help"]. Note that the set of subsequences are isomorphic to the power set (assuming repeated characters are unique), so for a string with n unique characters, there are 2^n subsequences.
- Waterluvian 8y agoOkay gotcha. So for each word in the length-sorted set, walk the string "picking up" characters as you go. If you complete the word, that's your answer. I'm sure there's a faster or more mathematical answer. But that would be my napkin python. (Edits made)
- 8y ago
- chiefalchemist 8y agoI think it depends. Are you looking for someone who knows say the "perfect" answer? Or do you want to measure someones analysis / problem solving skills? It's not always about the ends, sometimes it can be about the means. Maybe not the case in the context of Google, but still worth mentioning. I would think.
- macspoofing 8y ago>currently I'm building a distributed collaboration system with event sourced data in Microsoft Orleans I know it's easy and fun to use frameworks that abstract all the gory low-level details (the equivalent of calling a built-in sort function on a list of numbers), but somebody has to write those frameworks at some point. Don't get me wrong, I'm certainly impressed with the work that the Orleans team did and it would be great to read a write-up on the design of this framework. I suspect a write up on your 'distributed collaboration system with event sourced data in Microsoft Orleans' would be less interesting because the best part would read 'and here I used Orleans to do all the hard parts'.
- lwansbrough 8y agoThat's precisely my point. There's a handful of guys at Microsoft building this awesome framework. Anyone else interacting with it needs to understand some details of the framework but it's mostly abstracted away from them. And those developers can be exceptionally well suited to their jobs without understanding the underlying algorithms that make Orleans work. Calling the algorithm design "foundational" is like saying it's foundational to understand how an intake manifold is designed in order to build a car. You could have the best intake manifold designers in the world and still build a shitty car around it. Foundational programming advice and tutorials should focus on making developers the best at building cars well, and leave the "manifold design" to the 1% who need to do it.
- macspoofing 8y agoI think my issue is an attitude that celebrates ignorance. >Calling the algorithm design "foundational" is like saying it's foundational to understand how an intake manifold is designed in order to build a car. Here's a big picture view, the most talented developers I know have a very good mental model of low level details, and also tend to be pretty good at algorithmic questions. I don't think that's a coincidence. I know that day-to-day programming tends to consist of solving rudimentary problems and worrying more about high-level code organization and architecture rather than micro-optimizations of some function. But it has also been my experience, that even in those cases there will be times when you will run into a problem that will require you to put together an algorithmic solution with a data structure you learned way back in uni that is analogous to the kinds of puzzles you disparage. As a challenge, why don't you try to do one of those puzzles per day for a month - I guarantee you will find value there.
- h8liu 8y agothat is a classic textbook dynamic programming (or suffix tree, depends on the size of the set) problem. behind the puzzle, it is the thought about dividing one bigger problem into smaller ones, and hence solve them with code efficiently. maybe that does not sound too far from your day-to-day coding. the site probably should have presented these puzzles from a different perspective, so that it is easier for people to recognize the message about what kind of programmer skills and mindset it is looking for.
- saulrh 8y agoFunny, I use this kind of thing all the time when I'm programming. I wrote a comment citing the pigeonhole principal to justify a test case not thirty minutes ago. And I'm not even doing anything wizardly or revolutionary, just improving some concurrency code in a random worker binary. As for your comment about "diversity of thought": These problems seem sterile when they're presented in the most general possible form with all the formal trappings. The subsequence problem is at the core of diff(1), for example, and it feels more interesting in some way to dig into that past reading and applying your diffs like usual. But if you try to present it as "it's diff(1)" you will only get people that already know what that means. "It's a simple spellchecker", "reassembling DNA", "disentangling two books that have been mixed together", etc, these specializations all introduce additional dependencies and restrict the availability of the lesson. Anyone can read "a string S and a set of words D". It may not be optimized for you, but who cares about what you think is boring or not? You already know this math. Personally, I gleefully soaked up everything my undergraduate algorithms classes offered, even the AVL trees and all that other random circles-on-a-whiteboard stuff, because I was learning something in its purest form. And if I needed more meat? Whatever I was learning from would have mentioned, as an aside, that it was also diff and DNA and spell-checking, and I could pick and choose from those as appropriate. Finally, would you have reacted anything like this if the page had been spat out by your favorite Ruby super hacker wizard greybeard man? If it'd been an artisan webpage hand-crafted in the hipsterest coffee shop in oregon? If it's been on microsoft's recruiting page?
- SmirkingRevenge 8y agoIt would be interesting to know how much time and practice it took the inventors of many of these algorithms, to actually create them. When you think about it... that's basically what candidates are being asked to accomplish in these kinds of interviews, unless they have the algorithm (or a very similar one) memorized already. Would we be surprised to learn that most of the smart guys behind these algorithms probably didn't come up with them in 40-ish minutes on a chalk/white board?
- Alex3917 8y agoAs an anecdote, Dr. Krebs had no idea what the Krebs cycle was without looking it up, even though students are expected to memorize it.
- ascar 8y agoI agree with you that a non significant number of developers need this kind of problem-solving ability for their daily work, but I would disagree that they never need it. And when they do it can have huge impact. There are many applications of these fundamental problems in system building. They are usually not as obviously in your face as the coding interviews and it is often not possible to let a library do that stuff for you. That's why it's beneficial that every developer who might have to do this stuff, is capable of doing it. E.g. it's a common problem to have a list of objects A and another list of objects B and you want to find all elements in B that match an element in A. The naive approach is thinking of 2 boxes with balls of different color. You pick one from the first box and compare him one by one with each ball from the second box. This is equivalent of nesting two loops and has a runtime complexity of O(n*m). But this problem is absolutely solvable in O(n+m) with added memory of O(n) (or m, pick the shorter list), by creating a hashmap and then iterating once. The difference in real world performance is huge. I optimized a small system dealing regulary with about 20mb of translation data from a 20 minute runtime to a few seconds. Not for a tech giant, but for a small webshop with about 100 employees.
- lwansbrough 8y agoMy thought process: 1.) this is an intersection problem, 2.) what does a quick search have to say about efficiently solving an intersection problem in $language? That thought process does not require any algorithm knowledge. That knowledge is already out there in abundance, and there are enough people smarter than me focused on those problems that I am wasting everyone’s time by implementing a solution myself. (Btw the answer in C# is LINQ, if you wrote an algorithm yourself I’d call you a bonehead and tell you to rewrite it. I suspect the answer is similar for any other language that has a standard library.)
- mav3rick 8y agoAnd what if you don't have a standard library ? You're working on a new device, on a new language ?. Frameworks breed programmers with less adaptability, foundations breed problem solvers that can adapt across problems.
- deegles 8y agoAlgorithms are tools. Sure, maybe a hammer isn’t interesting in and of itself, but the things you build with one certainly are.
- lwansbrough 8y agoSo tell me how learning how to make a hammer (or the physics behind it) is beneficial to the average woodworker or construction worker’s daily job. Sure, using prior knowledge of physics to optimize your hammer swings might be worth while for the guy swinging a hammer a million times a day, but most of us are happy just picking the hammer up and using it to get the job done.
- jorblumesea 8y agoThese problems appear in every comp sci text book. For example: https://ebookclass.com/product/algorithms-4th-edition-4th-edition-ebook-pdf/ https://ebookclass.com/product/algorithms-4th-edition-4th-ed... Chapter 5 has multiple pages devoted to string algos and problem solving with strings. https://algs4.cs.princeton.edu/50strings/ https://algs4.cs.princeton.edu/50strings/ I don't think it's fair to blame Google for something that is fundamental for computer science students.
- adrianN 8y agoAnd yet "I open any textbook and look for the matching algorithm" is not an accepted answer to this question. You're supposed to either invent the algorithm from scratch or memorize interview problems and be lucky.
- kamaal 8y ago>>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. This. Many times. When I first started learning programming. I picked up 'Learn C in 21 days' By Peter G. Aitken- Most other friends at college picked up more technically intense books. I agree I took a good 2 months to get through the book. But I was the only one who travelled 2 months with the subject. By the end of the 2 months I had written several programs, gained a lot of confidence that I can code. Many people quit a lot early with their books. These days when I want to learn to some thing new. I use the same approach. I pick the dumbest possible books and solve the dumbest possible problems. And then when Im months deep in with the subject, I move towards enlightenment.
- cromwellian 8y ago(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-compressed.html http://timepedia.blogspot.com/2009/08/on-reducing-size-of-co...) 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-problem-and.html http://timepedia.blogspot.com/2009/11/traveling-salesman-pro... 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-solve-with-google-one.html http://cromwellian.blogspot.com/2006/09/puzzles-you-cant-sol...) 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.
- doctorpangloss 8y agoPeople litigate this endlessly. You're still at the second tier of the Expanding Brain Meme of this problem (the first is to do the problems and get the job). What does it say about a person who's smart enough to know that the problems are meaningless but they study for them anyway? Why might that particular kind of conformity be valuable to a huge corporation?
- cantthinkofone 8y agoI would argue your perspective boils down to what is the best standard way to teach programming skills. No one should stop learning from as many valid sources as possible. And it's not an easy problem for anyone to solve. The underlying issue with the problem is that there is probably no one size fits all approach. Individual variability might as well be immeasurable. The best you can do is put out as much valid information and schemas as you have in approach to a solution to the problem. Tricks of the trade, heuristics, best practices. A full fledged scientific understanding of how the brain assimilates coding knowledge hasn't been established. It may not even be known if our knowledge of the brain is adequate enough to begin that research. As the history of computing has changed over the decades, the nature of coding changed as well. More and more abstraction has been layered and now it's easier to code than it ever has been. It's like all these macros have been set up so that the programmer only has to work at one level. Google is naturally going to promote its own system, but it is not Google's responsibility or role to claim to present some final statement on how to approach it. Regardless, so much knowledge that used to be stored only in people's heads has been offloaded onto software, and the nature and requirements of coding have changed with it. On top of it all there may simply be too much of it (computer science, mathematics, programming languages) for any single individual to learn it all in a strict completist sense.
- jldugger 8y ago> 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 I'm not entirely sure who this guide is written for. But if we're playing the 'nobody does this in real life' card, I wonder which would be a tighter filter for new CS grads: this dynamic programming questions or writing a regex with capture groups.
- sirpunch 8y agoIn case you think these questions are not actually asked in Google interviews, I should add that I was asked this very question in Google SDE interview just 6 days ago. I failed to answer this and was consequently rejected. Also, the interviewer asked me nothing other than this question. Nothing about the breadth of work that I have done in different sectors, my interest/passion, personal projects etc. I was so upset after the interview was over and I cried a lot after reaching home. :(
- UweSchmidt 8y agoThe market for IT folks is excellent and there are many many great companies out there, most of them not very famous. If you've gotten an interview at Google you will definitively find work elsewhere.
- lioeters 8y agoWow, an interview should never be so traumatic.. Your experience shows how much the process is broken, one-sided and blind to a person's value and potential. I know it's no consolation, but recently I saw a site with many brilliant people sharing their rejection stories: https://rejected.us/ https://rejected.us/ It just goes to show, if a company cannot see your real worth, don't let it get you down, keep going and prove them wrong.
- black-tea 8y agoWhy should they consider somebody's "potential"? They wanted someone who could solve that problem. He wasn't that person. It's as simple as that.
- pathseeker 8y ago>I was so upset after the interview was over and I cried a lot after reaching home. :( Yep, this is a side effect of the image Google portrays combined with the idiotic interview process. They cultivate an image of being prestigious both internally (the NIH syndrome is extreme) and externally. They claim that all external experience is irrelevant once you start at the great big G (which is bullshit, but that's beyond the point) so you will just be interviewed on "fundamentals". So you go in and do you interview, and all of the interviewers ignore your 20 years of developing guidance systems for rockets at NASA and have you write algorithms on a whiteboard to find palindromes or overlapping rectangles while the interviewer emphasizes that the code will be photographed (so don't fuck up the syntax!!). At this point, an org you think is prestigious has convinced you that your only relevance in the big leagues is these whiteboard questions, which you fumble on because you haven't been grinding on leetcode for the last 2 months. REJECTED. A snap judgement based on your public performance skills has deemed you incapable of handling the very fundamentals of engineering. So what is it you've been doing your whole life? It's no wonder people cry.
- deleted 8y ago[deleted]
- ___alt 8y agoTo give a counterpoint, the lack of basic algorithmic knowledge of a developer in my team cost us a nasty production performance bug. I agree that whiteboard algorithms are not exactly our typical day work, but I'm fine with them being "foundations", things at back of your mind and you can conjure when needed.
- bicubic 8y agoIf a single developer was able to cause a 'nasty' anything, your engineering process is completely wrong. It should have been caught at architectural discussions. It should have been caught during performance benchmarking. It should have been caught at code review. Didn't do any of those things? Don't blame the developer. No single individual encompasses all knowledge required to adequately address all of your tasks. Someone with the foundations you want could just as easily have fucked up something else.
- cwilkes 8y agoI can’t upvote you enough. The retort to this is usually along the lines of “we are moving fast and need people to write 100% correct code”. Perhaps that’s the case, but the solution is to put guidelines down (api review, unit testing, etc) instead of demanding people be infallible. In this case a reasonable test case beyond “Did it compile?!?” Would have caught this.
- deleted 8y ago[deleted]
- ___alt 8y agoIn this case the two points where we should have caught the issue would have been: * Integration testing with a specific data set that was different from actual production data. * Code review (they're not systematic yet but we're working on that) because the faulty code had a sketchy section and the conversation around it would have lead to a better version (that's what actually happened when fixing the bug)
- 8y ago
- mFixman 8y agoThis is the CS equivalent of "maths are useless since I'll never use them in real life". Even if you are a software engineer who works exclusively on Javascript you need to understand the basic of how things work.
- thecatspaw 8y agoMath isnt useless. But you wouldnt ask an english teacher math questions at an interview, would you?
- devocracy 8y agoMost math is useless to 95% of the population. I can't remember the last time I used any of the teachings of my calculus heavy undergrad.
- joshuamorton 8y agoRemembering the chain rule is useless sure, but concepts like how integration works, Newton's method, Bayes rule, and a comfort with calculus-y concepts help me in my job all the time, when reasoning about problems and understanding systems.
- yorwba 8y agoHundreds of replies in, nobody seems to have noticed that the question is tagged "machine learning".
- superlopuh 8y agoMy first job out of school was writing a spell checker/auto completion system. If you want to weigh predictions by the expected number of keystrokes saved. This is a bit like the opposite problem, find the longest word D that is a supersequence of S (You want to find them all, to weigh by probability), but would essentially be solved with the same data structures. I assume that this sort of problem is not particularly rare, and is unlike sorting in that it's not quite as universal, and the one line function doesn't live in the standard library, or any package that I could find. The fact that the algorithms were still fresh in my mind helped immensely.
- kvhdude 8y agoThese are pattern matching questions. They test how well one remembers a pattern and apply it. It is a skill but not sure how useful it is in the age of google. This is how IIT JEE (test for engineers in india for darkening IITs) was cracked by brute force pattern matchers who start at kindergarden. The resulting product does not bode well from my anectdotal experience interviewing and working with them.
- Mauricio_ 8y agoYou sound like the kid in school that always asked "are we ever going to use any of this in real life?" in math class. Truth is I never needed to derive a function outside of school or college. Was learning about derivatives in high school a waste of time? I can't explain why, but I want to say no, it wasn't. Also, many times this puzzles are useful in tech interviews to see if the candidate has good analytical skills, which is what is needed.
- akhilcacharya 8y agoI'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-interview-question/?no-filter=true# https://techdevguide.withgoogle.com/resources/types/coding-i...!
- MikeLui 8y agoIs 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 8y agoIt's legit. Also used for GSoC: https://summerofcode.withgoogle.com https://summerofcode.withgoogle.com
- mahmoudhossam 8y agoIt's not just for educational resources, see https://hire.withgoogle.com/ https://hire.withgoogle.com/
- agustif 8y agoNot really new domain https://news.ycombinator.com/from?site=withgoogle.com https://news.ycombinator.com/from?site=withgoogle.com
- tgb29 8y agoThe first video for the Cloud Computing path, 'What is the Cloud?', is unavailable: https://techdevguide.withgoogle.com/paths/cloud/what-is-the-cloud/# https://techdevguide.withgoogle.com/paths/cloud/what-is-the-...!
- ronilan 8y agoat https://techdevguide.withgoogle.com/explore-cs/ https://techdevguide.withgoogle.com/explore-cs/ Both links to careerswithcode.com are broken.
- pmontra 8y agoAnd the videos in the ML course don't play for many people. https://support.google.com/machinelearningeducation/thread/51878 https://support.google.com/machinelearningeducation/thread/5... 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.
- gd2 8y agoTried 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 8y agoThe link to https://priyankamandikal.github.io/posts/gsoc-2016-project-overview https://priyankamandikal.github.io/posts/gsoc-2016-project-o... in 'Wikipedia accuracy review' also seems broken. Removing the trailing slash seems to fix it
- ramenmeal 8y agoDid a quick once over on the lessons titles, didn't see anything mentioning SOLID or programming patterns and paradigms.
- oxw 8y agoPatterns 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.
- oculusthrift 8y agoi work at google but have no idea what solid is. but i can do dynamic programming. i guess it’s what they select for
- otras 8y agoOn 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.google.co.in/about/careers/students/guide-to-technical-development.html https://web.archive.org/web/20160628051101/https://www.googl...
- deleted 8y ago[deleted]
- deleted 8y ago[deleted]
- peterwwillis 8y agoI 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 8y agoI'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.
- QML 8y agoThis sounds like a community Wikipedia – keep me updated though!
- siliconvalet 8y ago"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 8y agoGoogle employs a non-trivial number of former university faculty as engineers...
- joshuamorton 8y agoAnd 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)
- oculusthrift 8y agowhy? university faculty isn’t all that impressive? they are usually just people who made the choice to stay in school longer while others wanted to do something useful right away. many google engineers are phds. but once again this doesn’t mean anything
- fhdhehfhzhe 8y agowtf is this? https://techdevguide.withgoogle.com/resources/former-coding-interview-question-flatten-an-iterator-of-iterators/# https://techdevguide.withgoogle.com/resources/former-coding-...! What a shit interview question.
- saagarjha 8y agoWhy 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.
- acroback 8y agoI 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.
- izacus 8y agoGooglers push protobufs around the same way you just push packets around with all your expertise. It's very easy to be reductive when you decide to ignore the complexity that pushing around packets / protos hides in real world.
- linza 8y agoI 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 8y agoI 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.
- withhighprod 8y agoSeems lots people with PhDs and lots experiences are pissed off because full time new grad leetcoders could beat them in Google coding interview
- jhcl 8y agoAre there sections on ethics and respecting an individuals privacy in there?
- known 8y agoIndian data scientists prefer learning from YouTube over IIT’s online courses https://qz.com/india/1498100/why-indian-techies-prefer-youtube-over-iit-and-iiscs-courses/ https://qz.com/india/1498100/why-indian-techies-prefer-youtu...