Today I read the great article Are we really engineers? which reminded me about the difference I make between Coder and Developer which in turn made me reflect the question of When do students become Developers?
To me, a Coder is someone, who… codes. It is all about cracking out many lines of code and about getting stuff done without too much thinking about architecture and code design. A Developer on the other hand codes but puts also a lot of thought and hard work into architecture and code design. I don’t want to start a flamewar over these exact definitions - I know people call themselves Coders and are what I call Developers and vice versa; that is not my point, I just needed two names to distinguish between these two kinds of archetypes.
Now it seems that in recent years the demand for what I call Coders has gone up substantially which is directly reflected in the education programmes offered: there are a huge number of coding schools both online and also local (real) ones, competing for students. What they teach is coding (it sounds so much cooler than programming, doesn’t it?) in a hip language such as Python.
In my opinion the increasing demand has two reasons:
- The AI hype in the few last years seems to have caused the impression that everyone has to learn how to code because then everyone has the power of AI at their fingertips which will ultimately magically solve all of mankinds problems.
- The industry longs for cheap and readily available workforce to satisfy the AI hype and also simply do the coding of whatever solutions.
This reminds me of a quote attributed to the great Edsger Dijkstra: Industry suffers from the managerial dogma that for the sake of stability and continuity, the company should be independent of the competence of individual employees. Hence industry rejects any methodological proposal that can be viewed as making intellectual demands on their workers.
This is, of course wishful thinking, which would fail horribly - at least for Software Engineering (SE). When we regard SE as a learning process, where the shared learning of a team is a core investment, then striving for cheap workforce which can be easily replaced is not going to work. Yes, there are problems which can be solved by cheap workforce “Coders” but they are (hopefully) not your core domain - these problems can be solved by tools / 3rd party frameworks / libraries, outsourced or even implemented by AI ;)
Now contrast this with a “formal” bachelor computer science degree. Coding is basically what students learn in the first 2-3 semesters - therefore, after 2-3 semesters we can regard students as Coders. However in a real CS degree students must not stop there and in the remaining 3-4 semesters they have to make the step towards Developers. Why? Because a proper CS education is more than coding, it is in the end all about concepts and abstractions. Coding is merely a means to an end to explore and express these fundamental concepts and abstractions: architectures, tactical (code) design, design patterns, cohesion, coupling,… Therfore, coding is just a means to an end but it is certainly not a means to an end in itself.
Generally, the tremendously important initiation rite from Coder to Developer happens in the 3rd or 4th semester in a larger SE project where students develop a non-trivial (web-based) business solution for a fake customer in groups of around 5 people. It is there, where they are subjected to proper code design such as DDD, design patterns, various architectures, all within a proper (agile) development process with proper treatment of requirements (User Stories,…). Although what students learn in this initiation rite is only a tip of the iceberg, of which they will explore much more when they finally start working in the industry, it is this very first exposure which causes an everlasting change in their thinking and approach to writing software.
Just as every disruptive initiaton rite, it has a deeply transformative effect, changing the student From Coder to Developer.