Hacker News new | comments | show | ask | jobs | submit login
Why do so few people major in computer science? (danwang.co)
424 points by dmnd 231 days ago | hide | past | web | favorite | 599 comments

The grief factor of learning to code is on a different scale to every other major. One missing semicolon will take your whole tower down, and you realise this in the first day of practical exercises.

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.

I don't think it's even the programming that's the problem. There's a ton of Stupid Computer Shit we all know, mostly from messing around on our own time, that makes programming or doing anything else with computers much easier. A set of skills for navigating and troubleshooting issues, and a hard-earned intuition for where and how to look for answers.

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....

>There's a ton of Stupid Computer Shit we all know, mostly from messing around on our own time

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.

So my story is a little different. I didn't write my first program until I was in college and didn't even own a personal computer until I was going into my junior year in 2009.

I had the advantage of having a department that assumed we were computer illiterate (I went to an HBCU in the late 00s: lots of low-income kids, very few had PCs of their own growing up, let alone college educated parents) so there were a lot of resources dedicated to tutoring, TA involvement in labs, and building a community around our department. It sort of felt like being in a sports club. Every freshman was assigned am upper-classman mentor and every mentor I had took their role seriously. If I didn't come around for a week I got a phone call. If I struggled I got extra help, and my relationship with my mentor was something that came up if I started slipping in a class. We also had advisors based on our interests who were constantly throwing REUs, internships, and events into our face.

When I went to grad school at a majority institution it was like night and day (no pun intended). Lower level students were often left hanging on a vine and were only paid attention to if they were already successful. The TAs weren't actively helping students, only passively so. I left there thinking there were probably a lot of kids who got turned off to the major because they didn't get the help they needed. Poor kids especially had it rough because they often came from a situation like mine, households with one computer that they were only allowed to use if they were using word write a paper or something.

I say all that to say I think you can teach a young adult to succeed in a technical major in 4 years, but it takes a village. If you immerse them in a community built around that technical major, it becomes a lot easier to get them up to speed.

Agreed. I think what's more important than tinkering with computers as a child is to just have willpower to stare at something for hours with no end in sight just to have a small breakthrough. Those breakthroughs, for me, almost seemed to reward me with little releases of endorphins like solving a puzzle.

I lived for those "a-ha" moments too. I remember when the theory of computation clicked and the rush of understanding that washed over me that put everything I'd done in that class in perspective. It was probably the best feeling I ever had in my academic career.

Thanks for sharing your story. It makes me genuinely happy to hear.

It really bothered me that I wasn't able to successfully tutor more CS students, and many folks that I know would have (eventually) loved it and thrived in the discipline dropped out due to their inability to get over the hump.

It sounds like from your experience direct, constant mentoring (along with a highly motivated student!) does work.

I should have thought about beer money. But I was such an introverted geek.

I do remember watching other people trying to figure out how to use a mouse or the most basic stuff. I've already studied algorithms and data structures and had a paying programming job. Most of the CS work seemed trivial but I did learn some math. The math did get hard so the degree was definitely not a breeze. Even with CS there were areas that were less trivial like computational geometry or numerical methods but I had the advantage that coding was a non-issue so I could focus on the essence.

Many many many years later, I still often make the mistake of assuming things that look trivial to me are also trivial to others. It's just so hard to tell whether something is universally trivial or just trivial because you've done it so many times.

I wonder if the current generation's "playing" with their phone/computer/tablets gives them an advantage over the previous generation. I do work with quite a few sharp young people but I don't know whether they had programmed before going into CS or not, I guess I should ask...

If anything, it's a disadvantage IME: the implicit lessons of the iDevice are that the world is made of non-user-serviceable black boxes that cannot be recombined to make anything substantially different than what you started with, and if one does ever manage to peek under the hood (and why would one do that, any more than they do with their fridge or their TV?) one sees only immutable non-deconstructible complexity.

Contrast this with the 8-bit era: devices made of multiple clunky components large enough to manipulate and simple enough to fully comprehend, shipping with "user manuals" that look like today's programming textbooks or service/maintenance manuals (where those exist today at all), a readily available developer environment giving full access to the hardware, tinkering with hardware and software as a matter of course to get anything interesting done at all... The experience is very different indeed.

I totally agree with this. The mass produced handheld computers such as smartphones and tablets, which outnumber desktops and laptops in personal ownership worldwide, will absolutely not help the newer generations with learning how computers work.

When I was a tween I was building my own desktop, installing drivers, trouble shooting driver issues, trawling log files, and even dabbled in a little bit of python here or there when I had no idea what I was doing.

None of that is even a thing on the black box of of a touch screen device.

You forget that Arduino and Raspberry Pi exist now and fill that void quite nicely. If anything, I think it is far, far easier to learn the intangible CS skills today than at any time in the past. The one problem I see is with kids' motivation to do so, not with access to information or materials.

I think the subtlety is the change in defaults. Having access isn't even half the battle. Speaking from experience my motivation came from spending hundreds of hours making the only computer in my family work.

Naw, but I don't think they fill that void. Regular families don't really need/want desktops like they may have in years past.

I am so glad that there are enough people around to support a healthy PC components market. I build 1 or 2 per year and I haven't felt the supply dwindle yet.

It is a shame that this is no longer the default option, but it can be done for people wanting to get an educational experience. I wonder how easy it would be to build a computer with a little kid?

My six-year-old nephew sat with rapt amazement as I assembled a standard PC in his living room while hanging out with the family. It was a very straightforward build- just motherboard, CPU & RAM, no addon cards, hard drive was already in the case. His mind boggled a little when he saw all the wires from the power supply, but as I pointed out how each group of wired to key into only certain ports, I could see the 'aha!' in his eyes.

(He also just about jumped for joy when he saw the color-changing LED fan I put on the case.)

Obviously at that age he doesn't quite have the manual dexterity to do the work himself, but I let him touch the RAM as I installed it so he could feel it click in to place, and showed him how to close & latch the CPU lever.

He appeared to really enjoy the experience. The next time one of the offices I work for retire some desktops, I may clean some up and partially disassemble them, so he can 'build' one himself. I really want to impress on him the fact that things that look complicated can be understood, if you just break down the task into bite-sized chunks.

Exactly. And the UI of a phone has become increasingly elementary and unsophisticated compared to even a keyboard and mouse. Being an end user of mobile games or Snapchat or Tinder (swipe-swipe-tap-swipe) simply doesn't prepare you for Emacs or vim.

My son is five and recently put together one of these: https://kano.me/

It's a great little system. It teaches the commandline and python programming and it lets kids do things like play minecraft then change the code to make it run differently.

This is why I think it should be mandatory for CS to use free software.

I don't think they have an advantage, as I've noticed that kids knowing their way around their phone are often completely lost when put in front of a computer. They never use the computer, they have everything in their phones. Compared to a computer, a phone is simple, and you aren't actually solving any problems while using it (you're just downloading and running apps). When you have a phone, however, there's no need to learn the computer. This means that they're missing out on the computer learning curve that we experienced.

Again, Rasp Pi and the whole "maker" movement are mainstream. My daughter is in a STEM Middle School and she has done more things at age 11 than I did when I was 18! They're teaching Android game coding to kids age 10.

I think your daughter is lucky to be going to an exceptional school that teaches programming at age ten. The vast, vast majority of American students do not have these kinds of courses. May I ask what school system your daughter is in?

I think GP hits the nail on the head there with the homework analogy, and you with yours. Just talking to my friends in other careers about the work that I do makes me check time and time again just how many assumptions of knowledge I make when talking about anything vaguely technical (which is possibly a criticism of how I explain things, but also/even if so says lots about this issue).

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.

[1] https://danluu.com/teach-debugging/

My Cousin smart kid had to come over at midnight because he had his first java assignment outside the ide. Couldn't compile because class path was not defined right on windows. Things like that scare people or pop their confidence.

That just sounds like the professor didn't teach them about Java classpath before telling them to use a CLI; or this kid didn't read the course materials.

It's not unusual, in education, to begin with something interesting* to provide motivation and a big-picture view before getting into details.

For example, if I wanted to teach a kid to use an Arduino, I'd start them off getting an LED to blink by telling them which wires to plug in where, and what code to type in. If they were good at that, maybe I'd have them make it fade in and out like a macbook light.

That way, when it comes time to learn about voltage and current and P-N junctions and bandgaps and PWM and cross-compiling and memory maps and bootloaders, they'll have real-world examples to relate it to.

The difficult part, of course, is even if I thoroughly test the instructions with a clean VM and hardware, the instructions can still fail - like if they've installed a different version previously and there's some sort of conflict.

*Or at least, interesting by the standards of the course

Sure, but if you have been playing around with environment variables in your OS since you where 8 years old the problem becomes a lot easier to troubleshoot, compared to someone who has never heard of environment variables.

Even after decades of experience, this stuff can still be extremely frustrating. I remember my first experience trying out Go, fighting with the GOPATH and GOROOT variables until I could figure out how to get things installed properly.

I recently had this experience as well, it was a good reminder about the fundamental obstacles. Although after years, we're much better equipped to interpret error messages and search for answers than a novice. Also, google now vs pre-google. Answers are so easy to find now, it boggles the mind.

I'm a bit interested with your comment. Do we have 8 year olds playing around with environment variables in the OS? I'm curious because I never thought that could be possible

It was not uncommon to have to monkey with crap like that back in the DOS days, to do the most basic things. I vaguely remember having to fool around with autoexec.bat and play with virtual and extended memory settings to try and get Raptor: Call of the Shadows, Wolfenstein 3D or Warcraft: Orcs and Humans to load up and use the right colors on the family 586, when I was much too young to be playing such games - or really tweaking environment variables.

Yea, having to hack your autoexec.bat and config.sys files to get your games to work was definitely a formative experience :)

I remember having to muck about with autoexec.bat files when I was SIX (this was a quarter century ago) because our 386 desktop had enough memory to run either Windows 3.1 or the CD-ROM drive, but not both simultaneously. Granted, I was just copying instructions that my dad had written into a workbook, not writing the file myself.

That's likely a source of frustration. In class, professors and other students might assume you already knowing something as in indicator that you're passionate/interested and not knowing it means you're not. (A->B doesn't necessarily mean ~A->~B, right?).

Maybe, but the procedure is the same as for any other error you don't understand, copy paste the error message to a search engine and use the results to figure out what it means and how to fix it.

Which teaches you how to find other people's solutions to your problem- a valuable skill - but you miss out on building foundational troubleshooting skills.

But that kind of information should just be in the instructions for the assignment. It's a problem with the instructor, is what I'm getting at.

Doesn't the Java processor tell you in the error message that it "can't find x in classpath" or whatever?

Perhaps the lesson was "read the error message; if it doesn't help then take that as a call to produce useful errors in your own programs"?

Learning to read errors is itself a skill. The number of professional devs who ask questions of the form "I got this message what do I do" and the message itself tells them what to do is astonishing.

to be fair, I've been coding for 8 years and have never coded in a Windows operating system outside of an IDE, and in general I don't use either, and have not since Computer Science 1.

For a job, I had to get python working on Windows, and it took me a few days to get it in stalled correctly on Windows. Even after years of coding experience.

The issue with Windows is it is designed to explicitly hide the backend functionality, and modular accessing and modifying of it to the front end user, so when you do need to do something of the sort, it's more difficult than linux, and even after using linux operating systems, macbooks I find difficult to work with because comustomizable things are hidden to the average mac user.

That being said, a linux operating system is probably daunting for a first timer.


I only minored in Computer Science, and like others, did not even know what it was until I went to a tech college for Electrical Engineering. I grew up in the deep south low on the socioeconomic scale, noone in my family even went to college ever so I just had had no exposure to computers or even the idea of computer science before.

It seemed cool but daunting.

1. I got a part time job in tech support to help myself get acquainted with the parts of computers and technology that you need to learn so that when you do Computer Science you can focus on Computer Science.

That side job was 15hours a week over two years and it helped me learn alot about troubleshooting, viruses, computers, I reimaged hundreds of computers and learned how to make my own isos, take apart and put together computers.

It made my computer science courses in relation seem ideal and the technical bottlenecks of working in different environments whether operating systems, relatively trivial but yeh, I had to double up on my time commitments and turn my college job into tech work to catch up.

2. once I learned what a linux operating system was, I started using only minimal versions of linux, so I would be forced to learn more about how computers work to do everyday needed tasks, along with all over layered projects and school work on it. This helps ALOT.

You want to print something, you need to install or update the drivers, you want a functionality that you didn't know could never not exist on a computer, now you learn how to figure out what to download, what rpms are learn alot about options you have from opensource packages many people have made.

Now you are aware of hundreds of gaps/needs in functionality that have not been written so you could try something and have a realistic project to work on.

You have access to other peoples code...etc...

All of this from googling about printing drivers and why you have access denied....

the learning curve is steep but its hard to learn about this world any other way.


In regards to Computer Science, there were a few reasons I did not end up majoring in it despite really liking it, and now taking coursera courses from Stanford and Princeton to supplement my desire 5 years post graduating to go back and learn more and shift to full time software development.

As a disclaimer, these are all really a result of my mental approach/reaction to a growing desire to learn more Computer Science.

1. I really didn't have the self esteem that I could do it in four years.

I knew I could excel at Electrical Engineering, but Computer Science seemed like a whole new world I could not learn in four years.

2. I went to a pretty good engineering school, and the kids in Computer Science had basically been coding since they were 8, so for me I felt like the competition was high and I could not stand a chance.

3. In retrospect that was not the case, and in fact the people I did know in Computer Science were very welcoming and encouraging to me coming into it, but I really didn't believe I could do it.

I regret that approach now, and I could blame it on all things academia in Computer Science, but it was really my reaction to the sentiment echoed here already that it takes years to really feel comfortable with Computers, programming and all of it in context so you aren't constantly wondering what youre not understanding or spending hours trying to set up varied work environments because you've never used a terminal before.

It is a continual effort and Computer Science, more than any other major or practice, is a new lifestyle and way of thinking, and a lifelong commitment to learning.

For me, I have continued on this path and continued to code for years after college and work on independent and group projects, and taken on coding work in my jobs in relation to electrical engineering. Just now at 26, being first exposed to Computer Science at 18, do I feel confident about my ability to learn and do well as a software engineer that is not a code monkey, working on computationally challenging problems where scaling, algorithms and data structures are a core part of design and implementation to make something successful.

You just have to keep trying, and in general, in regards to computer science or elsewhere, this weeds out alot of people.


As a final note, I would say the most daunting part of Computer Science in college was the perception I had about the experience and practice of Computer Science majors versus mine. I felt really ignorant in comparison and had no realistic way to convince myself I could compete and do well amongst kids with 10+ years experience.

Perhaps the value of this post is to say. I overcame alot of obstacles socioeconomic and otherwise to get into college in the first place.

I made a 4.0 in a private high end highschool and had and have a good work ethic and intelligence.

I even went to an engineering school and majored in Engineering.

Despite all of these layers of statistical thinning, I still didn't feel I could cut it as a CompSci.

If it is challenging for someone who is otherwise very smart, exceeding well by all academic metrics, has a good work ethic and is already in a school offering a good Computer Science program, wants to learn Computer Science, takes entry level Computer Science courses and makes As in them, and still doesnt feel confident about Computer Science, then there is definitely something about Computer Science, that sets the barrier high for learning.

It's definitely a DIFFERENT way of thinking, and I think the barrier to that new way of thinking is not a barrier for learning in most other places perhaps maybe save linguistics, which is also extremely difficult to become proficient in if you did not grow up in a multilinguistic environment or are not constantly saturated in living in a multilinguistic community.

You need to saturate yourself in a new way of thinking, and for me it is incredibly rewarding and translates into every other part of my life and allows me to think more objectively and logicially, creatively and efficiently than I have knew I could, but I think it is the way of thinking that is the learning barrier, along with the multilayered skills needed to navigate complex computing environments, that keeps people from Computer Science.

Lots of good insight here, you ought to cut n paste this into medium to get it out there. I particularly find your perspective of academic high achievers, who have already over come many obstacles, to still find CS as an impenetrable discipline.

This is really valuable insight. Thank you for sharing this!

If you don't mind me asking, did you apply this approach to specific programming languages? I'm curious which ones you tried to learned and ended up sticking with, and why.

What I stick with is based on what I'm developing and working on. The important part is to not be afraid to learn and try new things. I have not stuck with anything in particular but I stay strong in C/C++ because most of my development has related to efficient memory solutions.

On the other hand, Java is really nice for algorithm testing, and writing for classwork.

Javascript is obviously inescapable in some format if you are doing web development so I jumped right in and have learned it with Angular, Express, the MEAN stack in general etc.

It's better to have actual projects to work on. From there its easier to center around a framework, but I still prefer C/C++ but I am learning to appreciate Java the more I develop GUI applications and test more complex algorithms.

Recently I'm trying to test out an idea for an app, so the first thing I knew is I wanted it to be cross platform, so I've had to learn alot more javascript/ionic framework, etc. cordova and how phonegap is a version of that, and learn android and ios app dev to understand how phonegap links the two, and of course theres a movement to use react to dev natively, and Kotlin is coming in strong in the Android space with cross platform app dev, so there is alot you have to learn once you have an idea, and need to learn what helps you implement that idea/project, and you learn more that way instead of saying "I'm going to create something pretty with javascript". You will learn 20x more by making an entire project from design to implementation, and become familiar with how to navigate when and when not to use languages, frameworks technologies, you have to try stuff and fail alot and keep going and continue to make time to put thousands of hours of work into it.

You have to like it to do that, I really enjoy it.

I still remember a lab where one of my friends was up all night trying to find an error in his Java (1.0) code that ultimately came down to having a single character lowercase instead of uppercase.

> There's a ton of Stupid Computer Shit we all know, mostly from messing around on our own time, that makes programming or doing anything else with computers much easier.

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...

[4] http://www.paulgraham.com/ff.html

> Thanks for clearly articulating this in 6 words: "Stupid Computer Shit we all know". This is something many people aren't willing to acknowledge.

I think a lot of us have forgotten how strange and frightening a blank command line was the first time we encountered it. And how long it took to actually get comfortable with it. Even a windowing system is weird if you're not used to it, and lots of people use those for years and years without ever actually feeling like they're in control of them.

Knowing where the boundaries lie, how to protect oneself from unrecoverable situations and how to get oneself out of bad-but-recoverable ones puts one at ease in front of the keyboard. The absolute n00b (which we all were, once) gets lost navigating directories. The experienced user loses their boot sector, curses, sighs, then fixes the problem. They aren't put off by finding the solution to their problem is to apply a patch to their kernel and compile, and so on. It takes time to reach that kind of ultra-power-user level of competence and confidence, it's hard to teach, but it's enormously useful for letting you put the concerns of basic (ha!) computing in the background and focus on the task at hand (programming, for example).

