248 comments

[ 3.1 ms ] story [ 251 ms ] thread
This problem will be faced by many developers soon. The Internet is huge. Very large. The big companies are going to be dealing with huge data. You'll need to understand algorithms and math, and frankly, this stuff is a bit difficult to learn on your own. I thought I knew it all till I went into the algorithms class - that when I realized that not only did I not know it all, I was not as smart as I thought I was, and I would never have had the motivation to go through with this if I had not been forced to. And that goes for many developing.

Programming is a scarce profession now, but the simple stuff will soon be done by too many people. Software will become a real engineering task. In 20 years, the age of the code monkey will be gone.

I think it will be the exact opposite. As computers take over more and more jobs from us, we will need less "office workers" who know how to shuffle documents around, and more workers with programming skills.

You want to be a mathematician? You need to know how to program. You want to be a "secretary", you need to be able to dig through your boss's e-mail using regexpes when he needs to find sth, you are a dentist - you will install your own scripts on the website because you know how to do it from high schools.

In 2016 (or 2012) it won't be "oh, we need more skilled programmers", it will be "sure, you know programming, everyone knows, but what really you know?". Programming will have the same place on CV like "MS Office", or "keyboard typing" has right now. No big deal if you know it, but much harder to find your job if you don't.

Of course there will still be place for real computer experts - algorithm designers et al, but the basics will be known to more and more people.

People have been saying this for 15 years now, at least.
So education and the availability technology will eventually result in many people with basic programming skills will result in not only computer literacy in the "I can use MS Office" sense, but in the "sure, I can hammer out a Python script to get this task automated or sift through that data" sense.

Is there some sort of disruption of (basic) programming skills coming the way blogging has disrupted journalism?

This isn't going to manifest itself as more people knowing how to program, though. Easier interfaces and smarter searching, but not programming as we know it.

In 1980 you'd say that in 20 years the average office worker would be performing calculations on thousands of rows of data, generating charts, typesetting documents, creating full color presentations, doing business with clients in multiple continents and they'd wonder how people would cope with the increase in cognition required to do all that. But it's just button-pressing for most people.

In 2016 they'll say "we have a database with 4 billion data points and we need to infer customer behavior patterns from it". You'll say "Sure.", sit at a desk, click "Segment", click "Demographic: 18-21", click "Intersect", click "Products", click "Make Recommendations", click "Apply" and a discount coupon for "Justin Beiber's Comeback Tour" will be beamed directly into the eye sockets of anyone who bought canned salmon last fall.

I don't see a society where 80% programs, I see a society where 10% builds things for the other 90% and a huge part of the middle class will be automated out of existence. This, to me, is the big issue that will shape this generation and the next.

Excellent thoughts. I think that more people need to know how to program their computers. But, as you have so elegantly pointed out, the inexorable march of progress will not bring this to pass. It hurts a little to think about, but in a large way you seem to be on the money.

These ideas are worthy of more than a two paragraph comment on HN. I third the notion that you should pen a full blog post.

Give this test to the next 5 random non-technical friends and family you talk to:

A = 1

B = 2

C = 3

A = B

What does A equal?

I'm not saying people can't be taught. But think about how big the workforce actually is, think about how widespread MS Office skills are. For every power-user analyst and project manager that's really taking Excel out for a workout, there are 10, 20, 50 people who use Office in every day non-challenging tasks.

I've given that little test to my MBA wife and a GP family member and several other people. Hardly anybody gets it right.

Edit:

The x-factor here, btw, that determines whether or not somebody understands it, is whether they see that assignment is happening, not some sort of "wha? 1 equals 2? what is that?" And those that didn't just get it, even after I explained assignment they were just as puzzled. Just the concept of variable symbols confused and (i presume) disinterested them.

What we do here everyday, this is difficult, challenging stuff, that I don't think most the workforce will ever understand. Instead, people like us will be busy for decades to come, building tools so they don't have to.

There was a time when machines were new concepts versus simple tools. You could say, in the early stages of the industrial revolution, that soon everybody would understand and be able to fix their machines. But machine complexity has out-paced the desire and ability to learn those skills.

Software is no different, I don't think.

Edit Two:

http://www.codinghorror.com/blog/2006/07/separating-programm...

(comment deleted)
I don't think it's unreasonable for people to assume that = means equality, not assignment.

Edit:

In particular, the link posted in the second edit has a rather poor test using a and b, because it uses = in two different ways with no indication that the meaning of the symbol has changed. Maybe the problem with the test isn't just the people, it's the sloppy notation that assumes people with no programming background are able to infer when we mean equality and when we mean assignment.

The population that took that test were self selected computer science undergrads!

And even after three weeks of instruction most of the people who didn't understand it immediately never understood it. I'll quote from the article:

"Either you had a consistent model in your mind immediately upon first exposure to assignment, the first hurdle in programming-- or else you never developed one!"

My wife is a brilliant woman, fantastic at what she does. The GP I mentioned in my post is a very good doctor who had no problems getting into a medical school, passing his boards, or running a successful practice. But that doesn't mean that everybody is meant to be able to understand the abstract concepts you have to master in our line of work.

I wonder how the experiment would change if you change it to "let A = 1, let B = 2, let C = 3, let A = B", or "make", or some other verb that seems more like assignment.
Or if this were explained to be a sequential process and not a just a descriptive list of unrelated declarations. It seems reasonable to think that that list contains a contradiction if you've never been exposed to these concepts before.
(comment deleted)
(comment deleted)
Oh no, it will be cyclical. Programming is all about attaining higher abstractions, hiding more technology under a simple interface. Every now and then some new set of abstractions will be useful enough that we'll need a bunch of people to explore a field of opportunity. These explorers are called entrepreneurs.

Maybe in 2016, you're going to need deep credentials to be a useful web dev, but none whatsoever to start something useful with 3-D printing.

