今日推荐英文原文：《Do You Need Math to Be a Software Engineer?》
今日推荐英文原文：《Do You Need Math to Be a Software Engineer?》作者：Devin Soni
Do You Need Math to Be a Software Engineer?
In most cases, no, but it can help
What Do Software Engineers Do?To understand the relationship between math and software engineering, it is first important to understand what the average software engineer actually does.
Most engineers end up working on web or business applications, either on the front end or back end (or both).
Within these languages, you will need to learn to use frameworks and libraries that enable you to quickly develop applications, such as React, Angular, Express, Django, and Spring.
Beyond this, you may need to learn things on the operations side of development, such as containerization products like Docker and Kubernetes, as well as how to use various cloud computing platforms such as Amazon Web Services or Google Cloud Platform.
Where’s the Math?While it may sound daunting to learn all of these software engineering topics, the important thing to note is that none of these directly relate to math. While they may have theoretical roots in mathematical fields, none of them require you to know math to become proficient.
Most of the required knowledge for these technologies is self-contained, and will not require you to draw from theoretical content taught in university-level courses.
Even most computer science courses will only marginally help you to understand these technologies. They may give you background knowledge on their design and how they are implemented, but they rarely give you actionable knowledge on how to use them in practice.
With that being said, basic math concepts and abilities will still be relevant in most software engineering jobs (and even in most office jobs in general). None of these require any formal education in math, and can be easily learned through the internet.
These basic abilities and concepts include:
- Being able to make quick ballpark estimations (such as in Fermi problems) to estimate costs and system loads.
- Having a basic understanding of probability and statistics to make data-driven decisions (such as with A/B testing) and do basic data analysis to analyze results.
- Intuitive understanding of logic to write correct code and understand conditions written by others.
- Basic understanding of asymptotic analysis to ballpark the complexity of the code that you write, and steer yourself towards efficient solutions.
But Does Math Help?Even though math is not required for most software engineering tasks, it certainly will not hurt you to have a background in math.
While there may not be much directly transferable information between math classes and typical software engineering activities, the process of learning and doing math helps you build important problem-solving skills.
Fundamentally, software engineering involves solving problems by writing code and designing software systems. Similarly, math, particularly proof-based math, involves solving problems by writing a series of correct statements in mathematical language.
At a high level, both of these activities involve translating logic and facts into some kind of expressed language. And in both situations, logical consistency and correctness are of the utmost importance.
However, this is not unique to math. Many other fields, such as philosophy, and other STEM fields such as physics, also involve similar skills. Even other activities, such as playing certain video games or solving puzzles, require similar logic and problem-solving skills.
Math is only one of many activities that allow software engineers to build up their critical thinking skills outside of programming.
What if I Want to Use Math?Even though most sub-fields of software engineering do not directly use math, there certainly are some that do.
These include fields like machine learning, graphics, game development, robotics, and programming language development.
In these fields, you will work directly with tasks that require knowledge from math topics such as calculus, linear algebra, graph theory, probability, statistics, logic, and various discrete math topics.
However, even in math-heavy fields, it is rare to be directly translating math into code without using a library as an intermediary.
These libraries, such as the differentiable programming library TensorFlow, used primarily for neural networks, abstract away basic operations and let the programmer focus more on higher-level concepts.
As an engineer working with such a library, you will not have to write the code to carry out gradient descent, for example. You would only have to specify the architecture of your network along with how you want to train it.
So, even in these fields, you can still participate without knowing the specifics of all the underlying math. Oftentimes, just knowing the concepts and how to apply them is enough to be productive and useful in your job.