I got dropped in to an AS/400 environment a few years ago. All my knowledge instantly vanished. It was harrowing.

There were so many idiosyncrasies my coworkers knew that I had to learn (anyone know how to push the F22 key?) The terminal didn't function in any way I was familiar with at all (no ls, cd, mv, nothing). The "filesystem" was basically for interoperability while the actual system ran with a concept of "libraries" instead of folder hierarchy.

I ended up having to take basic lessons on the system.

It really gave me an appreciation for "stupid computer shit we all know". It sucks to be in a position of not knowing that stuff. Suddenly the most basic functions becomes monumental tasks.

>I think a lot of us have forgotten how strange and frightening a blank command line was the first time we encountered it.

  BBC Computer 32k

  FS 1.42


As an 11 year old, this was thing of joy, not fear.

It's all fun and games until you break the very expensive family computer (and when your parents have written instructions for the sequence of magic commands to run various programs and don't understand the directory tree, "breaking" it can mean a lot of things) and have to figure out how to fix it. With no Google to consult. :-)

Directory tree? I had a cassette player. This is a computer that you upgrade the OS by going to a computer show and buying a new ROM. Dad watched just to make sure I didn't electrocute myself. He drove me 50 miles buy a debugger on another ROM chip for my 14th birthday. My parents thought these new fangled computers might be important someday, and bought me one to "play" with. I didn't have Google, but I had the instruction manual for the 6502. Life was good.

Exactly right. The unstated but important knowledge of Stupid Computer Shit We All Know was spun by the media as "Evil Bigot Paul Graham Says That Only Suburban White Kids Who Have Used Computers Since Age 6 Can Ever Be Successful Tech Entrepreneurs". Which was not at all what he was saying but ... media gonna media.

On the other hand, I took a theory CS course in college, and all of the pure math students found it extremely easy with predictable lectures and short obvious homework assignments, while all of the programming-since-they-were-5 but not too mathy students were in way over their heads, and really struggled a lot.

It’s all about what you know...

I loaded up with theory classes in college precisely to stretch myself and learn more of the difficult things that I wasn't yet already competent in. I'd been programming since I was 9, and could handle the programming projects just fine (more easily than most other students), but the theory classes were more challenging and I wasn't going to learn that stuff if not in school. It ended up being quite helpful for Google interviews later anyway.

I didn't go to Google but I can relate to your story. Having reached CS courses after tens of thousands of hours programming was very enlightening. Indeed, the CS course layed down all my hands-on knowledge upon a very nice theoretical foundation. I clearly remember saying to myself "ahhh, all that what I've done so far, now i really get it". I had that feeling when studying algorithm performance (with math proofs) and when studying the Scheme programming language (with all the fun stuff : call/cc, tunks, curification, CPS, immutability, pure function, lazy evaluation,...) This + my hands-on knowledge made me a very enlightened dev :-)

I had a much easier time in theory than the other students as well, and ended up being the only non-graduate level student in Quantum Computing, and only CS major in another, Combinatorics. I think a big part of it was that I had a strong maths background, graduating as I did from a Math/Sciences magnet school.

I had the same background of having gone to math/science/CS magnet programs in grades 6-12, which also helped me with the theory courses. Not to the same extent as my programming experience helped with the practical courses, though; theory wasn't something I did outside of school for fun.

I agree. The hardest part of getting my CS degree was the Math and some of the fundamental CS classes. The actual programming classes I enjoyed quite a lot. I came into college with a lot of personal experience with computers, and programming, like you mention.

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*


I believe that being in the "engineering mindset" is at odds with what many people are used to. I think it's the culture that some see and get scared away from, even if that perception isn't 100% accurate. People interested in fixing CS "inclusivity" should address this first.

Given that computer science isn't engineering (they are distinct but different disciplines), can you elaborate on what you mean by the engineering mindset?

Can't speak for OP, but the engineering mindset usually comes from those of us who go into the program that tend to be very mathematical and logical, while being obsessed with figuring out how things work. When a group of engineers sits down at a table to eat lunch, they could spend an hour arguing about how the restaurant could be more efficient...etc. These kids are often used to independent problem solving and don't need to have their hands held. We had an economics teacher in college who was famous for asking the engineers to stand up on the first day of class and then stating that they would be excused from the finals as they would all have above a 95 and not have to take it. The only majors that get the math exposure we do are well mathematics and physics. The difference is we also have to do a lot of concrete things like fabrication, CAD, circuit design, and almost every other class gets some level of programming, so your entire world resolves around fixing things and applying problem solving techniques. They parody this in Dilbert, but engineers are weird birds. Comp Sci is similar in a way when you have a student coding for 12 hours straight as they're in the zone and coding an elegant solution. They aren't entirely dissimilar, but engineers often have a more formal math background and will attempt to approach a problem from that side. Someone with a PhD in math will be so far ahead of me, that I'll barely be able to catch a glimpse at the kinds of problems they solve. We do more practical things like design engines and stealth technology, while they work on things like the millennium problems. I once attended a lecture by a notable math professor on the Riemann Hypothesis basics. 1 hour in and I still didn't hear the problem properly stated. He said "the reason the riemann hypothesis is important is because it is the reimann hypothesis" wtf?!? Anyway, although it is somewhat stereotypical, each major seems to have a kind on niche person that is attracted to it.

> We had an economics teacher in college who was famous for asking the engineers to stand up on the first day of class and then stating that they would be excused from the finals as they would all have above a 95 and not have to take it.

To be honest with you, that teacher sounds like a real tool. All that that can possibly achieve is to breed various subtle forms of animosity, either among classmates or towards engineers or towards the teacher or the course.

No doubt about that. Really unprofessional.

> the reason the riemann hypothesis is important is because it is the reimann hypothesis

I can see this being a joke. Entire subfields of mathematics have been built on the assumption that Riemann hypothesis is true. He probably assumed that everyone in the audience would know this, which is not unreasonable.

In 6 years I never thought of it that way! :)

Thanks! Now I feel like an idiot.

Try "Trolling Euclid" book by Tom Wright, to understand why the Riemann Hypothesis is considered by many mathematicians to be the most important unsolved problem in mathematics today.

Will do, thanks!

Not a dig...but questions like this one. I get what you are asking, but I think that people outside of the discipline would be thinking, "You know what I mean. Why so pedantic?"

As an example, being "technically correct" is important for building a design to match a specification or for winning a logical argument.

But it is not an important skill for persuading people, or for cheering people up.

There should seriously be a class on "Stupid Computer Shit" - I think that would make programming, and hence CS, a lot more accessible.

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.

Hmm.... Many CS101 courses are extremely easy; have a look at something like Harvard's CS50, which many people also take online. There's always somewhere to start for people who's hardly used their computer for more than just browsing.

I thought that until I saw some of my otherwise very smart friends try to take the course. "extremely easy" is extremely subjective.

I haven't gone through CS50 but I took the MIT equivalent online. From the perspective of someone who has done a fair bit of programming but is not a professional programmer (and doesn't do a lot these days), it was somewhat time consuming but not terribly hard for me.

However, my thought when taking it was that if I were a freshman taking this who had minimal experience with computers, I'd have been pretty lost. Not so much because I couldn't have handled individual aspects of the course but there would have just been too much new from the practicalities of a programming environment to a lot of the basic programming concepts to the more theoretical aspects.

Would that be MITx 6.00.1x?

