The internet has led to a surge of professions that operate in a virtual world; among these being Software Development. Hearing the words "Software Developer" may cause you to imagine some sort of technology wizard who fixes any issue with a printer... Jokes aside, Software Development (Engineering) is a logical field created by humans.
We must not overlook the significance of a field that is created by humans; but we often do. Another field whose origin is overlooked is Math. In school, we are taught the basics of math (such as 2 + 2) up to Calculus and beyond. In contrast, most schools ignore the history of mathematics. When this occurs, it's easy to forget that every concept of math is built upon another concept that came before it; with the exception of the very basics that humans have agreed upon.
In a similar manner to math, every concept of software development is based upon another concept that came before it. Everything from flipping binary switches to managing clusters of servers has been defined by a human. The significance of this is that Software Development is less about magic, and more about telling a machine (configured by a human) what to do.
Computer Science is NOT Software Development
What is the difference between a computer scientist and a software developer? It's easy to conflate these two professions due to the fact that most programmers pursue Computer Science degrees. However, the focus of computer science lies on the science of computers, algorithms, and other computational systems. In contrast, software developers are concerned with building software that people use.
The computer scientist is a researcher who researches while the software developer provides solutions by implementing said research. Using construction as an analogy, the computer scientist is the one who creates stronger materials (i.e better bricks) for the software developer to build houses with. In other words, the computer scientist is a scientist while the software developer is a construction worker.
Most software developers are not focused on improving the efficiency of sorting algorithms. Instead, a majority of time is spent building code for hardware (embedded systems) and software (applications) components that other people need to power their businesses. When you want to meet up with a computer scientist, you visit a university. When you want to meet up with a software developer, you find a job.
The Importance of Math
A common fallacy among others is the idea that software development requires an understanding of math at a high level. This belief is prevalent because math is heavily involved in the invention and progression of Computer Science. Understanding of complex math topics may assist with developing better algorithms and data structures, but is this necessarily useful for a software developer?
Looking at the field practically, there IS a reason that having a high level of math helps you progress your programming career. Job interviews require you to solve competitive programming problems that are based on knowledge of the algorithms and data structures from the Computer Science field. As a result, a good grasp of math makes it easier to reason about these problems (which gatekeep the field).
A competitive programming problem is equivalent to a puzzle that can always be solved; usually in multiple ways. In contrast to a real world environment, a competitive programming problem will never receive nefarious input or deal with arbitrary failure states. It also won’t feature issues that are caused by scale (in practical environments). The solution to a competitive programming problem is often a theoretical application of an algorithm or data structure.
Companies use these problems on the basis that they eliminate bias from the interview process. However, the administration of these problems through humans simply adds bias to the process in different ways. Studies show that common interview formats for Software Developers are better testers of anxiety than knowledge. In any case, personal biases for race, gender, and age do not go away when an interviewer is interviewing someone else. This can be problematic for companies that use interviewers to judge the approach of the candidate's solution; especially when the interviewer is entirely wrong.
The significance of these factors can be recognized when you look at the way software developers prepare for interviews. If math was considerably important, you would imagine that programmers prepare by improving their mathematical skills. Instead, there is a billion dollar industry focused around solving competitive programming problems through pattern recognition (LeetCode). It doesn't help that most of the problems that companies administer require knowledge of algorithms which took years for historical figures to derive on their own; all while the candidate has less than an hour to find a solution to a problem they may have never seen.
The highest level of math you need to be a basic software engineer is Algebra, since it proves you can manage the complexity of using variables. This isn't to say that knowing higher levels of math won't be useful: A software engineer in the robotics industry may require an understanding of Physics which implies Calculus, etc. However, this is analogous to a Petroleum Software Engineer requiring an understanding on how the business performs its tasks.
Reading in Software Development
Reading and writing skills are important in the Software Engineering field since programming is used to communicate information. This includes mastery of a language (such as English) and its grammar. These liberal arts skills are used to understand the business case (value), communicate with coworkers, document algorithms (using comments), document APIs (for other programmers), document everything... We could go on.
Imagine a min-maxed person with a PhD in Math (who can't create readable code). The result is code that theoretically works and is hard to improve upon; since variables with names such as a, b, c, and d remain unclear. When this person has to debug their code, it will require an intense game of catch-up. In contrast, a min-maxed person with a PhD in English would be able to show the intentions of their code, regardless of whether it works or not. Who would you want to work with in a rewrite?
As they say, the two hardest things in programming are caching and naming variables.
In any case, programmers who maintain poor reading and/or communication skills are NOT at a practical disadvantage. Studies have shown that completing technical problems in a Software Developer interview is the most important factor on determining whether one receives the job. In other words, failing a technical interview will eliminate your opportunity for a job; while poor communication will not. This is an issue because technical interviews assess skill in Computer Science rather than Software Development.
To reiterate, companies are selecting Computer Scientists (researchers) over Software Developers to build applications. This has led to a host of issues in the programming environment. As an example, there are numerous tales of monstrous codebases that need to be rewritten when clients inevitably require changes to their software. Unfortunately, this is not a surprise when you realize that maintainability is not selected for at all in the competitive programming interview process.
A Realistic View of Programming
Modern software development is performed using a programming language or visual editor. The most valuable software development applications are the work of many people; both inside and outside the company. In any case, the number one factor in a tool's legitimacy is its documentation; which requires writing and reading skills. A tool without documentation will cease to exist in the minds of most programmers.
Some of the most infamous programmers are those that have created a programming language. Others are known for the applications that provide vast amounts of technical value. Neither of these things require a high skill level in math. Is an understanding of math important to the underlying principles (Computer Science) of Software Development? Yes. However, we must not allow the misinterpretation of math's importance on programming to affect a person’s decision to pursue the field; or gatekeep others from doing so. Otherwise, we risk losing valuable ideas which push the field further.