People hit calculus, which is almost never needed in the job market, and they give up.
Lots of math and hard science is in the major. It's not an alternative to the humanities and liberal arts and languages. It's done in addition, which just isn't fair at all. Students take two or three semesters of calculus-based physics, three semesters of calculus, two semesters of discrete math, engineering statistics, linear algebra, differential equations, and often even more science.
A person majoring in education could skip all that, even if intending to be a math or science teacher.
How different is this from engineering more broadly, to say nothing about math or physics majors? (I can see CS being a bit more math-heavy than some other engineering disciplines because at many schools, it's been historically associated with the math department but I think the general point stands.)
To understand these numbers, I'd have to understand better how degrees roll up into Computer & information sciences vs. Engineering & engineering technologies. At many schools, "CS" is in the engineering school, often associated with electrical engineering.
>People hit calculus, which is almost never needed in the job market, and they give up.
This.
I tried going back to school for a CS degree at 26 after 5 years of professional experience in the bay area as a developer. The CS classes are trivially easy, but I simply could not do the math. I paid for tutors. I lived on Khan Academy all day long. I tried three semesters in a row to pass calculus and just couldn't do it. The vast majority of people simply cannot pass the math classes required for an engineering degree.
How many questions did you do with pen and paper, without access to any outside help (book/tutors/videos)? If you start with trivially easy questions (d(x^2)/dx = 2x) and do 1000-2000 questions with very minutely increasing difficulty level, I am sure you would ultimately pass the course.
Questions you do with others, or examples from the book are useful for conceptual clarity, but that clarity can only be guaranteed to be solidified if you successfully do questions without help.
People often think you don't need practice to master math, but don't bat an eye when they see professional football players passing the ball to each as warm up before a big game (after having played the game for 20 years and passed the ball 100k times already). Fundamentals are important. I just started learning drums, and my music teacher has been making me practice the same beat for the past 3 months over and over again till I absolutely master it. Me and every other student is happily doing it.
I had to come to grips with this when I entered university 45 years ago. I went to an extremely dumbed-down high school (especially in math), and had no idea how to make myself grind my way to competence in any subject that didn't come naturally. It took over a year to learn how to learn hard (for me) things. Fortunately, I was able to join a supportive peer tutoring network that helped me overcome the holes in my education and approach to learning. The light went on when I accepted if I wanted to succeed, I would have to spend 10 good hours working a 1 hour problem set. The majority of people just don't want to make a 10x effort to learn things that frustrate them. It's especially hard to grind when you feel surrounded by people who succeed seemingly effortlessly.
> People hit calculus, which is almost never needed in the job market, and they give up.
This is almost like saying, basketball players don't need to do pushups during the basketball match, so basketball training should skip push ups. The reason all engineers and scientists (computer or natural) should do calculus/differential equations/hard math courses is because these courses make students smarter.
They are a form of mental exercise that permanently increase your maximum brain capacity and your ability to do complex logical reasoning. It is possible you could replace these courses with some more job-relevant courses, but those courses would have to be just as brain wrinkling as these courses, if you wanted to maintain the current intellectual level of the industry.
Most developers are “dark matter developers” despite the HN/Silicon Valley bubble. The complexity in business/enterprise software isn’t the computer science it’s understanding the business.
I find most “computer science” people don’t want to actually worry about producing products that people want nor do they want to worry about the actual business domain.
There is a reason that despite all of the “smart people” that Google has, they have consistently failed at every product that isn’t advertising.
Sure. I won't disagree with that. But the university is offering a computer science degree, which is creating skill in computer science. If people want expertise in business, they should supplement with a business degree or on the job business training.
Or convince some university to create a "software business" major so they can streamline themselves into a management role at a software company.
So exactly what do graduates do with a degree of it isn’t to earn a living? Money comes from producing products that people want? All of the great “research divisions” that couldn’t productize died in favor of companies like Apple who focused research on products that people wanted.
Jobs famously killed Apple’s Advanced Technology Group that brought the world things like PowerTalk, OpenDoc, and QuickDraw GX. Microsoft’s Research division hasn’t done much better. I’ve already mentioned that Google has wasted untold millions on
products that no one wanted.
But the bigger question is are the degrees actually preparing students for the real world outside of Silicon Valley where companies actually want people who can add business value? Will it prepare people to compete for jobs against cheaper foreign labor where they are more focused on actual “occupational training”?
So you’re likely more educated. What’s your argument?
CS majors come out of the gate making 100K, can change companies whenever they want, are mission-critical assets wherever they go, and work in ivory towers.
I got through the hazing ritual, so that works great for me personally. There is far less competition for my job.
For the benefit of society, or the country, or the world, or something like that... the situation is terrible. We're wasting years of human lives on unproductive education. We're excluding capable people from CS careers. We're driving up the cost of software.
If we trimmed out the non-CS stuff, people could do combined BS+MS degrees in the time that we currently spend on BS degrees. The extra CS education would be valuable to the people and to their employers.
This. I think the problem is that schools need to have separate tracks, and now days some of them do, that differentiate between the archetypes of people that work with software. A computer scientist is different from a computer programmer - sure, there are times when the different areas may overlap, but some people want to work in discovery and others want to work in application.
And to some degree, isn't the job of science to make life easier for the rest of us? I know some people scoff at people that don't have CS degrees, but it's important to be realistic about science's role in industry: thanks to the combined output of a lot of very talented computer scientists, computer programming is getting easier and more approachable with every passing year. It's not uncommon now for people with very little knowledge of computer science to build all kinds of complex applications. I see that as a victory for computer science, not a setback. And I think the people that want to apply science are just as important to the success of our industry as those who want to develop it.
> A person majoring in education could skip all that, even if intending to be a math or science teacher.
A person majoring in education earns nowhere close to what STEM grads does even if intending to be a math or science teacher. Knowing those things is what makes you valuable, anyone can learn programming but not everyone will know how things works and you can't program stuff you don't understand.
In part I agree, and of course I am biased since I studied CS but my goal is to be a house builder for a while and then have enough experience to be a proper architect. That's when the CS background should help again. So, study to be an architect, be a house builder for a couple of years and then be a properly educated and experienced architect from there on out?
Many (FAANG and other) companies interview with algorithm puzzles that are fairly well aligned with undergraduate algorithms courses. Perhaps one purpose of such interviews is to select people based on how recently they took an undergraduate algorithms course or equivalent.
It's brilliant really. How else would you select for people straight out of school (age), with the time (few commitments and probably no dependents) and willingness (willing to jump through arbitrary hoops before you're even their boss) to grind all variations of the interview problems, all while maintaining plausible deniability to discriminating in these ways?
As someone who graduated recently and is going through this process right now - I always thought I would be set because I'm a decent problem solver, aced all my algorithms and data structures classes and generally could solve most interview style problems I came across. I've learned that this is not enough. An organic problem solving process might involve trying several promising approaches, or starting with a suboptimal algorithm and realising improvements to it, and then you might figure out an optimal solution. In many of these interviews the time constraints can be absurd, you basically have to have done the questions or variants of them recently to be able to write down the optimal solution in your first iteration.
Today my friend had a first round online screening from Atlassian - 5 questions in 90 minutes, and none of them were trivial warm up level questions. Compound this with the fact that it's often harder to solve problems and think creatively when you're under time pressure in an interview, and you realise that your only option is to do 200+ Leetcode problems and just hope your interview overlaps with those problems.
This comparison is absolutely correct. I've been in the computer field for over 20 years with a CS degree, and never really needed it.
Most businesses only care about making money. Unless your unique algorithmn costs less to implement and can make money right away, you are out of luck.
Hell, all the stuff you learn at school about algorithms and faster ways of doing work, has been negated by hardware advances that mask poor coding practices.
Go get an information systems degree, learn to code, and make money. The world is going to need coders and IT people for a very long time.
> all the stuff you learn at school about algorithms and faster ways of doing work, has been negated by hardware advances that mask poor coding practices
Sometimes it isn’t, and we end up with Electron on the desktop :(
I wholly agree with this. I loved the mind bending nature of complex CS problems, including Algos & Automata. Yet coding is a snore fest for more than a few days.
I felt like I went from a forward looking, enlightening major - to become where you end up in the details worrying about semantics. CS is mind expanding; coding is specialist mind numbing boredom.
Maybe so, but I'd still rather have my house built by someone who studied architecture, because they will have unique insights in the moment that others would miss.
Also you get a better house if the architect who designed it also builds it.
And eventually the house builder gets enough experience to become a much more useful architect because they know what's actually possible and what is purely academic.
I think the point the original commenter is missing, is that in tech the architect and the builder is usually (almost always) the same person. We don't have the same separation between architects and carpenters that the construction industry does.
And that’s the issue. For most people college isn’t about “being a better citizen of the world”. It’s about getting a job. There are relatively few positions for pure “computer scientists”. There is also a reason (as stated in the article) that many companies outside of Silicon Valley won’t hire new college graduates. Many of them are basically useless as developers.
I'm not sure it's that apt... maybe it is, so long as you grant that architrctural study can help you design and build better houses.
Sure, you can get the knowledge in other ways, and sure, some of the houses built by people who haven't studied architecture are great too.
Some aren't though, and their builders could have benefitted from a bit of theory ahead of time.
It's almost more like the relationship between materials science and hoise building - it can enable you to do a better job.
For those saying you've never been helped by your CS degree, I think you either took a bad degree or you'be been stuck in un-taxing work. You've seriously never bothered thinking about, say, algorithmic complexity? Or other topics that should have been covered?
>For those saying you've never been helped by your CS degree, [...] You've seriously never bothered thinking about, say, algorithmic complexity?
There are lots of successful working programmers that will never need to deal with "algorithmic complexity" because "programming" encompasses a very wide spectrum of skills. I attempted to explain a rough categorization of 2 groups:
So yes, a programmer in group 1 -- let's say a 30-year veteran of COBOL -- can conceivably never have to make a decision about designing an algorithm & data structure to be O(n) vs O(log n) because he works at a higher abstraction level using COBOL. His domain of work doesn't need to deal with low-level things like raw pointers to linked-lists in C/C++ where Big-O complexity is considered when engineering a custom b-tree from scratch.
The programmers in group 1 are not any "worse" than group 2. They just do a different type of programming.
And, on the flip side, you don't need a goddamn degree to think about algorithmic complexity. It's pretty basic stuff at the level most developers ever get to care about it.
You don't need a "goddamn" degree to learn any single thing you can learn on a degree, and this applies to pretty much any degree you can think of, the books are available, as is online research.
The point is during a degree you are lead to some topics and guided through them.
That would be around the era of the Intel 80486 processor. All of us cared a hell of a lot about both algorithmic and data structure efficiency back then since computers were so feeble compared to today's systems; people who didn't couldn't produce programs that functioned properly.
>the era of the Intel 80486 processor. All of us cared a hell of a lot about both algorithmic and data structure efficiency back then since computers were so feeble compared to today's systems;
In the ancient 1990s, A COBOL programmer writing "green screen" terminal apps to hit a database on an IBM 360 mainframe doesn't deploy to 80486 desktop pcs.
Even today, if you type "COBOL programmer" into monster.com to search for jobs, most of the results will be programming work for mainframe environments instead of targeting consumer computers like iOS/Android/Windows/macOS/etc.
In the 90s, I wrote C and Fortran for DEC VAX and Stratus VOS mainframes. Even then our major concerns weren’t “algorithmic complexity” and being able to reverse a binary tree on the whiteboard.
You don't need to reverse a binary tree on a whiteboard, but you should have some idea of the complexity of what you're writing, or you'll write crap. Even in a CRUD context.
A 486 was more than powerful enough to run most workloads at the time even in high level languages without too much optimization. Anyone who thinks a 486 was “feeble” didn’t spend time optimizing assembly on a 1Mhz 65C02 by doing as much zero page memory access as possible to save a clock cycle.
If you only need to glue code (house building) - no degree (or same self taught CS knowledge) is okay. However, most business problems will require some design choices beyond 3rd party vendor offers. Be it a library API design, software system architecture or something similar
they do that by teaching fundamentals - problem solutions(thinking) with algos and their use cases, math, how to make/read a engineering chart, what is involved in IT systems and etc. You cannot skip those things. They need to be learned to design good APIs and software systems.
Side story: this is even true for pentesting (disclaimer: not a pentester, I was helping a friend to break into the career). The most recognized certification (OSCP) is about killing CVE's and dodging rabbit holes, that's it.
What I did on hackthebox.eu recently was:
<technobabble>
reverse engineering x64 assembly into C (silly, I should've used Ghidra instead). Then I started exploiting the heap by poisoning the t-cache, with that I could overwrite the GOT (getting an arbitrary read/write). Leak libc's base address bypassing ASLR, then using return to libc to exploit the thing (a ROP technique).
</technobabble>
Most of these things I learned during my CS master and it's apparently overkill for something like OSCP. More importantly, not all skills overlap. Dodging rabbit holes is not something you learn well. Understanding how to reverse engineer a binary has not much merit when it comes to finding a CVE and using metasploit, or some script on Github. Dodging rabbit holes and being fast at finding the right CVE's and using them properly to exploit a target are skills in their own right.
Basically early Computer scientists were mathematicians, so CS would essentially be a math major if you really think about it. Since it's all about translating math into boolean functions a computer can understand usually.
One theory could be that people do not simply have the previous experience in CS the same way they have it from physics, biology, chemistry and math from college or even before. I for once was interested in physics, started in electrical engineering but transferred quickly to computer science just after few mandatory courses I had taken.
As I wrote elsewhere, my money would be on the opposite if anything. Yes, there are base level science courses in high school. But you can sign on as a chemistry, physics, or mechanical engineering major with very little beyond some basic aptitude and interest.
At many schools, on the other hand, if you're following the CS curriculum you're starting off with topics like algorithms and effectively teaching yourself programming and maybe even how to use computers in parallel. This has changed a lot over time. When I got my non-CS engineering degree way back when, the one computer course I took was really a programming (FORTRAN) course that assumed zero prior knowledge.
My point was perhaps more on how much you actually get exposed CS as a subject before deciding it as something you would like to pursue in the future, unrelated to actual skill or interest in it. As an oversimplified analogy, in general, would anyone consider becoming a professional musician without having being exposed to instruments or music as a creative art form i.e. something you can actually learn and do? A hypothesis would be that if CS curriculum would be added more heavily to prior education, the amount of people majoring in CS would also rise.
Yes, in music (and much of the arts), there's an expectation that if you're enrolling in a program at school you have some degree of prior exposure.
But mechanical engineering? Chemical engineering? Economics? I'd argue that kids going into those fields may have read a bit and maybe tinkered a little at the periphery. Maybe in the case of ME they were in a robot competition. Etc.
But, in the case of pre-calc physics in HS for example, it barely gives a hint of what being a physics major would be like.
I actually don't know how much exposure to programming there is in HS. I assume essentially no "CS" per se but then, they wouldn't have the math for the most part. But I'd argue there are actually a lot more opportunities to get exposure to computer-related stuff than there is for other fields.
(To the degree, per my other comment, that there is something of an expectation at many schools that incoming students, like music majors, will have done so.)
One possible theory that's not mentioned in the article is that CS has probably become less approachable for those who don't enter college already somewhat versed in at least the basics. Something that is pretty much not true at all for any other STEM major.
I don't do a lot of programming myself, but I took an intro Algorithms in Python MOOC from a top school a while back. I think it's fair to say that, had I no appreciable programming/using a computer background, the class would probably have been impossibly difficult for me.
It's also less approachable for those that do know more than the current class being taught. I had been privately and self taught, going to a CS degree and learning the professor's dry and mangled way of teaching client-server architecture was like derailing a train I had been building for years and trying to drag it all the way back to the start.
Did you finish though? I've got a year and a half remaining and I'm working on some side projects and thinking about not finishing the remaining year...
PS. We have to study PHP and "AI" next year here. And the final semester is an unpaid project at some local company.
No I quit and moved to the other side of the world for a woman.
Do the side projects pay and have a future? Otherwise enjoy graduating with connections. You can quit future jobs to start a side project anytime (assuming no responsibilities).
Anecdotal, but I minored in CS so I wouldn’t be counted, even though I took the core algorithm courses and have continued studying since graduating 5 years ago.
I don’t see how one would know what they needed to interview at a FAANG without taking data structures and algorithms courses.
Algebra is just math, and information sciences entail more.
People go to university while they should go to school instead since universities are primarily about the progress of science while schools are not, but do primarily cater to the desire to have a job.
At the end of the day, the desired output of both institutions suffers.
In Japan, what many people would call basic "CS" is being taught at elementary schools in order to prepare the youth for the future...
And in case my argument is still not clear, they don't receive a CS degree for their accomplishments as its nothing but yet another basic prerequisite fulfilled.
Having completed most of CS undergrad, I can think of a reason that would discourage people to transfer into CS. Programming assignments usually take the most time to complete by far. As much as half of that time is wasted trying to decipher ambiguous requirements, unclear source code, or some other symptom of careless design and what seems like a total disregard for the student's time.
Replace “programming assignments” with corporate politics, deadlines that are defined with no actual thought behind them, and product owners that can’t write acceptance criteria to save their life.
Sounds like its pretty good preparation from my perspective.
Seems like you and a few other people believe that having your time wasted is the nature of work, or at least that it is typical. If you're dealing with this on a daily basis and you feel like it is not worth it, perhaps it's time to find a new job.
Very much agree with this. In some ways it appears intentional. To avoid “giving away the answer” professors will sometimes hand you a very fuzzy set of loose rules, perhaps 2 example test cases and you’re off to the races.
It’s funny because you can read about the same exact algorithm in Sedgewick or CLRS anyways, so I don’t know who they’re trying to fool.
Every time it happens it feels like my productive work hours are being stolen from me and there is no recourse. I'm considering (am going to, haven't had the time yet) billing my professor for time wasted.
I’ll be honest. CS doesn’t teach you how to program (anybody can learn that). CS teaches you how to think critically and analyze problems.
Also CS is just very difficult, especially with all of the theoretical courses. At a certain point, it becomes a test of your resolve as a person vs your ability to program.
> CS doesn’t teach you how to program (anybody can learn that). CS teaches you how to think critically and analyze problems.
And in my opinion that's perfectly fine. On the other side many jobs that are "just" programming really shouldn't require a CS degree. It should be up to the job market to come up with reasonable requirements, not the Universities to churn out graduates with a different skill set to comply with the market.
> At a certain point, it becomes a test of your resolve as a person vs your ability to program.
I feel like this sentence goes somewhat counter to what you said before. If CS isn't primarily about programming, which I agree that it isn't, why should it be a test of my ability to program? I disagree that it's merely a test of your resolve, however. Sure, you need to have resolve to complete a hard degree, but the same applies to many other subjects.
I'd much rather say it's a test of your ability to think abstractly, generalise and recognise patterns.
I think that’s the problem. At my university you had to pass both the theoretical and practicals in order to graduate.
They taught the theoretical, but expected you to just pick up the practical as needed. If you couldn’t learn Java in a weekend, you would fail the first coursework.
I graduated in CS. The education helped me in two ways:
1. Getting an internship and then a job at a large enterprise company right after graduating.
2. About 5 years in professional software development, I was starting to be included in architecture and system design discussion meetings with key decision makers on large projects. Where my non-cs colleagues with the same skill level could not keep up with the conversation.
During the time in the between, what helped the most was having the discipline to follow through on finishing small projects that would fill the gap in areas of software development that I didn't understand at the time.
I can see why most would be programmers would not want to study CS as it won't immediately help them become better programmers. In the long term, I feel that its worth it to have a grounded education in the industry that you work in. After a recent trip to the Bay Area, it doesn't feel that many new grads are about that dev life. The sentiment is get that 4-year, 1-year cliff and FIRE(https://en.wikipedia.org/wiki/FIRE_movement)
I skimmed the article so tell me if I'm missing something here but in my experience computer science isn't the major of choice to become a "programmer" anymore.
Having gone through the hiring process at three different companies focused on both desktop and web based software, computer science majors were an extreme minority. Most people had a business degree with a programming component attached like Management & Information Systems.
Maybe it its worth looking into how many would be CS majors choose to do the less math intensive but more industry relevant business school option.
My CS degree if anything gave me a solid understanding of the line between problems you can solve with a computer, and the ones where you could throw technology at it, but you'll inevitably create more problems than you'll solve, because the real problem is a socio-political one.
It also gave me the framework of understanding to be able to reason about what is actually going on, and how. Being fluent in the major abstractions of a computer system allows you to more easily skip around between working in different real world contexts without getting flummoxed at your lack of knowledge on how that particular field does things. You know and can recognize the problems that you can best solve with a computer; so you just go ahead and fill the niche when necessary, and try to avoid the politics if you can/value your sanity/conscience.
76 comments
[ 3.4 ms ] story [ 131 ms ] threadLots of math and hard science is in the major. It's not an alternative to the humanities and liberal arts and languages. It's done in addition, which just isn't fair at all. Students take two or three semesters of calculus-based physics, three semesters of calculus, two semesters of discrete math, engineering statistics, linear algebra, differential equations, and often even more science.
A person majoring in education could skip all that, even if intending to be a math or science teacher.
How different is this from engineering more broadly, to say nothing about math or physics majors? (I can see CS being a bit more math-heavy than some other engineering disciplines because at many schools, it's been historically associated with the math department but I think the general point stands.)
To understand these numbers, I'd have to understand better how degrees roll up into Computer & information sciences vs. Engineering & engineering technologies. At many schools, "CS" is in the engineering school, often associated with electrical engineering.
This.
I tried going back to school for a CS degree at 26 after 5 years of professional experience in the bay area as a developer. The CS classes are trivially easy, but I simply could not do the math. I paid for tutors. I lived on Khan Academy all day long. I tried three semesters in a row to pass calculus and just couldn't do it. The vast majority of people simply cannot pass the math classes required for an engineering degree.
Questions you do with others, or examples from the book are useful for conceptual clarity, but that clarity can only be guaranteed to be solidified if you successfully do questions without help.
People often think you don't need practice to master math, but don't bat an eye when they see professional football players passing the ball to each as warm up before a big game (after having played the game for 20 years and passed the ball 100k times already). Fundamentals are important. I just started learning drums, and my music teacher has been making me practice the same beat for the past 3 months over and over again till I absolutely master it. Me and every other student is happily doing it.
This is almost like saying, basketball players don't need to do pushups during the basketball match, so basketball training should skip push ups. The reason all engineers and scientists (computer or natural) should do calculus/differential equations/hard math courses is because these courses make students smarter.
They are a form of mental exercise that permanently increase your maximum brain capacity and your ability to do complex logical reasoning. It is possible you could replace these courses with some more job-relevant courses, but those courses would have to be just as brain wrinkling as these courses, if you wanted to maintain the current intellectual level of the industry.
I find most “computer science” people don’t want to actually worry about producing products that people want nor do they want to worry about the actual business domain.
There is a reason that despite all of the “smart people” that Google has, they have consistently failed at every product that isn’t advertising.
Or convince some university to create a "software business" major so they can streamline themselves into a management role at a software company.
Jobs famously killed Apple’s Advanced Technology Group that brought the world things like PowerTalk, OpenDoc, and QuickDraw GX. Microsoft’s Research division hasn’t done much better. I’ve already mentioned that Google has wasted untold millions on products that no one wanted.
But the bigger question is are the degrees actually preparing students for the real world outside of Silicon Valley where companies actually want people who can add business value? Will it prepare people to compete for jobs against cheaper foreign labor where they are more focused on actual “occupational training”?
CS majors come out of the gate making 100K, can change companies whenever they want, are mission-critical assets wherever they go, and work in ivory towers.
For the benefit of society, or the country, or the world, or something like that... the situation is terrible. We're wasting years of human lives on unproductive education. We're excluding capable people from CS careers. We're driving up the cost of software.
If we trimmed out the non-CS stuff, people could do combined BS+MS degrees in the time that we currently spend on BS degrees. The extra CS education would be valuable to the people and to their employers.
And to some degree, isn't the job of science to make life easier for the rest of us? I know some people scoff at people that don't have CS degrees, but it's important to be realistic about science's role in industry: thanks to the combined output of a lot of very talented computer scientists, computer programming is getting easier and more approachable with every passing year. It's not uncommon now for people with very little knowledge of computer science to build all kinds of complex applications. I see that as a victory for computer science, not a setback. And I think the people that want to apply science are just as important to the success of our industry as those who want to develop it.
A person majoring in education earns nowhere close to what STEM grads does even if intending to be a math or science teacher. Knowing those things is what makes you valuable, anyone can learn programming but not everyone will know how things works and you can't program stuff you don't understand.
As someone who graduated recently and is going through this process right now - I always thought I would be set because I'm a decent problem solver, aced all my algorithms and data structures classes and generally could solve most interview style problems I came across. I've learned that this is not enough. An organic problem solving process might involve trying several promising approaches, or starting with a suboptimal algorithm and realising improvements to it, and then you might figure out an optimal solution. In many of these interviews the time constraints can be absurd, you basically have to have done the questions or variants of them recently to be able to write down the optimal solution in your first iteration.
Today my friend had a first round online screening from Atlassian - 5 questions in 90 minutes, and none of them were trivial warm up level questions. Compound this with the fact that it's often harder to solve problems and think creatively when you're under time pressure in an interview, and you realise that your only option is to do 200+ Leetcode problems and just hope your interview overlaps with those problems.
Most businesses only care about making money. Unless your unique algorithmn costs less to implement and can make money right away, you are out of luck.
Hell, all the stuff you learn at school about algorithms and faster ways of doing work, has been negated by hardware advances that mask poor coding practices.
Go get an information systems degree, learn to code, and make money. The world is going to need coders and IT people for a very long time.
Well, that or getting acquired....
Sometimes it isn’t, and we end up with Electron on the desktop :(
I felt like I went from a forward looking, enlightening major - to become where you end up in the details worrying about semantics. CS is mind expanding; coding is specialist mind numbing boredom.
Also you get a better house if the architect who designed it also builds it.
And eventually the house builder gets enough experience to become a much more useful architect because they know what's actually possible and what is purely academic.
Sure, you can get the knowledge in other ways, and sure, some of the houses built by people who haven't studied architecture are great too.
Some aren't though, and their builders could have benefitted from a bit of theory ahead of time.
It's almost more like the relationship between materials science and hoise building - it can enable you to do a better job.
For those saying you've never been helped by your CS degree, I think you either took a bad degree or you'be been stuck in un-taxing work. You've seriously never bothered thinking about, say, algorithmic complexity? Or other topics that should have been covered?
There are lots of successful working programmers that will never need to deal with "algorithmic complexity" because "programming" encompasses a very wide spectrum of skills. I attempted to explain a rough categorization of 2 groups:
https://news.ycombinator.com/item?id=12079697
So yes, a programmer in group 1 -- let's say a 30-year veteran of COBOL -- can conceivably never have to make a decision about designing an algorithm & data structure to be O(n) vs O(log n) because he works at a higher abstraction level using COBOL. His domain of work doesn't need to deal with low-level things like raw pointers to linked-lists in C/C++ where Big-O complexity is considered when engineering a custom b-tree from scratch.
The programmers in group 1 are not any "worse" than group 2. They just do a different type of programming.
The point is during a degree you are lead to some topics and guided through them.
That would be around the era of the Intel 80486 processor. All of us cared a hell of a lot about both algorithmic and data structure efficiency back then since computers were so feeble compared to today's systems; people who didn't couldn't produce programs that functioned properly.
In the ancient 1990s, A COBOL programmer writing "green screen" terminal apps to hit a database on an IBM 360 mainframe doesn't deploy to 80486 desktop pcs.
Even today, if you type "COBOL programmer" into monster.com to search for jobs, most of the results will be programming work for mainframe environments instead of targeting consumer computers like iOS/Android/Windows/macOS/etc.
I ran into a guy responsible for roof repair for company buildings on a flight. He said, "the greater the architect; the worse the roof leaks."
What I did on hackthebox.eu recently was:
<technobabble>
reverse engineering x64 assembly into C (silly, I should've used Ghidra instead). Then I started exploiting the heap by poisoning the t-cache, with that I could overwrite the GOT (getting an arbitrary read/write). Leak libc's base address bypassing ASLR, then using return to libc to exploit the thing (a ROP technique).
</technobabble>
Most of these things I learned during my CS master and it's apparently overkill for something like OSCP. More importantly, not all skills overlap. Dodging rabbit holes is not something you learn well. Understanding how to reverse engineer a binary has not much merit when it comes to finding a CVE and using metasploit, or some script on Github. Dodging rabbit holes and being fast at finding the right CVE's and using them properly to exploit a target are skills in their own right.
People major in it because they can get jobs. And sometimes due to it being well taught and/or fun.
At many schools, on the other hand, if you're following the CS curriculum you're starting off with topics like algorithms and effectively teaching yourself programming and maybe even how to use computers in parallel. This has changed a lot over time. When I got my non-CS engineering degree way back when, the one computer course I took was really a programming (FORTRAN) course that assumed zero prior knowledge.
But mechanical engineering? Chemical engineering? Economics? I'd argue that kids going into those fields may have read a bit and maybe tinkered a little at the periphery. Maybe in the case of ME they were in a robot competition. Etc.
But, in the case of pre-calc physics in HS for example, it barely gives a hint of what being a physics major would be like.
I actually don't know how much exposure to programming there is in HS. I assume essentially no "CS" per se but then, they wouldn't have the math for the most part. But I'd argue there are actually a lot more opportunities to get exposure to computer-related stuff than there is for other fields.
(To the degree, per my other comment, that there is something of an expectation at many schools that incoming students, like music majors, will have done so.)
I don't do a lot of programming myself, but I took an intro Algorithms in Python MOOC from a top school a while back. I think it's fair to say that, had I no appreciable programming/using a computer background, the class would probably have been impossibly difficult for me.
PS. We have to study PHP and "AI" next year here. And the final semester is an unpaid project at some local company.
Do the side projects pay and have a future? Otherwise enjoy graduating with connections. You can quit future jobs to start a side project anytime (assuming no responsibilities).
I don’t see how one would know what they needed to interview at a FAANG without taking data structures and algorithms courses.
People go to university while they should go to school instead since universities are primarily about the progress of science while schools are not, but do primarily cater to the desire to have a job. At the end of the day, the desired output of both institutions suffers.
In Japan, what many people would call basic "CS" is being taught at elementary schools in order to prepare the youth for the future... And in case my argument is still not clear, they don't receive a CS degree for their accomplishments as its nothing but yet another basic prerequisite fulfilled.
Sounds like its pretty good preparation from my perspective.
It’s funny because you can read about the same exact algorithm in Sedgewick or CLRS anyways, so I don’t know who they’re trying to fool.
Also CS is just very difficult, especially with all of the theoretical courses. At a certain point, it becomes a test of your resolve as a person vs your ability to program.
And in my opinion that's perfectly fine. On the other side many jobs that are "just" programming really shouldn't require a CS degree. It should be up to the job market to come up with reasonable requirements, not the Universities to churn out graduates with a different skill set to comply with the market.
> At a certain point, it becomes a test of your resolve as a person vs your ability to program.
I feel like this sentence goes somewhat counter to what you said before. If CS isn't primarily about programming, which I agree that it isn't, why should it be a test of my ability to program? I disagree that it's merely a test of your resolve, however. Sure, you need to have resolve to complete a hard degree, but the same applies to many other subjects.
I'd much rather say it's a test of your ability to think abstractly, generalise and recognise patterns.
They taught the theoretical, but expected you to just pick up the practical as needed. If you couldn’t learn Java in a weekend, you would fail the first coursework.
1. Getting an internship and then a job at a large enterprise company right after graduating.
2. About 5 years in professional software development, I was starting to be included in architecture and system design discussion meetings with key decision makers on large projects. Where my non-cs colleagues with the same skill level could not keep up with the conversation.
During the time in the between, what helped the most was having the discipline to follow through on finishing small projects that would fill the gap in areas of software development that I didn't understand at the time.
I can see why most would be programmers would not want to study CS as it won't immediately help them become better programmers. In the long term, I feel that its worth it to have a grounded education in the industry that you work in. After a recent trip to the Bay Area, it doesn't feel that many new grads are about that dev life. The sentiment is get that 4-year, 1-year cliff and FIRE(https://en.wikipedia.org/wiki/FIRE_movement)
Anyone can learn proper system design by working in the field and being exposed to proper design first hand.
Having gone through the hiring process at three different companies focused on both desktop and web based software, computer science majors were an extreme minority. Most people had a business degree with a programming component attached like Management & Information Systems.
Maybe it its worth looking into how many would be CS majors choose to do the less math intensive but more industry relevant business school option.
It also gave me the framework of understanding to be able to reason about what is actually going on, and how. Being fluent in the major abstractions of a computer system allows you to more easily skip around between working in different real world contexts without getting flummoxed at your lack of knowledge on how that particular field does things. You know and can recognize the problems that you can best solve with a computer; so you just go ahead and fill the niche when necessary, and try to avoid the politics if you can/value your sanity/conscience.