15 ms·
This 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 wit
by caymanjim 6y ago
This 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.
- cole-k 6y agoI'm still new to the industry, but my CS education (yours may differ) was quite theory-heavy. Perhaps the knowledge of data structures and algorithms can be useful for people who need to design whole architectures and systems, but I think the folks who are fixing bugs, tweaking the UI, or adding small features would benefit more from Code Complete than an Algorithms book.
- mcguire 6y agoNote that you may find your career limited to fixing (simple!) bugs, tweaking UIs, and adding small features.
- google234123 6y agoThat;s a sad career.
- nitrogen 6y agoIt's a career path that maximizes people helped rather than personal intellectual enjoyment.
- giantDinosaur 6y agoI've done that kind of thing. It did not help many people, and I came to despise everything about my life. Give me some intellectual enjoyment and I'll be much more motivated to help people.
- google234123 6y agoIf you give a good person this job they will leave.
- vsareto 6y ago> Isn't the point to train your brain to think in a certain way You might get that through other methods besides trig, meaning trig isn't strictly necessary -- it's just one option among potentially many. The hard part is proving efficacy and efficiency of each option. CompSci interview questions go way beyond loops, conditionals and recursion though, such that if you don't already know some secret sauces, it's unlikely to get the best case solution that the interviewer wants. The other thing throwing this off is interviews are looking for different grades of solutions or maybe just looking at your problem solving/communication skills, e.g. you can fail to find the best known solution but still get a job because of your reasoning. So in this way, the algorithms & data structures interviews can sometimes be used to test knowledge, or test problem solving ability, or both. The interview stopped being a test of "if you can do this job" and instead seeks to find a correlation backed up by some research that says "people that prepare, study, and do well at this interview also do well at this company". Similar research meant that they needed to stop asking brain teaser questions because it wasn't a good indicator of success.
- smithza 6y agoAn interviewer proposes this scenario: There is a school bus full of ping pong balls, all the way to the ceiling, filled from back to front. You are asked to estimate the number of ping pong balls while explaining your line of thinking. Questions are welcome--and answered if on the fact sheet. Explaining your abstract, critical thinking process seems much more valuable. HR screens someone for having the degree, assume they are familiar with all the facts (they can use Stack Overflow when they get in). Just learn how they think and how they communicate.
- varjag 6y agoHR is unqualified labor attempting to do screening for qualified one, and they tired using tests which they themselves can comprehend as proxies for intelligence. (In past tense because this "Microsoft interview" style quiz was dropped by Microsoft themselves long ago)
- CalChris 6y agoI learned trig before I learned to program and the symbolic dexterity from trig was useful. I think kidz today will learn to program before they learn trig. I don't really have a point here.
- hn_asker 6y agoprogramming and trig can be elegant. I think interviewers sometimes look for elegance. They want to believe they are hiring someone smarter than them. Elegance is one feature they look for.
- oscargrouch 6y agoThe screening is not optimized to find the best candidates, its just an arbitrary filter that will in the long term let some people that would be fundamental to the survival of the company out of it. Sometimes its good to accept that the uncertain things are uncertain. If i were them, i would find and train good "screeners", people with talent to spot talent and just let them do the job. Sometimes they will only have a hunch, giving their observations of things that escape most people of a particular candidate, and even without much to show of, they might be right. Later the top screener's would help the new ones to be better at their job, teaching their tricks. This is very subjective and personalized, and even if there might be some objective ways to train the screener's better, i think its just nuts trying to use objective tests to define a good hire. I bet with you that there are a lot of "human gold" out there that would only be detectable only when its too late for the company.
- cole-k 6y agoI am inclined to agree. I think the issue is just with the HN title. The repo does say that it is for interview prep. I will say that I've seen some companies improve their interview questions to be less about having CS insight or algorithmic "tricks" and more about writing good code. But I've also been asked to essentially come up with quickselect in a 45 minute screener, the asymptotic analysis of which took me more than 45 minutes to understand.
- kthxb 6y agoMaybe it is true that you got in a line of work where you rarely need those things; And you certainly got more experience than me. But I, for one, use and profit from the way of thinking I was taught in University very regularly.
- stevofolife 6y agoYour work doesn't depend on operating systems, databases, network communications and data structures? I can go on.
- busterarm 6y agoNot as much as it depends on human communications, organization, self-management, etc. Most technical challenges in my experience end up being reduced to word problems. All of the stuff you mentioned is probably 10% of it. You can be bad at the 10% if you're great at the 90%.
- tmotwu 6y agoFormalizing word problems and effectively transforming it to a program is inherently a complexity theory exercise.
- stevofolife 6y agoWord problem? That's not a technical challenge. That has to do with writing and communications, which are ubiquitous to all types of work. I think you're misunderstanding the premise here.
- busterarm 6y agoI think you're mistaking work for being puzzle-solving. Work is always about people. If it's not about people, it's probably research, which is different from work.
- stevofolife 6y agoWork is a function of people and problem solving. A balance between the two provides an effective and productive environment for producing good work. I wouldn't praise or idolize the notion that work is always about people.
- username90 6y agoSomeone needs to solve the technical puzzles, software engineers are people who can do that, being good at managing things is a plus but it isn't what defines the role. There are plenty of roles at companies for people who can manage everything else but not technical things, like product manager or people manager.
- catwind7 6y agoMost places will also probably have you spending a good chunk of time maintaining legacy code rather than inventing entirely new business units / products / platforms. I can't imagine what the maintenance burden is like at huge companies for existing / mature products. Anyone care to shed some light?
- pickledcods 6y ago> and in 30 years, I've hardly used any of it. So you don't see the sine in the sky from sunrise to sunset?
- vbtemp 6y agoYour comment reflects a common meme that can often be summarized as: "Real World" work doesn't involve the academic nonsense you learn in school. Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless... It's like when otherwise successful people tell you all that calculus they learned in high school is useless, it's not useless, they just found success in a career that didn't need it. I resort to my textbooks and academic nonsense all the time. There are often two ways to solve a problem, the first is just code-until-it-works, the second often involves modeling it in some kind of formal structure, and defining the operations over that structure and their properties. Usually, in doing this, the resulting implementation is far less code and far more resilient. But those who are not comfortable with the foundational theory stuff just don't see it and don't even think to approach the problem in that way.
- mdoms 6y agoCan you give some examples of where computer science academic theory helped in software engineering?
- rubatuga 6y agoDictionaries for O(1) lookups, b-tree indexes for fast SQL queries, interval trees in genomics analysis software.
- mrits 6y agoIf this was an interview I'd say dictionaries aren't O(1) but one popular implementation of this collection is.
- aejnsn 6y agoPlease go pick up any of the Martin Fowler books. All are rooted in computer science fundamentals. Let’s not pretend software engineering isn’t rooted in computer science. That’s a categorically false assertion.
- abdullahkhalids 6y agoI came here to make a similar point. Electrical engineers study a certain amount of physics as part of their major, but their main focus and area of expertise is engineering, and you never hear them claim otherwise. If the main focus of a training is not to become a computer scientist, but to become someone who can engineer good software for real world applications, then don't call it a science degree. This list is, "a software engineering study plan to become a software engineer".
- worker767424 6y ago> Electrical engineers study a certain amount of physics as part of their major, but their main focus and area of expertise is engineering This is good. I took the E&M course for electrical engineers at my university, a very well-regarded engineering school. I ha no idea what I was doing. After every exam, I thought I'd have to drop the course. One of my scores was a solid B, another was the third highest. I got a B because I didn't know how to do the homework. Literally the only thing I could do was get the sign and units right in the multiple choice answer.
- marta_morena_91 6y ago> 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. Yes, because at Google & Co. you actually NEED this stuff. I am not sure there is a day going by where being strong in math and computer science isn't immensely helpful for my job. The problem is: All other companies immitate Google, not only through interviews, but also by copying their "scalability" which is completely crazy. For instance relational databases are perfectly fine for like 99% of companies. Single servers would probably work well for another 90% of companies. Monoliths instead of micro services would work well for 90% of companies... It's crazy.
- sidlls 6y agoAt Google & Co. you might need this stuff, but 99.9% of the other engineers at Google & Co. don't. Source: me, as I work at "& Co.", who employs numerous ex-Google staff, and have friends in other "& Co."s, etc. What Google & Co.'s engineers do is gatekeep. Sometimes it's out of ignorance, sometimes out of inappropriate generalization of their roles to others, and sometimes out of a deep angst caused by working in roles that effectively make almost all their CS-specific trivia next to useless in practice.
- gumby 6y ago> 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. I'm not challenging your experience, but I am replying to say that mine is the opposite. I certainly have used quite a bit of theory (over a little more than 30 years), not so much explicitly as to think about the problem I'm working on before starting to code, or in the process of discussion about some code with coworkers. Also has helped me look stuff up or learn new things. Perhaps you've used it more than you think, but merely subconsciously?
- jackallis 6y agoi do really resent when people provide constructive-criticism laced just with criticism and nothing constructive.
- lkxijlewlf 6y agoI think it honestly depends on what you do. I use data structures all the time; I just don't have to implement them.
- tombert 6y agoDISCLAIMER: I'm a dropout, never finished college. I think that a lot of the math subjects that they focus on in colleges can be of questionable utility (Much as I wish this were the case, I don't think I've touched calculus at all since I've started working, outside of the occasional personal projects doing game physics or something), but I do think that having a decent understanding of set theory and discrete mathematics has made me a better engineer, if for no other reason than it made it easier for me to pick up TLA+, which is incredibly helpful when used correctly, at least when designing/building distributed systems. That being said, I sadly feel like that basically any math is only useful earlier in your career. If you start working for one of the big FAANG-esque corporations, you end up doing substantially less compsci and spend a lot more of your time writing emails or sitting in meetings.
- imperio59 6y agoWhat differentiates a real career professional with someone who just "learned how to code" IS the fundamentals like Data Structures, Algorithms and their underlying math fundamentals. Sure, you can become a "senior" engineer even at a big tech company if you take a more product-focused track, but even there your lack of mastery of fundamentals will eventually limit and stunt your career growth, because those around you at the same level will have that deep understanding and knowledge to pull from when they actually need it for their job. Notice I didn't say this requires a COLLEGE education, I've met plenty of amazing, very senior engineers in my career with no formal degree or college education, but they sure as hell understood all the underlying fundamentals and theory of their field better than most.
- tguvot 6y agoAs somebody who just "learned how to code", i oversee architecture of all products in saas company that just crossed 1B in sales. At this level, nobody cares about fundamentals in 99% of companies. Also nobody cared about my lack of mastery of fundamentals during my career. If anything, people were bringing me into companies due to me having "out of box" vision and ability to see the big picture and not getting stuck in details.
- worker767424 6y agoI've really only used dynamic programming once on a real problem, but I have to pick the right data structure all the time and at least think about the algorithm. I've seen people write code that's anywhere from n^2 to exponential, only to see it fail pretty hard when working on production data.
- 908B64B197 6y agoEngineering is about learning how to learn. It's a skill you should use every day. If all someone knows is plumbing API and rote memorized glue code, don't expect much. If someone went through CS, expect to see a different caliber of work for the same task. Believe me, it's night and day and a lot of orgs have no clue what real engineering talent looks like: they never had any to begin with!
- electrondood 6y ago> If someone went through CS, expect to see a different caliber of work for the same task. I disagree. See: hordes of new CS graduates that feel they are completely unprepared for an entry-level software engineering job, or their interviewers.
- 908B64B197 6y agoThere's often a gap between what the employer wants and market reality. The employer really expects devs to be productive on day one and not have any training to do. Often they whine that a CS education isn't more like a bootcamp. But that's not how it works.
- worker767424 6y ago> but the vast majority of work has nothing to do with any of this stuff Like, it doesn't until it does, and when it does, it really does.
- olingern 6y agoThis on cue comment is quite trite, IMO. I went through school and did just okay in CS. 12 years later, I’m much more interested in topics within CS that felt like chores for my degree. In the context of getting a majority of job, yeah, it’s not great. In the context of being a better programmer, I think it’s worthwhile to understand the “pillars” on which you are building your “house.” HN has an interesting dichotomy of love for all things CS and hate for anything that involves interviewing.
- vincentmarle 6y agoThere's a big difference between understanding data structures and algorithms and being really good at solving algorithmic puzzles under time pressure. The former is what you need to know to do your job well (and much of that knowledge is at your disposal with a quick google search) but the latter is a useless skill that doesn't help you with anything but passing a coding interview. If you want to be hired by FAANG, don't waste your time learning intricate algorithms, but simply practice to solve coding puzzles in record time on whiteboards. It's a totally different skill set.
- hertzrat 6y agoIt pays off in interviews to drill that stuff. If you want to be good at your job though, you just need to write a lot of code and understand design and architecture. The best book on this I read recently was “game programming patterns.” Ive had cause to use about a third of the patterns in the book in the last year alone, and my code base got simpler and easier to modify each time. Big payoff. Don’t read it start to finish though, use it as a resource for when you get stuck http://gameprogrammingpatterns.com/ http://gameprogrammingpatterns.com/
- macksd 6y agoMy degree was actually called Information Technology and I will say that it has proved to be a really good degree for me. It was essentially a CS minor with some different classes on networking, security, system administration, hardware, project management, etc. I would say I'm better off career-wise because I did that instead of Computer Science. I was even almost not considered for a job because of it, and I turned out to be a really good fit for that job! That said, and admittedly I have gravitated to niches that might be more computer science-y niches at points in their hype cycles where lots of research was being applied, but I have occasionally wished I perhaps also had a stronger academic basis in computer science. In distributed systems, people are still writing new schedulers, and I wish I had taken that operating systems class when you had to write one. I don't always understand what my colleagues are talking about with some of the newer functional programming features popping up in languages. Stuff like that. I do agree there's a disconnect between what universities deliver and what people expect of them (paths into academic research vs. career preparation) and I think a Bachelor's degree is overhyped for that. But I do think you're understating the role of CS theory and fundamentals in high-level software engineering. Just because you don't use many of the lessons does not mean they haven't improved your ability to think, and the general base of knowledge on which you're able to build.
- munificent 6y ago> I studied computer science, and in 30 years, I've hardly used any of it. Here's one way to look at it: I wear my seatbelt every time I ride in a car, but I haven't been in a serious accident in over twenty years. Does that mean I shouldn't have bothered? Knowing things allows you to take an opportunity when it presents itself. It's really hard to know what opportunities are going to show up or which doors will be the doors that you want to walk through. But having more of those doors open is generally a good thing. Of course, there is an opportunity cost to the time spent learning CS versus other stuff you could be learning. But, personally, I've found the CS stuff I've learned to be both personally rewarding and often helpful to my career in unexpected ways.
- whodidntante 6y agoReading and reviewing code: getting a feel for performance, appropriate use of data structures, implementation strategies, etc. As you get more senior, you spend more of your time reading code and are expected to offer insight and mentoring. And, there is always pride of workmanship. There is a lot of beauty and elegance in computer science, appreciation of these things can have positive effects on morale, implementation quality, maintenance, and performance, and teamwork.
- SkyMarshal 6y agoBefore we lend your comment any credence, do you mind listing the projects you've worked on? Groundbreaking software engineering projects that advance the state-of-the-art, like Google's Map-Reduce-based scaling architecture back in the day, or ones that provide some non-trivial edge or advantage, like the tight integration of hardware and software in iPhones (and the resulting responsiveness and battery life), or ones that provide high-assurance and provable correctness (Rust, Haskell, etc) actually do require CS knowledge. Whenever someone makes a comment like this, I just assume their work thus far has consisted of linking together pre-existing building blocks to make web or mobile apps, rather than anything completely original or state-of-the-art. And it's good that the industry has gotten to a point that such a job opportunity exists for so many people. But keep in mind it was only possible by decades of development of layers upon layers of abstracting away most of the CS into easily composable libraries, APIs, and other components. You many not need to know algorithms and datastructures yourself, but you're definitely using them by building on them and with libs that encapsulate them.
- dilawar 6y agoWell said.
- SulfurHexaFluri 6y agoThere is a level between installing wordpress plugins and creating state of the art massive scale infrastructure. And its likely where most developers sit. I work on a project management application. Its pretty much entirely custom code with little external libraries but it also requires very little computer science theory. The problems I face are less "Find the fastest way to search this datastructure" and more "This code was designed for a legacy model of the system, how can we replace it with something modern without spending months on it"
- 0x008 6y agoWell, the premise that computer science is needed to be an effective software engineer comes from the original link (and the way interviews are structured). We cannot blame caymanjim for the premise, can we?
- 6y ago
- wilsonfiifi 6y agoI'm of the opinion that university trains you to reason better about problems and sharpens your problem solving skills. Especially complex problems. So although you might not always encounter the exact academic problem in your day to day work, you still unconsciously use the tools and techniques learned.
- 29athrowaway 6y agoIt's like the difference between knowing the theory behind combustion engines and driving a car. But that being said... there are many different types of engineering jobs. If your company deals with low level stuff, requiring low level knowledge is acceptable.