Yes. (It's actually in 2 parts online.)

I had a lot of that "SCS" experience from growing up, although in college CPSC 101 was my first experience with programming...and I hit that hypothetical wall really hard. I was worried I was going to have to change majors 2 months into the class. I still remember the moment when I was staring at code for about 3 hours on a bunk bed when it suddenly just made sense...and then I got A's in all of my CPSC classes for the rest of school.

I couldn't explain how to make it make sense if my life depended on it. It just happened.

When I went to senior secondary school (class 11 and 12; this is before engineering college for 4 years starts here in India) I opted for CS as my 5th subject (4 courses are compulsory and you can opt for 1, or 2 more - you'll be scored on best 5). The teacher was doing it in C++. I still remember my first program was a for loop in C++ and before that I didn't know the C of Computers. I sturggled from the day 1. I had gone there from a village and I had never used a computer before. I just was good in Maths, Physics (or so they said and so I thought) etc and people said I should go for CS and I did.

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.

Thanks for sharing your experience. I've often thought one must be part sadist to continue in this field, or to be successful :)

Hundreds to thousands of hours? I think you're overestimating a weee bit.

Maybe. But I am sure I had put in a thousand hours programing my C64 by the time I had finished 8th grade. And I doubt I'm alone.

Ack. I misread "hundreds to thousands" as "hundreds of thousands." My mistake! Hundreds to thousands is def reasonable.

And wrote it too? Haha

I cut and pasted. Ya, kinda silly. Oops!

One of my professors actually made the opposite point: that in CS, the compiler will give you an error. You can fix it and move on to the next. While in math (he was a math prof), the paper doesn't object to your writing nonsense. If you have an error early on in your work, all the rest might be nonsense, and you only find out much later after a human grades it.

tl;dr at least in CS you get immediate negative feedback

Around here most CS, math, and physics courses have "demonstrations" - weekly occasions where students present their solutions to homework exercises in a classroom setting. The answers are not graded, you just have to attend and be prepared to present if you're (semi-)randomly chosen by the instructor (a TA or sometimes the lecturer themselves).

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.

Until you're working on something that can segfault/fail to null terminate a string/fail to sanitize user input, etc. And the compiler won't tell you if the semantics of your program is garbage either.

Indeed very often the problems people encounter are described well in the error message and/or stacktrace that is printed. But many, many people find it very hard to correctly read and understand those and it's because that is also a hard skill to learn.

People will actively refuse to read error messages[1].

I don't know how many times I've been trying to fix something with somebody, and an error dialog comes up, and they dismiss it instantly, before whatever content it might hold has a chance to flash across their retinas. Then I have to get them to do whatever it was four or five more times, before they calm the hell down and let me read what the error message is telling them.

[1] https://www.joelonsoftware.com/2000/04/26/designing-for-peop...

The real fun is when the compiler has no issues but things just are not working right. It's this type of situation "Stupid Computer Shit we all know" in these situations can ruffle-up classroom CS students. SCSWAK uses his skills to solve and try and add a bit or byte to the pile of shit.

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 agree. In no other area is the feedback loop so fast and can "experiments" be repeated so conveniently.

Incidentally, this is also why we see so many "experiments" in production code, which is the downside.

Getting the syntax right is the most trivial part of writing a useful program.

Running a program also gives feedback quicker than waiting for a professor to evaluate it.

i sometimes wonder if a single line of code I wrote was ever run/checked by a TA or professor

I know for a fact mine weren't, because the profs tended to tell us so. Also, many of the academics could barely code themselves. Instead they found creative ways to set mark schemes such that the code didn't matter, even for programming assignments.

> The grief factor of learning to code is on a different scale to every other major. One missing semicolon will take your whole tower down, and you realise this in the first day of practical exercises.

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.

> 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.

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.

And yet I had zero problem learning Logo when I was like 10 years old. Neither did _most_ of the other 10-year-olds in the class. They didn't all take to it as much as I did, but the majority of the class was not stopped by the frustration of syntax errors.

If you can teach programming to 10-year-olds without it being too frustrating... on the other hand, I suppose you could argue that younger people will have an _easier_ time, for the same reasons (human) language acquisition is easier for children. I dunno.

I'm not sure how it relates, but what I think was _really_ an immense aid to people of any age learning programming in the 80s was that computers and software were _simpler_, meaning that you could very quickly approach the level (at least at first glance) of 'real' software with what today seems like 'toy' software. The text adventure games I started writing as a child weren't actually _fun_ for anyone to play but me, but they _looked_ like a real text adventure game that other people played, they had the same form. Or the ascii-graphic blackjack game. There was gratification with a pretty low bar.

I have no idea how I'd become a programmer today. It's an entirely different path. People ask for me for advice, and in my head, I'm like, well, first be a child in the 80s with an Apple IIe, then start writing for the web when all you need to know is HTML and you write it in Perl cgi-bin... I have no useful advice.

I do have a CS degree, which I got in the 90s.

Yeah, I tried to teach myself programming in high-school (mid 2000's) because I wanted to try and get into building games. I was overwhelmed by the complexity of even setting up the tools. I figured I wasn't cut-out for it. Then in college I decided to take an introductory programming class that involved writing simple C programs and I was hooked. The prof did a good job of minimizing the accidental complexities of programming.

That is the thing, you should not deal with that when you are just seeing for cycle for the first time. You should not be anywhere near compiler flags. The IDE is something you should start with. Text editor + compiler is the harder way. The first class should start with opening IDE and writing something really simple.

Like someone mentioned logo or the old basics - if kids start in that environment they pick it up quite easy. They pick up concepts (wtf variables, yes does not matter how they are named, conditions, for cycle, functions) and there is instant gratification and little complexity. Just playing those games with little robot and arrows that "programs" it or simple scripting language in some game already makes much difference.

Then you can move on compiler and java or C - because basics are out of the way and it is the time to deal with what you call incidental complexity. Basically, one concept at a time. It is a bit as like teaching quadratic equations to people who were never taught normal ones nor much arithmetic.

Logo is great and all, but we're not talking about beginning programming for kids, we're talking about CS degrees.

At some point between Logo and bachelor's degree, you run face-first into that complexity, which is the "wall" the commenter atop this thread was referring to.

> Logo is great and all, but we're not talking about beginning programming for kids, we're talking about CS degrees.

I'd be willing to bet you could create a CS course using nothing but Logo - and it would probably be better for students than what currently exists.

In his book "Mindstorms", Papert discusses the faulty idea that Logo is only for children, and that it isn't a language that can be used to develop complex software.

The fact is, it can. In fact, Logo is pretty close to Lisp in its functionality.

The most complex piece of Logo I've ever seen was a few decades ago in an issue of the Rainbow Magazine (for the TRS-80 Color Computer); it was essentially a game of Monopoly, with full graphics (and probably sound too); I'm not sure if it did any kind of file i/o - but I know Logo supports all of that and more (especially current versions of Logo).

Seriously - if you think Logo is only for kids, you're missing out on a very fascinating language.

> Logo is pretty close to Lisp in its functionality.

Is it? Quote from the Logo Manual, 1974:

All complete LOGO statements are imperatives, so that an operation cannot stand by itself. If you type SUM 17 26, Logo responds with the error message YOU DON'T SAY WHAT TO DO WITH 43. In contrast PRINT SUM 17 26 is a complete statement. The computer will print 43.

Yes, but many students are basically at the logo level at that point. They struggle with basics. Then there is huge sudden jump to compiler flags which you call the "wall". But that is exactly what I call bad teaching. There is no reason for that to be the wall, all you need is not to teach them everything at the same time in lesson one. This is combined with culture which tenda to attribute easily learnable skills to "natural talent" - so students conclude "I am not that talent" and go somewhere where they think they are talent.

I mean, you can teach concepts one at a time and still be demanding and require certain speed. I am not saying it should be easy. You however should separate those concepts from each other and teach them one by one. Otherwise you just relying on them to have it "picked up" randomly which is not an expectation other majors have (like physics or math or biology).

In early college I once spent 10 hours in the computer lab with a broken program over a missing semicolon. The compiler kept telling me the problem was something completely different and in an entirely different part of the code so I kept my focus there, but in reality it was just a missing semi-colon much higher up. I got so frustrated from that (and a couple other struggles, along with some extremely shitty and unhelpful professors), I figured I must be in the wrong degree, and ended up taking English classes for a semester before dropping out entirely and went to work in a warehouse for two years and not doing any programming whatsoever.

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.

> 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.

Yeah - that's been replaced by C++ compilers b0rking hard on errors in variable templates and such (and leaving you just as confused as to where the problem really is).

/wish I was making this up...

I took a short course (1 credit hour) in Java when it was new enough that there where no IDE's. IMO, limiting courses to established languages is kind of a waste.

I also did Java as my first serious programming language with no IDE...though this was in the early 00's in AP CS in HS. But it was good to get to know the basics through the most basic form of it. Javac/Java on the CLI, and a pure basic text editor.

What's your point?

On the bleeding edge your going to have to deal with things like semicolon placement by compilation. I am not saying writing code on a test by pencil and paper should be the normal approach, just using an IDE 100% of the time is hardly nessisarily.

I'd agree that starting with a plain old text editor is probably the best approach. Remove as much of the magic as possible when you're first getting started, and then add it in once they understand the basics.

I learned java in high school as my first language, and I struggled to get the IDE properly set up - it definitely slowed down my understanding.

novice programmers should not be starting a CS degree

Given the gender skew amongst high-school programmers, this is almost equivalent to saying "women should not be starting a CS degree". It also further entrenches the advantages of people who come from affluent backgrounds. Given the success of some short coding bootcamps, it isn't inconceivable that novices could be brought up to speed within the first semester.

We don't expect law students to have been amateur lawyers in high school; it's a bonus if they have been in the debate society or have taken a personal interest in the subject, but it's not necessary. I don't see why CS should be a special case, aside from a misplaced attitude of exclusionary elitism.

> It also further entrenches the advantages of people who come from affluent backgrounds.

If you can afford a video game console, you can afford a raspberry pi (or equivalent.)

> We don't expect law students to have been amateur lawyers in high school

No, but we expect math majors to have done some math before they get to college.

I don't disagree with you that most people can be brought up to speed in less than a year, but it's also not unreasonable to expect first year CS students to have had some programming experience. Computers don't cost thousands of dollars anymore.

Math majors are expected to know high school math. You can literally know exactly that and succeed. If you wish to get ahead of competition, you know exactly what to do and exactly what is measured. CS does not have such clarity of expectations. I knew basics, because of journals my father bought. Since I knew basics, the teacher shown me some competitions - from then on I just went with the flow. Had my father not bought those journals or had my teacher not shown me competitions, I would not study cs or had much harder time.

If you are a boy, video game console is something that is bought for you often times whether you really want it or not. Raspberry pi is likely not and you don't know it exists. And even if you know it exists, you need computer to upload code to it and then you could have just use that computer to code. I know that it is easy to code when you know where to look, but the biggest hurdle is that many kids dont know where to look. Instead, they are told there is something magical and hard about it.

I remember being told that it is hard or that I cant compete because I am (presumably) just learning and other kids "already know a lot". It was bs, but that is where it is for many kids.

Seriously, I knew straight A students who were more hardworking then me and had good grades in math (meaning no dummies memorizing stuff) were under impression I have some special brain because I can program. All the myths around cs tend reinforce such nonsense.

> Raspberry pi is likely not and you don't know it exists.

If a kid can't type "how do computers work" in google, they probably won't become a programmer. Are we really wringing our hands over that?

> All the myths around cs tend reinforce such nonsense.

There's another bit of nonsense around CS that a lot of people here believe - that there are all these secretly good programmers out there who just don't know they're programmers because no one ever told them how to start, and that they might not even know what programming is because it's so difficult to get started.

I find it nearly impossible to believe that there are all these smart people out there, surrounded by technology, with hacking and computers in every TV show, with the President telling them to "learn how to code", Bill Gates' name dropped by rappers, Google in everyones' pocket - and no one is typing "how does my smartphone/videogame/internet work" and reading the results?

Like, who is still walking around like, "I got good grades in school and knew people could become doctors, but I didn't know people could make computers go! Why didn't anyone tell me?!"

Are there other problems keeping people from breaking into the industry? Absolutely. Is "not knowing where to look" one of them? There's no way that it can be, not anymore.

You're also missing the social aspect, particularly for girls. Depending on your personality, friendship groups, culture and Family it's often not socially acceptable to spend your free time as a teenager hacking away at stuff. You forget that those of us who are happy to spend those years in our bedrooms hacking away are weird. If you're a geeky boy you can get away with it, some folk may even encourage it. If you're a girl not so much.

The idea that we block off CS as a subject for only those who've taught themselves some programming is absurd and elitist. While we may expect Math students to know Math before Uni, it so happens that 99% of high schools teach the level of Math we expect them to know. In a lot of countries it's compulsory. Same goes with most of the sciences, we expect the level that schools will teach. Unfortunately most schools don't teach programming, and those that do often don't do it well.

> If a kid can't type "how do computers work" in google, they probably won't become a programmer. Are we really wringing our hands over that?

If a kid cant type "how human body works" in google, they probably won't become a biologists. Somehow, being constantly surrounded by all those bodies and dogs and grass they did not learned biology. Except that they come to college and do learn. But realistically, "how do computers work" is such a broad question that it does not have to do with anything. It is literally irrelevant question to anything practical.

But that is literally this culture I am talking about - the conviction that if you already don't know stuff and was not interested in the past, you are not talented point stop don't even try. Math teachers nor chemistry teachers assume that - if you are curious now are happy with you learning now.

> that there are all these secretly good programmers out there who just don't know they're programmers because no one ever told them how to start,

They are not secretly good programmers. That takes more then just aptitude. But yeah, a student with good memory and basic math aptitude has genetics for programming. There is nothing special about us. The hardest part of beginner is to figure out what makes sense to learn and what not.

> and that they might not even know what programming is because it's so difficult to get started.

Well, it is difficult when you don't know what to do and get told you probably don't have aptitude first time you struggle with something. It is easy if you learned from simple concepts, either because you run into right game or because you run into good teacher or book.

Exactly like any other learnable skill - math, chemistry, law, physics and so on.

> "with hacking and computers in every TV show"

That has nothing to do with reality. I see sword fights in many movies too.

> "and no one is typing "how does my smartphone/videogame/internet work" and reading the results?"

What does that question have to do with building sofware? Like, real world software with real world homework that suddenly out of nowhere expects you to have skills that were not taught previously.

What does that question have to do with algorithms? Programming languages? Whether the students would be more attracted to solving problems side or building things side or theory side or software engineering side, your how does videogame works is largely irrelevant. Plus the answer will be high level overview of memory/cpu and such.

> Are there other problems keeping people from breaking into the industry? Absolutely. Is "not knowing where to look" one of them? There's no way that it can be, not anymore.

You did not suggested a single practical place for beginner to learn stuff. Only few very general question that does not necessary lead to programming - most of them would lead to electronics at best. And such good resources exist, but none of your suggestions lead to them.

The "breaking into the industry" is far away from "starting with programming". But then again, that is part of nonsense around this. I know people who found a job with very little knowledge in small company just because they looked confident and hiring manager was inexperienced. Few of them even became good programmers, although they created huge mess on their way there and had to rely at politics a lot. But somehow, a honest student with good results in pretty much everything else is assumed unable to learn the same, because he is less good at pretending.

> What does that question have to do with building sofware? Like, real world software with real world homework that suddenly out of nowhere expects you to have skills that were not taught previously.

You're way beyond the scope of the original discussion.

Someone suggested people would drop out of CS due to the grief factor of - for example - breakage due to missing semicolons.

Another person then suggests that maybe it's a good idea that CS majors have some experience programming before they enter the program. Note: some experience - no one said you need to have built a "real-world" team project before going into a CS program.

Then all hell breaks loose because, apparently, getting online and reading a couple tutorials and screwing around in a browser-based programming sandbox (there are tons), is something only wealthy people with college educated parents can do.

Sorry, but I don't believe that.

Another person then suggests that maybe it's a good idea that CS majors have some experience programming before they enter the program.

Why not offer two tracks? People who have never programmed before have to take a 6 month intro to computers course, that people who know how to program can skip. The people who skip the course can then either use the extra time to take other courses or graduate earlier.

> screwing around in a browser-based programming sandbox (there are tons), is something only wealthy people with college educated parents can do

Having the free time with access to a computer to "screw around" on and knowledge of the existence of browser sand boxes are absolutely tied to class.

Honestly I think the only prerequisite for a CS major is to have interest in it. I never had any programming classes in high school and I switch my major 3 times until landing on CS. I had never programmed before in my life, but it was interesting to me and I found out I had an affinity towards it. I'm just saying this statement that you need to have some background to it is not necessary.

A video game console has a known and proven entertainment value. The whole family can use it. It's a reason for people to come over to your house. It's a status symbol.

Beyond that, I know a lot of poor kids who don't have video game consoles, and there literally isn't $50 in the budget for something that may or may not produce any value (not to mention the monitor, the peripherals, and taking up vast amounts of time on the family computer -- if one exists -- to figure out how to use it).

I have extended family living in rural Utah who don't even have a computer -- they use their phones for the Internet. You can debate back and forth about the cost of a phone vs. the cost of a cheap Desktop, but people need phones to function in society, for better or worse. Try figuring out what to do with a bottom tier smartphone, a limited data plan, and a Rasberry Pi that just arrived in the mail.

I volunteer at the Boston Museum of Science, working in the Tech Studio/engineering department, often showing off the latest "engineering toys" -- Little Bits, Rasberry pi, Scratch on an iPad that controls a Lego robot... Rich kid parents ask "Oh, where can I get this?" It's not a big deal for them to drop a couple hundred bucks on flavor-of-the-week programming toys. Poor kid parents are often interested and enjoy playing around with it at the Museum, but never ask about getting one themselves. It doesn't even occur to them.

Beyond THAT, there are a lot of majors that don't cost a lot of money. You can use the argument "X doesn't cost much to learn -- why haven't you done X before on your own time?" to apply to anyone.

You can always point to someone who can't afford it. That doesn't make me wrong.

There are now computers that cost as little as taking the family out to dinner at McDonalds. Probably a hundred million more people (yes, however, not every single person, ok) have the means to learn programming compared to when I was a kid.

Acknowledge that, because it's amazing.

Sounds like a great opportunity for local libraries to become more relevant (and/or for a nonprofit org to supply them). I know many local libraries supply at least a few computers for internet browsing or whatnot. Why not a pi or two, or pocketCHIPs to loan out?

> If you can afford a video game console, you can afford a raspberry pi (or equivalent.)

Right. This type of democratization is EXACTLY what allowed me to climb the social ladder out of the rural midwest into a Top 15 university and then Silicon Valley. As a teenager, all I needed to teach myself coding and advanced math was free time and an Internet connection.

>Given the gender skew amongst high-school programmers, this is almost equivalent to saying "women should not be starting a CS degree"

What makes you bring up gender over race or class ? There are more middle-class Asian and White women in the field than lower-income African-American and Hispanic men.

The following sentence was about household income. I'm not entirely sure that race is a meaningful factor after correcting for socioeconomic status. Gender is demonstrably the biggest skew in CS majors.

> We don't expect law students to have been amateur lawyers in high school; it's a bonus if they have been in the debate society or have taken a personal interest in the subject, but it's not necessary. I don't see why CS should be a special case...

Agreed, and when it comes to CS, programming is the easiest part. People who fail to see this are probably the ones who only know programming and no CS.

If you've applied for a CS degree and not done any programming though why (outside of financial incentive) would a Uni want you, surely it shows you've no interest in the field - that has to correlate strongly with failure. From nothing to doing bubble-sorts with something like python shouldn't be more than a couple of weekends for someone of the caliber to study CS at Uni.

Say you apply to study marine biology but have never been to the seaside then sure, you might do fine, but really I'd be wondering why you weren't taking a gap year and doing some self-directed study at a beach (hey, that sounds fun!).

Maybe because in the USA, you don't "apply for a degree" at the undergraduate level? You apply to be at the university full stop, or at most an honors program.

So, you do modules or somesuch; presumably they have pre-requisites that work in largely the same way? Like for non high-school subjects "read chapters 1-4 of 'intro to $subject' and have a grade C or above on $exam"?

How do you manage expectations for courses/modules/whatever from both sides (teacher:student) without such things.

You simply declare a major/concentration and register for classes in the appropriate departments. If you get acceptable grades in those classes you are allowed to continue.

Isn't "declaring a major" almost synonymous with applying for a degree, presumably the declared major in this case would be "computer science", so requiring some programming knowledge for those declaring that major would be possible?

In theory can one easily go to a USA Uni based on relatively unrelated abilities - lets say history and cooking? - and leave with a degree in Electronic Engineering? If there are no subject-based pre-reqs why does one need to declare a major, or is that done later?

My UK degree was modular so I could have done something quite similar, but I was assessed for entry based on abilities pertinent to a nominated degree (not the one I ended up with as it happens). Modules still had [relatively loose, unassessed] pre-reqs such as reading particular books or understanding specific concepts.

By the time you have declared a major, you will have taken the prerequisite courses already. Some programming knowledge is required, but that can be acquired while at university, not before.

>Given the gender skew amongst high-school programmers, this is almost equivalent to saying "women should not be starting a CS degree".

Somewhat related to your point, letting novice programmers get CS degrees doesn't fix the problem because there is still a performance gap which results in a hiring gap. If there is problem with demographics having unequal experiences, while colleges can be tweaked to keep the inequality from growing, it is far better to fix it where it comes from.

It's far simpler to say than do, but our society needs to find why the gender skew in high school programmers happens and stop it.

You do in countries that specialise earlier you wont get into a STEM course at a UK Uni without the relevant GCSE / A Levels.

In the UK you start to specialise at 13/14

I and I bet having a GCSE and A level in Law would help for wanabe lawyers

Poppycock. I studied CS at UVA in the late-90s and had no previous programming experience. I was an experienced computer user, which wasn't a given in the 90s, but I hadn't done any programming. There wasn't anything in the curriculum that required previous experience.

Linux wasn't required for entry-level courses. At the time, they were taught using C++ and a Borland IDE on Windows.

Similarly, source control wasn't introduced immediately. I'm pretty sure CS101 assignments were turned on paper, in addition to email.

And the department offered many options for lab time, office hours, and tutoring. I worked as an undergraduate TA for 2.5 years, which basically meant holding lab hours 3-4 times/week for 2-3 hours at a time, in addition to grading assignments and exams.


I also started a CS program in '95, with practically no previous programming experience. (10 PRINT "HENRIK IS THE BEST", 20 GOTO 10 doesn't count)

One thing our university did though was that the introduction course was in Scheme, which evened the playing field immensely, because most of the kids who could program were self-taught in Pascal or C, and where pretty stumped when confronted with a functional programming language.

But my university's approach didn't help the abysmal graduation numbers either, there were so many classmates that dropped out during the first year. A bunch dropped out because the programme was an engineering programme, and they failed the math parts, but did good on the CS parts. Most of those switched to other programmes that were more pure CS and were successful.

But there were a lot of students who just lacked that elusive thing that makes a person a good programmer. There's been a lot of studies, and lot of previous discussions on HN of those studies, but the jury is still out, we have no idea how to effectively screen people for programming ability. The only thing we can do is toss them into an education and see if it sticks. The original article asks:

> Isn’t it reasonable to expect that people with an aptitude for math, physics, and engineering will also have an aptitude for CS?

And the answer is a resounding no.

Funnily enough, this whole thing ties into the problems of recruiting good programmers, another HN staple topic. We can't tell if someone will be a good programmer before an education, and we can't even quickly tell if someone is a good programmer after an education, or even after years of working in the industry! If there was a quick way of identifying good programmers, we wouldn't be in this mess.

>And the answer is a resounding no.

Agreed. Apart from understanding logic, complex math is such a small part of development. I would say programming requires the overlap of knack for math and a pure creative interest like painting. That's much, much rarer.

During the dot boom, there were plenty of CS grads, but after the dot bomb and the market dried up, people lost interest. Also, the pay and incentives aren't nearly as good as they were during the dot boom.

Add off shoring, constantly pushing down wages, and the fact that most US businesses make programming miserable, that's probably most of the big picture.

>knack for math and a pure creative interest like painting //

You mean a pure creative interest like maths, surely ;0)>

A bunch dropped out because the programme was an engineering programme, and they failed the math parts

There are solutions to this problem as well.

JMU and GMU (high quality, but not top-tier, state schools) both offer pure CS degrees, but also a spectrum of multidisciplinary programs in "IT". One of my current summer interns is wrapping up a degree in info security, with a heavy dose of programming. The other intern is a straight-up CS major. Both appear to have the programming chops to join the workforce as typical application developers.

FWIW I started my CS degree in 2001. My first CS class assumed I knew how to navigate a *nix system (I forget which one). I was also expected to already know at least one programming or scripting language of my choice that could be used on the school's servers. That included but was not necessarily limited to: Perl, Java, C/C++. Oh, and I also needed to know Matlab.

I'd say that's a massive flaw in the curriculum. They've effectively written off the overwhelming majority of new college students. Outside of a high-school level CS course, where would one even encounter a *nix system (yes, I'm ignoring the dedicated geeks who spin up their own system for fun)?

Their goal was probably not to maximize the number of CS graduates. FWIW my university had a well respected 2nd tier CS program. By that I mean just short of MIT/Georgia Tech/etc.

My university, around the same time, offered a 2 week, 0 credit, intro to Unix course that everybody who hadn't worked with *nix systems before where expected to take. All courses then assumed that everybody knew everything taught in that course.

I was there the same time you were and while I thought I came in knowing a lot but I was dead wrong. I had to learn a ton of things from the ground-up like everyone else.

God forbid someone goes to college to learn something.

Of course, in my experience coming in to a CS degree as a techie didn't actually teach me how to make a living writing code. Most of the useful stuff I had to learn on my own time. The connections I made at school helped, but the value of the actual classes was low.

So perhaps a CS degree isn't intended to teach anything to anyone.

To the degree that colleges have their curricula setup that you need to have experience programming to enroll in the CS degree, that's on them. It's not true of essentially any other STEM major--or indeed for most degrees. (There are a few exceptions. Lack of fluency+ in English would make it had to make it through many top humanities degrees. And many music, etc. degrees would be tough/impossible without prior exposure.)

However, in general, the idea that you need to already be a programmer per-college to major in CS is somewhere between wrong-headed and toxic.

I did my BS in CS with no prior programming experience.

I think the founders of what now is CS would be lumped in with the very, very bright but still novice programmers. Most of the field has nothing to do with actual hardware anyway.

What makes you say that?

Where would you have them start instead?

Bumble through learning to program without the theory behind any of it?

That seems like a cart-before-the-horse scenario.

Not necessarily a bad idea. This will give you a better appreciation for why you would want to use the established paradigms taught in CS courses.

in my day/at my alma mater non-novice programmers had a reputation for dropping out because they were bored by the introductory material in the first year of the program.

I think you are significantly under appreciating the difficulty and need for precision in many other fields, like mathematics and physics. For example, compare "missing a semicolon" to "missing a minus sign" in physics or making precision errors in chemistry.

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.

The premise of the article is wrong. From 2009 and until 2015, the number of CS grads almost doubled and any of those economics majors could have seen that in the graph, even if their essays are "basically bullet points" and their field is dead simple. They could also have told the blogger that causality might go the other way; Salaries are high precisely because demand is bigger than supply. If (or when) high salaries cause more people to study CS, salaries will drop unless demand rises even more.

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.

Yes, I'm sure there are other factors but the graph tells a pretty simple story. Numbers declined from 2005-2009, which means students that entered college around 2001-2005 -- students that were in high school during the dotcom bubble burst and aftermath. CS may not have seemed like an attractive field at the time. Over time the state of the field has recovered, and as you point out continued to grow and get more interesting, and growth in graduates returned.

It's easier to see the bubble with the original data https://nces.ed.gov/programs/digest/d15/tables/dt15_322.10.a...

Interestingly there is also a giant bubble at 1985-86 which wasn't match until around 2010. Looking at http://www.computerhistory.org/timeline/1982/ shows a couple of noteworthy events (Tron and the commodore 64).

Perhaps another reason for low numbers is the difficulty in the major HN has two posts on the front page about it today: https://news.ycombinator.com/item?id=14438601 And https://news.ycombinator.com/item?id=14442410

Perhaps the difficulty combined with the ability to more easily detect cheating/being easier to cheat in the classes are contributing to a slower than desired growth. Given that when plotted out computer science appears to be one growing faster than many others suggests that it isn't that few people major, it's that the science is new and barriers to entry are high? (Annecdotally I know my college had additional barriers to pursuing CS focused on pre-reqs and grades, it's possible a lack of quality CS teachers is causing this as it is so new.)

right on the money. I graduated HS in 2004. I originally was into making websites in HS. the farthest I got was a little ASP and ColdFusion. But it didn't seem like a safe industry at the time so I went another direction. (but what did I know, I was a kid)

I never really made the connection of "building websites" to actual computer programming, so CS didn't even come up for me.

but now its 2017 and I went back to school and just graduated with a degree in CS.

Nothing against comp Sci, but engineering is its own set of problems as you have to take a lot more advanced math classes than comp Sci, while taking all your calculus based engineering problems. Some you use techniques to convert to simple algebra problems...that end up being 2-3 pages long. All while having to learn CAD, robotics, practice circuits, design trusses, and yes, quite a few programming languages (basic, C, assembly, VHDL, Matlab, and PLC (ladder logic))to name a few. Each one of those has its own set of problems from the install to the OS to the awful assignments...etc. Then each class itself is often taught really harshly. I often had multiple choice tests...sounds good right? Not great when you make 1 sign error on an entire page of calculations and get 0/10 points. I had a design project once that I spent weeks on and went above and beyond everyone else in class. 30 pages on the design with pages of equations and optimizations. 1 page had a minor error that carried to another, but overall not too bad. 70/100. Not to sound overly dark, but engineering school was extremely difficult and by far the worst 4 years of my life. I graduated with a good GPA, but I studied pretty much non-stop those 4 years. Some people manage to make great grades with very little effort, but it is rare. Again, nothing against comp Sci. Any program that focuses on logical problem solving is A-ok in my book, I just don't want anyone to get the idea that engineering is in any way easy. It is often a cruel and harsh mistress.

> It is often a cruel and harsh mistress.

If your engineering project doesn't work, there's no pretending that it does. It's the ultimate in fairness :-)

If your engineering project doesn't work, there's no pretending that it does.

Yeah, that's marketing's job.

Nah that bridge that fell of its supports it was the contractors fault honest guv :-)


