Table of Contents
Over one's education and career, a software developer learns many languages and their ecosystems.
I recently learned both Golang and Rust, and have spent the past three months writing them nearly full-time. Learning these modern languages and reflecting on ones I've used in the past has alerted me to the difference between a Software Development Language and the usual term we use, Programming Language. This post is the first of a series that describes this difference and analyses a few languages through this lens.
What is a Software Development Language and how is that different from a "Programming Language"?
When talking about a language, we could say that it's fast or slow, concise or verbose, mangled or pretty, beginner-friendly or plagued by a steep learning curve. We could comment about how Language A does
for loops this way, Language B does them that way, and Language C doesn't have them at all. But from the perspective of real-world Software Development, these points are nearly irrelevant.
Let's define a few terms to see why.
Programming is the manipulation of Ideas, followed by the encoding of that manipulation into a physical form (usually code) to be executed by a Computer.
For some broad definition of Idea and Computer. With this, the following are all programming:
And so would these be:
In this sense, the act of programming itself is available to everyone.
On the other hand, we have Software Development:
Software Development is the creation of software to be used over time. It is Programming followed by Testing, Collaborating, Releasing, and Maintenance.
With this, the following are Software Development activities:
All languages can be measured on a scale of how sharp a tool they are for the entire Five Pillared process of Software Development, not just programming. Particularly sharp languages have solid answers to these real concerns:
Naturally this list could be longer, but working software developers would likely agree with much of it. To contrast, how many of these points are relevant to students, researchers, and working scientists? This brings us to our main point:
Some languages are better suited for Software Development than others.
Should you write a multi-million line Operating System in Python? You could, but you shouldn't. Python has other strengths.
The same is true for working in research and for learning how to program in the first place. Should you write complex, high-performance physics simulations in Java? You could, but you shouldn't. Java has other strengths. Should you teach someone C++ as their first exposure to programming? You could (and many have been), but you shouldn't. C++ has other strengths.
They say that a good craftsman never blames his tools. This is true, but it's also important to recognize when you're trying to build a skyscraper with a hammer, or a bikeshed with a crane. Sometimes the tools are inappropriate for the task at hand. For Software Development, we should choose a sharp Software Development Language from our toolbox.
All Software Development Languages are Programming Languages, but the reverse is not true. With all this in mind, what sense is there really in debating the syntax of a
for loop? Or in writing the 1000th FooLang vs BarLang article? Or ranking the Top 100 Languages?
For me, I'll take a language that lets me create, share my creations, and keep my creations alive. Next week, we'll apply the above philosophies to Rust, and see how it measures as a Software Development Language.
If you liked the article, consider sending me a coffee!