EDIT: that said, nothing makes you more employable than knowing things at a deep level. A friend of mine, a former Plan 9 kernel contributor, quit the tech industry after the first bubble to become a wildlands firefighter. Returned to the tech industry in 2008 and resumed being a highly-paid infrastructure geek like nothing had happened.

I'm of two minds on this one. Part of me agrees completely with what you say. Further tools will exist that automate a lot of what the code-monkey does. The level of work done by a lot of us will be push-button, or "plug these couple of things together".

On the other hand, in 1998 as a nerdy guy getting out of high school, with minimal html, javascript and programming experience, and running linux on a pentium pro I faced a big choice. I went to the local ISP to pick up a "real modem" (vs a winmodem) to connect my awesome unix box to the internet. The guy there asked why I wanted these modems vs going to circuit city for some amazing sale they were having for a faster winmodem. When I told him I was running linux I was offered a $40K/yr job on the spot - just for getting linux installed on a computer and understanding the basics (quote "we can teach you anything else you need to know, you got the spark"). I was 18, and that was a HUGE deal. Anyway this wasn't uncommon, at the time wired was running stories about "HTML factories" where people were making pages and pages by hand all the time. Minimal programming skills got you a job.

Some of this was just normal boom-time labor shortage. There were lots of stories about how after the crash these guys would never work again. Some aspect of this was true, but some of it was bunk. The 2000 version of this story would be "sure you can do html, and you can do CGI, and you understand http headers and can whip up a server, but we need people who understand SQL and how to work with record objects and how to do live updates to a system, stuff you need a real degree for. It's 2005 not 2000"

So basically I am suggesting that while Rails may be a non-skill (like HTML has become) and maybe good REST APIs will be auto generated, and some Backbone.js future version or successor will do most of our tricky js stuff, there will likely be good toolkits that allow people to plug together data-mining and data-management without needing super deep algorithmic understanding, we are already seeing the emergence of such tools.

So the other part of me disagrees, the code-monkey will be needed, just that they will be putting together different bits than they are today.

> So the other part of me disagrees, the code-monkey will be needed, just that they will be putting together different bits than they are today.

It seems to me the Hiring Manager in the story was fishing for a jack-of-all-trades kind of applicant. The interviewee was obviously a web developer, but the position to be filled was a data analytics job.

What difference does it make if Rails/PHP/Node.js/Backbone/etc become commodity jobs? In order to get the raw data that requires complex and high speed algorithms to parse in to useable data, you'll still need a website, built by a rails/backbone code monkey and a Photoshop designer and with the help of a decent DBA, at the very least. The data position, if it ever comes to it, will just be another job type that a well rounded development team will need to fill, not a replacement for everyone else on the team.

"When I told him I was running linux I was offered a $40K/yr job on the spot - just for getting linux installed on a computer and understanding the basics (quote "we can teach you anything else you need to know, you got the spark")."

Yeah, my technical screen for an 8-year career in Schlumberger was exactly this.

Math is overrated. Nobody really needs math; if you find yourself needing some math you're probably reinventing some kind of wheel. Same with algorithms.

How do you deal with huge data: you just do. There are tools for that, and you apply those and perhaps make new tools yourself, but math and algorithms tend to never enter the equation.

Who do you think makes those tools?
Not computer scientists. Programmers themselves, based more on their experience than theory.
Internet may be a huge place with a huge amount of developers.

It is also an even huger place when it comes to demand of people that can do simple stuff.

Not entirely sure I get this!
In four years you will. If not before then.
This reminds me of the shock I got when interviewing at big tech firms for lowly-sounding "scripting" positions, where most of the questions required a CS background. If only I had gone to college...
Did the questions check for knowledge or a piece of paper?

If former, go get some. No excuses! If latter, find a way to print yourself one.

You just desmoralized me even more to study CS.
(comment deleted)
I am reminded of Steve Yegge's excellent post on "Math for Programmers" : http://steve-yegge.blogspot.in/2006/03/math-for-programmers.... (posted multiple times before on HN).

There are literally 100 cool things to learn and try: Like this weekend I thought about writing a small program for the DCPU-16, trying Meteor, making a small app using firebase, etc etc. Possibly, learning more Math has a higher long-term ROI.

An another note: When everything melts down, it might be a good time to start another company, rather than look for employment though.

It's like my anxiety closet in print. uncanny. except I've been a lot less successful on a number of metrics AND I don't have the hard skills.
Definitely inspired me to put in more effort into my CS degree than I do currently!
The blog entry should end with the guy waking up in a cold sweat, tripping over his bedlinen to get to his laptop, fumbling for his 2-factor authentication fob, and checking his bank account. Inputs the second factor key. Navigates to total in all accounts. Counts the figures, one, two, three, four, five, six, seven, and some cents. Counts them again. Breathes deep, and goes back to sleep.

Thank God, that job interview was just a nightmare.

This is absolute and utter nonsense.

Firstly a tiny amount of people know C, C++, Java, Python & Ruby. If you found someone with that lot I'd probably hire them on the spot. That shows some real skill, multi-linguists are actually pretty rare, discounting the obligatory uni taught LISP and Javascript.

Secondly there's a constant need for people who make CRUD apps. Constant. Almost every business can benefit from a totally custom app with it's own special workflow. We tried RAD tools, we tried auto-generate tools, we tried plugin workflow that would be 'user' edited. Turns out if you don't involve a programmer it all goes very wrong.

After 20 years of promises from Delphi, VB6, Java, Rails, etc. the reality is it's getting harder to make good apps because everyone's expectations only go up. Bottom line is to make a CRUD app you still need a programmer. Almost every business is realising they need a programmer.

The market's only going to get bigger, much, much bigger.

This reads like it's from a person who's never been out of the ivory towers, hasn't actually been inside a real business.

