Amazing =)
I like it, but the thing I would say is not that we need More
programmers, but we need Quality programmers. Getting quality
programmers requires better wages, and better teaching. Honestly? Coding
should literally be a course for children to start when they are
learning about reading writing and english. Start them young and they
will comprehend way more about programming.
Well, if "we" need quality programmers, "we" should pay for it, I
think, and β amazingly enough β people will then invest the effort
needed to acquire the skills they're rewarded for acquiring.
I mean, it makes sense to subsidize basic education where people
learn to read, write and some arithmetic because this shit is arguably
universally useful. But programming is about as useful for anyone but
the working programmer as an ability to operate a machine gun. Should
kids learn to operate machine guns because "we need more quality
soldiers" (in itself a patriotic and arguably sensible statement for a
lot of values of "we")? Should everyone be forced to study human anatomy
because we need doctors? Etc. etc.
The problem isn't money.
The problem is the learning curve. So many people have this idea that
programming is the hardest thing in the world, next to rocket
science.
We don't expose people to programming in any capacity, so they think
it's all done by autistic whiz kids in their mother's basement.
How do you know "the problem" even exists? Are wages skyrocketing
without an increase in the supply of programmers, hinting that supply is
too inelastic relatively to the growing demand?
I, for one, was basically never exposed to programming in any
capacity until the University; I chose to study CS because I heard wages
were high. Is it really that unusual? I think not. Would I really do
that if I thought I could make it as a lawyer or investment banker? No.
Maybe this is the source of your problem then β too many options which
are better for too many people β or is it a problem?
No, no, no, no. The purpose of getting more people to code is so they
can pay them *less* money! This solution circumvents the entire point of
these campaigns. There is no shortage or programmers providing you can
afford them.
I have to say I disagree that programming isn't useful. Even learning
something as simple as html code can help you in all sorts of ways. I
don't think its equivalent or as useless as teaching kids how to fire
guns, its more akin to teaching them spanish. It may not be something
that you keep or use on a daily basis, but its good practice to learn
another language. Programming will always be paid well because good
programmers are hard to find. Teaching it to kids is something I don't
think is a bad idea.
Let's forget the guns analogy, a sensitive issue in itself, and
settle on programming being analogous to working with cement for
construction tasks. Spanish, for instance, lets you talk to hundreds of
millions of people, write things for them to read and read a ton of
things written over the years that you otherwise couldn't (machine
translation isn't there yet). Programming isn't anywhere near as useful.
HTML for instance β how does it help you to manage your Facebook
account, or even run WordPress on a standalone host, the latter being
something very few people do? How does it help you to accomplish
anything which isn't a waste of your time given the better alternatives
available?
Attempting to figure out what an economy "needs" has largely not
worked out well. It was popular among national governments in the
mid-20th century, but the countries that pursued it most
enthusiastically found themselves with, for example, lots of steel but
not enough bread.
Yossi and Luke have a perspective that looks more likely to work out
well. Look at the existing price of labor for programmers. Based on
that, I don't think we lack for professional programming.
How about more companies offer more junior positions. Seems like
every well advertised position is a "Senior" position asking for 3-8
years of professional development. Companies seem to not understand that
experienced programmers are not produced from thin air. Sure there are
some companies that have junior positions, but they to be on job boards
more, and require less experience. More low paying accept right out of
college positions. Also large corporations should put more effort into
ensuring that people are actually trained. Truly we are in a field where
no college training and experience are possible to gain without school
or work... but lowering that barrier even more would be good.
Agree with the theory that there is no shortage β the panic is an
attempt by the corporate employers to keep the supply high so hey do not
have to raise salaries. They learned their lesson from the dotcom
boom
Money as incentives gives *negative* results if even a basic level of
cognitive skill is required for the task. There's tons and tons of
research to back this up. I for one am not comfortable with more
programmers with less than "a basic level of cognitive skill" :P
I'm guessing those researchers then urged whoever funded their
research to cut the funds so as to raise their cognitive skill. Maybe
they then published something less dumb as a result.
If this is to be taken seriously β sure, maybe when you compensate
per task it is so, if you compensate more globally then obviously it is
not so.
The idea that everyone should be taught to code is dubious since more
than half of humans cannot understand programming. (You have probably
read this already: http://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/
) Nonetheless, this useful skill should be encouraged.
I agree with sobetroll that the problem is more one of quality than of
quantity. However I don't believe it is to be solved by better teaching
of programming. Rather, software engineering is plagued by cultural
problems e.g. βworse is betterβ mentality a.k.a. complete contempt for
the user experience.
Concerning the unbalanced representation of some categories of people in
some categories of activity, basic income would make the problem's
premises disappear in addition to optimising the hell out of the tax
system.
Why should this useful skill be encouraged any more than a countless
number of other narrowly useful skills? That is has no broad
applicability has been a fact for many decades and I don't understand
why this will change any time soon.
If I was "guaranteed" basic income, especially when I was naive
enough to count on such "guarantees" in the long run, I wouldn't work
for one hour. I think very few would. Not that the idea is bad in the
abstract.
You underestimate handiness of programming in a sense of advanced
calculator.
For example, accountant of my tenants constantly screw up invoices
and program she uses is a total shit.
It will be very easy to hack together a simple ad-hoc command-line
accounting tool when you assume your use is actually understands what
going on, instead of whole general-purpose GUI thing.
You overestimate human capacity to produce software which is not
total shit. I'm a professional programmer using software produced by by
professional programmers for professional programmers and the result is
total shit (consider C++ semantics and the various little behaviors of
C++-related tools). I kinda doubt that the command line accounting tool
would be less of a total shit than the GUI thing. A lot of command line
tools are shit.
That's the whole point, tools made for internal use can be a total
crap and full of rough edges yet outperform more general solutions.
First thing coming to mind is how half of my python scripts don't
catch errors but instead simply have bunch of asserts here and there. If
i do it proper way it would be much more troublesome.
Or my netboot tool with dumb DHCP 'server' that simply sends
pre-backed reply no matter what it got and don't handle more than one
TFTP connection at time. Because that's enough for booting linux.
I'm surprised that the aesthetic/cultural/general-knowledge argument
is missing here: Schools teach kids much more math and sciences than
they'll ever "need" (ignoring for a moment the quality of this teaching
β which varies a lot). Few people will ever need to compute β or
remember β the derivative of aran(x). However, with some luck, they
remember that a derivative is a linear approximation to a function, they
have some vague sense of what this statement means, they know β in some
sense β that it has to do with turning physics into a predictive
science, and that the concepts are prevalent in science it today.
Moreover people with hi-school education know it (to some degree all
over the world). I'm not saying that computer science is as important as
calculus, but I think it is rather important. Neither calculus nor CS
are spectator sports, and you have to get your hands dirty; in this
case: code.
I think that schooling should stop at say age 13 and you should then
choose what you learn, on the grounds that very few people have the
vaguest idea about what a derivative is unless they re-learned it later
in college or some such. "Coding" would add to the bunch of useless and
forgotten shit (I for instance was exposed to Pascal, twice, Logo, once,
and a bunch of weird Spreadsheet apps and such; I felt that my intro to
CS course was the first time I programmed because all that stuff from
school completely faded from memory.)
Point by point:
- Stopping the education system at 13 would work fine for self motivated
people; less so for other people.
- You may be right about repeating the material in college. American
colleges do this. It's rather horrible in the bad ones, and amazing in
the good ones (like everything else in the US).
- As I said before, teaching level varies a lot. There are classes I
took from which I don't remember anything except that the teacher was
bad and I skipped classes. I had two programming teachers in hi school
(Israel still had serious professional schools in the 80s). The first
sucked, the second taught us analysis of algorithms.
What does getting stuck at school until 18 gives non-self-motivated
people? If someone is going to get higher education they'll do it in 13
as well as 18; if they don't proceed to get higher education, what
useful skills did they acquire in the last 5 years at school?
I benefited from some of my hi school (most notably physics, and the
CS teacher I already talked about). While I would probably have
benefited academically much more from higher education, I would probably
suffer socially; I think most 13-15 years old people would have a hard
time in a university (I knew a few).
I have a kid at middle school and a kid at hi school these days. Some of
the classes suck (the hi schooler tends to skip these), some are OK
(surprisingly, hi school CS), and some are good; I don't think they'd
fare well on their own, or in higher education β maybe your kids
would.
I didn't speculate about individual kids dropping out of school at 13
entering universities full of 18 year olds or 22 year olds; I speculated
about school ending at age 13 for everyone. Maybe if you reconsider what
I said in that light it'll make more sense β or less, but at least
you'll see what I meant.
I think I understand what you mean. Higher education is a very
demanding system (Israeli students feel it less, because they usually
start it older, but American students have a very hard time in their
first year). I really don't think it's right for everyone at early age,
even if it's "kids only universities". I also believe that broad
knowledge is good for individuals, and important for society to
function, but I know that not everybody shares this view.
The reasons behind the 'everyone learn to code' fad (which has now
mostly passed by) were not necessarily to bring more professional
programmers into the industry, though some people interpreted it that
way.
One line of thought is that software is eating the whole world, so
it's crazy that so many people don't understand its workings at all.
Another is the idea that programming is a niche that many people
never even try, and you might pick up some naturals if everyone is
exposed. You can have better programmers in the same prevailing economic
conditions β not necessarily at the expense of other professions, just
by more efficiently matching people to a job they fit well in.
Still, all in all it was mostly a fashion to do a few tutorials and
give up. What really upsets me is, there is massive scope for people to
learn to program, and keep programming β but not by building web front
ends or running through simple command-line tutorials. People can and
should be able to automate parts of their jobs. But normal user software
is massively unhelpful for this β you can do plenty in a single program
or suite such as MS Office, but there's no clean way for different
programs to work together, without the messy glue that is the work of
people who program for a living.
While I'm not a huge fan of MS Office, I am yet to see a better model
in terms of automation (and after all MS Office is at least scriptable
in a decent language compared to most of Unix's crazy little languages).
For instance, Unix, the very well known platform where "programs doing
one thing well work together", is... well I lack words to express
exactly what it is, but even Rob Pike said the toolkit approach is long
dead and the eulogy was delivered by Perl. Somehow things tend to
converge to the one big hairy program approach.
So while people automating their lives with code might be a great
idea, no evidence accumulated during the many decades that this is any
more sensible than everyone tweaking their car's engine.
Thank you for this essay. It points up commonly used mental shortcuts
that increase costs without ever being questioned, even when they ought
to be blindingly obvious. One of the most prevalent and easiest
shortcuts is the idea that the shortest path to some socially desirable
goal is "just force them" somehow. You can see the cost of this
everywhere, but probably nowhere more profoundly than in the realm of
education. The more force is involved, the less anyone gets out of
it.
You're welcome; I wonder how you found it...
Hmm, unfortunately, I can't just go to a store and buy parts for my
40+ yo car or a home automation system that neatly ties into my
disparate electronics and sensors while being extremely cheap.
For those things, my ability to code and or 3D print outside work
suddenly become very valuable.
My engineering experience (or rather, the fellow engineers that I've
met as a result of acting in a capacity as an engineer) all tend to use
our "work" skills for non-work projects. Some people wrote engine/boost
controllers, others mechanically rebuilt cars, or created electronics
for one-off toys or other things at home.
Pretty much for us, cost = time * money. We strive to minimize cost
everywhere. Nobody I know would bother 3D printing something they could
walk into a store and buy, unless the part was ridiculously expensive
relative to the amount of time/money it would cost them to reproduce it
themselves.
Such tools have more utility outside of "work" than you may think. Or
at least, within my anecdotal group of friends and colleagues, it
does.
You seriously think someone who doesn't do this professionally would
get a positive ROI for learning this stuff for non-work uses?..
Yes. I don't professionally fix/work on cars. Yet I've more than
recouped the cost of an engine hoist (and most other tools) that I
purchased.
Some things can be incredibly tine and cost saving, even when only
used by a hobbyist. If anything, coding is the example that better
exemplifies your point. The ROI counterpoint is much easier to argue
against.
I reserve the right to doubt the ROI of hobbyist engine-fixing,
especially if the time spent and the resulting opportunity cost is
factored in. Someone enjoying to fiddle with cars is a legitimate hobby;
everyone acquiring "engine literacy" as the most efficient way to
maintain all the car engines out there doesn't sound sensible to me.
Maybe there is a shortage of cheap, young, inexperienced developers.
There are plenty of developers over age 45 who would be happy to take
these positions that supposedly can't be filled.
A while back I applied to your employer and was asked to take an
online technical test and was told they would get back to me shortly
afterward no matter what. But they did not get back to me.
Several weeks later they sent me the following email:
Thank you for taking the time of completing the computerized
test.
We found you qualified for our ***** team, however, couldn't find a
vacancy in that team specifically, therefore the process took longer
than usual and we apologize for that.
We might contact you again in the future when a vacancy will occur.
Good Luck!
After checking around a bit, I found out that the opening was in a
team whose manager had graduated college 3 years earlier. He had held a
summer job writing an emulator for a technology that I had developed
myself at a competing company.
Anyway rather than complaining about the lack of cheap young coders
who will work for cheap, inexperienced managers these companies could
retool to have their work done by smaller teams of experienced
professionals (as is done in Apple among other places).
Erm... I'm not sure from your reply if you got the point of my
article...
Regarding experienced people β we employ quite a few good ones. That
said, I'm not thrilled to hire many of the experienced people I see
asking for 2-3x the amount asked by college graduates without
demonstrating any skills those college graduates lack except for a very
high opinion of themselves.
The comment about "an emulator for a technology you developed at a
competing company" baffles me as I can't imagine what it could be.
Late to the parade, but... I wonder if getting more people to code
might help to reduce the market for lemons. About a year ago I got an
auto-notification from the DOC in Vermont, stating that a guy who had
broken into my house threatening to shoot was up for parole 5 months
before his scheduled release. I could have input on the terms of parole
if I contacted them.
I called around and was eventually told, No, he was actually going to
be released without restrictions at the end of the month, having served
"good time" under various formulae, first in state prison, then in a
work camp. None of the auto-notifications I'd been sent had mentioned,
e.g., that transfer to work camp meant he automatically got an extra day
off his sentence for every day served. The DOC Victim Advocate explained
that their computer system was not able to provide this kind of
information, there was no way to update victims on progressive sentence
reduction and no way to provide accurate information on date of
release.
I don't know what they had in place; the impression I got was that
the people who used it saw it as immutable. It's not just that there was
no one who could personally hack it to make it genuinely useful to the
victims it was meant to keep au fait (I'm not suggesting this would be a
good idea); no one seemed to have any sense of what level of difficulty
this would present a competent programmer. So maybe the administration
did buy something that would be prohibitively expensive and complicated
to adjust, or maybe they didn't β the whole apparatus of the DOC was, it
seemed, filled with people who couldn't tell the difference.
Wow β now that's an unexpected angle!
I think the real problem with what you described is that whoever pays
for the system doesn't give a shit how good it is because it's not the
same person who uses the system. (And perhaps the guy choosing the
vendor was bribed by the vendor in one of many possible ways.) That's
why programs sold directly to consumers are generally much better than
products sold to corporations or governments.
If the guy who paid the vendor did give a shit, they'd contact the
vendor and demand a fix, and they'd contact the vendor's competitors,
and figure out what's hard and what's easy simply by comparing prices,
delivery dates and vendor reputation. I certainly know very little about
cell phones or cars and I very much doubt that drilling more crap into
my head during my high-school years would make it transparent to me how
a given boatload of binary code would perform on a given integrated
circuit or how well the touch screen would age etc. etc. I still manage
to buy mostly decent shit for myself by looking at vendor reputation,
prices and features, as well as relying on friends caring about this or
that market segment.
So my take on it is, if the guy who pays the money cares about
quality all will be well, otherwise it'll suck, and learning to code is
kinda orthogonal to the issue.
Still, that was one bloody colorful example... and, I dunno, perhaps
you're right...
In 30+ years of working in IT, I've never come across a manager who
did not think that programmers were some low-paid fungible resource. The
jokes about programming = typing are too close to the truth to be
funny.
On the one hand we have Microsoft, SAP, Oracle software awfulness and
the excitement about self-driving cars and IoT. I shudder at the
dystopian future of all these software driven things running amok.
We don't need more programmers. We need real software engineers. Yup,
real engineering as practised by civil, mechanical, chemical, electrical
engineers; in software engineering. People who actually design stuff to
work right.
Just because some kid built a dog house from scraps of wood and
corrugated metal doesn't mean he should be allowed to build a 50 storey
skyscraper. When it comes to software; the kid who has hacked together a
website is deemed to be a genius (at least by his indulgent
grandparents) and will be hired by the next startup.
Post a comment