Ask HN: How to reconcile “teach everyone to code” and “only hire the top 1%”?
It's clear that cognitive ability correlates with coding ability, and the idea of the 10X developer is widely accepted in our world. As a broader industry, we practice shameless elitism and seem to be making real-world software development more inaccessible to non-experts (apart from child-level development environments). As professionals. we deride RAD tools and "drag and drop" development, and show geek love for ever-more abstract modes of thinking like Functional Programming that a small percentage of working developers, let alone the general public, will grasp.
What's the end-game? Are we trying to create a new cognitive elite? Is it a labor lottery so that the small percentage of kids who are turn out to be good at coding will become professional programmers? Are we willfully blind to the fact that human talent is not evenly distributed? Or is the lack of accessibility ("easiness") just a blind spot that we have yet to address?
62 comments
[ 3.8 ms ] story [ 129 ms ] threadLiteracy is not vocational: it can be applied in many contexts-everyone uses reading all the time. Arithmetic is also plenty useful.
Or that children should be taught to touch-type so that they are eligible to work as transcribers.
Touch-typing isn't widely taught anymore, is it?
I dunno? In my elementary school, it was part of the computer lab that we did on a weekly basis. Can't remember if it was part of an English class or a separate computing class, but we played games (e.g. Mavis Beacon type games) and kept score.
> Literacy is not vocational
Why should "Learn to code" be seen as vocation? I understand that's the way it is seen by the majority, but that's not the way it's seen by all advocates of "Learn to code". How did "Everyone learn arithmetic" become ingrained in educational systems?
It is, you can get both of those things because programming teaches you how to really think, and that skill is transferable to anything you do. It's like akin to reading, it's a useful skill to learn no matter your eventual chosen profession. It doesn't have to lead to a programming job.
> Literacy is not vocational: it can be applied in many contexts-everyone uses reading all the time. Arithmetic is also plenty useful.
Programming is the same and belongs in that list with literacy and math.
If true, that is deeply bizarre. Touch-typing, much more so than programming, is actually useful in basically any non-menial job in the modern world. It ought to be as basic to the curriculum as math and reading.
At the last local Python meet up I went to I sat next to a sociologist who writes code for data analysis and visualization and a 3D artist who wanted to script up Blender. If social scientists and artists are programming, I'd say it is a useful skill across a broad range of disciplines.
Studying programming and computer science is valuable for more than just programming; it teaches a useful way to problem solve and structure your thoughts.
Not everyone hires the top 1%, only those that can afford it. And how many people consider themselves in the top 1%, anyway? Do you? I don't. The hubris of the idea of the 1%. That's what the hedge funds tell themselves when they put you through an 8 hour-long interview where you're asked to code sorting algorithms on a whiteboard. That they're seeking out that 1%. Larry Wall and Bjarne Stroupstrup? Okay, 1%. 25 year old comp-sci / top of class engineer student? I don't know, possibly? Okay, putting aside the snide remarks: 1% selection is not scientific, as we all know from hiring interview experiences. And moreover, are the people making the most money doing it writing software, or are they somewhere else in the IT company?
But to answer you, why shouldn't kids learn coding, it's one more notch on the belt. Takeaway: people have different interests, inclinations, talents and thoughts. For a young kid, you teach them the basics, you see what sticks. No reason why coding can't be taught young, even if it's part of a math curriculum. To be honest with you, I sucked in math, but perhaps if I had math in the context of a computer program, it wouldn't have been so bad.
Teach people coding. Also teach them to read the classics, do pullups, cook, what happened in the past, how old the rocks in the Earth are, what's in the oceans, what's outside of Earth's atmosphere, and everything else that we feel is important for a human being - not a future worker - to learn.
And more importantly, how come those who claim to hire the 1% never pay anywhere near what might be considered 1% salaries?
I've had small startups talk highly of how they only hire the best, the 1%, the 10xers, etc., then put me through five or six interviews, including the ever-so-common 8 hour white board algorithm test, only to make an offer only marginally higher than I could make as a highly skilled blue collar tradesman.
It's fine if a very select few companies with lots of money decide to have insanely high standards. The problem is when the industry thinks they all deserve to emulate those companies hiring processes.
As a whole these startups with ridiculous expectations will have to face reality or suffer the consequences of slow hiring. They will lose in the long run.
Mostly, though, I worry about the ripple effect that's been on the industry. I have friends who are in the medical field, dealing directly with surgeries, childbirth, life-saving (or potentially ending) drugs, and they're taken aback by the kind of interview requirements that so many tech companies have. A Nurse Practitioner can get a job in an ER in a heartbeat, but a front-end developer building React components needs a collective two full days of interviews? Something about that just doesn't make sense to me.
A diploma from a med school and associated residency is sufficient to expect that the person knows their speciality and is able to treat people from day one.
A CS diploma and related working experience is some indication, but (sadly) often doesn't ensure that the candidate is able to code their way out of a wet paper bag and will be able to perform reasonably well (not 10x well but 1x or even 80%) after a month or two of on-site adaptation.
Our industry, unlike many others, doesn't have a good (centralized?) way to approve qualifications, so each company has to verify on their own, which takes quite a lot of time and expense.
That said, the dangers of hiring a medical professional who screws up, versus an app/front-end/back-end developer whose code is sub-optimal, means that our industry should hire a lot more easily than it does, and simply let go the employees which underperform.
I think the problem actually doesn't start with hiring, it starts with the kind of "workplace-as-family-and-friends" culture that makes firing so taboo.
Also, it's neat to see Drew Houston comment in that thread, who as far as I know didn't win the Putnam, with ~ a billion net worth, and cperciva still working away in relative obscurity.
And that's the key difference here -- we have both been very successful in doing what we want to do. We just want to do different things, that's all.
I'll share some numbers from my academic days pursuing a CS course. From an average group of say 100 students to graduate with a CS degree only about 3-4 actually had an aptitude to become a serious and wise professional. And even those would not necessarily take a programming job in the end. Some didn't see good career perspectives in it. The rest of the group would come to a conclusion it's just too hard and would spread out to whatever alternative jobs they can find, either IT-related or not.
The amount of computer-engineering talent is pretty constant and very low. You can encourage the general population to try it but that won't accomplish anything. Anyone with genuine abilities and an inclination towards this line of work already goes into that industry.
What is possible is that through inconsiderate encouragement of large masses to enter IT you eventually get crowds willing to perform unqualified tasks for pennies, like building trivial smartphone apps, performing WordPress installations etc. In fact, this already is a reality. I see people around me abandoning their careers and moving into IT. This is in part caused by the economic crisis in my country (Russia) which devalued salaries almost three times, and lately everyone's been thinking about getting into IT to improve their earnings. I also see that people just stumble at the basics. As soon as they realize programming is not about dragging & dropping objects in a visual editor and you have to actually perform some intensive thinking, people just give up that idea and quit.
Ultimately, it will just make it more difficult to distinguish a professional in a larger crowd, but it will not make his/her services cheaper. In fact, it will probably cause more people to be burned by amateurs posing as professionals and eventually they'll be more ready to pay the premium in order not to have to deal with amateurs and risk their projects ruined. Software engineering services will then become more expensive in general.
Software engineering is hard and will remain hard. The amount of talent will also remain pretty small and launching a thousand of new programming schools is not going to change that. Smart people don't need any schools at all. For those who aren't smart, schools won't help them much.
As to what the end game might be, it's just too early to say. The society is transforming into a different community. Right now it looks like people with average abilities will have tough times landing a job as those become automated and replaced by computer systems of some kind, whereas it will be easier for the unqualified folks and for the highly qualified ones. The middle might just see some very rough times. We'll just have to wait and see which way it goes.
Last year, I had the delightful experience of teaching a primarily non-majors intro to CS course. The top 10-15% of that class (of FOUR HUNDRED STUDENTS) could easily compete with our majors. Here's a bit of what they did, after one semester, with no prior programming experience:
https://www.cs.cmu.edu/~112/gallery.html
There were a lot of students in that class who could become first-class computer scientists if they chose to. And they probably won't - they have other things they want to do.
But what a lot of them will do, now, is integrate programming into their careers as engineers, artists, scientists, and everything else, when it makes sense to do so. And they'll get a huge leg up on their competitors in doing so as computing continues to expand more widely into our digital and physical lives.
Add to this the huge number of people who don't have the opportunity to learn to program in the first place. This is a very US-centric view, but our high schools, by and large, are absolutely garbage at teaching CS. There are some stand-out exceptions, but most of our high schools do a great job of convincing most students, particularly those not of the "geeky young white male" persuasion, to stay the hell away from CS. (I say this as a formerly young geeky white male who was actually convinced by his HS experience not to go into CS, until switching back into it late in college. I finished a biology degree in the meantime until I realized that CS was far more awesome than my abysmal high school experience had suggested.)
The combination of deep domain-specific expertise with reasonable programming abilities is very powerful, because for the right problems, it acts as a huge force multiplier and/or eliminator-of-tedious-crap.
Together with the fact that it's a useful mode of thinking, this is why we should be teaching more people to program.
I suppose I could have expressed my idea better. What I meant is that for people with a programming aptitude there are no barriers these days. Whether they want to jump directly into software engineering or pursue another field and use their knowledge of programming as an asset, for the both choices the road is open. There are tons of information freely available for those who wish to learn. If one wanted to get an official CS degree it's also easily arranged, university chairs of that specialization are under-filled. At least that is so in Europe. For some reason the locals prefer economic/legal/business degrees and engineering isn't terribly popular. Can't say anything about the situation in the US though.
You can be a really bad one, that's still upper middle class in much of America , and not to shabby even in high price cities like LA
1) It is generally expected that the skills involved in software development will be increasingly important for high paying employment and the general advancement of the state of the world. That's not a claim that being specifically a "Software Engineer" is important. But, that already "Nearly half (49%) of all jobs that pay more than $58,000 require some coding skills" [1] The kid might grow up to have a job that involves analyzing a lot of data, or running a lot of simulations, or designing something that requires more aid than a pen and paper can provide (ex: synthetic biology). Either way, that kid is going to end up doing a lot of work that looks a lot like software engineering in practice --even if it doesn't say "That Kid - Software Engineer" on that kid's business card.
Even beyond "some coding skills", it is recognized that the systems thinking, systems design and systems architecture that is inherent in software engineering is increasingly important for highly-paid technical work moving forward.
2) Very few actually "hire only the top 1%". If that actually was the case, 99% of software engineers would already be unemployed. The "hire only the top!" meme is more of a reminder that it's not often a good idea to go cheap and hire lots of low-cost warm bodies to fill out your project. Hiring cheap is the natural tendency of all management. So, they need a catch phrase to knock themselves out of that norm.
[1] http://www.content-loop.com/why-coding-is-still-the-most-imp...
Yes. Look at what happened to HTML, which was supposed to be simple. Up to HTML 3.2, there were good WYSIWYG programs such as Dreamweaver which could do a good job of page layout. Then came CSS, div/clear/float layout, vast amounts of Javascript, and a mess so complex that HTML became only an output language for content management systems. Yet most of the pages look about the same.
The complexity of simple business applications has increased substantially since Visual Basic, yet most of them aren't doing anything that profound. (I occasionally point a finger at Soylent, which built an elaborate IT infrastructure for a site that averages about two sales a minute.)
The annual web infrastructure fads aren't helping. Some of the biggest sites run on rather vanilla infrastructure. Instagram runs on Postgres. Wikipedia runs on MySQL with Ngnix caches. Do you really need NoSQL?
Sure, if you want a complex website and crm. HTML is just as easy as it ever was, if not easier with some of the cleaner html5 tags
> I occasionally point a finger at Soylent, which built an elaborate IT infrastructure for a site that averages about two sales a minute
Average isn't necessarily what matters, but peak. Do you think Amazon.c om needs to design their systems around avg load, or potential load a few weeks before Christmas?
Your complaints don't really hold water.
Also teaching programming is more about technical skills and literacy than making literally everyone employed as a programmer.
Coding teaches structured thinking. Basic coding (like lightbot-level or the Frozen/Minecraft hour of code exercises, which is where my 5 & 7 year old are) teaches skills every bit as valuable as thinking board games. We don't play Rat-a-tat-cat, Monopoly, checkers, chess, and go with our kids in hopes that they'll become grandmasters or even employable in the field. We do it because the elements of strategy, planning, adaptation, hard work, and overcoming initial obstacles are valuable thinking skills. As my kids get older, they'll progress into "harder" coding exercises, still not with a vocational angle. Even if they end up in a non-programmer job, "programming" is going to become an ever-increasing important part of most white-collar jobs in the future. VBA is programming. Excel macros is programming. Writing rules to filter your email is programming. I'd rather that not be mysterious to future generations, and I'll see to it that it's not to my kids.
"Only Hire the Top 1%" is something that I'd love to do, having seen the results possible when you get a dozen or so of the actual top 1% together. As it's practiced, most companies that think they are hiring the top 1% are probably hiring the top 3-5% and are hiring that not from the overall pool, but from the pool of people that walk through their door. That can quickly get you to "we're hiring from the top half of the pool, but we say we hire from the top 1%".
Imagine a pool of 1000 candidates and 26 companies with a divinely perfect interview system and rigorous "top 1%" standards. 10 will be hired by company A. 990 will be joined by 10 more applicants who left their job for whatever reason and apply to company B. 10 will be hired by company B. Lather, rinse, and repeat, and the top 250 (or ~25%) will have been culled from the pool before company Z even starts their process, yet company Z will still hire "the top 1 percent [of people they see]" The example is simplistic, but company A will get a much higher caliber workforce than company Z.
That's why retention of strong employees (with financial and work/colleague means) is so critical, IMO. If you can keep your top employees from leaving and have a decent interview process, you'll end up with a good team. If you have constant churn, you'll have an awful team almost regardless of anything else you do.
And besides, someone who can code is (in my programmer's opinion) more self-reliant than someone who can't. You can start your own company doing something small that still helps a bunch of people.
Coding out of industry is less a usable skill than knowing how to make bread, alcohol, building, mechanic, filling your taxes, reading the laws for an individual.
Sacrificing generic skills that makes citizens more independent compared to «ready to use» skills for the industry is a sacrifice the nations are doing I don't grok.
No because you write: >Literacy is not vocational: it can be applied in many contexts-everyone uses reading all the time. Arithmetic is also plenty useful.
So the question is more: "is coding vocational" ?
I routinely work with people that can't leverage a spreadsheet as a better calculator - and prefer the "calculator app" for help with arithmetic. Now, I know that it's easy to fall back to using the first thing/tool we know - a hammer for every screw, so to speak.
But I think part of teaching how to actually use computers, should also be teaching people to look for the better tool, or to be able to make one. Much like how Bram Moolenaar, creator of the vim editor, talks about constantly looking for things we do while editing that is repetitive, and probably could be improved (either by discovering/looking up functions that are there, but we don't use day-to-day, or by scripting) - so it is with all things we do on a computer. It's in many ways the ultimate tool for data and information - everything can be (more) automated. If we have the right mindset, and mental tools.
In my mind, that's what "computer literacy" is about, and basic programming is absolutely a part of that. While I'd prefer to see people know how to write a python script to find their way out of a wet paper bag, even if we just enable 80% to actually automate spreadsheets, that could have a huge impact on overall productivity. Because despite the horrors many hn'ers probably have encountered in terms of visual basic, access and excel -- still far too few people are able to make such horrors in order to do everyday tasks, like sane shift scheduling.
I think we need a bit of a revival of the ugly, everyday scripting and maybe even so called "4gl" languages -- because while they often are the wrong tool when you want to make a shrink-wrapped tool for others to use (maybe even something you could sell), I think it is often very much the right tool for thinking, experimenting and making certain tasks easier and less error prone.
As a side note, a sane spreadsheet-like interface with a sane programming language would probably be a good idea. R does this to a certain extent, but I'm not sure I'd want to try to use R to plan shifts, or do a number of arithmetic things like manage my budget or calculate material use for a circular stair case and so on. I'd probably prefer something like Python or Ruby coupled with something a little snazzier than a CSV-file (ok, I would totally prefer grep, awk and a text-file -- but I think we should be able to do better).
Yes, it's nice to have a one more tool in ones cognitive toolbox. Like, it's nice to know some maths despite not using it professionally.
The second is just about hiring publicity. Given free choice, the top professionals often seek the hardest challenge in town. It's just a recruitment honeypot. There is no hiring methodology to actually figure out the productivity of a hire - but, you can affect the population of hires. 8 hours at a whiteboard in itself is not that necessary except to maintain the image of a worthy challenge, thus calling in a population with it's siren song. It's not personal, it's just statistics.
http://www.exploringcs.org/resources/cs-statistics
20 times as many students take the US History exam. And you probably have to be even better than top-1-percent to get a job as a historian.
I'm not saying that everyone should turn into a software engineer, I just think programming is a very relevant subject to the modern world, and a curriculum in which everyone took computer science classes would be superior to the status quo curriculum.
Eventually there will be little use for stupid people and some charismatic politician will rise to power by suggesting we stop subsidizing the useless. For now, the useless can delay their fate through bootcamps
Think of it like children learning a musical instrument (or taking up ballet lessons). Not every one of them would turn out to be musicians.
Hopefully, they grow up to have an appreciation for programming and things/fields related to it, as well as develop an additional perspective. They don't need to become programmers, or even continue to program as a hobby.
This is why I believe programming should be taught in school, early, much like art and music.
Public education was a bastion of American liberal democracy [0]. But adult literacy is not merely an egalitarian project. It was and is an important source of average labor productivity gains. At the same time businesses practice elitism where it, too, is consistent with the profit motive.
I'm not sure what's to be gained from hiring C+ English graduates to staff the New York Times, nor from hiring 55th percentile CS grads to bootstrap your next startup. Let a business hire the best employees for the job to maximize marginal productivity, and by all means keep teaching people to code where it can raise average productivity.
[0](http://tjrs.monticello.org/letter/334)