Thanks for your feedback. As far as the meaning of the article, I wasn't trying to prove a point as much as elucidate something I was thinking about yesterday: the skills you pick up through entrepreneurship.

For the past 4-5 years of my life (starting in high school and continuing through college) I've been concentrating a lot of my time learning how to be a better entrepreneur. That's to the detriment of almost everything else in my life. And it's worth it to me because I love it. Even better still, it seems like a pretty safe bet because worse comes to worse and I completely fail over the next few years I'll still be able to get a job as a coder somewhere.

But the thing about being an entrepreneur is that it encourages you to get marginally good at a wide range of skills instead of REALLY good at one area. And so something I was thinking about is the potential consequences of this decision on my life. This is what I came up with.

> But the thing about being an entrepreneur is that it encourages you to get marginally good at a wide range of skills instead of REALLY good at one area.

Being marginally good at many things show that no matter what gets thrown at you, you'll pick it up fast. This is necessary in entrepreneurship and it becomes ever more necessary elsewhere as the pace of software development increases.

There's no such thing as "algorithms" skills anyway. No matter what skills you have, you'll probably need to adapt them heavily to whatever new job you find yourself in.

Yes, we're mainly startup-ish people around here, but I'm pretty sure that even if I wasn't on, I'd hire a jack of all trades with a proven track record over skills in "math" and "algorithms", whatever that means.

Most multi-skilled people i know (and i include myself) would not be happy dedicating their time and talents to a single thing. Although its not a technical limitation, i would say the reasoning makes sense to me.
Amazing article. I can relate.

