29 November 2011

The Falacy of Very High Level Languages

During my career as a systems programmer, I interviewed hundreds of candidates and was intimately involved with dozens of development projects, from one man teams to teams of hundreds, writing in binary, assembler, C, and various "high" level languages, and a few very high level languages,.  Over the course of all of this one of the things I realized was that language tools, such as big libraries, extremely high levels of abstraction, object orientation, and quite a few other "tools" are at best crutches, which can actually get in the way of solving the problem.  During the 70s and 80s, a bunch of people noticed that developers writing in assembler had a much higher success rate than developers working in BASIC or several other high level languages.  Without thinking very carefully, they blamed the particular high level language--for example, lack of structured programming tools.  But that's not the problem.

I spent quite a bit of time thinking about this.  What's happening, I think, is that the various tools promote barriers to entry.


On this chart, every programmer/development environment has a point.  A poor programmer is toward (or off) the bottom, better ones toward the top.   Working in a lower level language puts you toward the left, higher level toward the right, as exemplified by a few languages listed across the top.    As everybody knows, working in a lower level language makes it harder to get a program working than in a higher level language.  I think there are actually two thresholds at work.  The lower threshold, the lower, blue line, is the "can get it limping" level.  If you're below that level, you'll never get anything to work at all.  As you can see, a lot more programmers can get something going at the higher level languages than at the lower level.

The higher, red line, is the "good program" level.  If a programmer is working below the red line, they'll never produce something good.  The red line is at a very shallow slope for a simple reason:  The things that make a good program--critical thinking and analysis, memory, good planning, deep grasp of the problem and effective use of approaches to solving it--are largely independent of programming language or style.   If your thinking is muddled, you won't do a good job, irrespective of language, tools, design approach, or whatever.

The key, and the reason the "best" programmers seemed to be working in the hardest language, is that assembler provides such a high barrier to getting anything working at all that most of the muddled thinkers can't ever get anything that even looks like it's working.  There's not much space between the red and blue lines when you're working in assembler.   The lower level languages allow more programmers to look like they're producing something useful, while not actually doing much.  90% of the productive work is done by the 5 or 10% that are above the red line.

Up until about 1990, a programmer's ability to work in assembler was a pretty good calibration of their overall competence.   A good assembler programmer working in a higher level language would simply be more productive.  But after that time, astonishingly few professional programmers really understood the machine.  By 1997, it was rare to find a entry level candidate for an operating systems team that had more than a smattering of assembly experience.  And the higher level languages allow a lot more muddled thinkers into the process.  In the 70s and 80s, we couldn't tolerate much muddled code into the final product--there was some, but memory and disk space was too precious.  Nowadays, nobody seems to care.  The muddled thinking--and remember that with today's very high level languages, which functionally consist of gluing libraries together, that's an extremely high percentage--becomes a very high percentage of the shipping project.  One consequence of this is that you must download and install 700MB to update your telephone.  If all the programmers involved were working above the red line, it would probably be about 20MB.

04 November 2011

Job Creators and Tax Cuts for the Rich

The republicans tell us that if we increase taxes for rich people, we will be impacting job creators.  Who are these "Job Creators"?  We're told that most of these are small businesses.  This is wrong in quite a few ways.  Here's the official data from the small business administration for 2008.

the first few lines:
size of firmsFirmsEstablishmentsEmployment Payroll ($1,000)
Total 5,930,1327,601,169 120,903,551 5,130,509,178
0-43,617,7643,624,6146,086,291232,062,907
5-9 1,044,0651,056,9476,878,051 222,504,912
10-14 418,270435,3924,892,838 166,372,257
15-19 214,871232,071 3,604,553 127,162,095

You will notice that even though businesses with fewer than 20 employees are about 90% of all businesses, it's only 17% of all employees.    So while it's true that there are a lot of small businesses, the majority of them are tiny.   If these magic tax cuts managed to create 10% more employment in this sector, this is only 2 million jobs.  But this is totally implausible.  The average employment in this sector is 4 employees.  To add a single employee is a 25% increase, and for almost 3/4ths of them a 50% increase or more.  How is a 4.6% tax rate cut going to generate enough extra revenue for these businesses to increase payroll 25 or 50%?

The premise that lowering the individual tax rate affects small business hiring is that over 60% of businesses are S-Corporations, meaning that the business doesn't pay corporate income taxes, but passes revenue on to the owner where it is taxed as income.  There are a few S Corps that are bigger than 5 employees, but very few.  For over 90% of all jobs, a change in the personal income tax rate of their employer has zero effect on how the business is taxed.

The Bush tax cuts had two parts.  For incomes under around $350K, all tax brackets were reduced by 3%, while the top bracket was reduced by 4.6%.  Then capital gains, which had been taxed at 28%, and dividends, which had been taxed as ordinary income, were reduced to 15%.   So who is mostly affected by the Bush tax cuts?  Everybody took 3% from their ordinary income under $350K. In 2007, just over 1 million people (of the 140M filers) were affected by the cut to the top marginal tax rate and they had a cumulative AGI of about $2T.    Those with incomes under $100K had on average less than 1% of their income as dividends and capital gains, while those with incomes of a $million or more had almost half of their income in these things.

So who is it who benefits from the cuts?  Basically three groups:  The savings from the ordinary rates are small, but real.  If you're making the median $50K, after exemptions and deductions, those 3% are under $1K.  If you got a salary of a $million, you got about $40K. If you made a profit selling your house, you may have had a big capital gains windfall.  During the bubble, lots of people did.  But the real beneficiaries are people who invest in the equity markets: stocks, bonds, commodities and so forth.  If you make most of your income this way, and among $million earners, that's most of them, your tax rate roughly halved.

So to our big point: does any of this create jobs?  Well, an executive or lawyer who brings in an extra $10K because of these cuts might be able to have a little extra work done: some gardening, a nanny or such.  Per person this is not much, but together, a few of these people add up to an extra job.  The extra home sales definitely created a market for realtors.  It wasn't what caused the housing bubble, but the low capital gains rate surely added a small amount of lift to it.  But the big thing is the equity markets.  These things create very few jobs.  The way they're supposed to work is to provide an incentive to invest in new businesses.  That does create jobs.  But once the IPO is done, the only work that's generated is for stockbrokers.  It creates nothing, and removes money from the "real" economy.  During the downturn, there have been very, very few IPOs. 

The bottom line here is that tax cuts for the rich have almost no effect on job creation.  Not zero, but certainly not enough to justify undermining other types of government job creation.