Computing Applications

There is More Than One Way to Become a Good Programmer

Bertrand Meyer

Anyone who has been involved with ACM will agree that it is important to avoid giving a narrow ivory-tower image of our community, nowhere more so than in matters of education. George Neville-Neil’s attack on code academies in the December 2019 issue of Communications, dismissing this form of education without evidence, displays a condescension and lack of knowledge that can only make us look bad.

Code academies have sprung up in recent years to provide intensive training in programming and deliver software engineering talent to the industry. They vary in their form; while programs such as those of École 42 in France (42 Silicon Valley in the U.S.) extend over one or more years, most are much shorter. Mr. Neville-Neil wrongly states that they are focused on simple Web front-end building, but in reality they cover diverse areas of software engineering. The one with which I am involved as a scientific advisor, Zurich-based Propulsion Academy, currently has two three-month programs: Full-Stack Development (teaching the full chain of development for the Web from front-end to back-end) and Data Science. In the past couple of years, the programs have produced over 250 graduates, most of whom now have interesting developer jobs in industry.

What is most striking in Mr. Neville-Neil’s dismissal of code academies as nothing else than "a short-term, lower-risk way to find out if working in technology is the right fit" is its intolerance. Coding academies make no claims of replacing multi-year university computer science education; they simply fill a need left out by those institutions. When starting Propulsion, we looked at the projected demand for developers in Switzerland in the next decades (the trends are the same throughout Europe and the U.S.). We saw that there was no sustainable development path that would allow the existing institutions (federal and cantonal universities, technical "universities of applied sciences") to provide the needed software professionals. You cannot go from a couple thousand to tens of thousands in a few years, nor do you necessarily want to. Fulfilling these needs requires complementing traditional university curricula (which remain as useful as ever) with other approaches.

Why this snide, elitist tone ("I can think of no better analogy than the trade schools that used to be advertised on late-night television—the ones where you got a free toolkit after completing your certificate course in plumbing") and weasely insinuations ("they can be an entrance into the world of technology, which is fiscally rewarding")? (Fiscally rewarding? What is that supposed to mean beyond the sleaze?)

Elitism exists in two forms. One is selfish; to those who did not get into the one ideal path at the right time, it says: tough luck, my friend, I made it and you didn’t. I prefer the generous form of elitism, which accepts that not everyone will have the privilege of learning to program at Stanford (as I did, from Floyd, Knuth, and McCarthy) and doing a Ph.D. in software engineering, but that it does not need to be the end of the story. Different people follow different routes.

MOOCs (Massive Open Online Courses) are another example of an approach that has drawn, along with hype, much unjustified ire. They do not replace a university education either, but provide a remarkable addition to the available collection of educational tools. To learn programming, MOOCs do not suffice; many of the Propulsion students tried that route first, but to become a programmer almost everyone needs the repeated interaction with instructors and fellow students that only an intensive hands-on program with personal coaching can provide. (Universities, by the way, seldom provide such coaching, or do not provide enough of it. But it can make all the difference for the many students who need to be guided, particularly at the beginning.) Propulsion does take advantage of MOOCs to help students master some specialized topics and, when they initially apply, to support them in the "pre-work" which they have to submit for acceptance into the program. But MOOCs are only a complement to the core educational technique: hands-on teaching.

Good universities themselves accept that the 4- or 5-year model is not a panacea, since they usually offer extension courses (in Switzerland, "Master of Advanced Studies") for professionals.

Once you decide to keep an open mind and look into facts rather than stick with prejudices, some interesting observations come up. Three months seems a short time compared to 4 or 5 years, but those years are not spent on programming alone. In contrast, the three months of our programs are dedicated full-time to programming. When we were building up the Propulsion model, we examined how much time students spend doing actual programming over their five years in a famous, top-10 research university. For some who do not choose a system-oriented track, the answer can be: not that much. A traditional computer science program lets you choose many topics in the discipline, and you can graduate without writing much actual code past the obligatory introductory course.

Some computer science professors actually insist on keeping things this way. In a university CS department, we had interesting discussions with some theoretician colleagues when we tried to put in place a comprehensive exam for master students, including a significant programming assignment. They argued hard that this assignment should remain easy, to avoid penalizing theory-inclined students. While I was arguing for a challenging programming test, I respect their view: there is more to computer science than programming. But then let us not pretend that a university CS program is the one and only path to becoming a software engineer. For some CS students it is not a path to software engineering, and for some software engineers it is not the right path.