I too am an entrepreneur who sold one company and am well onto my second one. (Though the fact that you've sold multiple companies is damn impressive!) Running your own company means you have to wear many hats and its tough to get really good at just one thing. Some days you are a graphic designer, or developer, or marketing, etc.

However, I also think it's boring to be stuck in one specific area for a long time. I like to be challenged, and I am constantly learning new things to broaden my knowledge. Whether or not this is a good thing remains to be seen.

Your story is the state of reality now for certain types of programming jobs. Here in DC there are plenty of government contractors who don't care how much demonstrated success a person has shown as a tech entrepreneur; they want a guy with a CS degree and 10 years enterprise Java experience ONLY. The folks who work these types of jobs are your classic middle-age engineers. They read a lot of documentation, have a lot of meetings, and don't much care about being agile or fast.

The reason people here on HN are objecting to your story is that there are ALSO coding jobs for startups, PR firms, or consumer brands where they DO value entrepreneurship, speed, and creativity. And these types of jobs will never go away. Edelman or Nike is never going to convert their development shops to all CS Ph.D.s with 15 years experience optimizing compilers. They're always going to be building interesting interactive projects for major brands, so they need people who are always restlessly finding the next cool thing.

So just make sure you always apply for the latter kind of coding job and you should be good.

> thoughts on programming, startups and entrepeneurship by a college sophomore

Well, at least he's honest about it. As a student you might hope the stuff that you learned was worth anything I have serious doubts now.

Every job I have interviewed for in the past five years had "C, C++, Java, Python & Ruby" or a close equivalent as a basic requirement, not hire on the spot. (Before then, Python and Ruby weren't as widespread, and Java wasn't totally universal yet) But yeah, it is on the higher end (large web companies paying top quartile compensation) of the industry.
You are definitely not talking about the jobs this kid will be interviewing for 2 years out of college, which is the context of the piece.
Sorry, but no.

People who know Java really well tend to not really know C++ even if they put it on their resume. Unless you count "how hard can it be" knowledge. Same the other way around. People who know C++ really well think "how hard can it be".

Modern C++ is a very complicated beast, most people who claim to know it but do not have solid experience usually don't. Modern Java is a huge tower of libraries and concepts, so it's the same.

...until you cross a certain age. The first generation of Java programmers were C++ refugees from the 90s. While C++ has advanced a little since then, it really hasn't changed that much.

I would never hire someone based on the libraries they are familiar with. In fact, the next time I interview someone, I'm planning on giving them some sort of "here's a totally unfamiliar API, do XYZ with it" problem. And they can find the documentation on the web themselves.

Nope, it did. Most of boost didn't exist back then; compilers were much less powerful, therefore we didn't see that much template masturbation. Not to mention tooling. I don't know C++ so I can't elaborate.

You are wrong. You need to understand reflection, dependency injection, logging, xml apis and other means of serialization, jdbc and the modern way of dealing with it, servlet api, http apis and a lot more. Or else you are very smart but unable to do any real work without spending half a year, one day at a time, learning all that stuff.

"here's a totally unfamiliar API" challenge is nice but irrelevant. There are a LOT of concepts you should understand before you can claim you know Java.

The first generation of Java programmers were C++ refugees from the 90s. While C++ has advanced a little since then, it really hasn't changed that much.

You should have a look at C++11 if you haven't already.

Here's an unjustly killed comment from guard-of-terra:

Nope, it did. Most of boost didn't exist back then; compilers were much less powerful, therefore we didn't see that much template masturbation. Not to mention tooling. I don't know C++ so I can't elaborate.

You are wrong. You need to understand reflection, dependency injection, logging, xml apis and other means of serialization, jdbc and the modern way of dealing with it, servlet api, http apis and a lot more. Or else you are very smart but unable to do any real work without spending half a year, one day at a time, learning all that stuff.

"here's a totally unfamiliar API" challenge is nice but irrelevant. There are a LOT of concepts you should understand before you can claim you know Java.

I agree. The notion that we've already peaked in the number of profitable places to apply software is ridiculous. And that's what it will take for them to have "too many qualified candidates".

In the mid-80s people tried to tell me that software was too crowded, that there were too many people going into it and that I was unlikely to have the career my dad had. They were partly right: I've been even more in demand than he was.

Software development salaries are crazy high right now, which is a sign of a ton of suppressed demand. The web is far from done. Mobile is still rising. We are just getting started on the "internet of things". And that's only on the consumer side. Business is not going to be less dependent on software, and the ever-more-networked world is shortening cycles and increasing competitive pressure, meaning business software needs to change more often.

Yes, by all means, people should keep on learning. But the "gosh you'll be fucked in a few years if you don't go back for your CS degree right now" thing is BS.

Thanks for commenting! As mentioned elsewhere on this thread I'm not really trying to say that you need a CS degree to be a good programmer. But I think concentrating on programming vs concentrating on entrepreneurship leads to different results. And so I was thinking about the consequences of that concentration and what that could look like in a few years.

I definitely wasn't saying that this is definitely what's going to happen. In fact I really don't think I'm going to be applying for jobs in 4 years. But I thought it was an interesting scenario to write about and get people's thoughts on.

Exactly. Everything is becoming a software problem. Dispense coffee? Make a rug? Drive a car? They'll eventually all be software problems. Businesses are being limited by their ability to understand and adopt software by the supply of talent. This will continue for a long time and it'll be people that can integrate complex systems that will solve them, not academic algorithm experts (whomever they are).
Firstly a tiny amount of people know C, C++, Java, Python & Ruby

What does it mean to "know" a language? I've been writing almost exclusively in C for 15 years, but I wouldn't say that I "know" C; at least once a month I end up needing to consult the C99 standard for some obscure point of library specification.

On the other hand, there's a lot of people who know how to write Hello World in all those languages and consider that to constitute "knowing" them. Would you hire all of them?

Oh come now, you would say that you know C (even if you're unwilling to say you "know" it for the purposes of debate). You don't have to have a language memorized to "know" it, and you don't "know" it if all you can do is write Hello World.

The answer is somewhere in between. My personal metric is: do you have a reasonably accurate estimation of what you don't know. The better you know a language, the better you know what you don't know.

>My personal metric is: do you have a reasonably accurate estimation of what you don't know.

That's a pretty good measure of how well you know any subject actually. You could call it the "Dunning–Kruger metric".

If you really knew what you were talking about, you'd express more doubt about whether it's actually a good measure of how well you know any subject :)
I "know english" but I still need to consult a thesaurus or dictionary from time to time. I believe there are standard tests you can work through to determine your level of fluency (at least as far as that standard is concerned). But that isn't really necessary. If you know that you are consulting the C99 standard for "obscure" specifications then it's safe to say you know the language. If you need an official standard, they are there.

  >> What does it mean to "know" a language? 
My definition is that it is a language you would be willing to start a new project on, given a tight deadline.
I've worked for a very long time in software, network infrastructure and now Internet payments (complex stuff too) and mobile.

I've never heard a manager or developer say: If only we had someone that could write an algorithm to solve this travelling sales person problem we'd be saved! No. Inefficient algorithms are often good enough, typical programmers muddle through and yes pick up a textbook or reference wikipedia once in a while.

Modern software is a complex tangle of standards, protocols, and technologies. To build a typical example modern web application you're going to need to know linux administration, database administration, some server side language (ruby), a web framework in that language (ruby on rails), javascript (perhaps coffeescript), html, css (less), message queues (redis, beanstalk, etc), caches (varnish), loadbalancing proxies (haproxy), SSL termination, web application firewalls, network firewalls, providing JSON REST API's, Mobile optimization, real time communication (socket.io), third party API integration, Amazon S3 management and scaling. Etc.

All of this lifts the benchmark for what is an acceptable web app. The list goes on, and new bits keep getting added every year along with expectations.

It's bloody hard to find people that can deal with a majority of the above technologies. If you find someone that can do the full stack they're gold.

You want to be valuable? Prove that you're someone that can develop within modern software stacks and more importantly adapt as things change. Because change is coming, the music hasn't stopped and we're in for one hell of a ride.

"I've never heard a manager or developer say: If only we had someone that could write an algorithm to solve this travelling sales person problem we'd be saved! No. Inefficient algorithms are often good enough, typical programmers muddle through and yes pick up a textbook or reference wikipedia once in a while."

Exactly, or google it and find the difference between between the different sorts, or look at any one of the great visual representations of sorting strategies. I've seen otherwise very accomplished coders throw up a crappy bubble sort and move on because it just didn't matter. And it didn't. In any case, 95% of the time those sorts have already been implemented in your Hash object or database or somewhere else in your languages collections library.

I've been doing this...Good Lord nearly 15 years now -- mostly in the middle-tier and lower, so I've had plenty of opportunity -- and I can't even fill up one hand with the number of times that I had a problem that required anything beyond rudimentary algorithmic analysis, much less a deep examination of sorting efficiencies, etc. Those are solved, cut-and-paste problems, the least of your worries.

The list of technologies you give is spot on. I'd add to that: good data modeling/object design, testing/TDD (if you're into that), security issues to be aware of (XSS, SQL injection, mass assignment), classic performance killers like n+1 queries, on and on.

And yes, the change bit -- as a coder you can never assume you've learned your craft. You're always learning it. We're not blacksmiths that get better and better at one thing over the years and arrive at something like "mastery."

We're attention-deficit polymaths that have to scramble week-in, week-out just to maintain competence on the current problem, while anticipating the trends that will be turning the apple cart over a year from now. Remember in 2008 or so when RIA was the buzz-cronym and everyone was talking Silverlight, Flash and the lot? And 4 years from now who knows what the acronyms will be. We may all be laughing about how awesome we thought HTLM5 was going to be (probably not, but in this business...)

If someone gave me a sort implementation in a code review, I'd have to seriously wonder how the heck that person got hired. Libraries exist for a reason.

Sorting is a good example, though, because it is often complicated not because the algorithm is hard, but because the sorting criteria rely on heterogeneous data, sometimes coming from multiple services. Coming up with a clean code design in such cases is challenging, and that's where good developers shine.