I used to work for a top 5 consulting engineers and I had to reverse engineer some tests to help prove that the tests on the ground where we had a problem with a bridge where the fault of some one else.

Being a software engineer is often about the merging of the discipline of CS and the art of programming. I think most software engineers are strong in one and get by in varying degrees in the other. The few that are strong in both end up being the "very good" programmers we all know or have heard about. For some, that semicolon is a nagging reminder of their mistakes. For others, it's a small detail they zoom past as they get on with the laying down of code.

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.

You start saying 'software engineer' and end with programmer.

Clarify your terms. There is a huge difference between willing to take on liability for your faults versus slinging code.

> You start saying 'software engineer' and end with programmer. Clarify your terms.

Eh, it snuck in there. I specifically changed programmer to software engineer in multiple spots to disambiguate it because I was talking about "programming" as an act distinct from applied CS. I missed doing so at the end.

> There is a huge difference between willing to take on liability for your faults versus slinging code.

Based on your assumption of what I meant, it sounds like you have something you wish to express on this point. Perhaps you should do so in more detail?

"Engineer" means someone who is licensed and is professionally and legally liable for the work they produce. Those who are licensed engineers often feel that the term "software engineer" cheapens the term because software folks are not licensed and not held liable for their work (and in some places, it is illegal to have "engineer" in your title without a license). On the flip side, software developers need a way to differentiate titles between the folks who copy-paste code from Stack Overflow with little understanding and those who build well thought-out, robust solutions. Folks sometimes put this on a spectrum from script kiddy, programmer, developer, to software engineer. Perhaps a new term is needed...

The opinion that the term "engineer" should be regulated (voluntarily or by the state) is definitely a minority view here on HN in my experience.

Imagine if anyone who "knew enough about doctoring" could drop out of undergrad and "become a doctor" without any license or credential.

They're all made up terms that are mostly meaningless.

Software engineer is what you call yourself because programmer has negative connotations, while an engineer is the guy that built your house, your roads, your bridges and your airplanes - with "engineer" in your title, you are obviously more trustworthy.

Not sure what universities you went to but that view is as far from the truth as it can be, at least for where i'm at (germany). I majored in CS myself but had a lot of friends in mechanical and electrical engineering. To say their fields revolve around a small number of vignettes is downright bizarre. I was never bad at math, but i gotta admit it got hard in CS along the way. However, the math the did in EE in the higher semesters to me was completely arcane. Like several steps above what we had to do in CS. The grief factor of coding? Seriously? Load up a halfway decent IDE and have immediate feedback when you did something wrong, then tinker until it works and you can hand it in? It doesn't get any easier. Compare that to "drawing some boundaries and applying some equations" (over 10 sheets of paper), then noticing you made a mistake on page one and your results don't make sense... I'll take the "code grief" any day. I don't mean to be snarky but you sound like a frustrated CS undergrad student that hasn't had to much exposure to the other fields you devalue so easily.

> The grief factor of learning to code is on a different scale to every other major.

'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 chemistry: get a mixture of different chemicals in a lab class that you are tasked with separating and identifying. Screw up one separation step and lose one or more of the chemicals, you aren't getting it back. If you're lucky maybe you can take the NMR spectrum of the whole sample, isolate out the contributions from the other chemicals you were able to separate and then possibly be able to identify the missing one, but you're not going to be able to turn in an isolated sample of it so that'll at best cost you a bit.

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.

Many engineering fields (including CS in some contexts) have a huge dependency on experimental setups that are "temperamental" at best much of the time and/or dependent on someone else's experimental work and other hardware that doesn't always perform according to spec, etc.

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.

That was my reaction too. You don't know frustration as an undergrad until your correctly designed circuit is behaving oddly because one of your components is damaged in a nonobvious way. I found the CS classes to be relaxing by comparison. Works every time as long as I get the code right? Sign me up.

The damaged component is pretty similar to a bug in a library.

Agreed. I learned this in our new student orientation.

"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

Anyone who talks about compiling the Linux kernel as a measure of difficulty or knowledge obviously knows nothing. I could teach my 9-year-old nephew how to do that.

Arrogance crystallized. Don't you have a bridge to tend to?

Compiling a linux kernel is just following a set of instructions. You don't need to know anything about computer science to do that.

The thing with instructions is always this: The first instant something goes wrong while following them you have to give up if you don't know quite a bit about what you're doing anyway.

I believe I'm not the only one who, when something goes wrong, I become more determined and think "I might learn something here" followed by searching the internet for things related to what went wrong.

Right, but that takes it from "just following instructions" to a thing that requires you to build a mental model of the system you're working with. It also requires you to have confidence that you will find the answer in bounded time.

This is basically how I learned to program.

"One missing semicolon will take your whole tower down, and you realize this in the first day of practical exercises."

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.

Yes and no. You can understand a concept 100% and execute it 99% and still have the program fail. In other engineering disciplines, that gets you a good grade. In CS classes it's a fail.

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.

A missing semicolon tells you only one thing; In all likelihood, there are many things wrong with your code.

In most other subjects, there are ways to get most of the feedback in one go.

You know if it will be right or wrong before you even turn it in.

Most student-written test suites I've seen are not nearly this thorough.

Sure, but that is all about attention to detail. It isn't really about how smart you are rather how much effort you put in.

Depends on your personality.

There is another problem. Computer Science just doesn't sound that interesting.

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.

The problem with pure computer science is that it isn't even that interesting to the uninitiated. Who the hell wants to grow up to balance binary trees, derive proofs around number theory, and poke and prod at heaps of linear algebra?

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.

Yes, for most people CS == IT. And IT doesn't sound very exciting.

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.

It's interesting you say that too, because a lot of those "flashy" jobs end up being very similar to a computer science job anyways. There are typically thousands of people designing a jet engine, and individual teams and people are assigned minute tasks of the process (especially engineers). The work goes from "designing a jet engine" to "sourcing proper bolts for a small part of the jet engine".

Say you could learn to build sites like facebook or google, understand how the internet works (which has a huge influence on people's lives) or learn how forces bend metal and how to calculate some break even point. Most people wouldn't choose the latter...

Honestly CS major is typically a joke compared to math (real math, not "CS is math" math), or physics. Comparing the hardest CS classes you'll do in undergrad to the likes of PDEs, Complex & Real Analysis, advanced QM, General Relativity, etc, it's just no comparison.

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.

And my own experience is that I learned coding and using Linux on my free time several years before entering college, where I studied engineering, which required no little effort. Programming is hard, I'm not denying it, but so is everything else if you plan to get paid doing it.

In my experience it is much more stressful and hard to learn these things for a course, because you're not interested in them but HAVE to use them in order to do something (e.g. hand in your assignment with git).

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.

It's incredulous how people can find git daunting; especially the simple usage most make of it. Yet, I constantly see people refer to such simple and easy to use CLI tools as an obstactle in CS courses, not a helpful tool. Welcome to the fulfilled prophecy of the movie Idiocracy. This is why MIT had to stop teaching SICP and why many courses uses Java instead of C... Good luck learning pointers and assembly then. Good luck ever knowing how to create and manipulate data structures, how to create a filesystem, database, OS, scheduler, etc; or how to develop/improve and implement algorithms used in ML and AI (to be fair, this is math... and which is why programmers need to stop avoiding math, it's another issue, but related. stop avoiding complexity, because it's a fucking big and scary monster lurking beneath everything you're working with, just waiting in the dark...)

What we need is people who understand the complexity we constantly throw more shit on top of; it's only going to get worse the more data points and networking we have to deal with. Pretty soon we're going to have a massive network of autonomous vehicles on physical, country-spanning networks of roads. For this we need systems people. Not front-end developers. The sad thing is that most programmers are absolutely useless when shit hits the fan.

I'm not saying git is a useless tool. I simply think that if a course expects more than common knowledge of the tool, it should teach it too.

You can't expect someone without git experience to fix broken repository.

Furthermore, I think that there are too many tools programmers are expected to know, and git is one of those. Git is a nice tool, but I don't think that 'real programmers know git' is true per definition. Above all, git is a TOOL; and one could use SVN or mercurial to achieve the same in most circumstances (of course sometimes SVN is an inferior choice, because it's not distributed).

I agree with the rest of the post though. There are reasons to prefer C above other programming languages. However, I think the best approach would be to learn the C-style and learn multiple similar languages, to be aware of the differences.

It's great that this was part of an assignment. Git is a fantastic, incredible tool. Along with testing, it's one of the skills I figure is just as important as the things you learn in university, but which typically isn't taught there.

No, everybody hated it. I didn't learn git. There was a weekly assignment, and I ended up mailing the TA every other week at the day of the deadline because I broke the repository again (thankfully, he was very understanding and helpful). Maybe this is a consequence of how the assignments were structured. I don't remember exactly, but there was no introduction and the workflow was not the typical add, commit, push one.

> Programming is hard

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.

> 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.

One major difficulty in programming is maintaining consistency and stamping out ambiguity. When you throw together dozens of libraries to create a new one, the problems of inconsistency/ambiguity are as hard to solve -- or possibly even harder -- than in your own code.

The really sad thing is, that as simple as most of the CRUD shit that we're slaving away at all day is, it is beyond the capacities of perhaps 30-40% of the populace - and I'm being generous in that estimation. You get out there in the world, and there are a lot of very, very limited people out there.

If you've got an 85 IQ and memory deficits, it's going to be a real struggle to even be productive slapping together static HTML pages.

If you regularly experience grief in a subject, theN YOU SHOULD NOT CHOOSE THAT FOR A CAREER. You could be doing it for 30-40 years. Why make life miserable if you have a choice.

I've often heard people make "sensible" choices like these in undergrad. In their minds, it's a few years of toil that will yield an abstract form of an easy/successful life because "3. ??? 4. Profit", but for some reason they don't come to terms with the fact that their reward will be more of the stuff they hate, with longer hours and more pressure.

I agree with you that people should probably choose a career in something they're good at, but I think that's separate to the issue of making life easier for people entering the subject from nothing. The CS courses I've seen are different from those in other subjects in that they assume a whole lot more background knowledge, which is a pretty exclusionary assumption to make. Stopping this is no bad thing.

For me, maths was a much bigger stepping stone than programming. When I came to uni, I was basically already equipped with most of the programming knowledge I needed to enter the workforce. I learned it quickly and easily. But maths - man, that's a different monster. It's one thing to see that you missed a semicolon, another to understand what singular value decomposition and principal component analysis and Stoke's theorem mean.

All this is true, and yet when I was a young'un, Engineering had a plenty high dropout rate. Higher than CS I think.

Yep, 66% or more dropped out.

> The grief factor of learning to code is on a different scale to every other major. One missing semicolon will take your whole tower down, and you realise this in the first day of practical exercises.

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.

You will not be screwing up an organic synthesis or killing a bacterial colony in your 100- or 200-level biology course.

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.

Speak for yourself. I definitely goofed up syntheses and badly botched biology labs in first- and second-year chem and bio courses.

TBH CSE has some of the best toolset available to the general public. It also has one of the lowest cost of entry as well. Compare a misplaced semicolon that throws a compiler error to, say a miswired electronic component, which most likely kills the chip and possibly other chips connected to it... and the fact that a breadboard offer no "syntax checks" to make sure signal input is not connected to power signal... I say CS/SWE has probably the best toolset out of all engineering disciplines.

Hah, seriously? This is a very bizarre perspective. Sure, CS is a lot of work but I would hardly describe it as more difficult than any other STEM field. I was effectively a triple major in college (graduated, went back for a double major post-bac degree in different fields) and against Chemistry and Mathematics I'd describe Computer Science as the easiest of the three.

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.

I don't agree with that. Just an anecdote, but programming was always the easy part for me. Boring, abstract and arcane concepts, algorithms (that you probably will never have to program by hand outside of university anyway) was the reason I've chosen engineering instead. Also, downplaying difficulty of the other disciplines only shows the lack of knowledge in them.

>The grief factor of learning to code is on a different scale to every other major. One missing semicolon will take your whole tower down, and you realise this in the first day of practical exercises

>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.

The difference with math is, you can get partial credit.

There's no reason you can't receive partial credit in CS. If assignments are being graded solely on whether or not the output is correct, I'd say it's a flaw in the curriculum. FWIW, I do not remember this being the case when I studied CS in the mid-90s.

Just as counter example, all the assignments for my OS class at top-20 CS university were graded using a set of a few hundred tests that were hidden from us. For example, the first assignment was to implement a thread scheduler and over the years the course had developed a few hundred tests on which our grade was based. We were allowed to submit our solution three times, and we would be told how many tests we passed, but not why we failed any specific tests or what those tests were, with the highest of our submissions being our grade. The incentive of this process was two fold: first, it forced us to learn to write our own good tests and not rely on the TAs to spoon feed us exactly what we needed to do (in fact one student wrote a test that broke the reference solution and was added to the test suite for the next semester), and second it is completely intractable to expect a few TAs to scan through several thousand lines of code for each of a hundred students to discover how "close" to being correct their implementation is. Bugs are hard enough to find in code you wrote, let alone code written by an undergraduate just learning how to write systems code for the first time. In my experience TAing for both math and CS classes, finding bugs in students math assignments is significantly easier than finding bugs in code.

Ok, but you ARE receiving partial credit. It wasn't all-or-nothing, as was implied above.

It was a combination for me, depending on the lecturer. I had some papers where up to 15% of the paper purely depended on output being 100% correct (you lost percentages each time it failed, and got 0% if it didn't work in the end).

I also had some papers where your grade was based around functionality, where there were several milestones, so as long as you got it partially right, you got some marks. For instance, in one paper, we had to implement RIPv2, but we got partial marks if we only got parts of the spec working.

Then there were papers where you had a final goal, but even if your code didn't even compile, they'd take a look at it and if you were on track, you'd get partial marks. For example, we had a paper where we had to control a helicopter reading data from a rotary encoder and other inputs, and use PID control. We had our PID control backwards so the thing wouldn't even fly, but the code was otherwise correct.

In my low level CS classes we handed in a source code print out. The printout was graded, not execution of the program. Partial credit was given. Even in higher level CS, partial credit was given.

In practice, you don't have to know any of these things to be (or at least pass for) a programmer. Work at a large company, someone else takes care of the build. Use a git GUI app/IDE to take care of source control. Don't use anything new.

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.

Ugh. That was me.

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.

> One missing semicolon will take your whole tower down

That is not true. You do not put your "whole tower" back together again when you move cursor and type the missing [';'].


I guess GP was thinking of programming in punch card languages, where one incorrect hole punch could mean you'd have to redo the whole thing.

Punch cards easy try toggling in a program using the front panel switches which I have had to do a couple of times on PDP/11's

IMO the difference with math is, you are the compiler, the linter, and everything else as well.

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 :)

Hm, I wonder if there is a inverse correlation between number of JavaScript frameworks and enrollment numbers :-)

Suddenly it makes sense to me why so many programs are switching over to Python for every course they can that is not domain-specific, like graphics or architecture.

If you think the programming tools are the hard point, I have a proof assistant and program extractor to show you.

Perhaps you have never seen the trails of broken dreams leading out of introductory proof-based math classes.

yes, I still remember never getting fortran to do anything. C++ was easy to pick up. funny how picking one bad class can kill a subject for you.

> Oh and learn git, too. And Linux. Just so you can hand in the homework.

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.

Slight note about Dan Wang picking 2005: That was the peak of CS degrees awarded because it's 4/5 years after the height of the dot-com bubble. So the upward bump in the mid-2000's is somewhat explainable as an anomaly.

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:


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...

Re: the choice of 2005 as origin, if you rebase on 2009, then CS degree growth looks on par with other STEM fields. Thus I think is's misleading to say CS majoring is "flat". At a certain end-to-end view it is, but that obscures that it crashed, and is now rapidly growing, not that it's been stagnant and unchanging.

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.

>if you rebase on 2009, then CS degree growth looks on par with other STEM fields. Thus I think is's misleading to say CS majoring is "flat".

No, what you described is called "misleading with data" at best and "lying" at worst. There is a clear dip in CS on that plot that is suffered but none of the other points. Moreover, the growth is below the rate of increase in college graduates.

The clear dip in CS is what the rest of my comment is about. The point is that the entire premise of the original post, which claims CS enrollment is "flat" by cherry-picking a specific benchmark year and ignoring huge movement between that year and the present, is indeed "'misleading with data' at best", because CS enrollment is not "flat". If you pick an earlier or later year, you get different narratives.

The post then spends a bunch of time musing on why CS enrollment supposedly doesn't respond to economic incentives, even though responding to economic incentives, i.e. rising and falling together with tech booms and busts, is precisely what the data shows it doing.

Edit: better said here, https://news.ycombinator.com/item?id=14441423

You're right, saying it is "flat" rather than "lackluster" might have been better. I apologize for that.

Did you read the post you are accusing of "misleading with data"? He describes that exact phenomenon the sentence after you quoted. It's completely ridiculous to cut out context and then him out for not mentioning the context you just cut out.

>mass outsourcing

winrar! Came here to say that. ctrl-f says you're the only other person to remember it.


Yes, I know it seems silly now, but this was a very real scare that CS would be a worthless degree in the future. I was dissuaded from majoring in CS during the height of this, but ultimately changed my major back to CS when I realized that I was actually really good at it.

