Pretty much all the major programming languages have a way or another for creating abstractions and for a good reason. They enable programmers to deal with programs in the same way as engineers deal with large designs: design and build larger parts from smaller parts and reuse those in even larger parts. Abstractions let programmer to trade details for a chunked, large scale, view of part of the software.
Different languages have different capabilities for creating abstractions. When I started programming BASIC with SVI-728, abstractions were limited to subroutines that shared global variables and user defined functions that could return a single value. Building any meaningful abstractions was hard and most programs I wrote were just tangled mess of code.
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.