You got that right. It's strange though that most programmers are never taught half that stuff in college. Hardcore computer science may be different but related degrees basically walk you through C++, teach you some OO design patterns and let you loose in the world. In my experience every single programmer I've ever met that relies solely on their college education for their work doesn't know half that stuff! Now I'm talking about people who "specialize" in web development here to be clear. They know some HTML, JavaScript or ASP and that's about it. The command line is mostly foreign to them and they rely on a lot of pointing and clicking to create anything rather than digging into some code and settling in with a cozy text editor.

Then there are the ones I've met who picked up some books, read the tutorials, and got their hands dirty with some code completely outside their degree which was in something totally unrelated and those are the ones who totally amaze me with their skill. Even a lot of the big web development companies around me are WYSIWYGing their way through client work!

It just totally astounds me and your comment and this article are making me ask myself (again) why is that? Is what I describe normal? I'm in Chicago and maybe outside the Valley things are different? Has anyone else seen what I described or is my experience just a fluke? If its anywhere near common I'd be a little disturbed.

> Is what I describe normal?

100%, at least in my country.

Sharepoint is a few steps closer to that compare to Rails/Java these days assuming your companies decided to adopt it wholeheartedly.
> Firstly a tiny amount of people know C, C++, Java, Python & Ruby. If you found someone with that lot I'd probably hire them on the spot.

I fit your description in full. What is your offer? You can find my contact information in my hacker news profile.

Wrong, wrong wrong wrong.

It's so easy to forget how much we had to learn to build websites. It's incredibly easy to forget how much time getting the event loop or even MVC to click took. It's easy to fail to remember how hard it was to learn the 5 different languages required to build the app we made in a couple of weeks over the summer. But those are skills, as challenging to learn as algorithms and big data.

As someone who has had to learn data warehousing very quickly, before being shown the joy of such things as MapReduce, before being slung into serious number crunching performance eeking territory, I can say with absolute certainty that, as "web scripters" or entrepreneurs, we have a huge advantage - we're the people who taught ourselves how to make things instead of regurgitating what a CS program teaches us.

I started a CS program at a decent university. While I think it's true that ivy league and extremely competitive programs might force one to think about this stuff the right way, State University absolutely do not. Most of the kids coming out of there will not be as qualified as someone who has taught themselves how to build a business.

Most importantly, If you're coming out of college, there is approximately a 0% chance the folks hiring you will have any expectation that you will be useful for several weeks while you get up to speed, which is plenty of time to become competent enough to be dangerous.

I'm by no means suggesting that a CS degree is the only way to get good at this stuff. In fact, I think that most of the best programmers I know didn't graduate. The difference is concentrating on being an entrepreneur vs concentrating on being a coder.

This part is reposted from another comment because I think it's important to your point:

As far as the meaning of the article, I wasn't trying to prove a point as much as elucidate something I was thinking about yesterday: the skills you pick up through entrepreneurship.

For the past 4-5 years of my life (starting in high school and continuing through college) I've been concentrating a lot of my time learning how to be a better entrepreneur. That's to the detriment of almost everything else in my life. And it's worth it to me because I love it. Even better still, it seems like a pretty safe bet because worse comes to worse and I completely fail over the next few years I'll still be able to get a job as a coder somewhere.

But the thing about being an entrepreneur is that it encourages you to get marginally good at a wide range of skills instead of REALLY good at one area. And so something I was thinking about is the potential consequences of this decision on my life. This is what I came up with.

Well, my opinion is that the Internet will just get bigger than ever. Opportunities made up by huge platforms (like Kick Starter) will mean that you'll have the advantage of making money faster and more than anyone else.

You'll be able to leverage your entrepreneurial knowledge with such platforms. Think of Facebook, Twitter and the AppStore. How many times they made it easier to make money starting extremely small and almost at no cost.

Yes. It's amazing how I can quick pick up my new job's random DSL and special secret sauce algorithm and know house toolchain, and fix bugs in them immediately, whereas 10 years ago I was mindblown for weeks trying to understand how he Y Combinator and call/cc where even theoretically possible. Same with pointers before that, and the whole concept of a computer program drawing a picture on the screen before that.
It's really the same sort of difference of perspective as between industrial engineering and residential construction. If you've every seen someone build an ordinary home you know how much it looks like silly bullshit sometimes. Everything is wood nailed into other wood, and there's a lot more seat of the pants planning than you think should be necessary, and there's a lot more shimming and toe-nailing and adapting and whatnot than a lot of people would be comfortable with. And then compare that to a world where everything is planned out meticulously in autocad and everything is built out of reinforced concrete and bolted together pre-manufactured giant hunks of steel.

They are very different worlds, much as "hard" systems programming and "soft" high level "web dev" are. And it's tempting to look from one to the other and imagine that it's only a passing fad, but it's not.

As far as CS degrees, my experience is the same. I've interviewed a fair number of dev. candidates in my career (in addition to working alongside coworkers of various educational levels), and a CS degree on a resume has never had any correlation in my experience with a higher quality developer skillset. And this is down to a basic almost fizzbuzzian level too. From a few colleges a CS degree may mean something, from most it seems to be pretty worthless.

If I will do maths and algorithms, what will all smart people of this world will do ? I am stupid by intention and not by chance.
"As I walked out of the interview and stepped back into my time portal device, destined for 2012, I couldn't help but wonder - Why was she using a pencil on that 'Gorrila Glass' screen...

Could it be that she was still hanging on to a corporate process or HR career that was as obsolete and irrelevant as the 'handbook criteria' she was trying judge me by?

Or was it just that she was destroying her iPad as fast as the guy (with the beard and john lennon glasses) on the cover of my CS101 course book was turning in his grave.