In that time (early 2000's), even if you had a strong interest in computers, you'd be pushed toward Computer Engineering instead of CS. Business school was a popular alternative with MBA enrollments peaking in the early 2000s.

Where I went to college, UMBC, Computer Engineering covered enough of Electric Engineering and Computer Science that it set you up for either a career or further education in either. In my opinion, it was the best value.

I did in fact have considerable pressure from family to change my major from CS to some form of Engineering in this time frame, ideally some "hard-science" engineering like Chemical Engineering. CS was seen as a dead-end, easily exportable coder job, and well-meaning relatives really wanted me to get an engineering degree instead.

> The number of grads for difficult degrees and the quality of grads seems to be another story.

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.

>The companies have to have some sort of filtering mechanism

There's no one to hold companies accountable for having a unjustifiably high or low filter. And frankly I don't think anyone outside of CS has gotten those filters right any more than CS has. An incorrect filter turns into "Well, there's no one qualified to work for us" or "Well, all of these candidates failed to do the job" which leads to incorrect assumptions about the labor pool, which is what's going to bias your hiring decisions.

There are companies out there hiring for A+ students that would be just as well off with a C or D average student because what the company is doing day-to-day is too far from what university was like.

Well this is why a free market is great, if you think all these companies are doing things wrong, start your own and outcompete them.

Feel free to write me a check for the millions of seed money I'll need.

Do you actually need millions for a software consultancy? You're hiring people who wouldn't be employed elsewhere. You could pay them less and cut prices to your clients and everyone would come out better.

I mean you've spotted what you claim is a clear inefficiency. Your guys could be taking the jobs that Infosys and gang are taking.

>Do you actually need millions for a software consultancy?

Yeah, I'd need millions to be convinced to do something I absolutely don't want to be doing.

In that case even with millions you would hit a roadblock. Even the prospect of a huge reward doesn't always cure burnout.


Poiknoik quite literally used the "bootstrap" argument in a non-ironic way to describe an actually real systemic problem .

You are assuming the companies care enough. Their current strategy is petition the government to open offshoring quotas. That's much easier and cheaper than actually figuring something out.

> 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.

This is true IFF we assume that gpa accurately reflects qualification to work in industry.

There is a difference between getting a C or D average because you don't care about school, and getting that because you can't do any better. Unfortunately the two are hard to separate, and even if the grad didn't care about school - it doesn't mean they will care about work.

I was in the boat of not caring about school (although I did get a B) and it worked out - but anyone following that path should understand its an up hill climb.

There is no STEM shortage because salaries haven't risen for those already working in the field.

They certainly have risen in tech, the T part of STEM.

NYC and SF are small islands compared to the rest of the country. Salaries are flat for everyone else.

> NYC and SF are small islands compared to the rest of the country.

"Salary" is the wrong metric to consider. The "interesting" metric is "salary minus cost of living". And this is stagnating even in NYC and SF, since the costs of living are rising.

> NYC and SF are small islands compared to the rest of the country.

Not in terms of tech jobs.

Yes, even in terms of tech jobs. Software just isn't as big a deal outside of these places.

I think the point is a huge number of tech jobs are within these locations. The SF bay area has something stupid like the top 3 cities when it comes to tech jobs. Throw out all the locations with the most jobs and surprise, salaries suck.

Well, I wouldn't say salaries "suck" outside of well-known tech centers like SF/Bay Area and NYC. They aren't great, though. Even in the Bay Area, at least, the salaries of engineers still pale in comparison to the salaries of managers and executives.

Maybe not suck as compared to a lot of jobs, but the problem with software development seems to be that salary growth rises rapidly up to a plateau and then basically stops. The opportunities for salary growth past a certain point require risk-taking such as starting a company, consulting in some very specific niche, or what have you. It's still better than the lack of wage growth in other fields, I'm sure, it's just not something that was explained to me AT ALL when I started down this long road many years ago.

Absolutely. Even the so-called "parallel track" technical equivalents to management generally have a lower pay scale and smaller bonus pool. In terms of career development and growth it's almost always better to be on the non-technical career path once you're at Lead Engineer or higher. Even director-level people on the technical side of the tree are generally viewed as (relatively) more expendable and lower-status than their equivalents on the non-technical track.

> Even in the Bay Area, at least, the salaries of engineers still pale in comparison to the salaries of managers and executives.

Depends on where you work. If you work at an actual technology company that "gets it", they'll have parallel management and individual contributor tracks where you can make as much as a director-level person as an IC, or more.

Emphasis on "can make" is due in this case. It's still a different dynamic with respect to status and a different pay scale in general (that is to say, exceptions of course exist).

But you will never likely be financially stable due to your housing situation.

At the risk of sounding foolish, but isn't it easy for a company to filter out applicants in technical fields, simply by asking technical questions?

But that takes the engineers you already have and puts them in interviews instead of engineering.

Yes, and that's what they've done at every programming job I've ever had.

Now there is a mini industry around getting people over that very low bar. FizzBuzz was a temporary patch, now we need a real fix.

Re: the Wordsum test, I can't believe it is seriously used to assess IQ. If we assume that all participants know all of the words used, then maybe it would have some merit. But so many of the words used are either archaic, little-used, or culturally specific to North America that you could only reasonably expect a well-read and/or well-educated (and therefore wealthy) American person to know them.

It still likely correlates well with IQ. That's the whole point of IQ. A bunch of different cognitive tasks like solving puzzles and memory tests tend to correlate very well with each other. I'd be very surprised if wordsums didn't predict IQ very well.

It's hard to believe a person of high IQ is not going to be well-read and/or well educated.

The only point about this test is it's specific to native speakers of English, but if you were born in North America than it surely applies to you even if your parents speak another language.

> It's hard to believe a person of high IQ is not going to be well-read and/or well educated.

What of high IQ individuals who are born into low- or middle-class families, who didn't have their parents read them 19th century British novels, and therefore don't know what a dowager is?

They would go to the library of their own accord.

You don't need your parents to read things for you.

I think you forgot class here

Who gives a hoot about IQ in 2017?

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.

More people than ever, especially on HN.


Nothing you say relates to IQ stats about the median grad. If CS enrollment was up, it would push the needle I'm sure. It's not. You may as well be saying, "What do you mean most wine is bad? I drink good wine all the time."

I'm getting a random lot of 20 kids from average schools. Surely, if IQ is dropping significantly amongst the general population of CS students, I'd be seeing that?

The author's point was that college IQ was dropping, and this explained the lack of rise of CS enrolemt. Simce CS is objectively harder, only a lower portion of college students can now do it.

That's their hypothesis. So their hypothesis isn't that CS student IQs are dropping.

Is your company actually selecting 20 kids at random, or selecting 20 from the best of the ones applying?

Are you also comparing this over a long timeframe? 112 in the 70's -> 100 now means less than 1 point every 3 years. You probably can't notice a difference that small year over year.

Of course, "the plural of anecdote is not 'data'," is the first thing I would say. I know someone who just went through the process to hire a half-dozen interns, some from top schools, who (frankly) would argue with you. There are a thousand possible reasons for this but I think the best course of action is to dispense with that, personal, line of reasoning.

> Who gives a hoot about IQ in 2017?

What does 2017 have to do with IQ?

Actually I think IQ is more relevant now since we have lots of incompetent people holding degrees.

Interesting that in the nsf data it shows that during the 2000-2004 time frame the number of CS grads rose and then peaked in 2004, while the number of CS women grads during the same time frame was flat, and then dropped in 2004.

'04 was just post dot-com bubble, though. Sad if those numbers haven't picked up since then. We badly need people who are doers and not just rent seekers or mid-level functionaries.

institutional education is subject to diminishing returns at every level of the process. it's a fractal of diminishing returns.

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.

What's interesting to me about that data is the high rate of biological and agricultural sciences grads, relative to all other sciences. CS grad rates seem to fall right about where they should on XKCD's Purity Scale [1] (if CS had been included in it). 2004 was an outlier for CS, but it has reverted to its mean since.

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?


Although biology and organic chemistry are much harder then CS anything, they can be learned in school and from school resources only. No one expects you to already come in already knowing how to code or configure linux. If you are good students willing to work, you will learn them, period. With cs, you are expected to already know a lot that was not taught in school - meaning that all kinds of cultural and social effects play the role (who your parents and friends were).

Also, there is a lot less myths about biology around. Nobody assumes you have to be some kind of nerd to learn it, nobody assumes there is special in-born ability for it totally different from all other kinds of intelligence (like is often implicitly assumed even with things like operating system configuration), there is much less cultural bullshit about "hackers and their culture" around.

Organic chemistry looks complicated but it is, by and large, just an enormous amount of memorization. The kind of complex systems reasoning you have with any non-trivial computer science isn't there.

By contrast, even though it is the same subject matter, chemical engineering is (correctly) perceived as being vastly more difficult than chemistry because it requires reasoning about complex system-level behaviors that has no analogue in chemistry. This creates the oft-observed effect that being skilled at chemistry has surprisingly low correlation with being effective at chemical engineering despite being the same domain.

Most programming jobs are easy, it takes effort and luck to find one that is not. Things like system administration and configuration are largely about remembering thing. There are some aspects of it that are harder and require being good at math - by you dont need them on practical jobs and they are still easier then real math.

But realistically, a.) memorizing that much is hard b.) my friends who studied chemistry said that it becomes much easier when you understand how it works.

trying to learn organic chemistry by memorizing mechanisms is like trying to learn maths by memorizing derivations... it might work for an intro course but you will quickly hit a wall.

chemistry and chemical engineering has very little to do with each other, despite the name. chem eng is focused on scale up while (organic) chemistry is focused on novel mechanisms

I have no particular opinion on harder/easier. (There is a lot of memorization in organic chemistry earlier on because you don't have the tools to come up with answers from first principles at that point.)

But, unlike CS, there isn't this assumption that you've played around with organic chemistry and/or chemical engineering in your spare time if you want to major in it in college.

I haven't personally taken organic chemistry, but several of my friends who have taken both organic chemistry and algorithms have said that algorithms is by far the harder of the two. So I tend to disagree that biology and organic chemistry are harder than anything in CS.

Have degrees in both and agree. The amount of work require to get a B in data structures would get you an A+ in biochemistry.

Physical Chemistry on the other hand...

Eh, my college girlfriend majored in Chemistry while I was CS and Math. P. Chem was certainly a huge challenge, but I never got the sense that she was smarter than me, just maybe more determined in certain ways and better at memorizing shit. She got a 4.0 and was valedictorian, but she dropped any elective classes if they looked like they would not result in an "A" for her--I especially remember her dropping Calc II, for example. So she got her 4.0 by successfully gaming the system, whereas I never got overly focused on grades as the ultimate marker of successful learning.

Btw, I have done quite well in life, not sure where she ended up; probably chasing some other kind of "grade" these days, lol.

That may depend on school. I have seen opposite - chemistry requiring much more work and being harder. I never found algorithms particularly hard.

As someone who graduated with an engineering degree from one of those large Midwestern universities, yes. There are millions of acres of farmland and tons of ag companies who are making developments to eek out another 1% yield. At my university, the ag and life sciences college was only recently overcome by engineering to be the largest college.

In Michigan the universities have a lot more focus on automotive because that's what runs the state. Agriculture runs a huge portion of Iowa, Missouri, Kansas, and other nearby states.

The whole idea that people pick their education based on rational assumptions when they are 18, know essentially nothing and are coming straight out of an environment where perceived status is all that matters on the playgrounds is ridiculous.

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).

> it is a relatively new field and it hasn't been embedded in society as high status yet

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.

I exited out of IT programming degree for the military.

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 you don't have to be a genius to get a CS degree

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.

Whoa, that chart seems really misleading. There are 3x more CS majors than math majors and 2x more than physics. The chart is showing derivatives, not absolutes. That basically undermines the title of the article.

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.

Yeah, exactly. He writes "What deters them from studying this exciting, high-wage profession? Why do they go into math, physics, or engineering in higher numbers instead?", but students absolutely do not go into math or physics in higher numbers.

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.)

I missed my edit window, but here's the absolute plot: https://www.dropbox.com/s/8uhphbrpgygcpgy/majors.png?dl=0

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.


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?...

Based on % total majors, interesting how biomed has been inversely related to engineering (and most of CS) except in the last decade where they're all growing at a higher rate than math + physics. Would be interesting to relate this to:

- 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

These figures would make a good medium article.

Showing the longer term change is really cool.

Fine comment.

I'd upvote multiple times if possible.

I think the problem is how the subject is taught. I remember my first CS class, and there was quite a bit of diversity that quickly disappeared after the first test when people started dropping the class. (I'm pretty sure something like half the class disappeared, and I don't think this is at all unusual). So why did all those people initially find interest, and then disappear?

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.

I remember this too. For me it was the other way around. I learned QBasic - which I still think is awesome, even it was for DOS only - first. Then I learned C# in my first year at uni and it was a breeze.

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.

To forestall the usual HN discussion: the double bell curve result has not, contrary to popular summary, been found invalid.

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.





That's funny, I never heard of the result. Thanks for the information!

This reminds me of A Scheme Story, referenced at the end of PG's essay Beating the Averages.



I majored in computer science, and I don't feel like I've learned anything. Every time there was an opportunity to learn something cool (mathematical theory behind cryptography, assembly language, details of a processor, the cache, or a communication protocol) or useful, it was glanced over as 'technical details'. Instead, I was introduced to many, many small topics (programming, graphics, databases, algorithms, user experience, functional programming, logic, web programming), but we didn't go in the depth. To be honest, I forgot most of it. It did easily land me a job as a consultant, though.

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).

I don't think it's fair to say that computer science isn't hard when you openly admit that you didn't go into any depth in the topics. That's like me claiming the field of Mathematics isn't very hard because the bog- standard calculus courses I took weren't very difficult.

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.

True, you can make it as difficult as you want. But generally, math, physics, and engineering programs are much harder.

This probably just reinforces his point - engineering undergrad is basically just applied math and physics, whereas the real meat of the major is usually reserved for whatever faculty you're in. Instead of having just 'Engineering', we have Civil, Electrical, Aerospace, etc.

We should probably think of Computer Science in the same way. Instead of just vanilla CS, we could split a CS BA/BS into just as many specific concentrates: assembly, architectures, crypto, data related anything (management, safety, security, databases), etc.

Trouble is, any good practicing programmer should know about all that and more (e.g. networking and UX). Of course people will have specialties, but they should have decent knowledge across the board.

But they don't have to learn it all in school. The way for CS to cut itself down to a manageable size is to concentrate on the traditional "hard core". Compilers, operating systems, plus some newer (i.e. from-the-1970s) stuff like networks, distributed systems and concurrency.

As always, people will cry that they never (ha!) do such stuff in their real jobs. But the more day-to-day stuff can be learned on the job. The stuff I listed is where university-style learning can offer a real advantage.

It's interesting to read someone else thinking that - I am about to graduate with my CS / Engineering degree, and I've tried to take classes which benefit from university instruction. The courses I've chosen and found most valuable have essentially been the ones you named: compilers (we wrote a compiler for a C subset), operating systems (we wrote a simple operating system with multiple processes), networks (implemented the TCP stack in userspace), and algorithms.

If nothing else, these classes were great because they removed the mystery of what happens after you write your code. Many jobs boil down to moving strings around the network, and many programmers draw a line somewhere in the towers of abstraction we've built to do this, and never cross it. But you'll have the priceless benefit of confidence that if something goes wrong, it's code all the way down, that you can understand and debug.

It wouldn't surprise me if there was higher variation in program difficulty for CS because the field is younger and doesn't have the level of standardization that traditional engineering fields have (ABET), but we need real data to have a meaningful conversation about it.

Depends what you mean by hard. I went into computer science and I got the highest grades in statistics at a university which is in the top 10 worldwide for statistics. In fact, I got perfect on the final where the average was a fail. I did "OK" in comp sci (deans list, but no special placement other than that.)

Stats/calc/algorithms weren't hard, I needed practice. I did every question in every textbook and followed up with the prof when I didn't understand how something worked.

Computer science actually pulls together all these different disciplines into one. By that metric, it might be the hardest. But really, nothing is easy or hard, it just takes practice.

What you see with statistics/calculus is extremely superficial compared to the realm of higher mathematics. Exceling in that is a poor indicator of ability to succeed in any proof-based mathematics coursework.

As someone who had significant exposure to the world of mathematics for a working professional (4 years in an excellent PhD program) and who codes for a living, I find that what I did in grad school was multiple levels harder than what I do now, or what I get exposed to in the inane CS-focused interviews of some companies. The abstraction level is seldom, if ever, matched.

>What you see with statistics/calculus is extremely superficial compared to the realm of higher mathematics. Exceling in that is a poor indicator of ability to succeed in any proof-based mathematics coursework.

What about if you have to derive and prove the correctness of the formulas used instead of just memorizing formulas without background?

Computer science is proof-based.

Funny how both of us are dismissing stuff neither of us did in school :)

I don't think math majors consider statistics a math course.

