[HN Gopher] A computer science study plan to become a software e...
       ___________________________________________________________________
        
       A computer science study plan to become a software engineer
        
       Author : sturza
       Score  : 195 points
       Date   : 2020-12-16 17:35 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | kylestlb wrote:
       | Was there a similar flurry of "how to ace the finance interview"
       | in the 80s and 90s when everyone wanted to be a stock broker?
        
       | stakkur wrote:
       | I 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.
        
       | ericmcer wrote:
       | I 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.
        
       | sxp wrote:
       | Spoiler alert: 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 wrote:
         | I 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 wrote:
         | It'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.
        
       | Mattish wrote:
       | > ...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.
        
         | a_t48 wrote:
         | I think the whiteboard advice is for being comfortable in
         | interviews.
        
       | nelsondev wrote:
       | From 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 wrote:
         | There'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 wrote:
           | As 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 wrote:
           | No 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.
        
         | 908B64B197 wrote:
         | These I expect a real software engineer to be able to learn
         | pretty quickly.
        
       | thrower wrote:
       | I 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.
        
       | mrich wrote:
       | The 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 wrote:
         | I 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.
        
       | caymanjim wrote:
       | 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.
        
         | stevofolife wrote:
         | Your work doesn't depend on operating systems, databases,
         | network communications and data structures? I can go on.
        
           | oscargrouch wrote:
           | Lets just pretend that this is working to filter good
           | candidates.. even then good software have a lot to do with
           | team work. Its better to have people who are experts in
           | things that the product need to be good at, but also less
           | expert in a certain field but that will do other parts of the
           | product, than you have to manage the group work properly..
           | 
           | My point being, you need people with a myriad of skill sets,
           | and some of them don't even have to do with expert knowledge
           | needed in some areas.
           | 
           | Also you might have an expert in storage for instance that do
           | poorly in certain tests giving he never needed to work with
           | those kind of algorithms.
           | 
           | So in the end the company ends with the same type, the same
           | kind of person, and how can you make a great team that needs
           | people with different skills doing distinct stuff, if you
           | optimized your hiring to filter for one particular type?
        
           | busterarm wrote:
           | Not 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%.
        
             | stevofolife wrote:
             | Word 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 wrote:
               | I 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.
        
             | minkzilla wrote:
             | Well good thing you learned to read, write, be disciplined
             | and be organized in school along side CS.
        
             | tmotwu wrote:
             | Formalizing word problems and effectively transforming it
             | to a program is inherently a complexity theory exercise.
        
         | gumby wrote:
         | > 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?
        
         | olingern wrote:
         | This 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.
        
         | jackallis wrote:
         | i do really resent when people provide constructive-criticism
         | laced just with criticism and nothing constructive.
        
         | macksd wrote:
         | My 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.
        
         | vbtemp wrote:
         | Your 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.
        
           | CraigJPerry wrote:
           | CompSci theory hasn't helped me with the complexity of the
           | industry i work in. It hasn't helped me when i've
           | misunderstood something in our domain. It hasn't helped me
           | release / distribute a product easier or faster or cheaper.
           | It hasn't helped me navigate team dynamics or how to work
           | effectively with others. It hasn't helped me write better
           | technical texts.
           | 
           | So for some very specific cases, in my career (and i suspect
           | for many business application developers) set theory has been
           | the most useful thing i learned in CompSci. How much of a
           | real world day do i spend using that knowledge? 0.0something%
           | on average.
           | 
           | In fairness, It has sometimes helped me get a product
           | finished sooner but this is tenuous at best because i can
           | point to far greater influences from learning how to use
           | specific tools that have helped me get to "done" sooner.
           | 
           | The difference between real world developer and CompSci isn't
           | necessarily in more effective use of CompSci.
        
             | dkarl wrote:
             | Maybe it's easy to overlook these things when you have a
             | really deep computer science background, but coming to
             | software engineering from a non-CS background (math degree)
             | I found lots of valuable knowledge in CS. The most
             | important parts for me would be:
             | 
             | - State machines. I run into a lot of state machines,
             | especially incompletely specified ones. Not that everybody
             | gets these wrong if they haven't studied state machines in
             | a textbook and worked the exercises at the end of the
             | chapter, but recognizing "oh, this is a state machine"
             | gives me a mental framework, a notation, a vocabulary that
             | other developers understand, and a better ability to
             | understand when a problem is underspecified or
             | inconsistent.
             | 
             | - Queueing theory and algorithmic complexity. These two
             | usually come in handy from the perspective of spotting and
             | avoiding stupid mistakes. It's true that people can do a
             | pretty decent job from a handful of rules of thumb, but not
             | everybody has that minimum knowledge, and sometimes a
             | problem has a twist that an imprecise rule of thumb doesn't
             | account for.
             | 
             | - Distributed systems. Just understanding the solution of a
             | few problems in depth, and knowing from that how hard
             | simple things really are, is incredibly valuable. Without
             | that background, people can naively tackle extremely
             | complex problems, bash their heads against them for years,
             | and still underestimate the difficulty of the problems
             | they've created for themselves by orders of magnitude.
             | 
             | In general, the rigor of doing theoretical problems, the
             | discipline of actually proving things, creates habits that
             | uncover lots of non-happy path possibilities.
        
             | AnimalMuppet wrote:
             | I have a degree in math and physics. I used it exactly
             | once, in one aspect on one job. It was down below
             | 0.0something% - need one or three more zeroes...
             | 
             | ... until I took a job in X-ray imaging. We were working on
             | a surgical X-ray (C arm) that could pinch-hit as a CT
             | machine. And suddenly everything was 3D coordinate
             | transforms and fourier transforms, plus X-ray physics, up
             | to my eyeballs.
             | 
             | The theory stuff isn't useful... until it is. And when it
             | is, it helps to have it.
        
             | UncleMeat wrote:
             | All this is true, but when I look at undergrad curricula
             | for other engineering disciplines I don't see this stuff
             | either. And the software engineering courses I did have in
             | undergrad were _terrible_.
        
               | vbtemp wrote:
               | Software engineering needs to be learned on the job. I
               | see lots of new grads that take classes in "Agile" and I
               | cringe just knowing how instead they could be taking
               | difficult courses in graph theory, theory of computation,
               | abstract algebra, advanced algorithms, distributed
               | systems, or any other number of advanced topics. As we
               | get older it's easier to pick up tricks of the trade
               | (various Git workflows, "agile", etc)... but it gets
               | harder to sit down to do 3 hours of homework 4 days a
               | week doing your pushdown automata or linear algebra
               | exercises.
        
               | Jtsummers wrote:
               | > but it gets harder to sit down to do 3 hours of
               | homework 4 days a week doing your pushdown automata or
               | linear algebra exercises.
               | 
               | 38 year old studying astrodynamics for work. Can attest
               | to the difficulty of this. No kids yet, that helps, but
               | the wife and I are planning on starting a family soon so
               | it'll get even harder with increased demands on my time.
        
             | vbtemp wrote:
             | It sounds like you work in an industry that doesn't
             | strictly require frequently delving into foundational
             | theory in CS. I do believe it would be a mistake to
             | conclude its useless, however, as there are many other
             | industries that do need it, and people who are not in touch
             | with the theory probably would not be competitive in those
             | industries.
        
               | wolco2 wrote:
               | From your prespective how common are those types of roles
               | in all industries as a whole?
               | 
               | There are interesting compiler roles but the vast
               | majority who learn how to build a compiler never use it
               | day to day work. Would you recommend spending more time
               | building compilers to better compete for those few roles
               | or would you recommend a different approach?
        
               | VRay wrote:
               | I work in firmware, and 99.9% of the time the most exotic
               | data structure we touch is a linked list
               | 
               | CS still comes in handy though, especially computer
               | engineering to understand some of the workings of the
               | hardware
               | 
               | Occasionally I'll use real CS knowledge when I'm building
               | tools for work or working on games in my free time.
               | 
               | Full disclosure, I didn't actually study CS in school
               | though.. I studied EE and then went and learned CS via
               | Wikipedia when I needed it to find a better-paying coding
               | job.
        
               | necheffa wrote:
               | I use most of my CS skills almost daily.
               | 
               | I may not be writing compilers professionally, but on the
               | surface, understanding parsing has gotten me out of more
               | than a few tight corners. More abstractly, there are
               | lessens to be learned in designing large applications;
               | and appreciating the difference between a finite state
               | machine and a deterministic turing machine, including the
               | types of problems they can solve and how much of a pain
               | in the ass one is to write compared to the other.
        
               | vbtemp wrote:
               | Challenges that benefit tremendously from just a bit of a
               | dive into theory are all over the place. This has been
               | true for me in my career as a software engineer whether
               | I'm working at an energy company, federal research lab,
               | tech startup, or networking services company. The key
               | part is that it's not apparent (or apparently needed)
               | unless you are familiar with the material.
        
             | bcheung wrote:
             | This is true for the most part. But having the CS knowledge
             | allows you to create much more efficient solutions once at
             | scale.
             | 
             | I've personally revamped core parts of a product at
             | previous companies to be over 1,000x more efficient just by
             | applying some CS principles. This translates to $100K/mo+
             | in savings for a company that is at scale.
        
               | helloitsian wrote:
               | I have to ask though... Was it at scale?
        
               | bcheung wrote:
               | I guess that's a relative term. But hosting bill was
               | around $250K/mo from what I remember.
        
           | bird_monster wrote:
           | > 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...
           | 
           | But isn't this statement too specific to apply to the
           | generalization that you're disagreeing with? "Most 'real
           | world' work doesn't require CompSci" is a generally true
           | statement, because most "real world work" is incredibly
           | mundane and repetitive.
           | 
           | So, isn't your take kind of the inverse of what you're
           | talking about? "I enjoyed ____, so I sought out industries
           | that required ____". Almost as though computer science is a
           | specialization within "real world" work?
           | 
           | I guess I think that most industries are not the industries
           | that you're seeking out. Most software developers are
           | employed to combine already-solved problems with new inputs
           | for money.
           | 
           | What do you think?
        
           | mdoms wrote:
           | Can you give some examples of where computer science academic
           | theory helped in software engineering?
        
             | vbtemp wrote:
             | People can go on all day about this. The most major one for
             | me is protocol engineering - there's a whole world out
             | there on this. Others would be model based design and its
             | formal verification. Also several problems in state
             | synchronization in distributed systems.
             | 
             | In many of these cases, the team I joined had a code base
             | in place that "kind of" did the solution, but was not
             | grounded in any conceptual model - despite phenomenal code
             | quality, peer reviews, etc. Recasting it as an
             | implementation of a well-studied formal model generally
             | yielded a codebase that was one-tenth the size of the
             | original, and with far fewer defects. As I said in the
             | parent comment, if you aren't familiar with this kind of
             | stuff, you don't know about it, so you don't use it, so you
             | find other (suboptimal) ways to do it.
        
               | lliamander wrote:
               | What are resources you reference the most in this kind of
               | work?
        
             | ipnon wrote:
             | 1. Unix was cutting edge OS theory and gave birth to the
             | microcomputer industry.
             | 
             | 2. AWS was cutting edge distributed systems theory and gave
             | birth to cloud computing.
             | 
             | 3. Renaissance Technology was cutting edge algorithms
             | theory and gave birth to quantitative hedge funds.
             | 
             | Some people innovate for a living.
        
               | AnimalMuppet wrote:
               | Unix was cutting edge OS theory? I mean, it was Bell
               | Labs, and they were probably the premiere research
               | facility in the world at the time, but my impression is
               | that the trick on Unix was how small they were able to
               | squeeze it, not that it was pushing theoretical
               | boundaries.
               | 
               | Can you point me to any aspects of Unix that were
               | theoretically new?
        
             | ptasker wrote:
             | Dealing with unicode bugs taught me a lot about computer
             | science academic theory. It helped to understand memory
             | addresses and how encoding works.
        
             | bcheung wrote:
             | I use category theory quite frequently when doing
             | functional programming. Unfortunately it is not taught in
             | CS programs AFAIK. I rarely implement any tree kind of
             | algorithms other than a simple tree visitor.
             | 
             | An understanding of time/space complexity (Big O Notation)
             | is also relevant to evaluating approaches. A senior level
             | developer will use this to make high level choices.
             | 
             | I also use compiler theory when writing parsers and simple
             | DSL languages.
             | 
             | Honestly, never really had to deal much with red-black
             | trees or linked list algorithms.
        
             | varjag wrote:
             | A moderate complexity task such as writing a JPEG codec
             | requires understanding of Huffman coding, discrete cosine
             | transform and a number of other minor concepts.
             | 
             | Right now am working on a physically distributed,
             | synchornized system. It has some signal processing code:
             | cross-correlation, FFT. The process planner builds spanning
             | trees out of the layout graph to execute the tasks.
        
             | stevofolife wrote:
             | Tons: Cryptography, operating systems concepts including
             | multi-threading, distributed systems, network
             | communication, mobile and embedded systems which are basic
             | backbones of all the things you use today. You know that's
             | where majority of the tech companies are innovating on,
             | right?
        
               | Kalium wrote:
               | I have definitely worked on systems that tried to do
               | parallelism without any real understanding of underlying
               | primitives or theory. They were not ideal.
        
             | bfung wrote:
             | Relevant comment from a few days ago about Linus Torvald's
             | code handling of linked lists and the theory behind it:
             | 
             | https://news.ycombinator.com/item?id=25327683
        
             | Jtsummers wrote:
             | - For parsing, the difference between context free
             | languages and regular languages. This has helped in a
             | number of projects (usually at the clean up end).
             | 
             | - Boolean algebra has helped me _greatly_ simplify hard to
             | understand nested conditionals.
             | 
             | - Understanding data structures lets me pick the right ones
             | for the problem.
             | 
             | - Algorithm analysis has let me take program runtimes from
             | minutes or hours on modest data sets down to seconds or
             | minutes.
             | 
             | - Discrete math topics helped me prove a problem that a
             | coworker had spent a few weeks on was technically
             | impossible.
             | 
             | - Again for parsing, understanding the ideas of parsing let
             | me make a number of parsers over the years using a variety
             | of mechanisms. The critical part, though, was understanding
             | _what_ was being parsed and _how_ to parse so the code was
             | clear. I replaced convoluted code with hardcoded values and
             | assumptions about what would be in each part (line, or
             | binary blob) with something more flexible and less hacky.
             | 
             | - Knowing how C stores data (stack versus heap) let me fix
             | a _lot_ of code from some engineer colleagues that would
             | work, sometimes, but not reliably because they didn 't
             | understand how memory works.
        
             | sweetsocks21 wrote:
             | I tend to use it quite regularly. I've had to diagnose many
             | performance issues with our large code base. Understanding
             | compilers, data structures, networking, OS internals, etc,
             | have all been quite helpful. Even if it's simply finding a
             | starting point for tackling the problem.
             | 
             | Sometimes it's trivial, replacing a for-each loop with
             | something that's log(n) or O(1). Sometimes a little more
             | complicated, like refactoring some code and realizing the
             | original implementer was trying to do BFS but.. wrote
             | something else. And the rarer cases are having to really
             | dive in and trace some odd contention issues. All of these
             | touch on what I learned in college at some level. Sometimes
             | knowing something exists is helpful for looking up later
             | and can save lots of time.
             | 
             | I do wonder if it's less about "requiring" the education
             | and more about someone seeking out the kind of work that
             | uses the education. I know many people in my company are
             | the opposite of me, and definitely do not care to go much
             | deeper than implementing things until they work.
        
               | sokoloff wrote:
               | I wish the whole industry would at least get to that
               | latter level. I see a fair amount of "jiggle it until
               | it's no longer obviously broken".
        
             | rubatuga wrote:
             | Dictionaries for O(1) lookups, b-tree indexes for fast SQL
             | queries, interval trees in genomics analysis software.
        
               | mrits wrote:
               | If this was an interview I'd say dictionaries aren't O(1)
               | but one popular implementation of this collection is.
        
             | aejnsn wrote:
             | Please 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.
        
             | Kalium wrote:
             | Knowing the properties of a data structure and how it works
             | under the hood is incredibly valuable when deciding if it's
             | a good answer to the problem at hand. If you don't know why
             | hashing is important or what it gets you, you might not
             | understand why a hashmap is a very powerful tool. You might
             | choose some other structure or hand-roll something
             | involving manually managing multiple arrays, and down the
             | line run into what feel like intractable performance
             | problems.
             | 
             | That's just one example, pulled from people I've worked
             | with. An understanding of fundamentals is required to do a
             | real evaluation for yourself.
        
             | tmotwu wrote:
             | Boolean algebra, relational algebra, sets and graphs,
             | reductions, runtime analysis, gossip and epidemic
             | protocols, satisfiably, verification, turing machines, push
             | down automata, etc.
        
               | leetcrew wrote:
               | it's a small thing, but I find it pretty useful to be
               | comfortable with the basic boolean identities. makes it
               | much easier to rearrange if conditions for readability
               | without stressing that you might be changing behavior.
        
             | helloitsian wrote:
             | Personally, I see it come up in more vague areas during my
             | Web Development. It's more along the lines of, "based off
             | my understanding of X, I can assume this bit of JavaScript
             | code works like this under the hood". Understanding how
             | memory works traditionally keeps me "memory-conscience",
             | but this may be redundant when working with JavaScript.
             | When writing complicated operations I can use things I've
             | learned previously to improve efficiency. To put it nicely,
             | I'm not balancing binary trees and sorting my arrays with
             | JavaScript. However, it was helpful when learning how the
             | VDom works.
             | 
             | In other industries...
             | 
             | I started my Software Development journey with C, then
             | moved into Game Development in C++ as my first job. Game
             | Development DEFINITELY requires a lot of CompSci info (that
             | I lacked). Hash Maps, Pathfinding, Matrix math, physics
             | calculations, Linked Lists; all the works. We were also
             | using a proprietary Game Engine so maybe with other Engines
             | CompSci isn't as needed, I haven't worked in different
             | engines.
        
           | konjin wrote:
           | I enjoy CompSci as a distraction - my background is pure
           | maths/mathematical physics so don't think I don't appreciate
           | abstract nonsense - but using it daily is impossible without
           | a lot of contortions.
           | 
           | Contortions I can do easily mind you, but other than
           | recursive functions and linked lists any more complex data
           | structures are too fragile to survive the harsh world of
           | constantly changing business requirements.
           | 
           | As a younger developer I wrote a beautiful algebra that
           | described the company hierarchy for giving permission levels
           | to people from active directory. Within a week I needed to
           | scrap that and redo it from scratch because people needed
           | permissions in the specific app that had nothing to do with
           | their job position.
        
           | caymanjim wrote:
           | I agree with everything you're saying, but I didn't make the
           | claims you're disputing. I don't think CS fundamentals are
           | "useless" or "nonsense" by any stretch. There have been times
           | in my career when I wished I had a stronger background. In
           | particular, I've worked for NASA and in finance, and in both
           | cases, I'd have benefitted from stronger statistics and math
           | knowledge.
           | 
           | My comment was that most (I would say the vast majority) of
           | software engineer roles don't require a computer science
           | background (emphasis on the science), and wouldn't leverage
           | it even if you had it. If you _do_ have a strong CS
           | background, it opens a lot of doors, and in particular opens
           | doors to--in my opinion--more interesting and challenging
           | work. There 's nothing bad about getting a CS degree. It's
           | just not required for a software engineering job. I'm not
           | being dismissive of the education. I'm skeptical of the idea
           | that it's important for most roles.
        
           | kylestlb wrote:
           | "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..."
           | 
           | this is quite the assertion. do you have any evidence
           | supporting this statement?
        
             | banachtarski wrote:
             | I think the claim is easily sustained with just empirical
             | evidence. If you want to do a career in embedded, or
             | graphics, or robotics, or maybe flight control, etc.,
             | you're going to need the math and the comp sci in droves.
             | HN tends to have a crowd skewed towards certain
             | disciplines, which is why every time the topic of a
             | whiteboard interview shows up, most of the comments voice a
             | strong opposition. In my line of work (graphics), the
             | whiteboard is used all the time, both in and out of the
             | interview.
        
           | commandlinefan wrote:
           | > it's not useless, they just found success in a career that
           | didn't need it.
           | 
           | Or don't realize how often they actually do use the _skills_
           | they learned in calculus class to solve problems that don 't
           | necessarily involve derivatives or integrals but do require a
           | methodical, structured approach to solve that isn't something
           | you're born being able to do but must instead be honed
           | through practice on "toy" problems.
        
           | cyberlurker wrote:
           | Agreed, but also some great moments are when you finally use
           | something you learned and think "Oh, that's why they taught
           | me that." Even if it's many years later and I did NOT master
           | the concepts, I'm just aware of them. It's happened enough to
           | me that I no longer have the opinion that stuff I learned was
           | "useless" even if I don't use it. I might one day or someone
           | else might encounter a problem that requires that knowledge.
        
             | vbtemp wrote:
             | I'll also say you won't just come across a problem that
             | requires it, but rather you will apply that knowledge to a
             | problem that never seemed to have needed it in the first
             | place, and then you'll come up with a very powerful,
             | compact, and resilient solution.
        
         | abdullahkhalids wrote:
         | I 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 wrote:
           | > 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.
        
         | lkxijlewlf wrote:
         | I think it honestly depends on what you do. I use data
         | structures all the time; I just don't have to implement them.
        
         | marta_morena_91 wrote:
         | > 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 wrote:
           | At 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.
        
         | catwind7 wrote:
         | Most 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?
        
         | tombert wrote:
         | DISCLAIMER: 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.
        
         | ehsankia wrote:
         | > 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.
        
           | CalChris wrote:
           | I 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.
        
           | cole-k wrote:
           | I'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 wrote:
             | Note that you may find your career limited to fixing
             | (simple!) bugs, tweaking UIs, and adding small features.
        
               | google234123 wrote:
               | That;s a sad career.
        
               | nitrogen wrote:
               | It's a career path that maximizes people helped rather
               | than personal intellectual enjoyment.
        
               | giantDinosaur wrote:
               | I'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.
        
           | vsareto wrote:
           | > 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 wrote:
           | An 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 wrote:
             | HR 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)
        
           | oscargrouch wrote:
           | The 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.
        
           | sl1ck731 wrote:
           | I 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 wrote:
             | I 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 wrote:
             | No, 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.
        
         | worker767424 wrote:
         | I'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.
        
         | pickledcods wrote:
         | > 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?
        
         | imperio59 wrote:
         | What 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.
        
         | vincentmarle wrote:
         | There'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.
        
         | cole-k wrote:
         | I 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.
        
         | hertzrat wrote:
         | It 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/
        
         | kthxb wrote:
         | Maybe 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.
        
         | 908B64B197 wrote:
         | Engineering 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!
        
         | worker767424 wrote:
         | > 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.
        
       | ipnon wrote:
       | This is an algorithms crash course for people interviewing at Big
       | N.
        
         | geogra4 wrote:
         | Netflix?
        
           | ipnon wrote:
           | Big N for all N in Facebook, Amazon, Apple, Netflix, Google
           | ...
        
       | paxys wrote:
       | Why the random "Google" in the title?
        
         | sturza wrote:
         | https://www.freecodecamp.org/news/why-i-studied-full-time-fo...
        
           | paxys wrote:
           | That doesn't really answer the question (also I see that the
           | title is fixed)
        
             | sturza wrote:
             | Sorry, 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.
        
       | 908B64B197 wrote:
       | > 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.
        
       | raztogt21 wrote:
       | Don't you feel this learning path makes you a cookie cutter SE?
        
       | gwerbret wrote:
       | This is a bit off-topic, and is probably a naive 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.
        
         | arminiusreturns wrote:
         | >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?
        
         | freeone3000 wrote:
         | The 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 wrote:
         | I 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.
        
       | milksteak42 wrote:
       | "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
        
         | indigochill wrote:
         | > 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 wrote:
           | Do 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 wrote:
             | It's definitely not silicon valley. Small European tech
             | company, very much just making things up as we go.
        
         | centimeter wrote:
         | I 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.
        
         | cole-k wrote:
         | The 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 wrote:
           | Studying 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 wrote:
             | I 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 wrote:
               | The 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. h
               | ttps://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.
        
         | MivLives wrote:
         | The 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 wrote:
           | different 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
        
       | latenightcoding wrote:
       | clickbait title, this has no affiliation to google. edit: title
       | changed now.
        
         | sturza wrote:
         | I removed that part as i saw it's misleading
        
       | oscargrouch wrote:
       | This 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?
        
       | mynegation wrote:
       | What is the relationship to Google, mentioned in the title here?
       | Cannot find any reference.
        
         | ptasker wrote:
         | Repo was created by this guy:
         | https://www.freecodecamp.org/news/why-i-studied-full-time-fo...
        
       | bcheung wrote:
       | This 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 wrote:
         | > 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...
        
       | CalChris wrote:
       | Godbolt (CS61C should probably have a Godbolt lab.)
       | 
       | Coursera Fundamentals of Parallelism on Intel Architecture
       | 
       | Emphasize STL, Boost, OpenMP, MPI, NUMPY, containers, ...
        
       | ra7 wrote:
       | Previous discussions:
       | 
       | https://news.ycombinator.com/item?id=12649740
       | 
       | https://news.ycombinator.com/item?id=15898263
        
       | vasilakisfil wrote:
       | Studying 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.
        
       ___________________________________________________________________
       (page generated 2020-12-16 23:01 UTC)