Three months of intensive programming is hardly negligible. One should see the Propulsion students work late at night implementing challenging projects (see an example among many of a project presentation here, by Evgeniya Tokareva). The high-nosed dismissal of code academies as two-bit operations ignores the inconvenient observation that there is more than one kind of programmer. As a professor, I want students to master concepts as well as skills, as analyzed in my "Software Engineering in the Academy" article (IEEE Computer, 2001, available here). With my industry hat on, however, I also know that there are excellent programmers out there who may not know the difference between PSPACE and EXPSPACE but still churn out efficient, well-structured and bug-free code day in and day out.

And, by the way, we academics in our great universities are ever so brilliant, but we have not been able to do much in 40 years towards attracting women to the field. Not for lack of concern: we tear our hair over the issue, develop elaborate theories, and publish paper after paper in Communications of the ACM about what it could be that turns away one half of humankind from our great endeavors. Code academies do less hair-tearing and do not typically publish scholarly papers on gender attitudes, but in Propulsion’s case the proportion of women so far is 33% and growing. Might you, dear ivory-tower colleagues, consider the remote possibility that code academies are not doing everything wrong?

Another reason why universities are not always able to provide the needed resources is that they often adapt more slowly than the pace of our industry would require. This hysteresis is in fact part of what makes universities valued: they are stable institutions, expected to show gravitas, and if they immediately integrated every new idea into their courses they would soon be accused of just teaching "the usual mélange of keywords" (Mr. Neville-Neil’s reproach to academies). For faster reaction, turn to code academies; indeed, they were the first to integrate many new techniques widely used in today’s software development world.

A presentation of the code academy concept as a competitor (inferior, of course) to universities is misleading in more ways. It might suggest that a school like Propulsion goes out in the street and dangles to unqualified 18-year-olds the prospect of becoming fatly paid software developers by bypassing university studies. That is not the approach. Many of the Propulsion students have degrees, sometimes advanced ones. These degrees are generally in other disciplines. (There is also the case of people with a CS/IT degree focused on old technologies no longer in demand.) The industry has an insatiable thirst for good developers, but in many other technical fields (and in IT with the wrong focus) you can study for many years and at the end find out that there are few interesting positions available. A code academy such as Propulsion offers those highly educated professionals the opportunity to acquire new skills that will gain them an exciting job. Such students are typically more mature (late twenties or thirties, or even older and coming with the benefit of a first career); they have acquired the general intellectual benefits of a quality university education, even in a different field; as a result, they learn programming quickly; and they definitely would not go back to school for five years to obtain a second degree! With the code academy programs, they reach a new level of professional development. Only at your own risk can you try to go and tell them, in Mr. Neville-Neil’s words, that this advanced education "effectively makes its holder a front-end plumber."

Such highly-qualified students are particularly typical of the more advanced of our programs, the mathematically demanding Data Science course. Not surprisingly, most students there already have a master’s degree or in many cases a Ph.D. They go through the program to acquire leading-edge expertise among the most in-demand by technology companies. We’ve also had the financial analyst who wanted to talk peer-to-peer to his IT colleagues, and the CEO who wanted to follow closely what his programmers were doing. Even the best university computer science program would not have accommodated them.

These are just some of the profiles. What is striking about the students is their diversity. Along with the Ph.D. in biology, we find the former musician and, yes, the occasional 17-year-old (our youngest so far). The secret is the emphasis on quality, particularly through extensive testing of students prior to admission. Not everyone can be a good programmer, but many people who can would never have even dreamed of it. Universities will work for some but not all.

For others — bright and ambitious people whose inner programmer selves are just waiting to come out — a code academy can be just the right catalyst.


Bertrand Meyer is chief technology officer of Eiffel Software (Goleta, CA), professor and provost at the Schaffhausen Institute of Technology (Switzerland), and head of the software engineering lab at Innopolis University (Russia).

Join the Discussion (0)

Become a Member or Sign In to Post a Comment

The Latest from CACM

Shape the Future of Computing

ACM encourages its members to take a direct hand in shaping the future of the association. There are more ways than ever to get involved.

Get Involved

Communications of the ACM (CACM) is now a fully Open Access publication.

By opening CACM to the world, we hope to increase engagement among the broader computer science community and encourage non-members to discover the rich resources ACM has to offer.

Learn More