I should note that I did study a year in California. There, the computer science was much harder, and the math was much easier (scored straight A's in math courses literally without any effort, and nearly failed the operating systems course that I took).

My observation is that the problems in software engineering tend to look simple until you actually try to build something larger than a toy. I gather that, if you have the relevant background in other engineering disciplines, the same deceptive simplicity applies.

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.

Most developers don't appreciate how big of a difference there can be between different schools with regards to their computing science programs.

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.

> Most developers don't appreciate how big of a difference there can be between different schools with regards to their computing science programs.

The same is true of EE programs. My degree is in EE with CE emphasis but work as a SE now. I've interviewed a number of EE background folks from well known schools and it's very clear they had a completely different experience than I did. Their experience was much less rigorous in terms of the physics/mathematics involved.

Completely agree, but I'd even add internships.

Relatively often while trying to help a fresh-from-school hire I'll ask myself silently "when and how did I learn this" and realize it happened before my first day as a full-time software engineer. But it's fairly evenly split between coursework that has proven itself to be better-than-average or through some fortuitous internship experiences.

aside, i interned at a nat'l lab and I wonder if there are any reliable predictors for how good of a training opportunity an internship will be. I think mine was good because I got a lot of attention from two smart people who had more experience and a decent grasp of many best-practices, though they were both relatively fresh from (graduate) school themselves.

I majored in EE, even though I expected to someday take a software job because I really enjoy programming. I figured I could continue teaching myself programming in parallel.

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.

Well, I took the route you suggested (the CS program). I liked to program when I entered, but most of that joy is gone now. I had the same in high school with reading.

I might be downplaying CS programs, I just experienced one of them. In that program, I had no chance to learn compilers, operating systems, electronic circuits, assembly language, or any math. In hindsight, I'm not sure if this was the right choice. I did learn about those topics, but just in my spare time. I was able to pass my CS program while barely going to lectures (which may sound nice, but in practice I did not make any friends; it was a terrible time). I could just as well learn this on the side while studying something that is intrinsically more interesting, like physics or electrical engineering.

At the other hand, I was able to double major, and it's not hard for me to find a job now.

Have you considered doing embedded systems work? You can flex that programming muscle without abandoning all the EE stuff you think is cool.

I was in a very similar situation as you, graduated in EE but liking programming software much more.

I found a very sweet spot in Embedded Systems programming, which by nature is more or less an intersection of the two disciplines.

What was your program? I suspect there is considerable variation. My program only required students to take the intro courses for all those topics, but students were expected to pick one or more areas of concentration.

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.

Just a vanilla computer science program. I combined it with a math major. I think the program at my uni was especially soft; there were no math courses at all. I suspect it's a bit better at a 'technical university' (I do my masters at one). I think the electrical engineers at my new uni are on par with the computer scientists at programming (which is basically the one and only skill you learn in my CS program), or even better.

That is the difference between a bs vs ba. Different schools offer the computer science programs as either one or the other in my country and the courses in both programs can be very different.

No math is crazy. Mine required multiple semesters of discret, probability/stats, and up to calculus.

My school was a liberal arts college, and still required a decent amount of math for the undergrad CS degree.

I have to echo this. Computer Science is essentially a Mathematics field, not having extensive math in the major doesn't really make any sense. In fact, very little of the major after the Freshman of Sophomore year should even be about learning to program. It's like having a B.A. of Computer Science, or a B.S. in Literature, it doesn't really make any sense and should probably best be called some other kind of major.

I've known a few folks who had these kinds of degrees and I'm not sure their schools did them a service graduating them without a proper curriculum. At most schools with C.S. majors, they have alternative majors for people who don't want to do the intensive Maths and Sciences and they're usually called something like "Information Systems" or "Computers for Business" or similar.

>At most schools with C.S. majors, they have alternative majors for people who don't want to do the intensive Maths and Sciences and they're usually called something like "Information Systems" or "Computers for Business" or similar.

My undergrad degree was a BS in Computer Information Systems, and I still had a ton of math. The main change from CS to my degree was replacing the higher end maths like Calc2+ and Physics2+ with business oriented courses like finance and economics.

I graduated from undergrad in 1999 and I think since that time colleges have tried to make CS more 'friendly' to non-geeks. This has unfortunately meant lowering the math requirement.


At the state schools in my state, the curriculum generally consisted of math up through and including three semesters of Calc + Linear Algebra + Discrete + 3 semesters of calculus-based Physics with labs + two semesters of algorithm design and formal methods (which I count as math courses) + Stats + an Operational Research course. You could also swap one of the sciences with a semester on diff-eq if you wished. I think you could get a math minor if you took something like 3 more higher-level math courses and a dual major wasn't that much more after that. It was brutal and I think the second highest number of required credits of any major at the school after EE. It wasn't uncommon to start a semester with 100 students in the class and end with 8-12 at the end.

The non-CS "Info Sys" or "Software Engineering", etc. dropped all the calc, linear algebra, OR, formal methods and required only two semesters of science classes that did not require any calculus (they were called something like "Physics for Business" or something) and no algo design. They actually had fewer classes than the CS major, but the rest of the gap was filled with major specific courses like finance or econ or whatever.

At my university, they have a CS program without math, and on top of that an easier major (it's not officially, but everyone considers it an easier version of CS) which is called "information sciences". This program has easier versions of some courses and skips some hard courses that are known to be problematic for some computer scientists.

It is crazy. To be fair, there was some math buried in the courses (like modular arithmetic in the cryptography class, and some discrete math in the concurrency class), but it felt rather awkward and not relevant to the classes.

I'm not sure if no math should be a source of envy or pity for me (probably neither) - in my computer science program each semester included at least one math course. No exceptions.

I disagree with the fact that computer science degree is 'not very hard'...

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 agree with you. Computer Science at the appropriate school is a really challenging and gratifying experience.

I would also add that university in general, is more about approaching new and hard topics, and finding a good way to learn and digest them. In computer science you also get to do it facing fascinating topics like lambda calculus or the mathematics behind cryptography.

How long out of school are you?

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.

Working on the last year of my masters degree. I switched to computer engineering. Basically I was busy learning the things I missed during my bachelor.

I learned a lot in my CS degree, but I have wished I did a lot more physics and math. I specialized in graphics and I've noticed that a lot of the foundational advancements in graphics are more physics than computer science. Many of the most well known graphics people started in physics or math and switched to computer graphics, and some of them admit that it's because graphics was easier with more low-hanging publication fruit.

For those interested, I studied at Utrecht University in the Netherlands. The CS courses I took were:

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.

>details of a processor

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.

Algorithmic, data structure and theoretical CS are the main subjects that should get a lot more time then a single class for each (in my case).

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.. :/

> Every time there was an opportunity to learn something cool ... it was glanced over as 'technical details'.

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.

> The most common complaint in my program from students was that we weren't actually learning how to program

Exactly this. While working for a Fortune 50 engineering conglomerate, a colleague participated in a Career Day at the local university. He interviewed ~50 or so students, a mix of undergrads and graduates. He claimed that of these he found about two of them who might be able to do Fizz-Buzz. That's crazy!

Well, it depends on what the purpose of the degree was. I would say that with a good foundation of knowledge, it's fairly easy for someone to do directed personal work and learn how to program better. Doing the same thing to learn theory of computation and algorithm analysis would be much, much harder without a mentor available to walk you through the more complex and troublesome bits.

It is entirely possible that my school took this a bit too far (or that might have been the norm at the time). At the same time, some students were complaining that our major wasn't treated the same as others, as our lab time didn't count for the same amount of credits as other majors. For example, I believe a 2-hour of instruction and 3-hours of lab time class for chemistry was 5 credits, but 4 credits for CS, leading to more in-class time required than some other majors. I personally didn't care, and didn't even know about it until my last semester. Depending on how you look at it, it's actually not a detriment, but a bonus of the major.

That said, the electives available to CS did have more practical experience, such as the OO programming one taught using Java (I graduated probably a year or two before they switched from C++ to Java as the main teaching language).

We followed a very different program then! Maybe the one you described would be better for me. In the program I followed, students learn how to program (which I already could), and that's about it.

That's unfortunate. If I had to guess, I think your college probably responded to employers telling students they didn't have enough experience programming, and student alumni relaying this to the school, which might have caused them to overcorrect. What still strikes me today about my college experience is how much we didn't cover, or only touched lightly on, and the course was full of theory already. CS is a very wide topic, so it's natural that some things won't get the attention they deserve. As others have noted, CS probably deserves to be split into core and specific disciplines like engineering is. That would exacerbate the problem of certain topics not being covered, but at least you would be able to steer that to some degree so that you could go a little deeper in what you considered important.

I have a master's degree in computer science, and my experience was the complete opposite of yours. Projects were interesting, topics were well-covered, we had the opportunity to go really deep into some subjects (kernel programming, distributed systems, assembly, functional or concurrent programming, ...), and, of course, it was highly creative.

I spent my four of my five school years in France, and one in California. Where did you study ?

I studied for four years during my bachelor at Utrecht University, and during that I spent half a year at UCSB (See my other post with all the courses I followed).

I think you went to a bad school. Good CS programs go into the math behind cryptography (e.g. the prof. invented the crypto algorithm). Processor architecture, caches etc.

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.

Where did you go?

There is a great deal of difference between different schools, which I think explains much of the varying experiences people have.

Utrecht University in the Netherlands (see my other post).

You did compilers/formal languages at least, right? Writing one from scratch is not trivial.

It can be trivial depending on the goal[1]

[1] http://www.jroller.com/languages/entry/python_writing_a_comp...

Only during my computer engineering master.

I think the market is just way over saturated. Hiring practices for developers point to just that.

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'm a freelancer/run-my-own small dev consultancy and I pretty much never jump through hoops. The level of demand doesn't create the hoops. Some combination of needing to create the appearance of "only hiring the best of the best of the best just like everyone else" & fear of a bad hire creates the hoops.

I don't have trouble finding work and often need to bring on additional help. The hoops are cultural.

Bad hires are totally worth the hoops to avoid. The problem I have seen is no one knows which hoops are useful and which are harmful and they do all the superstitions they have read about. I don't know if anyone has figured out a methodology for solving that.

Yeah, Im tired of working with poor or unmotivated coworkers. You just dont really know until you start working with em.

The interviews for the big five (Amazon, Google, Apple, Microsoft, FB) are disguised iq tests. It's like taking the SATs to get into college.

Yep and when my company gets contracts they don't jump through hoops either. Our sales team doesn't do white-board exercises for clients and neither do our engineers.

So what's your point? You are not a traditional employee. You are a company...it would be weird for them to make you jump through so many hoops.

Companies are treated better than employees in the market.

I don't know what market you're in, but it's definitely hard to find good people in Silicon Valley. Most of the time my company finds one, they have multiple offers.

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.

I dunno, SV startups tend to measure programmers quality in a lot of superficial ways. There are many cultural fit, age and other random expectation that limit the pool. It is a bit like herd - you get to be in demand because you have the thing everyone wants now and a year later no one wants you because herd changed opinion. Your ability meanwhile did not changed.

If there would be actual shortage, companies would find a way to work with people who want to work from home (I know it is less effective and not for everything, but if you are really desperate you find a way) or part time or with people who are not quite cool at beer but will work. Companies being picky about things that are not strictly speaking ability suggest there is no shortage. It means companies are in position to be picky.

> I don't know what market you're in, but it's definitely hard to find good people in Silicon Valley.

Depending on how you define "good", I would dispute the assumption that every company deserves good people. Information about what a company is like to work at spreads fast enough for good people to avoid them. There are plenty of such companies.

>minimum wage is nowhere near what developers are paid

Why would you compare developer salaries to minimum wage? You should be comparing them to the wages of doctors, lawyers, and CEO's.

Nurse is licensed though. That's instant credibility.

Exactly. Also, the supply of nurses is highly constrained in the Bay Area due to a very small number of people able to graduate. There's actually a lottery to enter a registered nurse program and last time I checked the odds were less than 30% to win the ticket. Besides that, hospitals lose state subsidies if their nurse/patient ratio drops below a certain threshold. It's really apples-to-oranges.

Not to mention "useful". Imagine nurses going on strike. Now compare that to lawyers, programmers or investment bankers going on strike ... no one cares.

What happens when IT for a hospital goes on strike?

Not to mention an airline. The recent British Airways debacle was caused by a technical problem, but if the IT workers had gone on strike, similar problems could have resulted.

Same thing that you do when nurses go on strike. You hire a bunch of scabs and muddle through.

The difference is that IT usually sucks so much that nobody notices.

If it's infrequent enough, reliability may go up as there's a moratorium on production environment changes.

It's just as much credibility as any college degree in computer science. There are still lots of crappy nurses that are licensed.

Those practices also speak to the general openness of opportunity of being a developer - your actual skills matter most, so they screen to assess your skills. Other industries focus more on degrees or names of past employers, etc., and I prefer it this way in software.

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.

If interviews measure your actual skills, why do working practitioners study for them?

Interviews measure a shibboleth with a glancing relationship to relevant skills, which is more based on expedient and clever solving of the toy algorithms problems you'll find in college than the actual quality of a developer's output. Different companies' interviews attempt to measure the same skills in different and subjective ways, yielding different results.

Centralization on an evidence-based standardized test for the "prove your skills" part of the interview process is one of the best outcomes we can hope for. Ideally it would be open to non-degree-holders. Include per-component scores so companies can choose which areas they care about more, avoid grade inflation so similar candidates are distinguishable, etc.

People always claim this but it's not true for the majority of companies. Yes some, including a small number of big brands, ask leetcode algorithm whiteboard questions, but most interviews I've ever had are more practical, prove you can build things.

That said, I have no problem with leetcode algo questions, as long as the interviewer is only checking for your ability to think, communicate, and hands on experience with a few basic programming approaches (using hashes, recursion, structuring code etc.), which they are in fact excellent gauges for. If balanced with other types of interview challenges, it's not a bad way to assess. (but yes, it crosses the line if they care about the perfection of your leetcode algo; again, most do not)

That seems to contradict the whole "there aren't enough devs" argument that seems to keep getting brought out to enact visa "reform"...

If anything, there aren't enough C-level folk. Low supply is why their wages are so inflated, we should be allowing H1B for CXO's.

I've never had to "jump through hoops" in order to get an engineering position.

I usually get a fairly straightforward phone screen/on-site interview.

A nurse has a professional body underwriting her or his qualifications. A developer has no such thing. That's why all the hoops.

I have a CS degree from a small liberal arts school.

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.

I think it's very much based on supply.

In Michigan with 10 years experience, I don't usually have trouble landing work. In some cases, they're practically begging people not to relocate away for the much higher wages.

But when I've applied to positions in Seattle, even lower-end ones, I've always been rejected. Across a dozen companies in coastal markets, everyone seems looking for any reason or excuse, no matter how trivial, to reject any candidate they meet.

Maybe since the salary expectations are so much higher in SV/NY and Seattle* HR folks feel they have to be seen to be much more "rigorous" whether that is the case or not ("we had 100 applicants and hired the top 2")?

* = I picked the three big pricey "coastal" US places that came to mind, it's entirely possible we're talking about different places :-)

>In some cases, they're practically begging people not to relocate away for the much higher wages.

This sounds like a funny line, because the best form of begging would include money.

Interesting. Do you have tons of side projects/other work you have available for potential employers to view? My sister only shows her degree and that she's been licensed in whichever state.

I'm in bioinformatics, so not pure tech, though I did interview for several straight tech-companies last year and my experience was very poor. Multiple phone-screens, having to work on side projects, on-site multi-hour interviews, white board exercises, etc.

My sister the travel nurse literally spends 2-5 hours on the phone every time she wants a new position. That generally includes 2-4 phone screens with potential employers. Then she gets offers and picks which job she wants. Are your interviews really that simple, it takes less than 5 hours to find a new job? You spend a few hours on the phone and then get immediate offers with relocation if needed?

I still suspect it's this reason from the post:

> 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.

> You don’t need a CS degree to be a developer

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.

> 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.

One possible answer no one has mentioned so far is that there many smart, capable people who do NOT want to spend hours every day sitting at a desk, in front of a computer, focused on code, with limited human interaction... so they pursue majors in other fields.

That is bullshit myth, frankly. It is no different then any other white collar job - economist spend spend hours every day sitting at a desk, in front of a computer, focused on numbers. Moreover, many if not most positions require quite a lot of communication. Even more if you work in agile team - you have to be serious extrovert to be happy in that situation. Most coding only positions are junior positions - anything above that (plus few rare positions) and you are have to fight to have enough time at a desk.

If this is the reason people avoid this job, maybe we should stop lying to them about what the work actually is.

> capable people who do NOT want to spend hours every day sitting at a desk, in front of a computer, focused on code, with limited human interaction.

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.

I really kind of regret majoring in computer science because of this.

I'm not sure about that data. Definitely lots of engineers and physicists as it has been noted have programming experience. Beyond that, tons more people are majoring in computer science as of the last 10 years.

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.



Likewise, this article seems to have no basis in reality. Besides Princeton and Stanford, it's also the most popular major at Brown University, a school typically known for its humanities and social sciences.

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".


Even in 2014: https://www.geekwire.com/2014/analysis-examining-computer-sc...

This certainly feels like "fake news" to me.

Yup, at Berkeley the intro CS classes now regularly have ~1300 people taking them, up from ~650 5 years ago.

The number of CS majors has exploded.

I would guess the issue is prestige. Software development, like engineering in general, is not a top-tier profession in the US. The actually top-tier professions are doctor, lawyer, and banker/financier. Software developers, like accountants, are well paid but second-tier in status, geeks who worry about the details rather than distinguished professionals who call the shots.

Interestingly, the three professions I mentioned above all have graduate degrees, whereas software developers have B.Sc. credentials, if that.

After 30 years working in the field, I wholeheartedly agree: the low status of CS is indeed a huge problem among practitioners, though I doubt many 20-year-olds appreciate this.

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.

I disagree. The things you say may have been true decades ago, but are not entirely accurate today.

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.

Finance may have taken a hit recently, but if you're in the northeast (NYC, Boston, etc.), it still has much higher prestige. It also has a much, much higher compensation ceiling.

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.

Also: how many of those professions simply assume that anyone good will be doing something else by the time they're in their 40s? A 50 year old lawyer or doctor might choose to be more supervisory but nobody is going to think they're a failure if they aren't, and their experience will be valued rather something they have to prove isn't holding them back.

> 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.

My general rule is to follow the money, and at most companies the compensation levels don't look like engineering is a prestige position. Not bad, to be sure, but definitely outside the inner circle even at many companies where it's a core competitive attribute.

This isn't new: during the dot-com bubble, there were plenty of people who got decent numbers but the people getting rich tended to be management, sales, etc. with all of the talk of “passion” and highlighting the lucky few winners looking suspiciously like a way to get people to donate enough unpaid overtime to make someone else very rich.

Exactly. In good careers, the experience that comes with time is counted as an asset. If you're in a career where you're considered washed up by 30 [1], you'd better be standing in the middle of an arena and surrounded by 80,000 screaming fans.


I agree that the software engineering profession isn't one with much prestige vested into it as a profession.

However, the technology industry, especially up and coming start-ups, and the established players like google,facebook, or apple are some of the most prestigious companies to work for, in some ways surpassing that of McKinsey or Goldman Sachs in the eyes of an everyday person.

The things you say may have been true decades ago, but are not entirely accurate today.

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.

I am a self taught web developer, I started a bachelor in IT with a CS major mid 2014 assuming the title would increase job opportunities.

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.

Engineering, physics, math etc. differ from Comp. Sci. in one major respect (so I hear from colleagues).

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.

A better question is "why do we care".

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.

I think it is also the only career which people try to inject diversity just for the sake of it.

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!".

I've been pretty curious about this as well. Why aren't there more women on oil rigs?

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."

Off and on, I do contract work for oil companies and I can say with some certainty that it's a pretty hostile environment toward women.

Let me give some examples to see if I can build a picture. On the technology end of things, I used to go to the conference SEG, which a lot of deals for technology are made on the side. I've not been for the last 4-5 years, but they used to be really aggressive about their use of booth babes. For example, I remember one year where there was a vendor where I could get my shoes shined by a group of women wearing bikinis, cowboy boots, and cowboy hats while having the sales person talk to me about whatever widget they were selling. Similarly, a former coworker used to hire what were called "technical models" who were pretty women that could talk shop that they'd used to drive sales. Now, is this unique to oil? Nope. However, I felt they were pretty aggressive about it.

As far as oil rig work, that's interesting for a couple of reasons. One, roughnecking is one of the only fields left that pays extremely good money for limited amount of education. Two, most of the managers that I met did a certain amount of time working on rigs to cut their teeth and they very much viewed it as a rite of passage into upper management. I mention these two things because it turns out rig work is important both for providing wealth to those with little education as well as a path to upper management. Now, as a women, is this an inviting environment? Well, let's see; there are very few women doing it right now, so it's likely you'd be one of the only ones at the operation. Further, depending on the assignment, you could literally be trapped either in the middle of the desert or on an offshore rig with literally no where to go in case there was a conflict with the other personnel. Alternatively, you could take an assignment in a place like Saudi where you have to completely cover yourself and not drive whenever you're off compound. That sucks and every woman who enters the field knows that it sucks.

That said, would oil management be excited if a bunch of women wanted to do rig work? Absolutely. Each of the companies that I've worked with absolutely had outreach programs to attract women. However, it's hard because overall it's an extremely hostile environment. Further, it has a long term affect because the current oil culture encourages a certain amount of rig work to cut your teeth for management and if women aren't getting that then they're at a disadvantage for those positions as well.

What to do? Honestly, I don't know. Personally, I think there's a chicken and the egg problem. If there was magically a big cohort of women who wanted to get on a rig, I think many of the problems I mentioned above would be moderated. Though, certainly, disadvantages while working in the Middle East persist. However, it's unlikely that such a cohort will magically appear. Till then, part of the point of outreach programs is to create small, incremental improvement until these problems fix themselves.

Alternative hypothesis, with regard to roughnecking, provided by Occam's Razor and biology:


In current practice, there's plenty of roughnecking work that involves action beyond slinging pipe. There's a huge amount of monitoring, surveying, and other engineering work that has nothing to do with physical strength.

Well put. I work in engineering at a large industrial plant very similar issues here. There is a huge effort from management aimed at improving workplace diversity but at least from my limited point of view seems difficult to attract female applicants for open positions. I think partially it's remote location our plant is not in a very attractive place to start a family etc. Also the issue you identified where "coal face" experience is seen as a rite of passage into upper management.

My sister is also a mechanical engineer she worked on remote mine sites for a while and then at a power plant. She took a few years off to have children and now has no desire to get back to that kind of lifestyle. She works for the government now.

This is factually incorrect. Many years ago, I was involved in underrepresented minority outreach programs at a variety of institutions. Computer science was one of many fields, which we focused. Though, to be clear, the programs that I was involved in were all STEM centered. Also, to be clear, the word underrepresented is important here. Asians are a racial minority in the United States, but not underrepresented in STEM fields, so they do not receive the same kind of focus. Alternatively, women are not underrepresented in all STEM fields, so the attention per field varies. As a corollary to this, good programs tend to look at the number of underrepresented people at the undergraudate, graduate, and faculty levels and tend to make different decisions depending on where the need is. Generally, representation is not uniform across each of those categories.

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.

But that's what the parent comment was saying. It wasn't talking about CS vs the rest of STEM fields. It was engineering/sciences vs blue collar work: coal mines, oil rigs, plumbing, etc.

The top level comment states, "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." I came to say that this is factually incorrect. Now, my experience does come from STEM, so I don't know about non-STEM fields. However, to be clear, I was responding to this comment and the following one that supports the assertion that software is special with respect to outreach programs. Certainly, I apologize if there's any confusion.

Top level,

My statement is unclear, but the "udacity/anyone can be a computer whiz!" "koding with karlie" vibe that is pushed is very different than anything else in the world.

Software is unique in that it IS something that anyone with the minimum amount of the right talents can learn to do well on their own -- that's just the nature of the internet and how software is distributed/documented. It ISN'T, however, something that just anyone will be good at. Not everyone is suited for the type of information gathering and thinking that it requires.

I would never delude myself into believing that I have the correct talents to be an accountant, a lawyer, or an artist. Why is this type of attitude normal in software?

It obviously makes business sense for companies like udacity to sell the idea that it's easy to gain a textbook understanding of it, but the culture surrounding it tries to take it much further than that. Companies are expected to force their demographics instead of sharpie-ing over the names on every job application and just choosing whoever the fuck is most qualified for the job. If the interviewer is legitimately sexist or racist, you have some much deeper set problems that aren't going to be solved by ordering them to hire certain demographics.

You could even argue that women have an upper hand by being scarce!

And then you have bullshit evidence like "companies that hire diversely are more successful", when in reality this is a classic correlation/causation fallacy where the largest and most successful companies can afford the extra hiring hours and turnover of hiring the wrong candidates.

Well, "artist" is a little farther away than the other two, but I would submit that most of the people who have what it takes to be a median accountant or lawyer probably also has what it takes to be a median programmer. For all the discussion of how we "think differently", I honestly don't think there's that much separation. Maybe when you get to the higher levels, but that separation is as much within the profession as between professions. There are programmers who have whatever the wiring is that makes them want to sit down in their free time and write a new kernel, and there are programmers who are reasonably content cranking out Wordpress installs on a 9-5 schedule.

And for what it's worth, I suspect that if most people were willing to put in the time and effort to learn how to create art, you'd find that many more people can create reasonable art than you would otherwise believe, because we've talked ourselves into a model of artistic talent that seems to hold that it's a binary switch, rather than something like any other skillset, where some people are more talented, but where almost anyone can develop some ability in it if they put in time and effort. I'm not a naturally talented basketball player, but I can run and play defense and hit a reasonable jumper in a pickup game, because I've spent a lot of time over several years learning how to play and then playing a bunch of games.

Candidly, there are plenty of people who delude themselves that they are well suited to being a doctor or lawyer. That said, they're prestige positions, so there are cultural reasons for doing so.

On the STEM front, a quick search immediately pulls organizations like National Girls Collaborative Project:


Girl Scouts:




and Girls Inc.:


that provide either focus or programs for outreach in STEM more broadly than computer science. Now, I don't know the exact numbers for whether programs for pushing for women in CS are greater in number than STEM. That would be interesting to know precisely. Mostly, my contention is that, yes, there are organizations that are attempting to encourage young women to entering STEM fields beyond software.

Now, at a city level where I live, I have noticed anecdotally that there's been a push for software based businesses from the local government. Though it's difficult to know for sure, my opinion of this push toward software as opposed to engineering is because the apparent investment in creating a new software company is lower than the investment in creating an engineering company. Engineering tends to be a more regulated field and often requires more expensive equipment. As such, I believe the city is interested in businesses that could have a large economic impact for a relatively low amount of investment. Now, is this so easy? No and I believe my city government's actions are somewhat misguided. That said, I doubt that where I live is unique. I do believe there's a national push for software based businesses because the apparent investment is low and the payoff is high. Along with that will be programs to encourage underrepresented people to enter the field and these programs will be visible. But, again, I contend they're not unique.

> Why is this type of attitude normal in software?

I think people greatly underestimate what software developers actually do. To most of non-computer related folk we are just monkeys who bash keystrokes.

I'm not saying we do some rocket science, however in this profession a lot of online research is required to even do a simple things, and to most of people it is annoying to do so they give up.

I'm full-stack developer for about 10 years but still have to google MSSQL connection string or how to center stuff vertically in css.

> in this profession a lot of online research is required to even do a simple things

Or you could look at the documentation. People did simple and complex things with computers for decades before google existed.

This is an argument that make on a regular basis and it never seems to work for the people on the other side of the argument. There's always some excuse that boils down to:

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.

Why should demographics be forced? This insane obsession with having a 1:1 ratio male/female, and now ethnicity-based as well, is not healthy.

It's weird that the politically correct opinion seems to be that it can't be accepted that a natural gravitation towards certain professions or acts based on gender is real.

How much do you hear at all about plumbing or other trades? A few minutes on Google turns up links like http://womeninconstructionconference.com/, http://www.new-nyc.org/, http://www.explorethetrades.org/women-in-trades/, etc. so I think it's most likely that you're seeing a combination of selection bias and the fact that software development is both a popular field getting general attention and one with an abnormal diversity rates compared with similar 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.

Because minorities and the poor/disadvantaged are already over-represented in fields with dangerous physical labor..

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:


My brother in law was doing an outreach to female high school athletes to get them to sign up for the civil service exam for his fire department.

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.

Counter point: You can reason that women wouldn't go into other fields like plumbing, or construction because those are also male dominated. The biggest distinction is that Computer Science can be a path climb the socioeconomic ladder.

> 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.

You're not making a convincing argument. Why are the capabilities of plumbers to mentally map various causes and effects and points of failure not subject to the same forces of thought differentials you claim?

My cynicism says that diversity is a result of baizou, not any actual accounting of some magic spread where different and useful ranges of thought are spread in equal proportion mapping to a species of bureaucratic classification of diversity as noted in sex and skin color and nationality.

Programming requires more abstract thought than plumbing. Jobs spoke about the intersection of liberal arts and technology, wrt computer science, not plumbing.

> having different points of view on a programming team can mean the difference between having your product take off, or fail.

All teams have different points of view. This has nothing to with "diversity" or gender. If there's a female or two on the team, great, but don't force it, and her opinion has no more value than the opinion of her male colleague.

Forced diversity (of what? be specific, ethnicity? skin color? religion?) is not a requirement for multiple points of view.

> Maybe I just live in developer bubble and don't know any better,

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.

But you're not promoting "diversity of thought", you're promoting BS signals. How is it promoting facts when you're searching for superficial signs of diversity?

You're promoting a form of corporate doublethink where filling out bubbles of sex and race is automatically analogous with some platonic ideal where every single variant of human being had this amazing differential that'd waiting to be exploited.

But instead it seems a very cynical game where the superficiality of diversity conquers honest evaluation of needs and ability.

You're making many assumptions that really aren't justified.

How are they not justified?

A cynical understanding of human nature and society serves a person far better than the opposite.

People want to do less work than more work. For people involved in acquiring, placing, and managing human resources, an easy way to signal "work"/"useful work" is by parroting the line of superficial diversity.

That's my experience at least. I win far more bets by assuming the worst of intentions than the best in these hiring games.

In the military you see a big push for "diversity", especially in relation to sex, where all sorts of carrots are trotted out just to have a platonic makeup of sees in the armed forces. Nevermind that one of those sexes has an ace in the hole called "pregnancy" which the mil. Bureaucracy will bend to accommodate.

Nevermind the disastrous effects on morale and confidence in command this brings to some poor bastard from Nebraska who goes through all sorts of shit. If he gets a girlfriend, or God forbid a wife, he faces the risk of absolute cuckery on that side. If he messes around with whores and the command is looking for a scapegoat, they'll bring him up for ucmj charges. Meanwhile if his girlfriend/wife messes around with boys on the base, she has no repercussion for her actions.

"Wait, what about the pregnant female soldiers?"

Easy office job and easy promotion because higher-ups would rather have eye candy over a more disposable resource (competent males).

What gets me is the total denial of this facet of human nature by those who push "diversity".

I invite you to re-read this comment after you've had time to reflect. So much about it is representative of exactly the sort of casual sexism that runs rampant in this industry. From the assumptions about "human nature" to the straw-man "diversity" you describe, even.

It's not "for the sake of it", diversity brings insanely great benefits. Lack of diversity is likely why most software produced by this industry is, well, shit.

> Lack of diversity is likely why most software produced by this industry is, well, sh@@.

Could you share the reasons you have for believing that?

> It's not "for the sake of it", diversity brings insanely great benefits.

Are there any proofs of this assertion?

Doesn't Sturgeon's law apply to most industries? To everything?

>You either have it or you don't.

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?

That's literally the opposite direction I was going with "you either have it or you don't".

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.

One possible answer: you can learn computer science without needing a degree at all, and subsequently prove that you've learned it by just writing a program that works.

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.

That is not "computer science" any more than spotting constellations makes you an astrophysicist.

I don't really understand the point of this comment.

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.

'Are you suggesting that those developers who lack a CS degree but can program effectively nonetheless don't really know "computer science"'

In the formal sense, pretty much - most actual CS is pretty irrelevant to day to day development as it's pretty much a specialized branch of maths (note that the CS department I did a degree at is now part of a maths department so I'm perhaps a bit biased).