Then I kicked myself for not short-selling my Apple stock back in 2012... but wait, I thought... I guess I still can!"

Wrrrrrrrrr--ZZZZzzzzzapppp!!!

I think people are missing the point of the article -- I think that what the author is getting at is the market might be soon flooded with CS graduates with a nice set of accomplishments. Probably not by 2016, but at some point its going to become more competitive I am sure.
Interesting. My angle of approach is opposite what the OP describes. I say this as someone who studied math as an undergrad, and has a pretty solid grasp of algorithms and the mathematical principles, but who's had a weak point in the front end for a long time, that I'm now working to remedy, because presentation is just as important as algorithmic excellence and efficiency.

Currently, I'm studying Play (the Scala web framework) and, at the same time, having to ramp up on JavaScript, CSS, HTML... and getting an appreciation for how much there is to learn (MVC, database configuration, integrating a web app with a typical build system). It's not mathematically hard, but it's difficult in the way that biology is: there's a lot to learn, and between the concepts are equally important and intricate relationships.

For my part, I think that people who can present complex ideas well will always be employable. I think anyone who doesn't learn basic front-end programming concepts is doing himself a serious injustice.

The challenge of 2016 won't be solving hard mathematical problems. Yes, there will be high demand for people with those kinds of talents, and that kind of work will be (as it always has been) important. However, I think the biggest challenge is going to be educational in nature. It won't be enough to build great software; you'll have to teach people (who are too busy to learn and compare the intricacies of 35 technical assets just to do their jobs) how to use what you've built.

(comment deleted)
My perspective might be in a minority, because I'm an autodidact. I did go to college- and studied Physics. But it has never hurt me in getting a programming job -- in fact, I have always simply ignored any requirements listed in job listings.[0] Several times it has come out- many months or years after I was hired, and people are surprised I don't have a CS degree. Its like a prejudice- they assume that anyone competent must have gotten a CS degree.

