開源日報 每天推薦一個 GitHub 優質開源項目和一篇精選英文科技或編程文章原文,堅持閱讀《開源日報》,保持每日學習的好習慣。
今日推薦開源項目:《從零開始的編譯器 acwj》
今日推薦英文原文:《Do You Need Math to Be a Software Engineer?》
開源日報第667期:《從零開始的編譯器 acwj》
今日推薦開源項目:《從零開始的編譯器 acwj》傳送門:GitHub鏈接
推薦理由:這個項目記錄了作者自己編寫編譯器的過程。要弄清一個玩意是怎麼回事,自己造出來是一個很好的辦法,不管是拿來使用還是僅供學習參考,都能對其中玄妙有更深入的理解,如果的確對「其然」背後的「其所以然」感興趣,不妨自己動手嘗試一下。
今日推薦英文原文:《Do You Need Math to Be a Software Engineer?》作者:Devin Soni
原文鏈接:https://medium.com/better-programming/do-you-need-math-to-be-a-software-engineer-26694a11f7ea
推薦理由:並非雪中送炭,而是錦上添花

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).

Working on these types of projects will require you to be familiar with languages such as Java, JavaScript, Python, C#, and Go, and query languages such as SQL dialects.

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.
下載開源日報APP:https://openingsource.org/2579/
加入我們:https://openingsource.org/about/join/
關注我們:https://openingsource.org/about/love/