"strong coding ability doesn't correlate to strong academic CS ability"

Again I would agree with this - I had a supervisor who never wrote any code but he was very well regarded in his niche area - his area was purely mathematical.

The OP stated

you can learn computer science without needing a degree at all

Then proceeded to give an example of programming, which is not the same thing.

I agree with the assertion that one can be a successful programmer without a CS degree but let's call a spade a spade.

I'm not arguing that the ability to write computer programs makes you a computer scientist. I'm arguing that companies aren't looking for computer scientists, they're looking for programmers. And also that compilers (combined with running the program) make it a lot easier to verify whether or not someone knows enough about programming to be useful.

That's not even remotely a fair comparison.

My theory: computer programming is awesome, but getting a good job doing interesting work is really hard. A bachelor's degree in computer science won't even get your foot in the door in a lot of places. However, there is lots of work doing IT for banks or writing Java for insurance companies or creating web pages for doctor's offices. That sort of thing might pay pretty well, but it's not the sort of thing that you would have said when someone asked you what you wanted to be when you grow up.

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.

There are interesting jobs in Java, actually. Interesting for me means you have to think to complete task and that you have to often learn. Java was always getting bad reputation, but seriously, people who diss it the most are the ones who tend to produce the same small project over and over (but in cool languages).

I expect there are interesting Java jobs. However, a lot of companies who aren't particularly interested in technology tend to gravitate to Java or .Net because nobody ever got fired for writing a boring application on those platforms.

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.

Most boring applications are on the web - currently javascript. Insurance companies and banks need interesting algorithms and math sometimes (I had such position and liked it).

There are tons of enterprise web applications written in Java.

> I think that people who go to college decide on what to major in significantly based on two factors: earning potential and whether a field is seen as high-status.

Also laziness, virtue signaling, dilettance, and genuine interest.

Surprised I had to scroll this far down to find this. You're absolutely right. Plenty of people just choose a major based on whimsical interest their freshman year, then stick with it because it's too late/expensive/difficult to change to something else. A lot of my friends at school ended up in this situation.

Dan nearly solves his own riddle with possible explanation No. 2: "You don’t need a CS degree to be a developer." He just doesn't spend long enough probing this issue.

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?

I have to disagree; I routinely need to educate co-workers on how things like B-Trees works, what a sum type is and why it is useful, what the SRP means (and why it is useful), why testing matters, why abstraction matters, or even things like how to secure production servers.

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.

>even things like how to secure production servers

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.

> I have to disagree; I routinely need to educate co-workers on how things like B-Trees works, what a sum type is and why it is useful, what the SRP means (and why it is useful), why testing matters, why abstraction matters, or even things like how to secure production servers.

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.

That's an interesting — and mildly dystopian, to me — thought. I would argue that the cost of having not understood these things is taking quite a toll in the form of tech debt, however. While it is certainly true that I, and others passionate about the field, can potentially educate (though it's debatable how good I am at that), I find I'm usually doing that after-the-fact: I can't know that someone lacks knowledge until they've someone demonstrated that, typically in the form of tech debt, at which point it is much more expensive to course correct.

(In the BTree example, I find people often think they understand how BTrees work, so they're not going to raise questions, since they don't know what they don't know.)

Of what real concern is technical debt to someone who is debating studying CS though? Especially when you say that they don't know what they don't know, thus not even realizing what debt is potentially created. Worst case is that they create too much and leave for greener pastures when the weight becomes too burdensome, which is really not that big of a deal to the individual.

But you seem to be looking at this from the owner/employer point of view, which I am not sure represents the type of person who would be studying CS in the typical case anyway. At least once you get past the early startup phase, if the business even started in software, these people tend to disengage from the day-to-day development to focus on the business. In that respect, if technical debt is a real concern to them, they would provide more formalized coverage of these topics to all employees to ensure that everyone understands B-trees, or what have you, at the level the business deems necessary. Since that is not common, it may not really be the operating concern you make it out to be either.

No discriminant between BS and BA flavors of CS. No numbers to capture those who minored in CS. No breakdown of engineering by discipline (in particular, CpE and EE). Interesting data, but it leaves much to be desired.

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...

Aside from the many valid theories already listed, I'd add:

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'":


Primarily, because computer programming is low-status.

(also, this is one of the main reasons why females are deterred from joining)

As a follow up, "Immigrants are taking all the jobs" is untrue.

However people in MBA programs are quite open about their intention to make it true.

It has an almost duality to it. It pays exceptionally well, and can be exceptionally hard. Unlike building a bridge, we often see a lot of software slung together and say "Wow, this..this is terrible," unless you're one of those software developers who work for NASA or need to design pace makers or aviation safety equipment. (some of that stuff may be terrible too, but at least it's incredibly well tested).

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.

I've always had a personal explanation that I have nothing but anecdotal evidence to back up. The most important skills that make someone a good coder are that they enjoy solving problems, and are willing to work single-mindedly on something until it is done. If you have those skills, there's really no reason to go to college to learn anything.

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.

Personal anecdote: I didn't major in it because I had no idea I would enjoy it.

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.

Same here. I wish I had the degree, but I don't regret the ones I did get (history and economics). I get to use code in a job I enjoy and thrive in, which gives me a leg up on the competition. It has made it difficult to break into fields I now think would be interesting (esp. security or systems admin), which I think has been the only downside. I can learn a lot of the interesting stuff on my own time and apply it when appropriate for my normal job.

I took one year of CS then finished with a degree in International Relations (basically political science and economics) and Latin American studies. I loved school and the topics I learned about, but they have no bearing on anything I've done professionally.

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 have a theory that it's because computers are pushing coding stuff away. If you bought a personal computer in the 80s, you basically needed to learn how to program. The computer would come with a basic interpreter built in and easy to find. It would come with a thick dead tree manual on how to program it.

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.

Because college is funner when you don't have to take the CS weeder course.

I did a year a computer science before switching majors. Computer science doesn't teach students how to be software developers. It's an academic study of computing, which is important but not for the majority of development jobs.

Germany loves its degrees.

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.

Depends on your school.

Mine required students to pick at least 1 concentration (1 included software engineering which taught things like software testing)

At the University of Waterloo in Canada, the ratio of CS applications to available spaces is over 15:1 [0] according to a Computer Science professor. It could simply be a supply issue.

[0]: https://twitter.com/plragde/status/834474871010648064

A very large factor is that having a CS degree is not going to make up for the years lost as a developer if you're any good. Some companies are pretty heavy on the degree requirement but even the larger ones like Google have been slowly backing away from this.

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.

I'm glad I got a full CS degree, but I knew several people who dropped to the business versions (often called MIS or CIS depending on your school) and learned a lot of the basics of programming and web front ends without more the hard core algorithms and foundation work.

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.

I just wanted to say I agree with the field being "pretty horrible", for all the exact same reason you posted.

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.

A lot of engineers on /r/engineering complain about either being a 8 hour a day CAD monkey, or "being stuck in this stupid factory" or "constant travel is killing me" etc.

