I have been tinkering with programming languages a lot recently and have started wondering about ergonomics of them. Usually comparison of languages tend to focus on technical side: what kind of paradigm does it permit, what kind of code structures are common and if there’s some particular areas the language shines. Sometimes we talk how easy it is to write certain things with a specific language. But at least I haven’t specifically spend time on pondering about ergonomics of a given language.
But what is ergonomics? International Ergonomics Association (IEA) defines ergonomics as:
Ergonomics (or human factors) is the scientific discipline concerned with the understanding of interactions among humans and other elements of a system, and the profession that applies theory, principles, data and methods to design in order to optimize human well-being and overall system performance.
That sounds like a really broad area to cover. A System can be a lot of things, from a hammer to a very complicated tool. Wikipedia gives us a hand and offers division to three main categories: physical, cognitive and organizational.
On a first sight, physical domain doesn’t have much to do with programming languages. One tends to think of things like sitting posture, lighting conditions, ambient sounds and such when physical domain is mentioned. Interacting with computer languages is most often done with keyboard and mouse, so physical ergonomics most often means how programmer is interfacing with the computer in general. But some languages may use special characters, that are harder to type than the characters normally typed on keyboard. This might cause physical stress and thus directly maps into domain of ergonomy.
Cognitive domain encompasses things related to mental processes: reasoning, memory, perception and so on. Wikipedia also mentions things like mental workload, decision-making and skilled performance. This seems to be most relevant area of ergonomics when talking about programming languages and as a result the area that has garnered most interest. This is what people refer to when they’re talking about types, abstractions and data structures.
Last area, organizational ergonomics, is about organizational structures, policies, and processes. Things like communication, teamwork and cooperative work seem relevant in here. While this part seems to have the least to do with computer languages, I have a hunch that this would be the most interesting one to research and improve upon. After all, programming a big system is all about cooperative work and working towards a common goal. So a language that has been designed this in mind should offer big gains to the organization using it.
Other things than just the language factors in on the ergonomics of programming. In my opinion, tooling has at least as big effect as the language. With proper tools, writing and maintaining a program is much more effortless than if one is forced to use poor tools or they’re non-existent. This is why I’ll mention them from time to time, even if tooling isn’t exactly part of a programming language.
Trying to tackle everything in a one post would be impossible. Firstly, it would take me ages and ages to write and I wouldn’t ever manage to finish it. Most likely I would give up after some time and never come back to it. Secondly, I suspect that as I dig into the subject, I’ll keep learning. And learning would mean going back to already written parts and rewriting them to reflect the new knowledge. I think it’s better just to chronicle what I think at current time and maybe come back to the subject later and update it on another post. So this hopefully will be an ongoing series of postings that I keep doing as I dig into ergonomics and usability of programming languages. Consider this as a preface of an unfinished digital book.