9 ms·
It appears the OP describes his experience as a college student (presumably full time) at Stanford. As someone with a bit more atypical college background, who
by ZanyProgrammer 9y ago
It appears the OP describes his experience as a college student (presumably full time) at Stanford. As someone with a bit more atypical college background, who now works, the idea of devoting so much of my free time to studying boggles my mind. Programming 9-5 everyday makes me much less likely to want to do any coding when I get home.
And it really sucks that being a full time programmer isn't remotely sufficient experience for any kind of technical job interview. I'd be laughed out of the office if I suggested we write BST algorithms on whiteboards.
- phil21 9y agoThis doesn't even get into the fact that exceedingly few programming jobs need to know anything resembling advanced computer science theory. Probably less than 5% in my limited experience.
- frozenport 9y agoFurther those 5% move at a glacial pace, you could be given a week to write or improve a BST.
- yazaddaruvala 9y agoI do believe we need a better system for interviewing candidates. However, I strongly disagree with your statement! I work on distributed systems day in and day out, and more and more I find that I'm using or building distributed data structures analogous to BST, HashTable, etc. Not knowing the foundations of my field in and out would be a mistake!
- johnnyb9 9y agoHow many programmers work for Facebook, Google, Amazon, etc and how many work for non-web scale companies? As a professional programmer in financial services I have never had to use a red-black tree, min heap or do anything more advanced than properly using a HashTable.
- yazaddaruvala 9y agoOk, I'll try and use an example from financial services: Disclaimer: Never worked in financial tech, I have thought about this problem for 5 mins. This is unlikely to be an optimal solution to keeping a sorted set of distributed data. I'm just trying to show how basic knowledge of data structures helps in the field of distributed systems. Lets say you need to keep a sorted set of sooooo much data that you cannot keep it all on one machine. I would imagine all financial services firms have some custom datastore which has "potential buy orders" and need to keep them all sorted by profitability to efficiently search/insert/remove from that datastore. In such a situation, my instincts would be to create a distributed, redundant Heap. Now, how do you build a distributed, redundant Heap, without understanding how a Heap works? How do you even know what to look for if you don't know what a Heap is? Now, lets say you've built it such that each node in your distributed network acted like a node in a Heap, and the left "pointer"(i.e. url to other computer) meant "less than" and the right "pointer" meant "greater than". Now you have this data store in production and all of a sudden you realize performance worsens over time... "WHY is this happening? Is there some memory leak?". You investigate and realize that all of your data isn't being distributed evenly! "Do I need to like.. shuffle the data around? How do I get it so that the data is evenly distributes?" At this point if you do not know what a red-black tree is, what do you even google look for? Lets say you dig around for a while and find out about re-balancing trees. Now you have to implement it, and eventually you figure out that one of the best ways is to color your nodes. When a future colleague/manager asks, "What is this system, please describe it to me?" wouldn't it be nice to just say "Oh visualize it kinda like a distributed red-black tree. It holds XXX data, and ensures that it is always sorted and re-balanced for optimal performance."
- nerfhammer 9y agoFWIW finance normally uses big relational databases (because you absolutely need strong transaction support), something else off-the-shelf, or Microsoft Excel.
- fragmede 9y agoOf course there's some sort of B-tree somewhere in the stack; that's not the question. With dozens of database stacks to choose from, many companies won't have anybody actively and regularly working in the database's code, nor in the OS kernel code either. If, then, an individual can successfully contribute to the company without ever hearing of a red-black tree, what's the value in testing for it, past "this is how we've always done it"? (How long it would take someone who doesn't know CS lingo to string together "tree" and "balance" and plug that into Google, I don't know, but I suspect it's not impossible to find.)
- dagw 9y agoexceedingly few programming jobs need to know anything resembling advanced computer science theory There's "need" and there's "need". The person without the solid computer science background may very well be able to solve all the problems at hand, but the person with the solid CS background is far more likely to come up with the fast elegant solution that doesn't fall over in obscure corner cases. To use a concrete example for early in my career; I spent days and days trying to solve a problem by building a bigger and bigger pile regexps and if-else statements. Then my project manager (who had a PhD in CS) came along a just wrote a custom parser that solved the whole thing.
- arvinsim 9y agoYou don't need to know how to implement a parser to recognize it as a solution to a problem. And there are already libraries and tools for building parsers anyway.
- sanderjd 9y agoThe hard part isn't building the parser, the hard part is recognizing that a parser would be a good solution to the problem and distilling the problem into a form for which the solution works. One of the main purposes of a college degree is to come out knowing a lot about what you don't know. That is, knowing a lot about what sorts of things exist, even if you don't know much detail about any of those things.
- majormajor 9y ago> the fast elegant solution that doesn't fall over in obscure corner cases This can go both ways, though. Sometimes the fast elegant solution is too elegant for the nasty corner cases and a much bigger, uglier, but ultimately straightforward procedural block of crap is better. The examples I've seen are from established businesses that occasionally slipped up in refactoring out hacks that were introduced to support deadline-driven requirements. A year or two later, that hack is powering the reporting for a huge portion of the traffic, and you have to be able to balance between (a) writing maintainable code that supports the hack for the short term and (b) working with the rest of the business to clean up the requirements so you can improve the system for the long term. (b) is a skill that most interview processes I've seen completely ignore. And (a) often is downplayed (as "simple" or "easy") compared to more clever tricks - but knowing how to do the clever tricks might turn into a temptation to use them more than you should.
- bpodgursky 9y agoHaving basic algorithmic competence (and yes, BSTs + BFS/DFS are basic) is like knowing how to swim. Maybe you aren't near water or writing performance-sensitive code 95% of the time, but the 5% of the time you're in over your head, being able to implement (or identify when to use) basic algorithms will save you a whole lot of time, money, and headache.
- haskellandchill 9y agoIt's kind of how things work in our industry and I find it very frustrating. Once I became a "Front-end Engineer" I had to work like crazy to be "Backend" and then lucked into "Operations". Now I'm "Full-stack" but only a "Web Developer" so I can't do any cool ML stuff or data engineering or embedded or whatever. I have to do it in my free time and I'm exhausted most evenings. I do sacrifice my weekends! Yay!
- sargun 9y agoFrom the management perspective, how else would you handle this? I.e. Allocation of resources? It's very difficult to reason about global resource allocation. In addition how do you deal with resource mapping and best fit during allocation? I think the multi-level allocation model works better than anything anyone else has suggested.
- haskellandchill 9y agoWhen I am a manager I will develop my people. I will hire them by getting to know them. I will encourage conference attendance and networking as well as outreach to study groups. Let's lift each other up and build welcoming communities of practice. Not sure what your reference to multi-level allocation model means.
- deleted 9y ago[deleted]
- Aeolun 9y agoI'm not sure conference attendance does anything worthwhile. It doesn't harm, but in my experience conference attendance only serves to pique interest in new/different technologies, not in actually learning it.
- objclxt 9y ago> And it really sucks that being a full time programmer isn't remotely sufficient experience for any kind of technical job interview I won't name names, but at least one large tech company in the bay actually runs evening classes for people interviewing (classes that are run by somebody very well known in the interview prep field: these aren't cheap sessions run by somebody internal). When I found this out I could only laugh: I assume the HR department looked at the number of people flaming out of the interviews and thought "what could we do about this?"...and rather than treating the symptom (changing the way that they interview) they treated the problem instead (even more prep).
- stale2002 9y agoLet me guess. The company is Google and the interview prep person is Gayle from cracking the code interview.
- poikniok 9y agoClose, I think the company is Facebook.
- tdeck 9y agoSounds like something Facebook would do. When I interviewed they told me that even though I was an industry candidate, they always try to make sure everyone gets two weeks before the interview to study. I don't know how this didn't set off BS detectors internally but there you have it.
- Black-Plaid 9y agoGoogle actually does this in their Seattle location.
- patch_cable 9y agoGoogle offered classes in Seattle when I interviewed with them. My reaction was the same as yours.
- austincheney 9y ago
- unoti 9y ago> the idea of devoting so much of my free time to studying boggles my mind. Programming 9-5 everyday makes me much less likely to want to do any coding when I get home. I can sympathize, but I suggest long term you figure out a way to get over this sentiment. If you plan to work in the industry for any length of time you absolutely must study to stay employable. With few exceptions almost every segment of the industry changes how it does things about every six years. What you do now will be pretty out of date in mid 2020. I've been working as a programmer since the late 80s. If I step back in six year increments and look at the technologies I was using, here's what I get: 2011: Python, Django, MySQL, Jquery, Mercurial (not Git). 2005: PHP, CakePHP, MySQL. 1999: AIX, PowerBuiler, VB6, FoxPro, Access 1993: DBase 3, 8 bit embedded systems (68HC11) At every stage of my career people I've known said there was no need to go learn new stuff. What they're doing will always be in demand. I'm talking about people doing things like ANSI 77 COBOL, RPG/3, and system 36 assembler. They were probably right, I'm guessing there's some orgs out there still using that stuff. But the options get smaller every year. If you want to have your pick of the best opportunities available and be in control of your own destiny, and want to work in the industry more than 5 years, you're going to have to train yourself. It'll help if you figure out a way to enjoy the experience and have fun with it.
- baddox 9y agoI'm not attributing anything to either of your claims, but I'll claim that there's a big difference between staying fresh on CS interview stuff and staying up to date with production stacks. Both are probably necessary for maintaining employability at the interview stage to some extent, but the latter is a lot more reasonable than the former. You'll use modern stacks in most new jobs, but you won't use CS minutiae in most new jobs.
- ZanyProgrammer 9y agoThat's different though. Its like comparing learning Angular 2 or MongoDB with grinding through Cracking the Coding Interview. Sure they both involve doing stuff in your spare time, but the former can be (or made to be) much more interesting than regurgitating algorithms.
- Spooky23 9y agoIt's buyers market, so the interview as hazing technique works just fine.
- dkarapetyan 9y agoSince when is it a buyer's market?
- Spooky23 9y agoIf employers can get away with the bullshit that they do, it's a buyers market. In my personal experience, I've rarely had problems hiring qualified candidates, and my employer doesn't pay particularly well, and isn't located in a particularly large market. A company like Google who does pay very generously needs to narrow the funnel just to get the pool down to an actionable number.
- reggylong 9y agoTransitioning to working full-time has made me realize how much more freedom I had with my time as a college student. That being said, you don't need to spend too much time studying for interviews (~30 minutes a day for a few months is more than sufficient).
- tsiki 9y agoReally? I have the exact opposite experience, I feel much more free to study and work on whatever I want now that I graduated. I would always feel bad for working my own stuff instead of just working on the class project or homework.
- majormajor 9y agoIt's really unfortunate that motivated people spend so much time matching themselves to what companies look for. Gives the top companies a lot less incentive to reevaluate their own processes. But it gives you a great opportunity if you're a less well known company without the same name recognition. If your process is the same as Google's, you'll have candidates picking between the resume stamp that is a stint at Google and your offer. If your process is intentionally somewhat different than Google's, but tailored to your own immediate needs, you'll have a wider pool.
- deleted 9y ago[deleted]