On a broader note, I don't believe a generally accessible job (i.e. not requiring some unique career path or tons of sacrifices beforehand) can be both well paid and rewarding. We're paid really well because we generate lots of value and we're relatively scarce, but at the end of the day we're just the requisite meat component in somebody's money making machine. It's bound to be not too pleasant.

Doing anything for money sucks the pleasure out of it, programming isn't unique in that.

My 2 cents:

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.

One thing that seems missing from the post is the proliferation of alternative degrees; Computer Information Systems, Information Systems, Software Engineering, Information Technology, etc etc.

I would be surprised if the aggregate of all of those degrees didn't meet or exceed the trend of the others.

One major factor not mentioned here is that the number of college graduates in a field is not just determined by how many apply to it, nor the author's #6 (reactionary faculty that fail large amounts of people). There is also how many people are accepted in the first place.

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.

Agree that all signs are there's a glut. Note that we're down to somebody at age 30 starting to notice age discrimination. With a career longevity approaching that of an NFL player or MMA fighter, is it really a good choice any more?

Because database connections are hard.

Using them, or writing the high performance multi threaded cross platform driver for them?

au contraire. Plenty of art history majors can figure it out after a 3 month bootcamp.

Whats so hard about `mysql_connect(...)` /s

CS requires a decent amount of smarts, requires constant learning, and is boring to most people. This is enough that it will never be an attractive job to most of the population.

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.

I can share my personal story.

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.

I don't recall any really heavy math in my Comp. Sci in the 1980s. There were required math courses yes -- calculus, linear algebra, etc. but none of that really was applied in the computer science classes. So I guess I would say don't let a poor math background stop you from learning programming. I have not used math much beyond arithmetic and basic boolean logic as a professional programmer.

Edit: certainly there are programming jobs that require a solid competency in mathematics. However there are many that do not.

It's a few problems, but I disagree with some of the author's points. One issue it's posing the dot-com crash as a similar peak as what we are currently in. Eric Roberts of Stanford wrote an opinion article on what he saw was the ebb and flow of CS [1]. We are in another peak, undoubtedly, but I'd argue this peak mirrors 1984s popularity.

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-...

"Cultural centrality of Silicon Valley"?! Excuse me, who's culture? Most of us in the field don't care about Silicon Valley and nearly no one outside the field cares. Sounds like someone needs to get out of their bubble.

Schools do a terrible job getting people excited about computer science and even worse software engineering. You start with C and Java and a bunch of arcane syntax and commands to print 'Hello World' when you could start by making simple games or apps and working backwards to introduce CS concepts mr miyagi style.

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.

I know not exactly what the author is discussing in his post, but as someone that did two years in CS before switching (to accountancy), one of the main reasons I switched was the stark contrast in interest in the field between myself and (seemingly) everyone else. In hindsight, I think I would have made a good project manager (instead of a developer), but that path was not really communicated to me in a way that resonated with me. So I just saw a bunch of people with a much greater zeal for coding than I had and decided I should try something different. Maybe in another life...

Can we already kill the meme that CS or STEM are hostile to women?

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

For the same reason so few people major in any subject. CS isn't special. People major in subjects because they're interested in them, they think the career path might be good, there is social prestige, and many other reasons. It's entirely not surprising that CS has few people selecting it as a major.

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.

Did he actually mean to imply more people major in physics? The most recent numbers show physics at an all time high of less than 8,000 bachelor's degrees awarded (1) whereas the computer science bachelor's degrees, restricted to CS departments in engineering schools (no "information" degrees, no CS departments in math or science colleges), were over 10,000 (2).

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

Because universities continue to place a heavy emphasis on math, specifically calculus, as a gatekeeper. Calculus is useful but I don't believe it's necessary for a CS degrees.

If kids are failing out of Calc 1, I doubt they would fare any better in upper level CS classes.

I disagree. I think the concept of mathematics as a deciding factor of how well one would do in CS is based on the perception mathematics professors have on it. If you remove the requirement for lots of math for a CS degree then those professors lose out of classes to teach, diluting their necessity. Less classes mean less revenue for the schools. I think math and CS are entangled because of history, and protecting the status quo. Sure it's useful but that doesn't necessarily mean it must be mandatory. To lessen math in CS would mean too many entities lose out, so they have a vested interest in keeping things just the way they are.

but it's true for math itself also.

you're missing a point here.

Floating or fixed?

I am a little surprised by so many comments talking about the problems with the CS curriculum in college. If people aren't even majoring in computer science then I would first think that the issue starts before students come to college.

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.

Two path were in front of me:

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.

> Have people been deeply scarred by the big tech bubble? It bursted in 2001; if CS majors who went through it experienced a long period of difficulty, then it could be the case that they successfully warned off younger people from majoring in it. To prove this, we’d have to see if people who graduated after the bubble did have a hard time

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.

I'll go with a different angle on this problem. Computers have become indistinguishable from magic for most of the modern population. Even with IDEs like IntelliJ and Visual Studio, the interface of programming has not kept pace with the sexiness of GUIs. As a result, lots of young people take computers for granted and give up quickly when presented with UNIX, git, and the rest of the command line tech stack used by programmers.

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.

Personally, I just didn't want the workload. My favorite semester was when I was taking 4 senior level math courses. Each week, I'd hunker down and knock out the homework over 2-4 hours for each class. For CompSci, it's more like 10-20 hours for each class. The workload in CS is just stupid.

I haven't seen a mention of this, but what about the rise of CS-like degrees that people have been getting. Many colleges now offer "software engineering" and related majors. In addition some colleges have recently now CS into the Engineering department. Could that be messing up the data?

CS jobs in the west are victims of Globalisation. We simply cannot compete with Asia and Eastern Europe with regards to wages. Hence outsourcing which has been ongoing for decades. We _can_ compete on quality and solutions, but these are hidden properties which might or might not be a problem in the finished product. Business people consider scope and cost first and foremost. In addition, many of the best and highest paid programmers are self-thought. This works, because 99.9% of your career will be bread and butter CRUD apps anyone can do. At the university we studied algorithms and data structures which we will never use or implement. When was the last time you had to do a breadth-first-search on a graph? I really cannot recommend anyone in the west to study CS today.

To an audience of CS majors this will probably sound like trolling but honestly I have never used any software written by a "computer scientist" that I came to value and rely on -- software that I consciously chose to use.

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.

Do you use Gmail spam filtering? Google search? Windows? OS X? TCP/IP?

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.

In fact, I am an unusual case and I do not consciously choose to use those Google, Microsoft or Apple offerings, nor do I value and rely on the ones I occasionally come in contact with. In many cases I view those are necessary evils, not high quality stuff.

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.

>In fact, I am an unusual case and I do not consciously choose to use those Google, Microsoft or Apple offerings, nor do I value and rely on the ones I occasionally come in contact with.

So I assume you use linux or BSD? I can assure you both of those were created primarily by computer scientists.

>I use TCP/IP but I did not choose it. There were many competing protocols. It just became the default.

Who do you think designs these competing protocols?

>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.

And yet this software you seek out runs on an operating system designed by computer scientists, compiles with compilers designed by computer scientists, and is distributed via protocols designed by computer scientists.

> But to me it means, at least, CS is not a prerequisite.

Who said CS was a prerequisite for anything? Most of the venerable algorithms we study in computer science weren't designed by CS majors because CS wasn't a major when the algorithms' designers were in college.

>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.

Of course great software can be written by someone without a CS degree. John Carmack doesn't have a CS degree. Donald Knuth doesn't have a CS degree. John Backus, Grace Hopper, John von Neumann, Alan Kay, and most of the other CS luminaries didn't have CS degrees. I have literally never met anyone who would argue that a CS degree is necessary to write great software.

You've changed your argument from "I have never used any software written by a 'computer scientist' that I came to value and rely on", and "I do not believe that a computer science degree is of any significance in terms of the ability to write good software" to "there exists great software written by people without CS degrees."

You've moved from a arguing an absurd and utterly false point, to constructing a straw man.

To your earlier point: "computer science degree is of any significance in terms of the ability to write good software".

In pursuing a CS degree you will engage in in depth study of the algorithms and data structures necessary to create complicated software. In order for someone who didn't major in CS to create complicated software, they must either study these algorithms and data structures on their own, or use a library written by someone else who has.

If you've even used an operating system or the internet there are a hundred algorithms/datastructures/CS concepts at play. One example is consistent hashing used by CDNs such as Akamai, so indirectly almost any website you visit. All of the routing/control flow/congestion control algorithms that make internet work. Algorithms to wrap text on a website to a certain width. Algorithms to schedule processes on your OS, variations of linked lists and trees to manage memory and give you malloc, parsers, compilers, interpreters everywhere including web browsers .... The list just goes on and on.

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.

My comment had a handful of upvotes over the holiday weekend then has been downvoted as the CS grads return to work.

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.

Difference between 1. computer scientists who are by nature of their CS training able to write high quality software and 2. the presence of CS subject matter in programs or the role of algorithms in today's Western societies. No one disputes #2.

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.

Do you value and rely on any compilers? Operating systems?

Programs that you enjoy using are put together by folks with the skills "product and user experience". If they know how to code, good.

I heard that separation of labor is a thing since Renaissance times or so. Does it ever happen in software industry?

Note that the separation may also be temporal ("...and now it's time to redo the UX").

The chart shows degrees conferred, not how many people are enrolled in a degree. I've been teaching CS at universities since 2010 and I've seen a tremendous growth in CS enrollment. On the flip side, a large number of students fail.

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.

Because there so many different things to do in CS. Knowing how to code will already give you a job, but mastering CS at a certain level is another realm of work, and CS keeps changing and evolving.

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.

>Why is the marginal student not drawn to study CS at a top school, and why would a top student not want to study CS at a non-top school, especially if he or she can find boot camps and MOOCs to bolster learning?

Because I'm not smart enough to get into MIT/Stanford/UCB/CMU?

I tried pulling a CS-English double major in the 1980s. I loved programming, especially the then-new network programming. But the school I attended used the ACM CS Curriculum which pretty much required a math minor in addition, and the logistics didn't work for me (I ran out of money). I would have needed another three semesters just to meet the math requirements.

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 don't understand the assumption that a software developer should study computer science to prepare for a career in designing, writing, and delivering computer software.

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?

Here's my pet theory: when I try to put myself into an average high school student's shoes, they're already surrounded by all the CS achievements today; namely, video games and smartphones and Facebooks. They're exposed to them a bit too much. On the other hand, when I was a high school kid I didn't realize how CS is affecting our infrastructure and how many things are still unsolved. I guess this still applies to the current generation too. Combining these two, the field might look rather "finished" or "too competitive" to an average person, which could deter them from applying.

In case anyone would like a mirror, I've tried to save the page as best I can here: http://mirror.xwl.me/why-so-few-computer-science-majors/peop...

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...

Just like with Maths, I think that to effectively learn programming, you have to believe that you're good at it... Unfortunately, it has become harder for people to convince themselves of this because the tooling required to build simple software is much more complex than it used to be.

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.

Computer science has 2 parts many people consider hard.

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!"


This is just my experience, but I know that many people weren't enthused by the fact that computer science classes were absolutely packed with people. Obviously this depends on the school, but if class sizes of 200+ persist even after the first few intro courses, it'll whittle down the number of people pursing the major for a variety of reasons, such as poorer quality instruction and the inability of those who need a bit of help to get it as the line outside the TA's office is in the dozens.

1) Ageism is rampant and sucks. Doctor/Lawyer/Accountant can work until 70 CS till 45. Also no industry protection like the above.

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.

I work with electrical engineers, mechanical engineers, and mathematicians, and computer science students, all who program pretty darn well.

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.

One of the biggest factors that made me withdraw from CS was learning programming in high school. I had a teacher who wasn't able to communicate effectively and my own ego being bruised badly when I struggled and struggled to make code work. My second act more than a decade later gave me confidence with better teachers and internships where I saw even seasoned programmers make mistakes and develop multiple iterations before being done. This was an eye opener!

Proud to be a freshman majoring in CS and also proud to be a nerd.

That's the spirit!

Id disagree that CS or IT in General is "high" status even in the USA.

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.”

Slightly OT:

Anyone notice the irony of this thread being right next to another HN thread titled: "As Computer Coding Classes Swell, So Does Cheating"?

From my experience, the main reason for the low number of CS majors is simple: most students don't know what Computer Science is. At the university where I teach, half of the CS majors arrived on campus not knowing they would major in Computer Science simply because they didn't know what CS was. Only after taking a first year engineering sequence where they sample different aspects of multiple engineering disciplines do many of these students realize CS is an attractive and interesting field to study.

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:


So for us, the challenge for us is not growing the number of majors but how to manage the surge in a sustainable manner.

The bitter part of wishing you had majored in CS is that most of the times you cannot and you have to live with it. Being able to work with computers is both a skill and a burden. For example I was the classic computer-whiz all my life. Due to a twist of faith, I found myself in law school and I'm graduating next year.

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".

Maybe it's because compared to the other scientific engineering jobs and curriculums software engineering as a job is like finger painting with feces.;-)

A random meta-comment, this was actually a very good and reasoned piece here. I am have tired of blog posts that wax poetic about issues while relying on anecdata and intuition, while this piece actually looks at data and statistics. I've begun to avoid blogposts like this that discuss controversial topics because they often lack those things, but this didn't disappoint. Great job.

I don't know where this article's numbers are coming from, but 1 in 6 Brown undergrads have declared computer science majors this year.

I think it's a combination of a CS degree being slanted more toward research than preparation for a career as a software developer, and not everybody is cut out for it, temperamentally.

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.

No attempt was made to measure the number of productive dropouts. I.e. authors bias was "count people with a degree."

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.

Because most intelligent people don't want to fight with configs, syntax and technical arcana. I think we should accept that there is a strange mix of intelligence and obtuseness common to the people that stay in this profession.

I was rejected from college because I was too young. They told me to come back a year later.

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.

Hmm. Perhaps because it tagtets a profession that just isn't that big, compared to dentists and doctors and accountants and lawyers. Almost every human needs one (each) of those folk. They don't generally need an algorithm expert.

It’s at least just as big, only less obvious.

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.

One more reason is that... compared to many other disciplines (law, medicine, etc) you can find a job "just" by doing exercises and maybe with some open source contributions (or as a freelancer).

What interesting things are going on in the field of CS from a scientific POV?

The research in CS is very active. Take a look at arXiv/cs to get a sense:


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.

I'm not a computer scientist, but I'd say Quantum Computing, Crypto Currencies, Compression algorithms like HEVC, new programming paradigms as can be seen in Escher, the comeback of functional programming and microkernels seem interesting to me.

Lookin at the graph of graduates and the dip in CS from 2005 for a few years, I'd suggest the cause is that the potential cs students skipped doing their degree and went straight into a startup.

Burnout, stress and health issues resulting from stationary way of life would have drove me away from CS 10 years ago had I known what I was getting into. It's a love-hate relationship for sure.

I know a number of universities in NZ have non comp sci paths to programming careers through their engineering department. Maybe there's some course diversification going on?

Lack of good coding/CS classes in high school. We're still not good at it.

Introduction to CS class in high school was what got me hooked in the first place.

I didn't want to take four years of calc and physics.

I still can't figure out why prospective developers go to school for computer science other than lack of better options. It's the equivalent of someone whom wants to go into civil engineering getting a degree in physics. It can certainly work, but it doesn't really line up with the end game. I guess it's mostly just the lack of computer engineering programs. But, most of those seem to be rather off base in terms of preparing developers as well.

Learning the science behind how my guitar was made didn't make me a better player. But it was useful knowledge.

You don't need a CS degree to do most run of the mill engineering work. It helps, but definitely not required.

Anyone have an archived version? Looks like it's hosted on wordpress and the database got hammered.

One point I see missing: Colleges are inefficient, have poor quality of life, cost too much, and will not teach you the skills you need.

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".

That's a really interesting chart. I'm "lucky" enough to have gone to school around the time of the first dot-com crash and remember the surge of people into CS around that time -- most looking for the kinds of huge paychecks for little work that were becoming legendary during that time period. It was surprisingly hard to find and connect with peers that were authentically interested in technology, computing and similar subjects.

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.

Here's why I switched out of a CS major in 2009 as a sophomore (to math) after being convinced that I'd major in CS since high school.

* 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 reason and why I went IT instead of CS was the amount of Math.

Haven't you been to India?

Great article. Thanks to Dan Wang for writing it.

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:


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.


After talking to dozens of women and men, girls and boys trying to convince them to go into computer science, the reason they told me is the (wrong) image they have of programing: sitting alone for 8h a day in front of a computer.

Looks like the those who voted me down had more success in getting more people into CS.

It's not merely sitting down.

It's seeing the code monkeys of life being manipulated by people who are adept at manipulating humans and getting higher status and pay for it.

Think of a lot of technical positions in the military. They get bossed around by non-technical people.

It's much better being the one who beats the drum than the multitude that row the boat.

Seems they had a pretty good idea of the field. 90% of the time is spent staring at a computer screen.

Because: Error establishing a database connection.

(Seems to be back now.)

Perhaps "very smart" was an incorrect assessment on your part.

Would you please stop posting inflammatory comments to HN? You've done this repeatedly and we're trying to avoid flamewars here.

We detached this subthread from https://news.ycombinator.com/item?id=14443522 and marked it off-topic.

Oh, anyone who can't do CS must not be very smart, right? Basically if they don't have the same skillset as you, they're probably not too bright.

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.


I'm just saying a person thought to be "very smart" should be able to do CS101, easily; and I don't think the examples you mentioned are indication of extraordinary cognitive faculties.

I taught myself near photo-realistic drawing, it's a mechanical skill--craftsmanship; had I continued to invest more time in perfecting the technique I would have got to what’s considered photo-realistic. My Spanish was decent after four months in Spain. Not once have I thought these things to indicate me being “very smart”.

I doubt having a mind that works a certain "special way" is vital to do CS; seeing heterogeneous groups of students graduate yearly.

It has nothing to do with extraordinary cognitive abilities and everything to do with how well you process different types of information.

You can draw really well, AND speak Spanish easily, and program! Wow! Congratulations, man! You must have a really versatile mind. Be proud.

But don't imagine that anyone who has more trouble than you learning these things "must not be very smart." That would make you a bit foolish.


I think the GP's point is that in order to learn any skill you just have to be willing to study it and teach yourself; you don't have to be a genius.

His English looks just fine to me.

Or maybe it is with your attitude.

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.


We've banned this account for repeatedly violating the HN guidelines. This rant was bad enough, but some of your previous comments went far beyond not-ok.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact