Why do so few people major in computer science?
danwang.co
danwang.co
Even if you are of the opinion that CS is math, and coding doesn't come into it, you will hit a coding wall early on.
In fact, every exercise in CS has this problem. You add a new thing (eg inheritance), and it breaks. But not only that, it might be broken because of a banal little syntax problem.
And that's just what you consider code. If you put in the wrong compiler flags, it breaks. If you can't link because something needed rebuilding, it breaks. Want to avoid it? Learn how make works. Huge number of options, which you won't understand, because you're a novice.
Oh and learn git, too. And Linux. Just so you can hand in the homework.
Compare this to the rest of university. I'll use my own experience.
- Engineering subjects tend to revolve around a small number of vignettes. Here's an aircraft engine in thermo. Draw some boundaries, apply some equations. If you get it wrong, your tutor can still see if you were going the right way. Once you've learned the relevant points, it's not hard doing some rearrangements and plugging in some numbers.
- Economics essays are basically bullet points. Miss one out, you still have an essay. Which you can hand in without knowing git.
My CS program was really easy and I still don't know how people who hadn't put hundreds to thousands of hours into picking up that stuff in the years before college made it through. Many didn't, I guess. With some programming background on top of that it was pretty much a cakewalk for me, but the poor n00bs....
This, I think, is the core issue. Like most of us here, I started playing with computers as a young child, from a Timex Sinclair 1000 as a pre-teen to a Commodore 128 as a young teen, then an Amiga and beyond. It wasn't work, it was fun, a hobby. And more importantly, by the time I hit college, I had literally thousands of hours of practice just being immersed in how computers work.
I started tutoring other students in CS for some beer money, and it was a real shock at how awful otherwise very intelligent people were at what I considered utterly trivial questions. But they weren't trivial. They were only simple if you already had a complex, detailed and well-worn model of how computers work running in your head. Without that, even simple computer tasks may as well be written in cuneiform for all the good it does the genuinely new student.
I'm not even sure it is possible to take a young adult who is truly computer illiterate and have them succeed in a technical major. At least not in a standard 4 years. There is simply too much foundational knowledge you need to have before you can even begin the real work of learning what to do.
What surprises me is the lack of consolidated resources addressing these basic pain points. I don't think it would be hard to come up with a list of examples just by looking at a normal work day and taking a step back; really evaluating where you're relying on basic knowledge to do even the most mundane of tasks. Once you've been doing this for a few years those tasks are just that - mundane - but for beginners it's having difficulty with those basic parts that is a real turn off. "How will I ever be any good at this if I can't even download code off this thing called Github". If someone could point me towards some kind of existing resource covering a bunch of different areas in this way I'd be really interested in having a read.
On a related note, I'm reminded of one of Dan Luu's related essays on debugging [1], which I recommend reading if you haven't already.
Thanks for clearly articulating this in 6 words: "Stupid Computer Shit we all know". This is something many people aren't willing to acknowledge (aka tribal knowledge gained from lots of trial and error).
It perfectly summarizes what pg tried to communicate in a 2013 interview [0] where he said founders who have been "hacking for the past 10 years" have an enormous competitive advantage over founders who haven't i.e. female founders when it comes to starting technology companies.
Unfortunately, the tech press [1][2][3] went out of its way to grossly misinterpret what pg was trying to say [4].
[0] https://www.theinformation.com/YC-s-Paul-Graham-The-Complete...
[1] http://valleywag.gawker.com/paul-graham-says-women-havent-be...
[2] https://www.theatlantic.com/technology/archive/2013/12/paul-...
[3] https://www.quora.com/Is-it-possible-that-Paul-Grahams-comme...
I figured most other classmates were the same. However, the amount of skill variation I witnesses as a lab assistant where intro course students would plead with me to basically complete their assignments after I helped them once was mind-opening. Horrifically formatted code. Unable to use copy-and-paste keyboard shortcuts--or any keyboard shortcuts, really. Unable to run and debug code. Unable to find where in the file system the compiler or their commands were running. Unable to understand file system permissions, etc.
There was a huge valley between those with no experience that just wanted the CS degree for a well-paying job, and those that already had CS experience and wanted CS for a well-paying job that they would enjoy*
*theoretically
It’s all about what you know...
There was a good class on Coursera a while back called "Startup Engineering" which did cover some of this even though it wasn't the focal point of the class.
Of course, it would be impossible to cover every little detail - but a class dedicated to SCS would still be super useful.
I couldn't explain how to make it make sense if my life depended on it. It just happened.
Loop, increments, semi colons, returns, recursive everything was a deterrent. But this wasn't the real problem. The real problems were the teacher and the rest of the class. Pretty much everyone else, most of them were from the that city or other cities and had been doing CS from quite early on - many of them had their own computers to my surprise (it was quite pricey back then), as they didn't face any challenges and the teacher expected me to just go at the same speed and catch up somehow. I tried to seek his attention and get some help with the challenges I faced and he would just say a thing or two and move on, or ask a student to help me who'll help with "no, you have to put a '==' there, not '='" and I would never know why. At that time of of struggles books confused me more. I was shocked to see years later that why they didn't use C&R and why Robert Lafore and some Indian authors. Why? Also, this was also the first time I was introduced to the purely commercial nature of education where the "connection" in the class was missing right from the start which I was used to having been to boarding schools and semi rural schools.
I failed. Miserably. Again and again. But I still kept the course throughout 11 and 12, though I had a strong urge to drop it in 12 (just before the board exam; the one that matters and you get a certificate for this) and opt for something familiar and straight like Economics or Sanskrit which was I really good at. I don't remember why but I guess it was the urge to prove myself or get something that will get me or job or so; as that's what I had known about CS. I can't recall.
Anyway, for some reason my seat during the board exam (during CS paper; your seats change for all the papers) was diagonally behind my best friend who knew pretty much everythiing in the paper and I ended up scoring 3 marks higher than him out of 100. He's still cross about it.
Well, I never recovered from those initial CS trauma days. I still feel daunted by anything new in CS and get stressed. First I try to avoid it and question the need of it in the first place (like I did when I was asked to move to frotend/Angular from Android) and after a few weeks or few months when I have my hands dirty with it and I find it easy like muscle memory I look back and wonder why I was worried about it and it repeats.
tl;dr at least in CS you get immediate negative feedback
It's fun to observe the teacher's reactions sometimes when it is apparent that the student presenting is clearly heading towards a train wreck of some sort due to misunderstanding the question, not being rigorous enough, or just being generally confused about the subject matter. Occasionally I've seen professors at the math dept get this visibly pained look in their face as they watch a CS student abuse their beloved math in particularly horrendous ways.
Incidentally, this is also why we see so many "experiments" in production code, which is the downside.
Taking Calculus I in college most of the class had taken the course in high school. The most advanced math course in my HS had been Algebra II/advanced geometry. So they were ahead but it wasn't insurmountable, it was still math.
A classroom CS student trying to get an application to work asks a SCSWAK repository for assistance. One notepad app is suddenly 2 terminal windows with EMACKS? (at least it wasn't vim) on one and the other lots of lists go bye and quick commands are being entered while asking where the file is saved. "Nevermind, found it." The file contents show up but no editor was opened. Then there's all kinds of key combinations that no sense on the EMAKS just to move around! (add in more to the story).
One is still getting used to the operating system while the other has logged thousands of hours plugging away at the CLI. (Remember MUDS?) How the heck are the next 2.5-4 years going to be if the classroom CS couldn't follow anything he just saw?
Being around a bunch of SCSWAK who seem to naturally grasp everything can scare off students. IMHO the instructors for the low level CS courses should talk about this and get the classroom CS students to realize they can do just fine in the courses and SCSWAK are great resources if you can't find your answer on google. Also, the best way to actually learn something is to teach it. Thus, there's an opportunity for the SCSWAK group.
I would say that this basically screams "badly taught programming". Missing semicolon does not take down work, it just needs to be put back in and ide should help you.
"Even if you are of the opinion that CS is math, and coding doesn't come into it, you will hit a coding wall early on."
I mean it seriously, programming is easier then math. I am telling that as someone who always liked math.
"And that's just what you consider code. If you put in the wrong compiler flags, it breaks. If you can't link because something needed rebuilding, it breaks. Want to avoid it? Learn how make works. Huge number of options, which you won't understand, because you're a novice."
This is not something novice should be dealing with.
"Oh and learn git, too. And Linux. Just so you can hand in the homework."
As I told, badly taught programming that takes in people who know nothing and then proceed as if they already learned stuff in the past.
The point is that the incidental complexity is there, and that it's something that has to be dealt with, to even begin to get to the fundamental part of the problem.
That you have to be using the right IDE (and learn how to use it, and learn to recognize it's attempts at helping you with the problem) does not refute the point, it's a perfect illustration of it.
CS isn't harder. CS has high incidental complexity, the crap you have to deal with just to be able to work on the problem within a real world environment.
Eventually some people got me back into Flash development (I had dabbled before and had a couple sort of popular things on Newgrounds, and they were asking me for help). I then made a couple of games that were super popular and realized I probably wasn't in the wrong field after all, and eventually went back to college and finished my degree. It was easier the second time around, and I had much better teachers.
Now I've been in the industry for about 10 years and have worked on all sorts of different types and sizes of programs and learned and used dozens of languages and technologies.
That was back in the 90s when I had that semicolon problem, and I'm pretty sure compilers have improved since then, because I usually see compilers catch missing semi-colons pretty much exactly where the problem happens nowadays. Also there was no Stack Overflow back then, and most forums weren't terribly helpful either, and programming blogs were a lot less common and comprehensive.
I remember specifically that I had difficulty wrapping my head around the concept of linked lists and there seemed to be no where to find that information besides my professor who was a real jerk and said, during his office hours, the specific time he's supposed to be available to help students, that "if i didn't understand it during his lecture he couldn't help me" and two old books in the school library that had a few paragraphs about it each.
Alright, so both the hard sciences and CS have less traffic than say business, but then physical science has been growing and CS has not, and so we've solved nothing.
So we have a huge increase in CS majors in just 6 years. What could be the explanation for that? I would say that CS has become both more rewarding and more accessible in the last decade.
More rewarding because with better browsers, and with smartphones, you can simply do more stuff. And those who graduated in 2009 started studying just before iPhone, before Google Chrome, HTML5. Long before Tesla and SpaceX were household names, long before we again believed in AI and robots. The field has simply become more and more interesting.
More accessible because of Codecademy, Udacity, Udemy and the rest of the bunch. 10 years ago, learning to code meant reading books that were already outdated when you bought them and spending days in frustration trying to install whatever language you had decided on. Before you did as much as a hello world. Unless your friends knew how to code or you were enrolled at an educational institution you didn't have access to tutors. Today, you can get great tutorials online, and you can learn JS, python and many other languages without the hassle of installing anything. And once you are up and running, there are a plethora of libraries, modules, frameworks and ways of deploying which mean that you can do in weeks what before could take years.
If your engineering project doesn't work, there's no pretending that it does. It's the ultimate in fairness :-)
I find those strong in programming may be prolific in what they write, but often have to rewrite portions as they encounter problems with their design. A more probe and prod sort of solution to the problem, where you feel your way through. I often do this. On the other hand, I have known people that take quite a bit more time up-front to think about problem areas, and end up programming generally what they thought in the beginning (with some delays as they stop to reexamine problems as they come up, but generally before too much time has been wasted on an incorrect solution). I strive for this.
Being able to do both at roughly the same time, so you come up with a good model that you quickly get implemented, is what I think makes a good programmer. I think a great programmer is someone that does that but also sees interesting new paths that others often miss, leading to more elegant solutions more often.
Clarify your terms. There is a huge difference between willing to take on liability for your faults versus slinging code.
'Cept physics. Misalign a mirror or shake the table and all your experimental data is bogus, and you don't find that out until you've analyzed your data and realize it's nonsensical.
I suspect other hard sciences (chemistry, biology) have similar issues, but am not familiar enough to judge. I started out as a physics major and switched to CS in my last semester...CS is hard, but not nearly as hard as the hard pure sciences.
An example from math: you make one tiny logic error while composing a proof and miss it until you start rereading, then you might have to start all over again from scratch.
As someone with degrees in non-CS engineering fields, I mostly find the idea that programming on a stable computer has a high frustration/grief factor to be pretty funny.
"If you can't recompile a linux kernel by the time you graduate, you have learned nothing. Oh, yeah, also, we wont teach you that - it's just something you will run into. "
-- Professor Norman S. Matloff
Isn't that what makes CS easier? You get immediate feedback. You know if it will be right or wrong before you even turn it in.
So you have to sit there and make sure it actually works. I'm not a programmer, but I took CS courses. Debugging your homework is fucking awful. I understand it's a skill necessary for programming, but it's awful. Especially when the bug is a mistake that is unrelated to the topic of the homework.
I remember pulling an all nighter trying to figure out why my problem set didn't diff correctly. I must have spent 20 hours on a single bug.
In most other subjects, there are ways to get most of the feedback in one go.
Most student-written test suites I've seen are not nearly this thorough.
Say you could learn to build aircraft engines, understand how the economy works (which has a huge influence on people's lives) or learn how to make a computer print "hello world" on a terminal screen and how to efficiently store data. Most people wouldn't choose the latter. It's actually quite hard to describe what computer science is and why it is a science.
Or the other end of the spectrum, where you are a cube-dweller, who shuffles endlessly to Scrum meetings, does email, enter garbage into JIRA, and once in a blue moon gets to write a little code that might possibly be executed as part of some faceless, soulless enterprise monstrosity.
Also, in the end, big companies like Google and Facebook are IT companies, or advertisement companies, and they are after your private data. I guess most people would rather choose a more noble goal in life.
And finally, tools created by big companies such as Google docs perform worse than wordprocessors of the 90s. Yes, they allow collaboration now, but still, they are perceived as slow. In people's minds, IT is not progressing much.
I took ML in person at UIUC 4th year / graduate cross-listed level, and the 3rd year Stanford algos course on Coursera (supposed to be identical to the material in the actual course, yes yes though feel free to laugh b/c it's Coursera). These classes were interesting, but about as challenging as typical second year math/physics classes. They are peanuts compared to senior math/physics classes.
That said I still think CS is more challenging than most majors, it's just that the "few" is much more highlighted because there is very high demand. Certainly way higher demand than math/physics, and more demand than other fields that are still reasonably challenging like engineering, pre-med, etc. It's definitely the field where some reasonable increasing function on both demand and difficulty is maximum.
Now I'm looking at git again in my free time it's a pretty nice tool, and I can't imagine that I loathed it so much when I had to use it for a course.
The programming people do most of is incredibly easy. Stop perpetuating the myth that programming is hard. People have changed careers to programming using week-long courses. No, they're not working on OS design, they don't contribute to the Linux kernel, but they work as programmers.
Don't kid yourself people, most of you work on CRUD shit. For every systems prgorammer there's a thousand front-end monkeys. Most of you work at such a high level it's basically just lego, glueing components together, with your hundreds of .JS files in your project, none of which you wrote. This is what most of you actually do. Complete packages like Rails... a six-week course can change people's lives (not a bad thing).
There is programming that is hard, it's just that that is not the type of programming most people do, and it's becoming more and more rare.
Only somebody with zero experience with wet lab chemistry or biology could ever write the above with a straight face.
At least you can fix a missing semicolon. If you screw up a long-running organic synthesis, or you kill your bacterial colony around generation 2,000 all you can do is start the whole thing over.
The author's point was that the early unforgiving nature of programming could possibly be a factor in the potential lack of growth in the field.
As for git, that only takes a few days at most to learn to the level you need to use it in school, at least if you're even remotely technically minded.
In undergrad CS courses I learned about, oh, databases, algorithms, data structures, inheritance, and so on. In undergrad math courses I learned vector calculus, abstract algebra, linear algebra, numerical analysis, differential equations, etc. In science courses I learned organic, physical, and inorganic chemistry, some of quantum mechanics, how to use instruments ranging from: mass spectrometers, gas chromatagraphs, infrared spectrometers, UV-Vis spectrometers, flame emission spectrometers, Nuclear Magnetic Resonance spectrometers, as well as cramming "free time" during the weeks/weekends with lab time. If anyone came up to me and asked "so, do you think studying computer science is more difficult than vector calculus or quantum mechanics" I'd laugh in their face.
No, CS is not uniquely difficult among college majors. I'd say there are a few major factors why CS majors haven't grown at the same pace as others. One is that the number of CS majors ballooned in the '90s when the industry started blowing up, and it's been a bit inflated since then. Another is that a CS education is treated as a necessary and sufficient pre-requisite for becoming a software developer and it's really ill-suited for that. Software dev. is not scientific work, a lot of what they teach in CS programs is not hugely applicable to being a good developer, and a lot of what you need to be a good developer isn't taught in Universities. Parallel to that, you can jump into the industry "running" if you just start coding and getting experience and learning while doing. That is often a superior way to build your skillset, build your network of colleagues, build your resume, and start making money instead of digging yourself into student debt. So a lot of people who enter the industry go that route. That also has it's problems but on balance it's probably the better route for most people.
>In fact, every exercise in CS has this problem. You add a new thing (eg inheritance), and it breaks. But not only that, it might be broken because of a banal little syntax problem.
That can be said for math as well, switch a + for a - at any point and the whole solution crumbles down, or use the wrong method of resolution and you are in for a world of pain.
>Oh and learn git, too. And Linux. Just so you can hand in the homework.
Again, comparing that to math, learn all the different notations used just to understand what the problem asks of you.
Point being that any scientific course require a part of self study to get what you are doing. Although I can certainly agree that the way CS is taught now interwines many basic things that should be on their own course and could do with some reorganization, even though it's hard for universities to keep up with the way most of current day tech advances.
Of course, you probably won't progress very far career-wise (or maybe you'll become a manager...) if you never venture out of the little box. But the amount of effort you'll have to invest to reap a solidly upper-middle class income is pretty minimal.
If you spend 2-3 years in industry and don't get fired, you probably know how to code well enough to satisfy your employer. And at that point you're probably gonna get more (career) value working on soft skills like planning projects, managing expectations, navigating bureaucracies, etc.
At age 14 I used to copy BASIC into my Atari 600XL, QBASIC into my old 5150 and 486 PC, some HTML in the 90s, some Python, Perl others here and there.
So I tried to go for CS about ten years out of school and Java got me.
My brain just doesn't seem to like programming.
That is not true. You do not put your "whole tower" back together again when you move cursor and type the missing [';'].
[edit]
With programming, you have plenty of tools that detect errors for you. With maths you sometimes will only see the error after somebody else (like the tutor) point it for you.
Therefore you can be much more efficient when programming than when doing proofs and other maths stuff.
Except with economics, as you point out :)
They should know linux/unix/gnu before they start on anything cs related.Are you really suggesting the people that don't know anything about computers should be taking cs?
Git would have made debugging the missing semi colon a lot simpler because it makes the divide/conquer approach simpler.
I think his point 1 is underrated. CS degrees are flat because aptitude is flat.
You can compare CS degrees to other degrees over time at nsf.gov:
https://www.nsf.gov/statistics/2016/nsb20161/#/report/chapte...
We have more grads than ever, but they are dumber than ever (we have the data to prove this), getting less difficult degrees.
I have a bad feeling that we are running up against some diminishing returns on education and hiding it with numbers like the total number of grads. The number of grads for difficult degrees and the quality of grads seems to be another story.
> In 1970s 1-in-2 college grads aced Wordsum test. Today 1-in-6 do. Using that as a proxy for IQ of the median college grad, in the 70’s it was ~112, now its ~100.
More stats: https://medium.com/@simon.sarris/why-is-computer-science-enr...
In the early 2000s it was widely perceived as the economically smart thing to go into a technical field other than CS, especially petroleum engineering, chemical engineering, and similar areas, or maybe even better, a non-technical field like law. They had higher pay and were seen as more stable employment options. CS employment was seen by many people as unlikely to ever fully recover from the dotcom crash, partly because of mass outsourcing. So unsurprisingly, new enrollment numbers were low, and some departments at smaller schools even closed. Then from around 2005, CS began to be seen as a lucrative again, and enrollment has been steadily rising every year since then. Universities have responded likewise by reopening CS departments, hiring more faculty in existing ones, and increasing class sizes (so enrollment growth is actually considerably outpacing faculty growth).
This does not look to me like a market that fails to respond to economic incentives, but exactly like one that does respond. Maybe it ought to respond even faster, although if it did in general, the CS-degree crash of the 2000s might've been even deeper than it was.
This is why I never believed the "There is no STEM shortage" stories. They were mostly based on the assumption that all STEM grads were qualified to work in STEM. That's not true in any field where you can complete a degree with a C or D average.
I find it unfortunate that some of the larger software companies filter out applicants based on the school they graduated from, but I understand it. The companies have to have some sort of filtering mechanism, because many colleges clearly do not.
That doesn't match what I see in the ground. I get 10-20 interns a year on my teams from big state universities and liberal arts schools with CS and stem degrees.
They tend to be awesome. The best ones outperform most of the consultants you find.
the "college for everyone" experiment is grinding our society into paste and generating enormous debt burdens for an entire generation. time to end it.
those with aptitude for programming can learn programming without a college degree. let's find out just how flat aptitude really is. all we know now is that aptitude is flat in the institutional environment.
But bio and ag sciences are beating out Psychology, which is a bit of a reversal. Biology isn't easy, especially not any program with a requirement for organic chemistry. Could that be b/c the big midwest and southwest universities (Iowa, Texas A&M, etc) have large bio/ag programs to support that industry in their region?
The choice of what to study is not a rational decision but a social decision. People follow their friends, guys go study what the hottest girls he knows are going to study, parents push kids to study fields that they themselves perceive as high-status like finance, law or medicine.
The biggest problem with computer science degrees is that it is a relatively new field and it hasn't been embedded in society as high status yet. This will change, but it will take generations for it to take effect.
The field is obviously difficult but you don't have to be a genius to get a CS degree, it doesn't require much more determination to study ridiculous amounts of jargon for law or medicine degree then to understand complex discrete mathematics problems. The social cost of "failing" a law degree is much higher (parents complain son of X did pass and he had similar SATS) then failing an engineering degree (parents understand "it", they don't understand computers either).
I'm not sure status plays into it, but I think you're onto something in that it's not fully established yet. If you want to be a doctor, you need an MD. If you want to be a lawyer, you need a JD. If you want to be an engineer in the physical world (civil, mechanical, nuclear, chemical, etc), you need that degree. But if you want to be a developer, you just need to demonstrate and ability to do it. You can have your degree in a completely different subject, and you're still able to get the job. I've even seen places that preferred hiring mechanical engineers and physics PhDs to write code. Likewise, there's no professional accreditation board and certifications are often viewed negatively by employers.
In time, as programming develops as a discipline, one of two things will happen. Either these barriers to entry into the field will spring up and the CS degree and subsequent licensing exam will become a prerequisite for working in the industry or programming will become a part of the curriculum for many other disciplines and the days of being a specialist in programming will he over. But it's still new enough that neither end state has been reached. And in the current state, the only purpose of a CS degree is to learn. On paper, after four years in college, you'll be a less desirable hire than someone who spent six months in a developer boot camp and then got 3+ years of industry experience.
I'm not saying a CS classes are worthless...I greatly enjoyed everything I learned in them and I feel I'm a better developer for having taken them. But the degree, itself, is no different than a math or physics degree when applying for work, so it shouldn't be a surprise that it's not as popular as a major.
A big reason was I did math on what my future loans would mean to me to get a bachelor instead of just my associates.
Sweating through the nuke program for 3-4 more years (extra compared to college), having no debt at the end, and a program that if you complete it is more valuable than a lot of degrees.
It also seemed that there were two types of programmers. The Office Space guy, that is a cost to their company. And the Cult Of IT guy, that pretends to only think about IT. I wouldn't have the patience for the first, and after learning enough Lisp to make simple macros (and rip apart some of Paul Graham's mediumish ones) I realized that I just saw a system that does what it's told (and probably wouldn't be able to keep a straight face when Cult Of IT people worshipped beauty).
But most people don't know that.
They don't know that you can make $160,000 total comp right out of undergrad by going to a mediocre school where other students are not bright, failing every test but getting B's and C's from a generous curve (because of your competition) and studying Leetcode for a month.
Looking at the graph, it's also super important to see the context before 2005 -- that start date adds significantly to the misleading impression this graph is giving.
Math had more majors in 1970 than it does today. Physics has only grown by 50% in the last 40 years, and both have had huge dips just like CS had.
I was coming up with some explanations myself, but now I think I reject the premise, and feel like the right question is: why are so many people majoring in CS and so few in math and physics. More math and physics people can code than ever before, it seems like they'd be able to score coding jobs and be more prepared than a lot of CS grads.
I'm not very surprised by that: not very many people are smart enough to do math or physics, while computer science is much easier.
Meanwhile, the fields that are larger than CS are the engineering and biomedical ones. I feel this is a bit vulnerable to how you slice it though, e.g. the number of CS graduates are presumably more numerous than any particular type of engineering (mechanical engineering etc). It's a bit of an accident that all those fields are grouped together and computer science is not. (This could have been otherwise, e.g. in Sweden you can study both of an MEng in "software engineering" or a BA in computer science, and the content is quite similar.)
Contrary to the worry that not enough people are majoring in CS, what this shows is that CS is growing out of the relatively small math/physics group and into the larger mass appeal groups.
And maybe what this shows best of all is that Biomed is through the roof.
On the whole, CS has grown slightly more than 3x since 1980 and biomed has grown slightly less than 3x since 1980, but those are the top two sciences.
EDIT:
If I divide 2014 numbers by 1970 numbers, here's the "overall" growth chart for all majors in the data that Dan Wang linked to. Sliced this way, CS is the fastest growing major in the sciences by a long, long way. That is somewhat unfair since CS is the newest, the number is big because the field was tiny in 1970. But, this is a more fair a way to look at this than the article, IMO.
30.67139364 Homeland security, law enforcement, and firefighting
30.23195558 Parks, recreation, leisure, and fitness studies
24.9501675 Computer and information sciences
10.74267782 Communications technologies
8.78051143 Communication, journalism, and related programs
8.572651945 Health professions and related programs
8.110091743 Legal professions and studies
7.519924099 Multi/interdisciplinary studies
6.286681303 Public administration and social services
5.83438043 Liberal arts and sciences, general studies, and humanities
3.348484848 Engineering technologies
3.152990722 Visual and performing arts
3.152613609 Business
3.078456019 Psychology
3.077888251 Biological and biomedical sciences
3.017448623 Area, ethnic, cultural, gender, and group studies
2.862768308 Agriculture and natural resources
2.609677419 Theology and religious vocations.
2.201486523 Family and consumer sciences/human sciences
2.172980415 Engineering
1.631956912 Architecture and related services
1.402989257 Physical sciences and science technologies
1.358694318 Philosophy and religious studies..
1.074811362 Social sciences and history
0.92876882 Foreign languages, literatures, and linguistics
0.881133825 Mathematics and statistics
0.773109244 Military technologies and applied sciences
0.717323278 English language and literature/letters
0.519678742 Education
0.097729516 Library science
The total number of majors grew by 2.26x between 1970 and 2014, so majors over that are actually growing, and under that are shrinking relative to other majors. Everything above Theology is improving, everything in Family and consumer sciences is shrinking.Oh, wait, this is actually the biggest revelation to me so far: Engineering has actually shrunk a little, and Math & Physics have shrunk a lot. CS is growing, not shrinking.
Here's a plot of the sciences as a percentage of total majors, this is more indicative of the growth of each field relative to other fields than either the absolute numbers or the delta plots in the article: https://www.dropbox.com/s/xuxithrti6nyljm/majorsSciencesPerc...
And compared to more majors: https://www.dropbox.com/s/wkronio6arxsrjs/majorsPercent.png?...
- the perception of U.S. manufacturing (affects engineering) '80s: http://www.epi.org/publication/manufacturing-job-loss-trade-...
- perception of CS (dot-com & bust: '94-'01): https://en.wikipedia.org/wiki/Dot-com_bubble
Showing the longer term change is really cool.
I'd upvote multiple times if possible.
I remember the way they taught it was VERY dogmatic Java/OOP. Putting aside my personal feelings on those subjects, that's like teaching someone to swim by throwing them in the ocean without a life jacket. I tutored some other students, and picking up the language AND the IDE and the debugger and understanding compilers -- it was too much. I remember trying to learn java as a kid and being baffled, and then picking up QBasic and basically getting it immediately. QBasic teaches you some awful habits of course, but for a beginner it's much easier to reason about and it will teach you how to think like a computer. I'm not suggesting we go back to teaching QBasic, but it has to be something other than Java. I think CS departments throw everyone in the deep end with an awful curriculum, and then act surprised that everyone leaves except the hardcore nerds that already knew these subjects before they got to school.
There were basically the people who could program, and the people who could not. You could see the double bell curve in the grade statistics.
Dehnadi & Bornat (2006) was the seminal two-hump paper, which was widely circulated but never peer reviewed. In 2014, Bornat (who was Dehnadi's advisor) retracted it.
However, the situation is an odd one. None of the data was ever called into question. The basic methodology has seen criticisms raised, but has not been clearly invalidated. Several subsequent experiments (Dehnadi, 2009; Dehnadi et al., 2009; Bornat et al., 2012) confirmed, at least, that the aptitude test consistently produces two humps.
Rather, Bornat issued his retraction in the face of his commentary on the studies. He described having a bad reaction to SSRIs in 2006, and subsequently making a large number of wild and grandiose claims about the work. These included calling the aptitude test "100% accurate", flatly stating that some students couldn't learn to program, and publicizing third-party claims about gender in the data set.
This is all very weird. The study stands uncorrected. Dehnadi seems to have gotten caught in the crossfire, since his paper was retracted for extra-textual reasons. No one has really settled the question of how predictive the aptitude test is. The only major follow-up I've seen, out of Toronto, is simply wretched. (They used CS course grades after curving to argue about distributions!)
So: double bell curve. Not proven, not retracted, still widely supported by anecdote.
http://wiki.t-o-f.info/uploads/EDM4600/The%20camel%20has%20t...
http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-...
http://www.eis.mdx.ac.uk/staffpages/r_bornat/papers/camel_hu...
http://www.cs.toronto.edu/~sme/papers/2016/icer_2016_bimodal...
I mentioned in a different thread how simole it is for my travel-nurse of a sister to get a new job (her stints around the Bay Area paid ~100k and she only has 2 years of experience).
Developers jump through hoop after hoop for employment, this wouldn't happen if they were in demand like a nurse. The market is just responding appropriately, though maybe not how the masters would prefer it.
I don't have trouble finding work and often need to bring on additional help. The hoops are cultural.
It's also difficult to believe in an oversaturation of developers when their salaries are at record highs -- that only happens when demand increases relative to supply. There is no union, and minimum wage is nowhere near what developers are paid, so supply and demand is the only explanation for the increase in developer salaries over the past few years. In an oversaturated market, salaries would decrease, not increase.
But yes, due to its openness, that you don't need the relevant degree to find employment as a SWE or ML engineer or data scientist (lol - data scientists today, such a bastardization of 'scientist'), it is I agree very competitive, especially if you're just starting out.
I usually get a fairly straightforward phone screen/on-site interview.
I've only had to do a handful of interviews, but they've always been extremely mellow (my last one took place on a chairlift) and I've been practically begged to take each job. Then again, I'm in Wyoming, not Silicon Valley so that may have something to do with it.
> You don’t need a CS degree to be a developer
With another catch. Basically, a lot of people don't intend to go into the tech industry right away. No, they end up in it because it's one of the faster growing industries with decent financial prospects.
So they learn something else, work in a different field for a bit (or a low paid retail job) then end up going into tech where the jobs and money are.
Not everyone is 'passionate' about the subject.
And I think at least some of us observe this and think "I'll study a related tech field and then take a job that also uses CS - that will let me grow a wider skill set than if I just studied CS." Because it isn't too difficult to get exposed to CS basics while pursuing EE or math, etc, and a wider skill set can be a valuable thing to have - you generally have more freedom in the development of your career, more opportunities to shift around and prevent burnout/boredom, etc.
It would be interesting to build a matrix showing how degrees in each STEM field are tied to jobs in each STEM field. Because I suspect CS funnels much less into the other STEM fields than vice versa, providing a view where a CS degree is tied to a narrower line of work, and hence more at risk to future market changes.
To be fair, the job prospects in many other STEM fields aren't great. You most likely won't get a job with a BS in physics doing physics related work, considering how many physics PhDs there are that didn't remain in academia for one reason or another.
If this is the reason people avoid this job, maybe we should stop lying to them about what the work actually is.
I've been asked by various close acquaintances and friends if they should try to get into IT (mostly as programmers), I've told them they should really be passionate about the field, not think only about the money, otherwise they would have a really bad time, psychologically speaking.
Interestingly, the three professions I mentioned above all have graduate degrees, whereas software developers have B.Sc. credentials, if that.
Probably 95% of software jobs play a supporting role; the business' primary focus lies elsewhere (e.g. finance, military, advertising/marketing, health care, engineering, etc). That relegates CS and its practitioners to be a cost center rather than a profit center -- like janitors and accountants and HR -- never a star, at best a 'utility' player, a commodity. In almost all workplaces, software/IT is seen as 'the cost of doing business' -- a liability to be cost-minimized and outsourced as much as possible and then dissed by the board whenever 'players' enter the boardroom: professionals like MBAs, MDs, PhD engineers, bankers, lawyers, etc.
It's likely that the wiser more perceptive undergraduates have some inkling of CS' underclass status. It's even more likely that females and those with social and financial ambitions are aware of the limits inherent in any role where one must stick one's head inside a computer every day for, literally decades. Then at age 40-to-50, some 20 years before retirement, these software auteurs are widely regarded to be 'over the hill', and thereafter in decline until death lays them off at last. (And their job is taken by a 22-year-old.)
It's little wonder that CS doesn't attract freshmen the way honey does flies. Aside from its attractive starting wage, in too many ways a CS degree portends 2-3 decades of social isolation and indentured servitude, followed at midlife by obsolescence and oblivion.
At the end of life, is it possible that any programmer will ever look back on their days and shout, 'My greatest dream has been achieved. I have truly changed the world!'
IMHO, the answer is no. I believe THAT is why students are not flocking to CS programs. CS is not a road to significance.
The US's banking industry's reputation took a big hit in 2008, and it has become increasingly common for top university students to head into tech over finance since then. Not to mention, firms like Goldman Sachs are replacing many of their traditional traders with software engineers.
Outside of top law schools, the prospects of law grads have diminished greatly over the past decade or two. And some varieties of lawyers, such as patent trolls, are especially frowned upon -- the opposite of "top-tier" and "distinguished" in the eyes of many.
And I don't think the pool of potential doctors and the pool of potential software engineers overlap much at all. I would guess that the number of university students deciding to be doctors instead of software engineers is quite small.
The same goes for lawyers working in cities. Many law students are underemployed, but overall there's a much higher compensation ceiling.
Management consultants weren't mentioned, but a large percentage of top grads end up there, being groomed for executive positions in Fortune 500 companies.
Many of the Ivey League students gravitating to tech are likely envisioning themselves as founders or C-suite executives, not engineers. Outside of the SV bubble, software engineer is not a top-tier job. Nor is it a particularly well paying job. In SV though, it has prestige.
OK, I'll buy there's something to that. But keep in mind that students' choices aren't made purely with a clear-eyed understanding of how things are now. They are made in part based on an understanding built up over time, some of which reflects how things were when they were when growing up. In particular, parents and other advisers who have a lot of pull can easily be acting on the basis of a decades-old view of the world. So even if things are shifting, current actions could well be lagging behind.
It's become the most popular major at Stanford.
At Princeton in just 5 years from 2011 to 2016 it grew 3x to become the most popular major from 36 to 130 majors. At Yale in those 5 years, the number of CS majors doubled (though it's not the most popular major there).
In at least 3 states now the single most popular job is software engineers (30 years ago in just about every single state it used to be driver), and I imagine that trend is only going to continue so you will see more and more computer science majors.
https://paw.princeton.edu/article/rise-computer-science-beco...
http://yaledailynews.com/blog/2014/10/21/cs-department-strug...
Everywhere I go, computer science departments are crying out how much enrollment has swelled, and they can't keep up. Intro CS courses are typically 400-600 students.
Every article that describes CS enrollment uses the terms "exploding" and "surge".
http://cra.org/cra-releases-report-surge-computer-science-en...
Even in 2014: https://www.geekwire.com/2014/analysis-examining-computer-sc...
This certainly feels like "fake news" to me.
The number of CS majors has exploded.
Late 2014 I landed a part-time job in web development, that role then moved to full-time and I transitioned out of the Bachelor program as I was learning more valuable work-related skills at my job or in my spare time.
Since then I've advertised to employers that I'm part way through a bachelor, willing to complete if they believe it's necessary but otherwise not interested. I'm now earning just above the average cited in the article and have no intentions of returning to school.
I know of a few classmates that are in the same boat, they got a part-time job, transitioned to full-time and quit schooling.
In my opinion, the fact I was studying was critical in landing the first job but useless afterwards once I could prove my ability and worth. I doubt people who only completed a degree could compete at technical interviews against people with a self taught background.
Also laziness, virtue signaling, dilettance, and genuine interest.
If you invest a finite amount of hours in the first category, you are pretty much guaranteed you will have something to show for it. Not easy, not simple, but you will get results.
Comp. Sci. is a black hole. You can blow ten hours on an obscure logic error. Students know from experience that their tightly budgeted schedule can be wrecked, and they can miss deadlines for reasons that seem out of proportion with the payback. This impacts their other subjects as well.
BTW I've a 50-year career in IT. The sum total of my academic qualifications was 1 week of FORTRAN. The rest I learned on the job.
Software is about the only career I can think of where there are movements created to inject social status into it so that people get into it who are only interested so long as it comes with social status/trendiness.
The major also doesn't fix the thought process. You either have it or you don't.
Maybe I just live in developer bubble and don't know any better, but I've never seen a movement like "Girls do Plumbing!", "Black girls construction bootcamp" or "Mining for equality!".
Now, this is not to contend whether these programs are good or bad. I have my own opinions. However, I will strongly say that the contention that computer science is unique in this regard is factually incorrect. Programs exist across a broad selection of fields.
A, I only care about the demographics when it's convenient (i.e., the career is prestigious)
or B, "yeah well I support men in nursing and women in construction too!", despite there not being a similar effort in the known universe to force demographics in these fields.
That's not saying that those fields are perfect but, say, a female/Hispanic/etc. accountant, paralegal, etc. won't be the only person fitting that description at most meetings. Skilled trades often have skewed gender, ethnicity, etc. ratios but they also don't get anything like as much attention so most of us are unaware of the problem or efforts to improve things.
Computer Science is a focus for these efforts because it's a high-status, high-pay career that has exceptionally poor gender/race balance. Much like Wall Street and corporate america in general:
Technology is also unique in that between the different over-represented minority cultures, people with poor social adjustment and tolerance for "boys will be boys" creates an actively hostile culture for women.
> I think it is also the only career which people try to inject diversity just for the sake of it.
Well when you think about the reach of software in the modern world, it can influence anyone. Whereas diversity in plumbing might not be important, having different points of view on a programming team can mean the difference between having your product take off, or fail.
Yes, that's quite likely. Diversity is important in this field, as in any other, for a number of reasons. The two most important are that is the brings diversity of thought, which should always be welcome in a supposedly fact-based intellectual field, and that it is a signal that we as a society value ourselves and our peers well enough to not treat anybody as second class citizens.
We try to add diversity, but it feels so manufactured. Society has evolved the games and roles we play. It will evolve further down the line as well. What is considered acceptable for men, women, westerners, easterners, low-income, high-income will all be noticeably different in 100 years.
Culture adjusts with time, and we see that in our current society, women often takes roles they feel more fulfilled with rather than those which might earn them the most money.
I guess you could make the argument that they're falling into traditional family roles with men being the bread winners, but I've seen many single women on their own peruse the same ends.
Maybe we should all find ways to do what we love instead of being like the guy in the Futurama poster with "You gotta do what you gotta do."
This kind of ignorance brings up the major social issue of technology, something similar to the "Smug Lisp Weenie" issue.
Many young people are idealistic and want to get into a field that will change the world for the better, and going into a field where the status quo for success is how well you can implement math for a faceless entity is not very appealing for many folks, regardless of their ability to do so.
You might be able to memorize hundreds of kernel functions or visualize abstract data types, but is what you're building actually solving the problems of your community or your society? Does your job tickle your brain enough that you don't care if you're building auto emission cheats? Is this kind of thinking truly "intelligence" when the ocean is acidifying and urban lifestyles are shortening our telomeres?
Do you really think that the type of person that is suited for connecting extremely disparate information is at all common? Sure, anyone can hop into a job at an established company with established tools and documentation and write glue code, but to me that is very different than the type of person that genuinely has a talent for software.
Being able to memorize bullshit or excel in academia means nothing.
That makes a CS degree inherently less valuable than almost all other degrees out there. Why would employers request a degree saying you know your stuff, when they can just ask you to prove it directly?
I was recently st a meetup and met a guy I went to school with. When he was in the process of acquiring his masters degree in physics, he was contacted by Google, who wanted to employ him. He went to an interview (which, apparently, was several interviews by different people all working for Google), and he got the job and moved to Ireland to work for them. Moral of the story: get a degree which offers the greatest value for money, and learn CS in your spare time, for free.
Are you suggesting that those developers who lack a CS degree but can program effectively nonetheless don't really know "computer science," and therefore are weaker applicants?
By extension, are you suggesting that most developer jobs have a need for applicants well-versed in Turing machines, automata, language parsing, trie data structures, and so on?
You seem to be saying that demonstrating strong coding ability doesn't correlate to strong academic CS ability, but I can't imagine why you would bother to point this out unless you felt it was strongly relevant, in which case you must also be suggesting some variant of the above arguments.
Maybe a lot of prospective students perceive (correctly or not) that all the best jobs are already filled by talented people and the competition for those is intense. If you didn't get in at the right time when the industry was in a massive growth phase, you're more likely to get stuck in a dead-end job.
That's not to say that there's anything wrong with Java. I just have trouble imagining an insurance company paying some Java developers to do basic research on fundamental computer science problems, or writing a new operating system or programming language or database.
Majoring in computer science is like majoring in English with hopes of becoming a writer. Or majoring in economics with hopes of starting a business. You'll get all the theory. You'll mingle with all the lifers. But because you try to come into the guild at age 18, there's a risk of narrowness/tunnel vision.
The people majoring in stats, math, physics, etc. may work on more interesting problems during their college years, or develop a more holistic sense of how to come at big new areas of learning. Meanwhile, the opportunities for non-CS majors to pick up programming skills via electives or non-classroom projects are huge.
Where Dan sees a problem, I'm seeing a healthy diversity. The U.S. is able to come up with enough software talent as is, drawing on many different pathways. Why insist that everyone be trained the same way?
To take the B-tree example: I've run across a number of people who I feel are more apt to blame "the database" for being slow; "it can't handle the load" being one of the excuses I've heard used as a "reason" to switch to an entirely newer database that "scales" better. The real reason that the DB isn't scaling is that the queries being run aren't properly indexed (i.e., there exists a B-Tree that has the column being queried, but that B-Tree nonetheless cannot effectively answer the query without reading millions of extraneous rows) and a fundamental understanding of how a B-Tree works is missing. (I find this most often arises on B-Tree indexes indexing multiple columns, e.g., for an index over (a, b), people mistakenly believe the index can effectively answer range queries on b without specifying a.)
To take the abstraction example: in a project I currently maintain, the codebase is incapable of doing anything other than being an HTTP server: the incoming JSON is handled at the lowest levels interacting with the storage systems, and those same storage layers generate the response JSON. (Though each is filtered and mangled a myriad of ways in between, but it's all dicts and lists, from top to bottom.)
> the opportunities for non-CS majors to pick up programming skills via electives or non-classroom projects are huge.
You're not wrong that these opportunities exist, but in my experience, while they do indeed teach people how to code software, they do not teach people how to engineer software. A math/physics major may only need their simulation to run on their input, but building stable server-side systems that won't wake you up in the middle of the night is a different thing altogether.
Given this, why would someone want to get a CS degree, usually at a significant cost, when their coworkers will happily cover the same content while getting paid to learn it? To put it more succinctly, given this, what is the business case to expect increasing enrolments in CS? You will always have some who are passionate about the study, but it seems unlikely that the segment of passionate people is growing over time at this point. CS is not a new field of study anymore.
You might find this, for old versions of Windows Server, in a trade-school IT degree program. You're certainly not going to find it for Linux in a regular Computer Science program.
Surprising that there's no discussion of CS as a "tool" discipline in the same sense as math and stats are, especially at the bachelor level.
When I consider that "Engineering" comprises far more distinct disciplines than "Computer and information sciences", stats on the former are quite dismal. This becomes even more evident at the master's level[1]: for 2014-15, the number of master's degrees conferred in all engineering disciplines is ~25% less than the number CS bachelor's degrees in the same FY.
[1] https://nces.ed.gov/programs/digest/d16/tables/dt16_323.10.a...
perception of dullness
Many people find the idea of staring at code all day, regardless of potential for remuneration, boring. Worrying about every little character, futzing around with compilers and debuggers, and reading manuals isn't many people's idea of fun.
Over the years, several non-developers have commented on this to me; "boring," "dry," and "dull" were generally the adjectives used. It's also perceived by many (rightfully) to be especially prone to the "retrain on your own dime" issue (which has become more common across industries and jobs, but in software dev is particularly acute.) The idea of spending your weekends having to learn a new library or brush up on your fundamentals to interview yet again isn't appealing, and it wouldn't surprise me if younger people were already very clued into this.
"Most desired career among young people: 'YouTuber'":
http://www.tubefilter.com/2017/05/24/most-desired-career-you...
(also, this is one of the main reasons why females are deterred from joining)
However people in MBA programs are quite open about their intention to make it true.
At the same time we see Dilbert, We the Robots and Office Space all showing the mind numbing reality of what is software development. Games look amazing and every kid wants to be a game dev, until they hear about the months of 16 hour shifts, the insane deadlines, the rooms filled with devs, artists, animators, QA/testers and writers sleeping under their desks to get a title out.
1) It's hard. Very hard. Unlike most other subjects you can't fluff through it. It works or it doesn't.
2) Every programming class is a ton of work. Even if you're great at the subject, it's generally your most time consuming course.
3) Because of #2, if you don't know from Day 1 that this is your major, it takes forever to get through the coursework.
4) More than most majors it's very hard to take even the intro classes if you haven't done it before.
Perhaps because of all this, most CS majors I know are people who just couldn't imagine majoring in anything else.
In fact, I would bet that the graph in the article corresponds inversely to how easy it has become to learn programming on your own. From manually copying code out of a magazine when I was a kid, to stackoverflow today.
I submit that the coders who DO get degrees are people who really enjoyed school (for reasons unrelated to learning), people who didn't really know what they wanted to do in life and school was expected of them and/or the path of least resistance, and people who are much more into research than the average developer.
I was fortunate that my engineering program had two semesters of Java. We spent more time hand drawing logic gates than coding in the intro course and so it wasn't until the second (data structures) that I realized it was something I wanted to pursue. It was too late for me to change majors at that point, but not too late to take internships and then a job as a programmer.
University came out of a tradition of being educated for education sake, not to build job skills. Even computer science doesn't teach you how to be a software developer. It's an academic study of computers.
I would be surprised if the aggregate of all of those degrees didn't meet or exceed the trend of the others.
Windows, as far as I know, doesn't come with any programming language built in. You can do some shell stuff or js in the browser, but you can't make an application with that (easily.) And that stuff is hidden away and not encouraged, you have to do research to find out it's even there.
And mobile OSes are even more locked down. As mobile devices replace desktop computers for the vast majority of people, how are they ever supposed to get into programming?
In some sense it is easier than ever to get into programming. Programming languages are better, the internet makes learning resources much more available, there's libraries that can do whatever obscure thing you want to do. But all this is hidden away in a secret world that most users will never venture into and don't know exists.
I know this sounds like it shouldn't be a big deal, but I really believe it is. I was so intimidated by learning programming that I put it off for a long time. It seemed like it would be very complicated and difficult. When I did try to learn, I tried with C++. I also early on tried to program stuff with batch scripts and was put off by how limited it was. Eventually I tried another obscure proprietary language that I found through clicking on an ad. All of these were terrible choices for a beginner who wants to learn programming. But I didn't know enough to know they were terrible choices.
If someone had installed python on my computer and showed me some simple examples I could play with, I would have been so much better off. Eventually I stumbled across a blog post showing how to open up the developer console on a browser just by pressing F12. And some simple example stuff in js. It's like an new world just opened up to me. I know some people that had a similar experience with the computercraft mod for minecraft, of all things.
If you want to be self-employed and save money on taxes, you need to show that you have skills that are rather sophisticated and having a degree is basically a certificate for that requirement.
Also most companies think, if someone can get a technical degree at least they aren't complete morons.
Mine required students to pick at least 1 concentration (1 included software engineering which taught things like software testing)
Lots of developers come into computer science through physics, maths and other peripherally related fields and discover they're good at computers.
Finally, it's hard to continue to work on a degree for a pittance while your less capable buddies are raking in 6 figure salaries. At some point the words 'opportunity cost' will start to appear in your nightmares.
Correlation does not imply causation. Disparate outcomes do not imply disparate treatment. Nobody in the right mind looks at the 94% of child care services jobs being filled by women and exclaims "Aha! Systemic sexism against men, matriarchal oppression afoot, we must address this social injustice!", yet all common sense falls apart when it comes to STEM.
Good talk on the subject here: https://www.youtube.com/watch?v=Gatn5ameRr8
If a university has 100 spots for CS, then even if twice as many people apply for CS in one particular year, there will still be 100 people (but with higher SATs, presumably). There is some flexibility here, but it is limited - those 100 people require a certain number of faculty and grad students to teach them. They need a large-enough building with the proper facilities (you can send students to classrooms in another building sometimes, but it's not optimal). The campus can't just accept more than the students they planned for without preparation, and those plans are made long in advance.
If a university sees a field is popular, it may work to eventually be able to accept more applicants. But it might not decide to do so - popularity among students isn't the only factor considered, there are many others, like ease of acquiring funding and grants, likelihood of undergrads becoming graduate students (and whether the university wants more or less of those), etc., all of which require multiyear planning and also have various political factors.
tl;dr It's worth seeing if we can find data on the number of applicants, and not the number of graduates. It's possible the number of applicants has been increasing.
I've always been computer savvy and would have loved to have gone into programming, now I'm trying to prep to go back to school for computer science, so I think it may be relevant.
But even being good with computers I was never really a good student in high school, and due to moving around, parents divorcing etc, I had huge gaps in my math education(I still don't know my multiplication tables). To the point that I never really thought I was good at math until I got to college.
By the time I got to college though I had already put years into becoming a graphic designer, it was my career path and I could graduate faster if I stayed on it. So I did, because I was so close to finishing. I've regretted it ever since.
Now I'm older, wiser, full of regret and better at math, so now I'd love to go back to school or attend a boot camp, but I'm legitimately broke, and I have no idea how to pay for it. So I keep trying to learn on my own, from the occasional book or youtube video.
TLDR: Math education was lacking and required, I was already on a career path, have regretted it ever since.
Edit: certainly there are programming jobs that require a solid competency in mathematics. However there are many that do not.
Why isn't it drawing more engineers though? I think CS is seen as the risky choice for an engineering job. There's been multiple tech job boom and bust cycles over the years. Why pick CS when most branches of engineering pay almost as much and don't have nearly the risk?
Another thing I've seen happening firsthand is other professions getting dragged into the CS sphere. I know multiple electrical engineers that spend their days writing code now. Circuit design is becoming largely automated, they just need coders that understand the circuits. Same with marketing, I know a couple guys that majored in marketing who spend their days tinkering with WordPress. Finance too, basically all trading has some level of automation. Probably half the people writing code now never intended to. I like to think this, at least in part, is why so much code appears to have been written by satan.
Roberts suggests the issue with the 80s "crash" was an inability to meet demand. As such, universities began placing restrictions on incoming students. If it's damn near impossible to enroll in THIS major, I'll just go elsewhere. While this next link is primarily for women, you can see every other STEM/Law/Med domains grew, while CS did not [2]. Likewise, university "retraining" was no standardized, so you may not have gotten the training you needed. Fast forward to today, we say the university system is broken, but the only competitor right now are the recruitment boot camp or the "learn it yourself" model. Regardless of your opinion of any of the three, it is clear they are attempting to be products in "handling the demand".
To counter "anti-nerd culture" and "immigrants" as bullet points - seriously? That's stuff we complained about 20 years ago (in the 2000's). Nerd culture is mainstream now that we've got billionaires everywhere and outsourcing didn't take "all the jerbs". This points sound more like parroting the concerns of the past.
[1] https://cs.stanford.edu/people/eroberts/CSCapacity/ [2] http://www.npr.org/sections/money/2014/10/21/357629765/when-...
I'd say that the decreasing percentage of women in computing has also hurt. When I starting working almost a couple decades ago at Cray, they had significantly more women in programming. Today, most hard sciences graduates are women, but only about 25-30% of CS graduates are women. I don't have a great answer why this fall-off is happening, but it seems to be a symptom of cultural issues. Maybe it's the influence of VCs and the bro culture bias of finance? I honestly don't know.
I started with Basic in elementary and PHP in middle/high school and by the time I got to college - young arrogant me was like, "what is this C/java noise and why do I need it when I can already do all this cool stuff with php!". I didn't really start appreciating CS and how it applies to software engineering until much later.
The decline or slower growth relative to other fields requiring similar kinds of intelligence may be an interesting question--or it may not be, but the posted article doesn't, in my view, present any compelling case for either answer.
you're missing a point here.
There was a drop in relative growth because several years before that, the dot-com bubble burst and women fled the field. He says he didn't see that in the NCES tables he looked at, but for pete's sake, that's the first link on Google! (3)
(1) https://www.aps.org/programs/education/statistics/bachelors....
(2) https://www.asee.org/papers-and-publications/publications/co...
(3) https://nces.ed.gov/programs/digest/d12/tables/dt12_349.asp
Just because a few 17/18 years olds think iphones are "kewel" does not mean that CS /IT / STEM jobs ae high status.
Take the UK no techie/stem leader gets the really high honours CMG KCMG, GCMG or as yes minester put it.
Bernard: “Of course, in the service, CMG stands for Call Me God. And KCMG for Kindly Call Me God.” Hacker: “What about GCMG?” Bernard: “God Calls Me God.”
Younger students, K-12, have little exposure to computer science concepts or even programming in general. Sure some schools are great but many public schools in the US are average at best.
Anyone notice the irony of this thread being right next to another HN thread titled: "As Computer Coding Classes Swell, So Does Cheating"?
A) Enter the market without a major. Work for a low but decent pay for 4 years (with yearly pay raises) and then use the experience to move elsewhere and jump up in salary.
B) Spend 4 years without any pay, get out of school and end up with an entry position, work 4 more years and then move to a position that offers a good salary.
Needless to say that I went with A) and am not regretting it at all.
As someone who graduated shortly after the bubble burst, I can attest that yes indeed we did have a hard time. I had a year of professional programming experience under my belt (took a year off) and still couldn't find anything for a long time. Eventually took a job making 24k at a failing company that was a nightmare to work at, quit that and did tech support for a county library district (they needed someone who could program but didn't have the budget to hire a developer) making 35k for a few years. I kept an eye on the broader market during that time but it seemed like everything required 10 years of experience.
Whereas I have found such software on multiple ocassions written by mathematicians or persons in some other field, e.g., physics, etc.
As a user of software, I do not believe that a computer science degree is of any significance in terms of the ability to write good software.
The blog post makes a comparison to Liars Poker. Perhaps it should be noted that the author of Liars Poker majored in art history. It was not necessary for him to have a particular degree in finance to do his "job". That was the point of book.
The question to ask today is whether one needs a degree in CS to write good software.
I can assure you that software you've came to value and rely on was written by "computer scientists".
So yes, your comment does sound like trolling. That or you're just completely misinformed.
I use TCP/IP but I did not choose it. There were many competing protocols. It just became the default.
I am not going to argue about this but many of the folks who wrote the software that I actively seek out and value had degrees in Electrical Engineering, Mathematics, and/or Physics. I might use different software than most users.
The authors were not CS majors. It is what it is. Maybe this means nothing. But to me it means, at least, CS is not a prerequisite.
I am not denying the contribution of Computer Science as a field or the work computer scientists. And I understand why kids major in CS. All good.
I am just referring to the practice of writing software. I would question anyone who argued one must have a CS degree to write great software.
It sounds like trolling to CS majors because if you don't know CS, you wont recognize it where its used, so it will seem like its not used at all. Most programming jobs don't need CS very often, but thats because all the core CS is usually packaged in a library already and we just reuse/abstract the bits we need. BTW Michael Lewis got a masters in economics before working in finance.
I have long believed the weekend HN crowd is wiser than the weekday crowd.
I have also believed that CS may contribute to the urge to write "complicated software". Your admission reinforces this belief.
I like software that tries to avoid complexity. Any lazy person can write a complicated program, get it to compile and run. The world is full of such software. Consequently, it is nearly impossible to avoid. But that is different from consciously selecting it and we cannot infer that usage under these circumstances implies approval.
rk dewar, dmr, djb, a@kx, etc. none of them majored in CS as far as I know. Despite the lack of a CS "education", I still value and rely on what they produced. I consciously seek out such work.
The point of my comments is simple: a CS degree is not a prerequisite to writing great software. Call that a strawman if you like. I still think it is a point worth making when someone is blogging about low numbers of CS grads.
Of those CS majors who write software, I see others with no CS degree, e.g., PhD in maths instead, who write better software. Conclusion: ?
Difference between earning a masters in Economics and actually needing that knowledge to do one's job at Salomon Bros. If the degree was needed for the knowledge it provided (versus window dressing for interviewers or clients) then I certainly missed that part in Liar's Poker because I recall the book arguing exactly the opposite. Back in those days I had a friend who was a Philosophy major and was extremely successful on Wall Street.
This spring, I failed about about a third of my pupils in the intro class and in following data structure course. If this holds true for future semesters -as it has for the past few- only around half actually make it through data structures.
CS is hard, and not just because of how exacting the syntax is. It is completely new for many students. Engineering is hard, but a student has expectations they could draw on from math and physics. Same with biology related fields and chem related fields. There are expectations from high school a student can draw upon.
That's like working with cars, you need fewer engineers, and many mechanics and technicians.
Coding is like a spoken language. It's not so hard to write and fix code and there is already a lot of business involving just that, so my guess is that many students just learn to code and don't really do real CS.
The computing industry keeps growing and growing, so it means you need more technicians to keep up with growth, not nice degrees. Of course it's nice to have PhDs, but good luck training them. Education relies on constrained resources.
IIRC, I didn't particularly enjoy the actual CS classes, instead I'd spend hours playing with the Sun workstations and tinkering with how commands and code interacted. I could care less about Universal Turing Machines but became the defacto sysadmin for our tiny cluster. None of that counted as course credits of course.
I seem to have the only working mirror which includes his graph, though the link to the original on his site is: http://i2.wp.com/danwang.co/wp-content/uploads/2017/05/bache...
Consider the building trades. Employees in that industry don't study "Building Science". Architects study architecture. Engineers study engineering. Craftsmen in the various building trades study in apprenticeships.
Why not admit that computer scientists should study computer science (a valid and useful area of study in its own right) and instead develop a full-fledged degree program for the various skills involved in the software-development industry?
I think that new developers are exposed to more complexity earlier on and so they are more likely to get overwhelmed. It's not quite the slow-paced discovery process that it used to be. New developers have more visibility of the road ahead... And it's a damn long road.
Math and programming.
I was very bad at math, but I already learned programming in high school. This enabled me to do the programming classes without learning too much and put the saved time into math classes.
Also universities value students who are good at programming, because they are cheap labour for their projects. Seemed to me that only <50% of the students even wanted to do programming, so they had to think about other things to make the profs happy.
"Oh you will work for 3-6 months for me and all I have to do is let you graduate? I'm sold!"
;)
The programming is incidental to solving real world problems. If your job is to crank out code which envelops someone else's design solution, it doesn't really matter what courses you took in undergrad, as an undergrad education of any kind is just a very broad introduction to many things, in the hope that one will "stick" for employment.
Moreover, I have taught a variety of introductory to computing courses to non-CS majors (ie. humanities and business) and what I've found is that a number of students (particularly women) really enjoy the computing classes and say they wish they had majored or minored in CS, but they didn't know what it was until they took the class. A few actually do switch into a computing related major afterwards, though not necessarily CS.
This may seem counter-intuitive, but while many people know how to use computers and technology, many people don't actually understand how it works. Because of this, Computer Science is a mystery to most people and so they don't consider it. This is in part why I am excited about the CS4All movement at the K-12 level... simply exposing Computer Science or computational thinking will go a long way in attracting more people to the major.
Alternatively, another reason why you don't necessarily see a growth in CS majors is because programming is not restricted to Computer Science. Most science and engineering disciplines involve programming now and many curriculums will have programming courses. This is even true in humanities (ie. digital humanities) and business (ie. data analytics) where coding is becoming a desirable skill. If you had a deep interest in say economics and needed to develop some programming skills to simulate models or evaluate data, you can gain these skills and knowledge outside of the CS major and I think that is a good thing.
With this in mind, I think a lot of CS departments will need to consider the shift from being a "destination" major to a "service" major where a significant portion of the teaching load is to non-CS majors who want a minimal core, but not all of CS. A flat growth in CS majors does not necessarily mean a lack of computing or programming education in general.
Finally, I would say that in my department, we have seen record growth in the past few years (from 50 a few years ago to 150) and that is caused a number of problems. This is not restricted to our university as noted in "Generation CS" from CRA:
http://cra.org/data/generation-cs/
So for us, the challenge for us is not growing the number of majors but how to manage the surge in a sustainable manner.
In my freetime I still try to cargo-cult learn CS. I tried a lot to give up computers, but I couldn't.
Maybe a CS4ALL movement can filter out kids who have a mind for CS and inform their parents about it. I suffered a lot from the notion of not being able to study CS. Especially the first couple of years of college were the worst.
On the other hand, as you have experienced with the record growth, most of the young people get into CS degrees. Maybe CS is more a passion among teens like music/painting. It may as well be a trend of our century. In the 19-20th century young men generally wanted to study painting, now we want to study CS. Because computers promise creativity, autonomy and inherently give us an identity, because we think we're "gifted".
2) If you studied prior to early 90s you were probably stuck on a shitty system. E.g. VAX writing in Turing (a version of Pascal). Horrible editor and very painful with many nights in the basement lab.
Particularly the latter. A lot of people break out in hives at the thought of spending the next forty five years glued to a computer monitor.
Hypothesis, gedanken experiment. Award all hackers who are able to support themselves, not necessarily as developers, but having to do with computers, with a CS degree. The curve fills right in.
While personally we might never need an algorithm expert, we’re using a lot of software each day. PCs, smartphones, stupid phones, cars, home appliance, they all run software which required many algorithm experts to make.
I decided to apply for a programming job to earn some money and get back to college the year later. 8 years later... still didn't go back and no intention to.
https://arxiv.org/list/cs/recent
I would say Machine Learning is particularly "hot" right now, with the anecdotal evidence being that many ML conferences (like NIPS, ICML, CVPR, etc) have been experiencing better than linear growth.
Introduction to CS class in high school was what got me hooked in the first place.
After the dot-com crashes, and 9-11, and lots of the ridiculous paychecks dried up, people left the major in droves. I remember my university in particular went from having to turn away students from the CS major to having major recruiting events for CS in the span of just a couple years, with huge swings in faculty count and facilities.
One thing that really came out of all this I think, was a better understanding by the public that CS != programming major, and companies were looking for programmers. It was then perfectly acceptable to take an easier major that focused on programming and get the same job as the CS student who had to endure a much more difficult course load. There was also an effect in industry as people who endured even harder majors found they could simply make more money as programmers and had the mental tools to get up to speed rather quickly.
I remember distinctly at my school at least, that students self-sorted majors by perceived difficulty in a way not too dissimilar and not too much out of agreement with the famous xkcd "Fields Arranged By Purity" https://imgs.xkcd.com/comics/purity.png
IIR the sorting went something like: any Liberal Art < any Soft Science < Information Technology < Information Systems < Biology < Software Engineering < Chemistry < Computer Science < Computer Engineering < Electrical Engineering < Physics < Math
My school peers all sort of used major as a badge of rank in social functions even though it was kind of useless and stupid. But I think it also connects to this chart, by all accounts I've heard, there's a vast oversubscription of Biology majors and the way the market handles this is to introduce more hoops or very very low pay. In other words, it's virtually impossible to get a great job as a biologist without getting a PhD in the field. Chemistry is similar. But the same isn't true in CS on up.
Financially, there is no way I could afford a CS degree today. People like to make the argument that its 'not much' because you'll get paid your entire tuitons worth in one year of work! But, thats not true for everyone. Infact its not true for many. Perhaps if you already live in silicon-valley-esque areas, maybe. But if you don't, Microsoft, Google and Amazon aren't waiting at the door for you. So what happens when you get a degree, and you don't get a 'good' job out of it right away? You probably end up in retail, putting away your entire paycheck into your tuition when you can't defer it anymore. Or, you get a low-paying 'tech' job that burns you out of the field.
But, even if you can afford it, can students go through with it? If any self-respecting developer went back to college now, after owning a house, having a family, y'know, a life, I think they'd drop out in the first few months, for what we would then count as perfectly understandable reasons. But for students, both colleges, and society, treat them like vessels without need for things like privacy and ownership.
Colleges play the game of forcing students into classes that have nothing to do with their majors. For example, speech classes. Yes, these are nice to have, but I am an adult, and I should be able to choose how I spend my money. In the system today, you are at the complete mercy of what the college tells you to do. Don't like it? Too bad. No warranty, no returns, its gone.
College tuition and overall living amenities are quite terrible in most locations. The state (public) university here charges the same amount as commercial apartments across the street, for a dorm room you share with another student that is smaller than your kitchen. Infact, only one building even has a kitchen, so you're stuck with your meal plans, which are during times when you have classes. Oh, also, if you miss a meal, you don't get that money back.
If you're a male, and want to live near the college, you are at a disadvantage for rent. Girls are more preferred for renting, to the point where these places are girls-only, are cheaper, and are the closest to the campus. Cheaper as in, a few hundred less than a dorm room, and you actually get your own room.
Add ontop that this college purposely built in fast-food restaurants, over-spend on decoration and marble counters for their cafeteria (and other places), have teachers with superiority complexes and are generally incompetent - I don't think its a bad choice to avoid that altogether. Even if you're working at Walmart for years in the cheapest apartments, its still most likely better living conditions.
If colleges actually wanted to invest in education, there are a million ways they could be doing that. Thats not to say that all colleges are like this, community colleges can be better at costs and what you need, but students are never told about any of this. They are given a list of options. "Pick one".
* Feeling that I can learn programming on my own, and wanting to experiment with something I wouldn't otherwise teach myself in college
Of course CS != programming, but in my head at the time I saw them as the same. I'd been teaching myself programming since I was a kid, and I knew I'd be able to teach myself whatever I needed to know if needed. Thus I felt that it made more sense for me to study something totally foreign to me that I wouldn't otherwise learn on my own.
* Fear of living out the rest of my life like the movie Office Space, everything being so damn predictable
This was before software engineering was considered "cool" or had any prestige. Being a software engineer and sitting at a desk all day in a gray cubicle writing enterprise software or whatever sounded boring as hell. As a socially awkward introvert with no other skills, I felt that majoring in CS would inevitably lead me down that comfortable but unfulfilling route, which frightened me. It wasn't just the fear of living a boring life, I just hated the predictability, knowing that I'd never be more than some boring code monkey with a decent salary (though not finance/doctor/lawyer money) and boring job (at the time I clearly knew absolutely nothing about entrepreneurship).
* Not feeling passionate about programming anymore, and feeling like I'd never be able to compete with all my classmates who are so damn passionate about it (and not caring anymore)
A lot of people in the field seemed to be super passionate about programming, coding all day and all night. I had gotten into it at 12 years old because I wanted to make video games, but as my interest in video games was receding, I realized I wasn't really as into it as I thought I was. I felt like there was no way I'd ever be able to compete with my competition who lived and breathed programming.
* CS is boring
This was a huge revelation for me. On one hand I loved programming and thought it was awesome that I could do what I considered fun and get school credit for it. But at some point I realized that although I love the programming part, I found the CS I was being taught mind-numbingly boring. I couldn't care less about sorting algorithms, binary trees, graph traversal algorithms, and most of the other abstract crap I was supposed to learn. I just didn't see why I had to know that stuff.
I've realized that I get super interested in this same material when the knowledge is directly necessary for something I'm trying to build, but otherwise I couldn't care less.
* CS is hard
I thought math was easier, which was honestly part of the reason why I switched to math. Given the obsession companies have on GPA, it was a logical decision.
* Fear of becoming like my classmates
I was a socially awkward introvert, and I wanted to be social and extroverted. I don't know how it is now, but at the time the CS department had the highest concentration of socially awkward introverted weirdos, not to mention the complete lack of women. I remember working in the CS lounge once and facepalming at cringey jokes. I didn't want to be around these losers lest I become one of them.
* Wanting to work on more important problems
I think the industry has a tendency of thinking that software engineering problems are the most important problems facing humanity right now.
For some reason I thought majoring in math would give me the toolkit to solve the most important problems in the world. Maybe I was too brainwashed by those movies where some genius in a flash of revelation scribbles some equation on a whiteboard.
* Wanting to make a ton of money
Software engineering money was good, but I didn't like how quickly and steeply the money topped out. I didn't want to enter an industry knowing that my compensation would cap out at $200k/yr (I don't think the tech giants were dishing out $300k/yr all-in comp packages to new grads back then, or if they were I wasn't aware). I wanted the sky to be the limit, which is why I became interested in finance (again, I wasn't aware of entrepreneurship at the time).
---
Of course going back I probably would've majored in CS because the interview process in the industry skews towards CS knowledge, and math eventually became boring and too abstract and isn't as relevant.
My main difference in perspective with this article (I'm hesitant to call it a disagreement, because it's more a matter or perspective than any specific conclusion) is that I don't think people need to be consciously aware of market or societal forces and pressures to be powerfully influenced by them.
I think anyone who wonders why more people don't major in CS (as well as other fields claiming a "shortage") should read the chapter on pay and professions from Adam Smith's "Wealth of Nations". I don't think they need to read it and accept it without critical thought, just be aware of the perspective - that there are a huge number of inter-dependent factors, other than pay, that powerfully influence the desirability of a profession.
Here's a link:
http://geolib.com/smith.adam/won1-10.html
This is all pretty intuitive - if you want people to take on tedious, odious, or dishonorable work, you may have to pay them well.
I actually think CS, and programming, may be a more unpleasant profession than people recognize. Huge open offices, back visibility, SCRUM meetings that deny long term thinking and autonomy, constant technology churn, age-related employment issues, and, yes, specialized visas that mean employers can rely on captive employees who can't leave the field and have limited rights to leave their employer, all these things do mean that CS may be a much less desirable field for people with academic talent. Also - while wages are high, this may be the Silicon Valley effect. A job that pays an average of 120k, but plays this consistently in smaller, less expensive cities, may be more desirable than a job that pays 150k on average, but where 95% of the employment is concentrated in a place where the median price of a house is $1.2+ million.
Just for a dose or reality, a registered nurse in San Francisco earns more, at the median, than an application developer. That's a-ok by me! Nursing is a tough job. But if someone prefers to do good as a nurse and make more money than siting around fixing bugs in the latest javascript framework, come on, that's perfectly rational!
I really don't think young people need to have analyzed this to be influenced by it. There's a reason we call it the "invisible hand".
In short, if it is rational to avoid this field, that's probably enough to conclude that these are factors in deterring workers from it. I don't think you need to prove hyper-awareness specifically of these issues.
Keep in mind, people who are capable of learning to code and work in software development teams do have a high level of capacity for work and study. They have a lot of options. I'm not sure that software development, as a field, is all that competitive with the other things they can do.
In short, people may be behaving very rationally by avoiding this field.
Looks like the those who voted me down had more success in getting more people into CS.
(Seems to be back now.)
I honestly wish I'd picked a more interesting major, like electrical engineering or physics. I feel like I could learn the things I've learned in a few months (which may or may not be true).
Computer science is just not very hard, while physics, math, and engineering is. I think the guys from other fields can be more successful programmers, just because they are smarter (more used to solving hard problems).
In computer science, the only course that required a little bit of creativity was algorithms. It was stuff mathematicians are practically trained to do (be it not in exactly the same setting).
Maybe we should be asking whether computer science as we know it is too broad of a field to meaningfully explore in a Bachelor's degree.
It's easy to dismiss the difficulties that arise in software as properties of the language, platform, framework, etc. that you're working with, except that we're a few decades into this whole software engineering thing and we're still inventing (and re-investing) tools to solve "simple" problems. Which, of course, is also true in many other engineering disciplines. Sure, the scale may get smaller or larger, but base issues like "this problem would be easy if I could just temporarily disable gravity" or "I've got the perfect mechanism for this if we can allow one solid to pass through another when we assemble it" still crop up with remarkable frequency.
One might reasonably start to think that estimating the difficulty of problems is, in and of itself, harder than it looks.
I picked a pretty good school and we got in depth with assembly, graphics, databases, functional programming, etc. In my time there, I wrote my own programming language and VM, a working raytracer, a neutral net project, and much more. I appreciate having a good solid base in a wide range of computing science concepts.
One of my co-workers are currently doing a degree in a much less prominent school in town, and the classes are much less involved, pretty easy, and sometimes just weird. She doesn't even bother to go classes most of the time. She really isn't learning much that she doesn't know already.
If I had gone to that school, I wouldn't have learned much that I didn't know already either.
As a self-taught programmer, I think you're downplaying how much you can learn in a CS program. I don't pretend to know as much as a CS major. I haven't spent time learning compilers or DB internals, and probably haven't studied CS algorithms enough to pass an interview at Google or Facebook.
Regarding the CS curriculum, an undergrad EE curriculum is similarly shallow: it's a sampling of many different subtopics that often are only loosely related (E&M, DSP, circuits, control theory, devices, etc.). Undergrads won't be experts in any one of those fields.
Since I graduated (grad school) in EE, I've told myself each year that I'll jump from my EE job to a programming job, since I enjoy programming more. But it's getting harder and harder to justify. Will I be leaving a senior EE position for an entry-level software position? Does that make sense at 30? Why am I the oldest person in the office when I interview at a startup? Why is the interviewer fixating on compilers and database internals?
If I were to do it over, I'd get a degree in CS because that's the most direct route to the job, and education continues on the job. Everything else was a diversion. And you're seeing the grass as greener on the other side of the fence regarding engineering/physics curriculum. Learning how to solve physics problems doesn't make you smarter or a better programmer.
I wrote an operating system and a simulated CPU implementing (a subset of) a real-world ISA in my last semester - both comparatively in-depth things. Of course I did have to choose that, and in so doing, I chose a semester of hell.
Similarly, doing an intro-level survey of all of those topics won't leave you with much; there is a concept of depth-over-breadth that I think is lost in programs' attempts to sound rigorous by bundling in everything under the sun. However, none of those things you listed are 'small' topics and could very well be majors on their own.
It's way more difficult(if done correctly) than probably almost every other degree except physics, math, and maybe chemical engineering.
I don't know where you got your degree but I felt like I was challenged immensely in my curriculum..with algorithms, upper level maths, cryptography, distributed systems, etc. etc.... but I really worked 80 hours a week to try to get the stuff, even though I could have scraped through.
And taking the degree has helped immensely in industry...it didn't teach me any specific technology, like a bootcamp teaches a MEAN stack, but it made me fluent in the industry...so I am easily able to pick up new tech rapidly..which I credit years of studying computer science in college.
Which is the goal of college...to get you fluent in the world you're majoring in..not necessarily any specific tech, you're supposed to learn that stuff yourself, and it never stops.
As for the industry...that was a huge disappointment. My first job I felt like 'the best office worker'...it didn't have the revolutionary cutting edge feel I wanted.
My current job is way better, but there's a lot of shit jobs in the industry, because you work directly for business people, who typically have no higher motive than money, and you're basically the best paid worker in the 'Rat Race'....
Also, there's way less status than being a doctor, lawyer, or nurse. People dont even remotely understand what we do, therefore there's no connection for them to grant us status.
I actually did Engineering but work in code every day. I noticed much the same as you: it's a million little topics. Control theory, thermo, digital filters, a bit of coding, and so on. But having come at it from another side, I figure the lesson is that you can learn any topic you like, the procedure is the same. Read something, try it yourself, search for solutions. If it's hard look at the prerequisites.
I suppose it's a bit more obvious when you study Engineering that you're not going to use all of it. But after a few years you realise that you use a lot of it. There's this meme going around about "The 20 most important equations". I think I used them all either at work or in uni.
Imperative programming (learned C#, nice course), Computer science project (program something in a group), Logic for computer science, Web design, Computer architecture and networks (terrible: no practicals, just an exam), Databases, Graphics (fun, but only learned how to write shaders in glsl), Functional programming, Data structures, Algorithms, Modelling and system development (we learned working with UML diagrams; the course was way too 'soft' for me), 3d modelling, Software project (again, program something in a group. we did something for a two-man company with a delusional CEO, which went bankrupt while we were working on the project), Security, Concurrency
I filled the rest of the curriculum with math courses. I have to admit the whole thing (not just the CS part) looks so meager when I look at the courses I followed. Can't believe I spent 4 years on it.
To give a counter view, at the university I attended we went deep into the processor, effectively building a simple model from NAND gates all the way up to an optimized CPU pipeline. The class had one of the most interesting grade curves I've every seen, with no B's, and very few C's. Most grades were either A's or D's.
That would allow a deeper theoretical basis but also time to link those to reality through concrete examples. But then, you'd probably lose more of the class...
You know, graduation quotas & all.. :/
That's interesting. The most common complaint in my program from students was that we weren't actually learning how to program. Actually learning how to use a language was considered (for the most part) a "technical detail", and the course was very heavy on algorithm analysis, theory of computation, math, how operating systems function on a theory level, writing a keyboard interrupt handler for a small embedded OS to support backspace (^H) and erase to beginning of line (^U), using threads with locks, etc.
> Computer science is just not very hard, while physics, math, and engineering is.
I think that depends quite a bit on the school you go to. I think the CS program at my school was quite hard compared to the math program. My school was by no means top-tier, and I was very self conscious of that for a while. Then I met a good friend that had a degree from Berkeley's CS program, and over the years I've come to the conclusion that the main difference between his CS program and the one I went through was the quality of the teachers, and I think it was actually a fairly small difference. Much more important seemed to be what you wanted out of the program, and what piqued your interested and caused you to follow it deeper (and good teachers could help quite a bit at this point, as they might have deeper knowledge of specific subjects that could help you).
My point is that I do not believe that CS is necessarily much easier than those programs from what variable experience I have with them, but CS is fairly wide in what it touches, so unless you decide to dive in deeper on a subject, you are likely going to be getting theory plus a survey of what's available. That said, if your school focused more on that actual art of programming than the theory, than might lead to different (but not necessarily worse) outcomes. People go to college for different reasons, and a good many in my class that were complaining about not getting much experience actually programming were looking for college to train them for a programming position immediately after college. That wasn't necessarily what I was there for, but that doesn't mean that a college putting a bit more of that in their program is doing the wrong thing, they're just responding to market realities (i.e. what their students want).
> mathematical theory behind cryptography
In our algorithm analysis class, we had to write a paper on some known algorithm examining its function and complexity. Being security conscious and having an interest in cryptography, I chose Diffie-Hellman key exchange. A lot of the benefit of college is making your own opportunities.
I spent my four of my five school years in France, and one in California. Where did you study ?
I saw the quality difference in the two schools I attended. One had profs teaching by the book and the other had profs that wrote the book.
There is a great deal of difference between different schools, which I think explains much of the varying experiences people have.
As I read the into, I think the author touched on a lot of the reasons I was starting to think of. A lot of people do boot camps (which are overpriced for-profit garbage btw), community college programming classes, etc. I know people out of this programs that understand bigO notation and do all kinds of fun scaling work and I know CS majors who can only program Java/C# and don't know what a SATA connector is. You get out of your field what you put into it.
As far as women in our field, I hesitate here. I don't really think it's the hostile landscape. I've worked with several female engineers. Some are amazing and good designers. Some are terrible. The ratio to good/bad males, in my limited non-scientific empirical view, seems about even. I also haven't really witnesses women being treated badly either and I've worked in five cities and several jobs over the past two decades. What I have seen are entire groups of people being treated like crap in hostel work environments, not limited or segregated by race or gender.
I feel there are also not that many people in our field (both men and women) because it's...pretty horrible. Seriously, we sit in front of screen for 8 hours a day watching the world tick by, often doing our best to design the best we can to be bolted onto old decaying crap that should have been retired a decade ago. Or we build shiny new products that benefit the few and have tons of crazy requirements that come out of no where that nobody wants. There aren't as many women in engineering because in general women chose jobs that are more rewarding even if they're lower paying. I think we could all take a page from that philosophy, if we didn't live in a world where we were afraid of ending up on the bottom or without enough for essentials.
I can honestly only two about two years at a time in IT these days. I've embraced the Sabbatical (http://penguindreams.org/videos/taking-a-sabbatical/) even though I realize it's probably not sustainable long term, and also realizing my earnings in software give me this unique advantage, that most people simply don't have.
Civil/Mechanical engs, Doctors, Lawyers, Nurses, Biologists etc, all get out in the field and/or get to work with people all the time...
In tech it's the same flourescent lights, same keyboard, same office, same people...every day for 40 years? What kind of quality of life is that? It's literally the definition of the Rat Race, tech people are just paid better.
This is a very legit reason for not entering the industry, and I think and is probably the biggest reason for the lack of csci majors.
Because I'm not smart enough to get into MIT/Stanford/UCB/CMU?
We detached this subthread from https://news.ycombinator.com/item?id=14443522 and marked it off-topic.
Doesn't matter if they can draw near-photorealistically or pick up a new foreign language in mere months, or perhaps breed fascinating variants of plants in all manner of ways in their dorm room just off intuition; if they can't pass CS101, if their mind doesn't work their way, they're not really that smart.
Right?
Just because it was easy for you and hard for others doesn't mean that you are smart and they aren't, simply that they have different sorts of leanings and talents than you.