15 ms·
A computer science study plan to become a software engineer
- milksteak42 6y ago"When a measure becomes a target, it ceases to be a good measure."[1] These coding challenges used to be a very good measure of ability, but now applicants are just memorizing the most common problems for each company. We're not at the point where these tests are useless but we will get there in the near future. The problem is that I haven't seen any good alternatives. [1] https://en.wikipedia.org/wiki/Goodhart%27s_law https://en.wikipedia.org/wiki/Goodhart%27s_law
- cole-k 6y agoThe same can be said for the SAT. Unfortunately there seems to be significant enough overlap between "good test taker" (or in this case "good interviewee") and "good worker".
- centimeter 6y agoStudying for the SAT won’t actually improve your score much on expectation, but taking it multiple times of course will increase your expected score (since they take the max). SAT is basically an IQ test, which is of course a reasonably strong predictor of white collar job performance (ceterus paribus).
- JoeAltmaier 6y agoI don't think its 'of course'. A study at the UofIowa showed only one correlation between tested psychological features and job performance (as measured by 1-year evaluation). It was 'conscientiousness'. That is, if you kept at a task until it was actually and fully done, your boss/coworkers valued your contribution. That's it. Not about being smart or educated.
- centimeter 6y agoThe conclusion of this IQ vs job perf paper is “it’s complicated”, but essentially every meta study they cite is pretty unequivocal that IQ predicts job performance. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4557354/#!po=0.480769 https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4557354/#!po=0.... The only room for doubt is in confounding effects like the fact that people with higher IQs are likely to enter more mentally difficult professions.
- indigochill 6y ago> These coding challenges used to be a very good measure of ability I'm skeptical. The stereotypical interview question involves reciting algorithms from memory, where the thing you actually want to know of a software engineer is do they appreciate how things fit together to meet the constraints of the project. > The problem is that I haven't seen any good alternatives. Something we've done before (and had good success with in hiring good candidates) has been to pose a real problem we're dealing with now or have recently solved (so the solution and problems are fresh in the reviewers' mind) and ask the candidate for their solution at a high level. Not whiteboard coding, though. Something like if I tell you we're trying to filter out strings that contain creatively obfuscated obscenities, what should we do in order to maximize true positives while minimizing false negatives (and as the candidate offers solutions, provide sample strings that would fail their solution and see how they adapt)?
- will_pseudonym 6y agoDo you mind if I ask what company you're with? I'd love to put it on my list of companies with good interview practices that I would want to apply to. If you're not comfortable with getting that specific, just for my personal curiosity, is it a FAAMG/big tech company, or other? haha :)
- indigochill 6y agoIt's definitely not silicon valley. Small European tech company, very much just making things up as we go.
- centimeter 6y agoI agree that the predictive power of jeopardy-style interview questions has collapsed. However, I think it’s still quite predictive to ask more design-oriented and less algorithm-oriented questions, especially if there is some leeway for creative choice. It’s also relatively easy to detect people who have simply heard and memorized the question, since when you ask them for extemporaneous expansion on some aspect of the question, they usually fall apart.
- MivLives 6y agoThe best coding challenge I had to do was when the company basically gave me a set of requirements, said build this. Took about an hour. Then during the interview, I was asked about my decisions, and blockers. Afterwards I was given another feature to add. This took another half an hour. I wish more companies would do this. The hardest part for me at least is staring at a blank document.
- catwind7 6y agodifferent companies need different skills and it changes even as a company grows. Part of the frustration about this entire process is that it feels very cookie cutter and sort of like a lowest-common-denominator type effort on behalf of companies. Huge companies like google are for the most part hiring people they can slot into almost any team in the org so it makes sense for them to place less emphasis on tooling expertise. They have plenty of time and money to upskill employees. The same can't be said for the vast majority of consumer start ups that really just need people who can rapidly prototype. Of course those groups are not mutually exclusive, I just think it's sad that everyone has adopted the approach that works for a select few companies
- deleted 6y ago[deleted]
- latenightcoding 6y agoclickbait title, this has no affiliation to google. edit: title changed now.
- sturza 6y agoI removed that part as i saw it's misleading
- mynegation 6y agoWhat is the relationship to Google, mentioned in the title here? Cannot find any reference.
- ptasker 6y agoRepo was created by this guy: https://www.freecodecamp.org/news/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13/ https://www.freecodecamp.org/news/why-i-studied-full-time-fo...
- ra7 6y agoPrevious discussions: https://news.ycombinator.com/item?id=12649740 https://news.ycombinator.com/item?id=12649740 https://news.ycombinator.com/item?id=15898263 https://news.ycombinator.com/item?id=15898263
- sxp 6y agoSpoiler alert: https://medium.com/@googleyasheck/i-didnt-get-hired-here-s-why-21f26d4784d5 https://medium.com/@googleyasheck/i-didnt-get-hired-here-s-w... > Last week I received a rejection email from the recruiter, and at first, I thought it was a mistake, and laughed it off. I checked in with my referral and he inquired into it and lobbied on my behalf, but in the end, it didn’t change the situation.... The thing that bothers me is that I didn’t even get a phone screen. I didn’t even talk to a recruiter over the phone. After all this work and enthusiasm, I didn’t even get a chance to prove myself.... After speaking with some folks related to Google, the best I can determine is that they decided to pass because there wasn’t a good fit on any teams where I might be qualified. This is in agreement with the rejection email I received — there were no roles fitting my experience and background. > I’ve been hired as a Software Development Engineer at Amazon! Assuming you can get to the actual interview stage, the fastest option is to prepare by just grinding leetcode to maximize your chances of passing the interview. That won't help with aspects like the system design or behavioral interviews, but grinding leetcode will give you a better chance of passing the coding interview compared to studying CS theory.
- pksebben 6y agoI hate to nitpick, but your use of 'spoiler alert' here made me believe there might be some clever deception in the article, but he got hired at Amazon _after_ the Google rejection. this is slightly misleading.
- hardwaregeek 6y agoIt's a little frustrating how random the process is. I'd consider myself to have a decent resume for an undergraduate. I've interned at a "big N" so to speak, I've done side projects that are relevant in my field of interest and I'd consider myself to have amassed some domain specific knowledge. Yet my resume gets random rejected/ghosted from a remarkable amount of places. It's especially bad when I don't fit neatly into a category for recruiting. So many places wouldn't hire me because apparently "I want to work during COVID cause online school sucks" is too confusing.
- Google234 6y ago
- caymanjim 6y agoThis isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science and working as a software engineer. Google and other big tech companies use these criteria to filter people out at the hiring stage, but the vast majority of work has nothing to do with any of this stuff.
- ehsankia 6y ago> and in 30 years, I've hardly used any of it. Isn't that similar to people saying "I've never used trig in 30 years"? Isn't the point to train your brain to think in a certain way, more so than actually needing sines and cosines? For computer science specifically, the goal is to teach you to think in terms of loops, conditionals, recursion and so on. It's to train the muscle more so than memorize specific algorithms or data structures.
- sl1ck731 6y agoI think the issue is the filter is based on the specific algorithms and not that problem solving ability. There seems to be more emphasis on "the candidate knew to use bubble sort" or something stupid like that instead of "I observed this candidate reason through the problem and I don't really care that they didn't know a canned algorithm".
- carlmr 6y agoI think a big point people miss is that you need intuition which algorithm fits where. You don't need the details of how it works, but if you have a good idea how it works you usually have a better intuition. It's a bad proxy, but better than no proxy in my opinion.
- ehsankia 6y agoNo, that's what you assume they are looking at. You're assuming they only look at whether you properly memorized bubble sort, but in reality good interviewers don't care if you don't even finish the problem or find the answer, they are looking at how you approach the problem and your problem solving skills. You often need strange problems to really get to see people's problem solving, which is why they're often not things you see in real life, but again, the goal isn't to see if people know how to do the strange thing, it's to see how they approach a novel problem from scratch. Aka problem solving skills.
- ipnon 6y agoThis is an algorithms crash course for people interviewing at Big N.
- geogra4 6y agoNetflix?
- ipnon 6y agoBig N for all N in Facebook, Amazon, Apple, Netflix, Google ...
- pgcj_poster 6y agoI don't think Netflix actually belongs in there, it's just that if it weren't the acronym would be FAAG, and if you say you want to work for a FAAG company people will assume you're talking about Grindr or Mozilla or something.
- triceratops 6y agoNetflix is in there because they pay as much as or more than the others in that acronym.
- tester34 6y agoFAAMG?
- kyting 6y agoNetflix surely is here because their pay is in par with Facebook/Google.
- paxys 6y agoWhy the random "Google" in the title?
- sturza 6y agohttps://www.freecodecamp.org/news/why-i-studied-full-time-for-8-months-for-a-google-interview-cc662ce9bb13/ https://www.freecodecamp.org/news/why-i-studied-full-time-fo...
- paxys 6y agoThat doesn't really answer the question (also I see that the title is fixed)
- sturza 6y agoSorry, the idea is that this guy made a repo for how he wanted to study to get hired at google, and now it seems that a lot of people are contributing. I removed the google part from the title as i see now that it might have been misleading.
- Mattish 6y ago> ...This is meant for new software engineers... Do these big companies really need so many developers that only know how to use this long list of 'fundamentals'? I've interviewed a lot of people of all ranges, ages and skews. No matter what, when it comes down to sitting down with them and asking them to write out a simple program without any technicalities, 9/10 of them fail due to clearly not spending enough time just making things. Are these big companies _really_ hiring juniors with this as their laundry list? > ...Write code on a whiteboard or paper, not a computer. Test with some sample inputs. Then test it out on a computer.... A junior to me who has spent a year banging away making real failing programs and can talk about what and where they struggled with is useful to me(and the company). A junior who hasn't built a single project, but can tell me about the one time they spent 4 months writing data structures on white boards is little more then a warm, but dead silent body in a design meeting.
- nelsondev 6y agoFrom scanning through the course outline, the big omission is learning about distributed systems, and industry leading implementations of common tools. At big tech companies, you typically have to work at a much larger scale. A solution that works, won’t necessarily work at 10x, 100x, 1000x the scale. You often need to use technologies architected differently than a monolithic Web App. I would recommend learning more about the commonly used “tools” that a distributed systems engineer would use, more specifically: - Load balancer - Nginx - Key/Value storage - Redis - Pub/sub - Kafka - Queueing - SQS - Map/reduce - Hadoop, EMR - Databases - SQL
- ccajas 6y agoThere's a different "knowledge" problem that must be tackled here. Someone can form a cognitive bias from only being exposed to a few ways to solve a problem. Maybe it's because they haven’t seen it to larger scale, or that they only worked with monoliths, and thus are limited to only that problem scope. Throwing more MySQL databases at a problem won’t fix all problems, but for a lot of people, this is all they know. How do discover those unknown unknowns, to learn the applications of tools you haven't yet been made aware of?
- nelsondev 6y agoAs a software engineer, you have a professional responsibility to stay abreast of current technology. That doesn’t mean hopping on every latest JS fad, but it does mean continually looking for more information, and learning how others in the field are solving problems. Physicians have to keep up their board certifications/licenses by undergoing yearly(?) retraining, in order to continue practicing medicine. It’s not that hard to find what other software engineers are doing, to start, Read hacker news! Talk to more experienced engineers, read blogs, as an intellectual exercise, surf through AWS services and think about how you could use each.
- stevofolife 6y agoNo it's not. A formal computer science education at least mention and cover the problems these tools are solving. And for those who want to solve these challenges, they take graduate courses.
- raztogt21 6y agoDon't you feel this learning path makes you a cookie cutter SE?
- stakkur 6y agoI would say that's definitely a study plan for learning key CS concepts, but not necessarily a plan for becoming a software engineer. Those are two very different things.
- bcheung 6y agoThis is a good starter list for the more Computer Science skills but I see little in the way of practical skills. It's definitely nice to have these skills but let's be real, you aren't going to use them on a daily basis. I would add learning a few of the most popular languages and frameworks depending on your area of interest. Without those practical skills I'm pretty sure you will be passed up during interviews. When hiring, I look for people who can get stuff done first and foremost. I don't care if they have to look things up and don't have things memorized. Efficient "stack overflow driven development" is real world development. Then if they have those skills I look to see what kind of theory and architectural understanding they have. Those are secondary. The more senior the candidate the more I expect them to have CS and architectural background so I would normally forgive not knowing the CS theory stuff for junior developer candidates. But practical "get it done" skills in the relevant language and frameworks are a minimum requirement for everyone. One other thing that I would add is to customize your study plan based on where you want to apply. Startups will favor more practical skills during the interview. Larger companies and enterprises will favor more of the traditional CS during interviews.
- sockgrant 6y ago> It's definitely nice to have these skills but let's be real, you aren't going to use them on a daily basis. I mean, practice for the job you want. The majority of software jobs don't need this stuff -- writing frontend code, writing some backend services, mobile.... the type of work where you a) aren't building the platforms / tools everything is based on b) don't need the best performance, just need it to work OK. But there are plenty of jobs that do need this stuff. Working on an OS, or database, or a product used by millions, or a large scale platform...
- ericmcer 6y agoI have been looking for work recently (frontend/full-stack) and have been pleasantly surprised, all my interviews so far have been fairly practical React, JS, CSS questions. I spent a month leetcoding and reading Cracking the Coding Interview also. 8 months of focused work on interviewing seems... insane haha. That said I do feel smarter for having refreshed my knowledge on BST, linked-lists, etc. I don't know if there is a better way to interview, the algo/data-structure stuff will definitely reveal your ability to stay calm and problem solve though. A tricky tree or graph problem will also reveal how strong your mental context and ability to visualize code in your head is.
- mrich 6y agoThe most important thing on your path to becoming a software engineer is building stuff, improving it, releasing it, and thinking how you can do it better. Having been through the lifecycle of a piece of software from design to maintenance will also provide a wealth of experience. I understand that it's popular to let people solve toy problems during interviews, and think that's ok for people coming out of university. However for more senior roles I would rather hand out a coding assignment. You can judge the experience of a developer much better by the way she/he chooses algorithms, considers corner cases, supportability etc.
- theptip 6y agoI strongly agree with this point. Most of day-to-day problems in software engineering / craftsmanship (i.e. the work most people are paid for in this industry) are not computer science problems, they are about the process of understanding your user requirements, iteratively improving your product, achieving and maintaining the appropriate level of quality, and the meta-cognitive skills around identifying when you just need need to fix a bug vs. step back and look for a way to improve your tools. You will get some transitive learning of some of these things if you do lots of coding challenges, but I personally found a huge benefit in my formative years from building a single full-stack application over many months, much more than solving simpler day- or week-long standalone tasks.
- decafninja 6y agoThe problem is more and more companies will not let you have a chance to do any of the above without first jumping through the fiery blazing hoops that comprise of solving the "toy problems" of a typical leetcode technical interview.
- CalChris 6y agoGodbolt (CS61C should probably have a Godbolt lab.) Coursera Fundamentals of Parallelism on Intel Architecture Emphasize STL, Boost, OpenMP, MPI, NUMPY, containers, ...
- tester34 6y ago>CS 61C Why do you guys refer to topics/branches of CS by course name at your higher edu institution?
- thrower 6y agoI used something similar to this as well as Khan Academy to learn CS, when I transitioned into software engineering, after being laid off at my previous position in a different industry. It’s possible, but it takes work. I also benefited by contacting my peers from college on LinkedIn and getting referrals for interviews. Even though I didn’t major in STEM originally, I still ended up connecting/befriending many while in school. I would encourage you to try to utilize resources like that as much as you can.
- oscargrouch 6y agoThis sort of stuff is meant to leave the anarchists and the rule benders out of the company. Its requires certain psychological threats to by guided to memorize and do all this stuff. I bet a lot of people with the actual right skills would not pass into those exams. It reminds me if a great lesson from the prince from Maquiavel, where he speaks about what sort of soldiers should be used and say that the mercenary soldiers should be the last resort, because giving they do not really believe into what they are doing, in the battle field they wont make the best soldiers. Well, the filtering here will optimize for people willing to force themselves into this for a good salary, of course they can by chance get the passionate type, but they are not optimizing for it, and that's the point. I rather work with people that are passionate about it, they are the ones that do the "impossible" things because they dont just do what they are told. And this kind of people will at a certain point in their lives have nothing to show. But the curious, the creative, the people that learn fast, that are always hungry how can a company get them through this?
- triceratops 6y agoThe big tech companies' hiring needs are so massive they'd go out of business if they relied on hiring only "passionate" people who are up to their standard.
- kylestlb 6y agoWas there a similar flurry of "how to ace the finance interview" in the 80s and 90s when everyone wanted to be a stock broker?
- 908B64B197 6y ago> I studied about 8-12 hours a day, for several months. He lists 8 months of study and that before starting the curriculum he was "self-taught" meaning he at least knew how to code and do a little more than "hello world". If we add his "self-taught" time it gets us pretty close to an actual CS degree. He's missing language classes, some electives, math and stats but he's mostly there in terms of content. He's missing labs, projects, problem sets of course. When viewed like that it doesn't sound as clickbaity as the tittle implies, that you don't need a degree to go in the field. He's just a really really motivated self learner. And almost got a CS degree's worth of material. Kinda like Gates "dropping out" a few credits short of getting his diploma, not after failing intro to econ like a lot of "drop out entrepreneurs" out there.
- gwerbret 6y agoThis is a bit off-topic, and is probably a naïve question, so forgive me in advance for both. I've always been under the impression that "engineer" was a protected professional title, just like "medical doctor" or "lawyer", at least in part because there are certain legal responsibilities that come with the title. It's thus a little confusing to see the title being used, here on HN and elsewhere, by self-taught folks who have not gone through any formal education or professional accreditation. In fact, it seems that "dev" and "engineer" are used essentially interchangeably, only sometimes depending on whether the particular employment involves actual engineering. Does this mean that "engineer" is no longer considered a protected title? Or are software engineering and development (in the real world) considered so similar as to be indistinguishable? I'm asking out of genuine curiosity.
- freeone3000 6y agoThe National Society of Professional Engineers has managed to claim "Professional Engineer", "PE", and "EIT". They also have claim over "engineer" when used as self-promotion as a business or an independent contractor. However, they weren't able to have the claim on it as a job title stick. So, assuming you don't have PE quals: your consulting firm could not be gwerbret Engineering. Your job title at Microfang could be Software Development Engineer.
- unbalancedevh 6y agoI got my engineering degree almost 30 years ago, and at my first job was working with other "engineers" who did not have a degree. I was dismayed at first, but got over it. I think it only matters if you're offering services to the public as an engineer, or if you're doing public-works projects. Then you need to be licensed as a Professional Engineer.
- arminiusreturns 6y ago>I've always been under the impression that "engineer" was a protected professional title Based on what? I always thought it was well known that there is pretty much no such thing in the IT world, and beyond that, Americans tend to as whole disdain the old worlds fascination with titles and the people in America who use and abuse them (lawyers are some of the shittiest people)... so perhaps you aren't American?
- vasilakisfil 6y agoStudying theory to become a SE is one thing. Being a SE is another thing. Being able to communicate with your (tech or non technical) colleagues in a constructive/useful way is also another important thing. What I have seen is that a lot of software engineers lack communication skills. Being able to deal and communicate with other people, feel empathy, see things from their perspective, deal with non technical POs or managers, crazy CEOs, offensive colleagues and all sort of things is something that should be taught before you enter the market somehow. And when I say "deal" and "communicate" I mean it in the most fruitful way for you, your colleagues, the company. In that order. So "being" a SE is not only knowing the theory.
- tester756 6y agowhy people always talk about those "data structures" and in reality they have basics in mind? Seriously when you've been writting any software for e.g >1 >2 years then I'm pretty sure you must've been using almost all of them who cares about details of complexity when very often just pick of the correct one (that suits the problem) gives massive boost. Ofc you may need sometimes something trickier, but hey - there's time to find it.
- cvaidya1986 6y agoAlternatively: Build your hobby project at scale
- rupi 6y agoLet us use machines and mechanical engineer as an analogy. These days, you don't need to be a mechanical engineer to operate 'most' machines. Will being a mechanical engineer help if the machine breaks down? Yes. Will there be some machines that only a computer engineer could operate? Yes. Will there be come cases where being a mechanical engineer make you a better machine operator? Yes. But do you need to be a mechanical engineer to operate most machines? Answer is clearly no. We are at the point where that analogy carries over easily to computer science and coding. Yes, there are many cases where knowing computer science will be essential to extremely helpful. But for 80% of the coding jobs, you don't 'need' to know theoretical computer science.
- totemandtoken 6y agoSo funnily enough, my bachelor's was in mechanical engineering and I'm currently pursuing a master's in computer science after having worked in industry for a few years. While I think I agree with your point, I'm going to nitpick on your analogy. A mechanical engineer will probably not be called upon to operate any particular mechanical device. They will be called upon to either design or maintain it, both of which will require substantial mechanical engineering knowledge. Operation is a totally different thing for a totally different group of people. Think of the difference between a frontend developer and someone who might use wordpress or wix. Having said that, you hear the same complaint from mechanical engineers as you might be seeing on any hackernews thread about interviews and hiring - no one ever uses the academic knowledge in real life. And this is true, I've never had to use a Bode plot or whip out a stress-strain curve. But I've had to work with technicians and while several are very intelligent and capable, there was a noticeable lack of refinement in their thought process or lack of breadth. I suspect it's the same thing with programming jobs (although I haven't had one yet, so feel free to call me out on it). Knowing CS will help give context that allows for a more refined programming acumen. Is it necessary? Probably not. In my engineering case, both technicians and I did our jobs equally well, although I often had more responsibility. But if your brand is to have culture of incredibly deep thinkers, you probably want to interview for this quality.
- rupi 6y ago
- sneeuwpopsneeuw 6y agoBecause I saw it was not mentioned yet. There is also a very good study path for game programmers. https://github.com/miloyip/game-programmer https://github.com/miloyip/game-programmer
- M5x7wI3CmbEem10 6y agofor a non-cs major with a quantitative background such as math or physics, would it be more prudent to study algorithms or gain actual programming skills in order to secure a job prior to graduation? of course, actual programming skills are necessary, but it seems they can be learned after securing an offer.
- person_of_color 6y agoThe question is not to become a software engineer. The question is how to change the world.
- hn_asker 6y agoIf you are a CS graduate, it is up to you if you want to use what you've learned in the field. I've found that it is a useful perspective, sometimes it is overkill, but it's better than any testing sometimes. Software engineering is all about making that domain knowledge useful. So sometimes you can just be lazy and "import" the knowledge.