To me, it seems that this has become necessary. While we may not need a traditional labor union, the people who build software need collective backing in order to defeat harmful/unethical business practices (e.g. non-competes, exploding offers, stack ranking, back channel references) and establish for ourselves the credibility and strength that we deserve.
We’re decently well-paid during venture-funded bubbles (1996-2000, 2011-2017ish) but abandoned as soon as the economy goes soft. In addition, even when we are well paid, we are not respected. We’ve let our industry be flooded with open-plan commodity programmers, we’ve been humiliated with insulting micromanagement frameworks like “Scrum”, and we’ve accepted a sexist, classist, and ageist exclusionary culture deliberately intended to divide us and prevent collective organization. The age discrimination is especially cruel when one considers that it takes at least 10 years of experience to get good at what we do.
How do we solve this? It’s obvious that we need professional structures to define who is and is not a programmer. We can’t be competing for jobs with 17-year-olds who read half a book on how to build websites and who’ll work for $15 per hour. That’s a losing proposition. There is always someone who will suffer more. We need strong professional bodies that protect our credibility, collectively and as individuals. Finally, we need collective negotiation of terms that are embarrassing for individuals to broach with employers: accommodation of disabilities (a major issue in the open-plan world) and the abolition of non-competes and the right of every programmer to have an independent advocate present during performance appraisals and, in the rare and unfortunate case when it becomes necessary, all interactions with management (at the employee’s discretion).
To me, the most compelling model is an exam-based meritocracy like the SOA and CAS (actuarial societies) use. (I’d be supportive of project-based evaluations for people of obvious talent who have learning disabilities that interfere with exam-taking.) This allows us to ensure the credibility of the individual member, by establishing a person as legibly not a commodity-grade non-programming programmer, and therefore prevent the extortions (e.g. threat of negative reference) that leave the individual programmer powerless. It is also a starting point in the direction of mobilizing around our interests, so that we can do useful things with our talents: curing cancer or moving to a post-oil economy, instead of helping rich psychopaths unemploy people. If we get this right, we can actually have ourselves working for the betterment of society, instead of selling our talents to one vapid startup after another.
As far as I can see it, the first step is to design a core curriculum for the exam system, just as the actuaries have done. (There would be no required coursework per se. It would be an exam-based system and people could use whatever resources, whether those be MOOCs or books read on their own time, to learn the material.) It would cover computer science (AI, compilers, OSes, distributed systems, databases, programming languages), software engineering (security, production systems, project management), mathematics (logic, cryptography, theory of computation, statistics). I’d also include courses on EE, physics, economics, design, and most importantly of all, ethics (removing scarcities instead of creating them, what we can and cannot say to non-programmers/outsiders about a colleague’s work performance, how not to be divided when outsiders try to pit us against each other). The ethics training is especially important because I think it’s necessary to deny talent to those who do evil (e.g. employee monitoring software) and to those who work to create scarcity instead of eliminate it.
The three major questions coming to my mind are as follows:
I don’t know the answers to these questions. I do know that if we put our heads in the sand and let our work be commoditized, we’re signing up for a half-century of mediocrity (Scrum) and declining wages and work conditions. It’s become obvious to me that we need some collective organization around our profession. An exam-based meritocracy seems like a great starting point, because right now we don’t even have a good definition of who is and who is not a programmer.