Maybe non-autodidacts need to go to college in order to learn how to program? (But I would doubt this-- you all knew how to program long before you were freshman in college, right? I mean, hackers are born, they're not created in CS classes, right?)

On the other hand, the people I've interviewed with and worked with who were non-hackers, who went and got a CS degree, often were weak performers. Much of what's needed in the workforce is not taught in CS programs, and something about the way CS programs are taught seems to often condition people such that they have to unlearn a lot of stuff before they're fully effective in jobs.

Of course, I've known lots of good hackers with CS degrees. Hackers do tend to follow the custom and go to college and get their CS degree and arguably could be better hackers than they would have been without the CS degree (though I think its debatable whether 4 years of employment experience or the CS degree makes the better engineer- for some people its one, for others its the other.)

When I entered the work force, if not having a CS degree meant I couldn't get jobs it would have been a real issue-- but these days, its is a whole lot easier to start a company, and thus you don't need to be dependent on passing arbitrary HR requirements[1].

If you aren't playing the startup lottery (e.g.: starting an instagram like business and want thus need VC funding) it is vastly easier to start a profitable-from-day-one business now than it has ever ben.

And 4 years from now, that's not going away.

[0] This also shows how well resumes are read. Mine doesn't lie, but I put job history first. I'd usually have so many interview choices that I'd pick my top 5, do 5 interviews in a week and get 4 offers and a callback. I'm sure some companies did read my resume and didn't give me the chance to interview as a result- but that's fine- it is like a built in bozo filter from my perspective. [1] Frankly I think the requirement for a college degree is a bit like hazing. The people before you went thru it, and so they aren't going to accept anyone who also didn't have to go thru it. It has nothing to do with skills, just a way to exclude people who are different. Lord knows that piece of paper is not proof you can program.

Knowing data structures separates the men from the boys. If you do not understand the difference between a tree (C++ std::set for example) or a hash table (std::unordered_set) you have placed yourself at a disadvantage. You can learn these things, they are not rocket science and you don't need a CS or math degree to do so, but it's important that you do learn about them and when to use what data structure especially if you have to scale to more than you ever thought possible. Most all programming languages have containers (lists, sets, dictionaries, maps, etc.) that are backed by various data structures. So you can experiment and learn.
Very true. My objective-c skills got dramatically better after spending some time learning the stl in a c++ project. Reading about where you would want to use a deque vs some other container was enlightening, and upon returning to objective-c I started to pay attention to its various containers and design patterns in a whole new light.
Dans premonition is actually one step behind. Knowing the mainstream skills of 2016 will not be enough. But you will have enough room in your inventory because the mainstream skill of 2012 will be irrelevant.

10 years ago if you learned Perl on the side it opened doors to great jobs. It's always the way that learning the up and coming not yet mainstream skill will give you an edge in employment. Data analysis is the skill for 2012. Something else will be in 2016.

Barrier to entry is going down, not up.

No one cares if you can do an algorithmic analysis on different ways of sorting to choose the most appropriate way. These days it's dynamically built into the function. Just call sort.

Educationally there's not much of a difference between a philosophy, math or computer science degree. All of them are doing the same thing - logic. Philosopher approaches it classically, mathematicians do it formally, and comp sci do it ad hoc or practically. Each has it's virtues when you design or program.

Can you point me towards a sort function which will sort my data in the most appropriate way, every time?

Some sort functions might cover 99% of cases for web development, but not for other problems. The computer is not magical.

That's a pretty bad example, since sorting is exactly the kind of problem that really depends on the application. Eg, depth sorting objects in a game would run quicker if you pick an algorithm based on the fact that consecutive frames typically don't change that much.
Except when you need to sort a big collection of strings and the standard library sort function never returns.

What we need is good vocational education. Polytechnic schools that teach you how to code, be part of a project or lead one, design an application and so on. Then the CS taught in universities can focus on the basics of computing, analysis of algorithms, AI, programming languages, etc without the now mandatory Software Engineering 101.

"The problems we’re working on involve in-depth data analysis that require an extensive math and algorithms background."

I can see why a college sophomore would fear this response. But in my 18 years of programming, I've seen that the vast majority of software development isn't about the stuff they teach you in school. It's about design, collaboration, languages, libraries, and frameworks. It's about working around crazy cross-version incompatibilities, solving heisenbugs, and keeping everything maintainable. Math and algorithms? Feh. Not the real issue.

Let's assume the startup bubble bursts and programming jobs become scarce. There won't be any kindly interviewer at the large bureaucratic companies. There will just be a faceless HR person with a keyword-searching database saying, "No CS degree--no interview."

But personally, even if the startup bubble bursts, I don't see the demand for programmers going anywhere but up. And that entrepreneurial background will only be an asset at the smaller, more interesting companies.

Besides, starting your startup on the downside of the bubble is exactly where you want to be. You don't get rich starting up at the peak. If you think there is a bubble about to burst, save up everything you can earn right now, and then start your business after the pop.
First of all, a person with a C/C++ skillset is not just capable of "building an app or a website". Most web devs now (and I include myself in this) don't have the requisite skillset to write the database engines, low-level graphics routines, browsers -- all the numerous layers we take for granted to print 'hello world'. And yet self-taught coders, by definition, are always learning.

I have never applied for a company coding position; I came from design and learned to code as I went; but 75% of my business now is in custom business apps. I've yet to meet a client who doesn't value the fact that I'm willing to learn what I need on the fly. Many times I take projects with the caveat that a certain amount of cash and time is probably going to be spent filling in what I don't know, and hacking around until I figure it out; and that if that becomes onerous, I'll knock some of it off the tab. I bill at $100/hr, modest by freelance coder standards, but obviously many times higher than coders on oDesk, and at least double what I'd earn in an office (if they'd hire me - which they probably wouldn't). And yet my clients end up paying less for rewrites and fixes, spend less time on the phone, and end up with a product they're happy with.

The small-to-midsized business owners who understand the value of letting me hack away, who ask what I think about how they can analyze their data, etc. get great value for their money, and I don't see a shortage of them. When I really, really don't know, I hire out to other hackers who do. I wouldn't want to hire a company composed of people who can memorize algorithms, but can't think on their feet; I'd much rather have the exact opposite, and my clients at least feel the same way. And I'll use whatever tools are at my disposal. The first time I wrote an online store, in 2001, I did it from scratch. I had NO knowledge of databases at all... I actually didn't know there was such a command as serialize(). I ended up writing a whole custom back-end in PHP that did its own serialization, flat file writing and retrieval on products, customers, orders, etc... hundreds of products in the store, thousands of customers... and that site is still running.

Companies that would rather have drones with degrees aren't companies I'd work for, and I'd argue that they aren't who successful businesses looking for software want to hire, either.

I've had this kind of argument presented to me every few years since the 1990s. It was probably happening for the forty years before that. Soon we'll need "real engineers" - and these fly by night part timers who don't have a "proper" background in computing are doomed! DOOOMED I SAY!!!!

Tosh.

I'm a guy who has got a subject specific degree - more than twenty years ago now (1st in Computing and Artificial Intelligence for those who care). I was selling software before that, and have spent most of the time since in industry.

What have I noticed since then? Amount I've actually used the "hard" CS stuff I learned there - close to zero. Correlation between "being good at math" and being a successful developer - basically zero. Correlation between having a degree and being a successful developer, after the first few years in industry, basically zero.

I don't see that magically being different in the next four years.

(Curiously the "being good a math" thing seems to be something US centric. I've not noticed the same focus on that with folk in the UK or elsewhere in Europe).

The space that developers get to play in has got larger and larger over the last 30 years. I don't see that changing. Quite the opposite in fact.

Sure some of that is going to be in areas that really need some hard-core math or engineering skills. Those jobs are out there now (embedded development is exploding again, big data has been around for years, the clever end of game development). I'm sure they'll be more in the future.

But there are also many, many jobs out there that don't. Many, many jobs that involve developers being good generalists, or having cross-over with UX and design, or having a decent understanding of economics, or understanding big-money. I'm sure they'll be more of those in the future too.

One thing we're really excellent at is wrapping up complicated stuff in abstractions that are stupidly easy to use. We're excellent at de-skilling our own job. And every generation whines that the previous one can't build their own computer / write microcode / write assembler / manage with less than 1k RAM / cope without a visual editor / manage their own memory / build their own OS / write their own application stack / whatever.

Yet people somehow carry on building new and neat things.

If you're a hard-core CS/algorithms person - go for it. They'll be lots of work for you. If you're not? Go find another niche. There are many, many out there. Be a good developer. Have fun. Make neat things.

And thus ends this particular Grumpy Old Man's Saturday Rant :-)

Whoah, so you're saying us younger hackers DON'T have to learn how to write machine code and program C-64's to have any cred around here?

Well... My life has been flip-turned upside down.

(And I'd like to take a minute so sit right there, I'll tell you how I became the prince of a town called Bellaire)

C'mon you old motherfuckers, keep voting me down, that's right.
I think you meant to post this on 4chan, not HN.
To follow up with a Grumpy Old Man Postscript:

Reading Commications of the ACM (most recently, [1]), there's been an ongoing problem getting enough people into computer science programs (in large part because of the broad fears of "outsourcing"), and the projections are that EVEN MORE graduates will be needed through 2020. [2]

So yes, many times yes: This article is completely and totally wrong. And as adrianhoward says, it's the same sentiment that my parents chided me with back in the 90s, and that I hear all the time from people who imagine that the silver bullet is just around the corner that will make it so that we need fewer rather than more programmers. (FWIW: My degree is in "Cognitive Science", the "other CS", and I haven't had problems getting jobs when I've wanted one.)

And as an aside, if you look at the graph with yellow and brown bars about 2/3 of the way down [2], getting a job where math is the primary required skill looks like a slog (looks like about 2x as many math grads as math jobs), while in order to hire people AT ALL, companies are going to have to ignore whether they have a computer science degree, because there are nearly 3.5x as many jobs in CS-related fields as there are graduates in CS.

Based on these numbers it looks almost inevitable that we'll see echos of the "You've put together a web page? By yourself! You're hired!" dot com boom, just because it will be so hard to hire anyone at all.

So, while the story was cute, its premise is FUD that has a chance of scaring people away from CS at precisely the time that we need more people in CS. OK, end rant.

[1] http://cacm.acm.org/blogs/blog-cacm/148620-hot-job-market-fo...

[2] http://cs.calvin.edu/p/ComputingCareersMarket

[edit: typo]

there's been an ongoing problem getting enough people into computer science programs (in large part because of the broad fears of "outsourcing"),

Then what fields are these people going into? Law? I hope not: http://www.slate.com/articles/business/moneybox/2010/10/a_ca... . Medicine has its own problems too. Are they majoring in the humanities? Getting bogus business degrees?: http://www.amazon.com/The-Marketplace-Ideas-Resistance-Unive... ?

It might just be that undergrads have serious information asymmetry problems, of the sort I tried, probably futilely, to correct here: http://jseliger.com/2012/04/17/how-to-think-about-science-an... , but I wonder how these kinds of asymmetries can really persist.

Part of the problem is that we don't know how to teach computer science to students that haven't already been programming for years before college. The major has the highest first-year dropout rate.

http://www.siliconrepublic.com/innovation/item/18532-compute...

http://dl.acm.org/citation.cfm?id=1151604

That suggests that one reason there are so few CS graduates despite demand is that those who enter CS programs because of said employment demand, and not because they are already interested in programming, don't make it out with a CS degree.

With respect to CS in particular, I think it's different from all other school subjects in that it is and has always remained a predominantly self-taught subject. You don't really get "taught" to program.

(I think this may be part of the reason that while there are increasing proportions of women in all the other sciences, the proportion of women in CS is dropping. Girls are statistically better in all school subjects than boys, and tend to be more diligent at homework and so on. Math and science fall neatly into that paradigm; programming doesn't. You get no gold stars from grownups by programming. So a lot of people who have the problem-solving aptitude to be good programmers never actually get started -- because nobody TOLD them to.)

Are there really asymmetries? CS degrees have a small value-add. Many of people enjoy software development without having the desire to be able to implement a RB tree on the fly. For intance, my boss majored in film studies; only one person on the team I work in has actual formal training in CS beyond introductory classes, and they're probably the least productive developer. Given that, why should people major in CS when they can instead spend 4 years debating social theory or going on class trips to Death Valley?

And really, is what we're hurting for now more CS people? I don't think so: if anything, the issue is that there's too much a CS emphasis. That's why we have people spending time building Lisp VMs in JS and all that jazz here, while tons of other fields (even technical ones) have absolutely massive inefficiencies because their problems aren't theoretical enough for CS folks.

Undergrads do have serious information asymmetry problems. My best guess as to the reason is that they don't have a lot of interaction with a wide range of people in the working world. They don't really have any idea what it'll be like to be adults. Incidentally, I think this is a big part of the reason undergrads at good schools gravitate to such a small number of employers (investment banks, consulting firms, and famous programs like Teach for America). Kids simply don't know what's out there, and so they reach for known quantities. And one consequence of that ignorance is that they don't have a very clear idea of which skills are most marketable.
" Correlation between having a degree and being a successful developer, after the first few years in industry, basically zero."

In my experience it's even negative. Almost every person without degree that I worked with was much better at their job than the rest. They were more driven and that's probably how they got the job too. On the other hand the code written by phds... Often I regret looking. It's not that it's not correct (usually), it's just barely usable and disconnected from reality of how/where it needs to run.

I hate to say this, and I'm sure it doesn't apply to anyone reading HN, but in my experience the ability to sit down at a keyboard and end up with a useful nontrivial program a few hours later is inversely proportional to the number of years of graduate school.
> Correlation between "being good at math" and being a successful developer - basically zero.

I suspect you have a very limited (that is, "it's all arithmetic") notion of what math is. You cannot develop software without some kind of mathematical thinking.

I suspect you have a very limited (that is, "it's all arithmetic") notion of what math is. You cannot develop software without some kind of mathematical thinking.

Then you would suspect wrong :-) I have a friend who was a career mathematicians briefly, before ambling off into finance. Personally I stopped math after A level (roughly equivalent to the first year university math at university in the US as I understand it - calculus, etc.).

I know math isn't just doing sums.

From my mate I know that many mathematicians are bloody awful at coding - which is a PITA now that computers are much more a part of how mathematics are done in many fields. From personal experience I know that a large chunk of the very best coders I've ever worked with don't have a math background beyond basic numeracy.

What I think people experience is actually the opposite connection. Some of the problem solving skills that developers use are the same sort of skills that folk get from being good at mathematics.

You can get those skills in other places without learning higher level math. And being a successful developer needs much more than the skills from the mathematics toolset.

Nothing against math. Math is great. Moderately good at it myself. If you're a good developer having it will help more than it will hinder. But having it won't make you a good developer, and not having won't stop you being a good developer.

> Then you would suspect wrong

Then you're wrong about math and downvote to disagree.

I didn't downvote you - I don't have the rep to downvote anybody :-)

I'm not making this up. I know many good developers that do not have a math background. I know people who have a heavy math background who are lousy at development (and it looks like I'm not the only one - see http://news.ycombinator.com/item?id=3872269)

A bit more than "you're wrong" would help with reasoned debate of course...

If you don't know algorithms, I certainly wouldn't want to hire you today.