previous article

Should Engineers Really be Judged by Their Resume Writing Skills?

- Assess
- Published on

*This article was originally published on Forbes
*

If you dig deep into today’s discourse on the role of mathematics in programming, you’ll find a sharp, double-edged sword.

On the one hand, people often say that because the number of app development tools are growing, you don’t necessarily need to be great at math to write software today. Amidst a widespread shortage of traditional programming talent, numerous opinion pieces, video interviews with educators and forum questions point to answers that are positioned to ease the apprehension of people exploring the field. And it’s true. Chances are, the average software engineer is not going to need Calculus while coding apps in Ruby on Rails. If you look at any given job requirement, you’d be hard pressed to find probability or number theory next to Java or C++ skills.

Since computer science is a nascent field that sprouted out of mathematic departments, there’s a cultural push to untie the historical link between advanced math and programming that could partially deter engineers from entering the field. For instance, there are literally half a dozen recent articles titled with something like:

But is downplaying the importance of math a sustainable message for future generations of engineers?

On the other hand, software development is quickly shapeshifting. If you discount mathematics, and in turn focus on learning transitory programming tools, you’ll be left without the skills necessary to adapt to emerging computer science concepts that have already started infiltrating engineering teams today. Without expanding mathematical knowledge, these software engineers are going to risk being left out of the most exciting, creative engineering jobs of the rapidly approaching future.

**Math is a Veiled Pillar**

The reality is that even though most programmers today don’t need to know advanced mathematics to be good software developers, math is still a fundamental pillar of both computer science and software development. Programming is just one tool in a computer scientist’s toolkit—a means to an end. It’s hard to draw definitive lines between disciplines, but here’s an attempt at an eagle-eye view of computer science as a field to build a bigger picture:

At its core, computers are centered on the mathematical concept of logic. Fundamental math that you learn in high school or middle school, like linear algebra, boolean logic, graph theory, inevitably shows up in daily programming. Here are 10 examples of times when you might need mathematics in real-world programming today:

**Number theory.**If you’re ever asked how one algorithm or data structure performs over another, you’ll need a solid grasp of number theory to make that analysis.**Graphing.**If you’re programming for user interface, basic geometry, like graphing, is an essential skill.**Geometry.**If you’re creating a mobile app and you need to create custom bounce animations that are modeled on springs, you’ll need geometry skills.**Basic Algebra.**If your boss asks you: How much user retention can we expect to grow next month if we increase the performance of our backend by 20%? This is a pure variable equation.**Single Variable Calculus.**These days FinTech firms like Jane Street are among the most sought-after companies for programmers because they pay well and have interesting challenges. You need to be able to analyze financial parameters to make crucial predictions to get these coveted jobs.**Statistics.**If you’re working at a startup and you need to A/B test different elements on a website, you might be tapped to understand normal distribution, confidence intervals, variation and standard deviation to see how well your code change is performing.**Linear Algebra.**Anytime you have image processing problems, recommendation engines (like Google’s PageRank or Netflix’s recommendation list), you need linear algebra skills.**Probability.**When you’re debugging or testing, you’ll need a solid understanding of probability to make randomized sequences reproducible.**Big-O.**If your company’s expanding to a brand new region, and you don’t understand the implications of a O(N^2) sorting algorithm, you could be pinged at odd hours because the expansion introduced holes in the algorithm.**Optimization.**Generally, anytime you need to make something run faster or perform better, you should be able to know how to get the minimum and maximum value of a function.

We’re far beyond the point of needing engineers to code simple solutions. Engineering teams at enterprises and—especially—startups have to earn the leading edge. They rely

on engineering and product teams to gain competitive advantage by investing in emerging concepts like Big Data manipulation, handle high-scale systems and predictive modeling. And they all require a solid framework of mathematics.

It’s not uncommon to hear refutations like: *I’ve been a software engineer for 15 years and never used advanced mathematics on the job. *But are we all really still going to be coding web and mobile apps 10 years from now?

**Those Who Incrementally Exercise Mathematics Skills Will Get the Coolest Jobs**

In the beginning of this piece, we considered why many educators and experts might be downplaying the importance of math in daily programming to encourage more engineers to enter the field. In order to meet the demand for engineering talent in the next 5 to 10 years, it’s clear that we need to take steps to encourage more peopleof diverse backgrounds to join the field. The BLS reportsthat computing and mathematics will make up more than half of the projected growth of annual STEM job openings between 2010 – 2020.

But this message of *“you don’t have to be good at math to program”* is actually fueling a self-destructive myth that’s baked into our culture today, which is: Math skills can’t be acquired: You’re either born with it or you’re not. This myth persists for at least two reasons:

One, Professors Miles Kimball and assistant professor Noah Smith have taught math for many years and say: “people’s belief that math ability can’t change becomes a self-fulfilling prophecy.” Consistently saying that you’re “not a math person” means you won’t be a math person.

Two, people perceive mathematical fields as dry and uncreative. It goes back to the oversimplification of the dichotomy between the “left brain” humanities and “right brain” STEM subjects. People who want to be more creative have more reasons to distance themselves from math.

A better way to attract more people to the field is by talking about the interesting, creative jobs that are taking over the future of software development.

In the next 10 years, software engineers aren’t still going to be limited to programming web and mobile apps. They’ll be working on writing mainstream computer vision and virtual reality apps, working with interesting cryptographic algorithms for security and building amazing self-learning products using machine learning. You can’t go very far in any of these fields without a solid mathematical foundation.

As the field of computer science is expanding, companies are going to be able to take advantage of more complex math to build software technology. Dr. Ann Irvine, principal data scientist at security software companyRedOwl, always looks for strong intuition on how to work with large datasets. And math happens to be inherently tied to this skill.

“It’s largely enabled by the fact that lots of modern computer algorithms, especially in machine learning, take advantage of very large data sets, so that enables the use of more complex mathematical models.” – Principal Data Scientist Ann Irvine, PhD

As it stands today, you don’t need much beyond basic algebra and geometry for software development in general. But software development of the future will be made up of highly specialized subfields of CS. Here’s a chart that illustrates just how fast these futuristic technologies are shifting toward the mainstream consumer market. The first row talks about the market opportunity in the next 4 years, the second row highlights the adoption rate and the final row is an indication of the job demand today:

**Focus on the Fundamentals Because Technology Will Pass Anyway**

*“The most valuable acquisitions in a scientific or technical education are the general-purpose mental tools which remain serviceable for a lifetime.” – George Forsythe, the founder of Stanford’s computer science engineering department.*

It’s far more empowering to talk about the importance of skills that serve you for a lifetime rather than the demand for short-term tools today. Math is an unshakeable force in programming. The core concept of breaking down problems, abstractions and finding solutions using formal formulas will never change.

**In fact, academia is susceptible to a massive, inherent failure in being able to keep up with the ever changing tools that industries demand. Hisham H. Muhammad is a computer science PhD and illustrates the argument perfectly in this Tweet below. It’s interesting to contrast the years in which Hisham studied computer science between 1994-2000 with the years at which the technologies mentioned started taking off:**

I felt like saying this. pic.twitter.com/mHJ1rENoX1

— Hisham (@hisham_hm) December 13, 2015

There’s such an emphasis on branches of programming language and tools today that it’s easy to miss the bigger forrest. It’s better to start practicing now while there’s no significant pressure to apply advanced concepts to your work…yet. Even if it’s by solving one mathematical problem a day, you’ll be so much better equipped with tools to solve much more interesting problems down the line. Let’s stop separating math from programming for short-term relief and, instead, focus on fundamental, unchanging truths with which we’ll engineer the future.

**Resources to Help Boost Confidence in Math:**

- Forget what you learned in school (memorizing theorems or trig identities won’t help you). Instead, learn to recognize problems and choose the right formula.

- Read great books:
*Art of Problem So**l**ving**Mathematics for Computer Science (**free eBook**)**Godel Escher Bach**(**free eBook**)*

- Supplement these books with hands-on challenges:

Great article! Thank you -> got me thinking)

Humanities are considered “right brain” and STEM subjects are considered “left brain”, not the opposite.

It’s great to read something that’s both enjoyable and provides prsdmatiagc solutions.

It’s a pleasure to find someone who can think so clearly

NoSQL was NOT invented in 1998. It goes much farther back then that. Commercial products like ObjectStore and Gemstone NoSQL databases have been in use since the early 90’s. I think the Bell companies had a key/value store as far back as the early 80’s. Then there is the primitive key/value database all real Unix systems come with. I had one on an AT&T 3B2 in 1985.

The main problem with math is how poorly it is taught in secondary school. This turns off millions from the subject every year, but then our ruined educational system is another topic all together. High School algebra is a hodge podge of techniques, many of which are unrelated and really isn’t an ‘algebra’ at all. Calculus, Linear Algebra, and Differential Equations are the highway to engineering success are much easier to learn because they are unified subjects.

I know!! Lotus Notes, a document-based NoSQL database was released in the 80s…

I agree with the author, but the fact is that most employers only care that an applicant know SomeStupidAPI 2.5.8 (oh, version 2.5.7 is not good enough).

“But this message of “you don’t have to be good at math to program” is actually fueling a self-destructive myth that’s baked into our culture today, which is: Math skills can’t be acquired”

Needing something has zero relation on being able to acquire a skill.

“Two, people perceive mathematical fields as dry and uncreative.”

Making it mandatory and shoving it down people’s throats does not make it any cooler.

Sure, very qualified people with deep understanding of maths are needed. Most people don’t need it, and never will. If they learn today’s tools they can get the job done. When the tech changes, they will learn the new tools and get the job done. If they ever want to get the best payed, most interesting and coolest jobs they will learn maths. Making it mandatory is not going to help anyone, in either the short or long term.

For the latest and perhaps most idiotic of these anti-math screeds, see http://www.acodersjourney.com/2016/05/worst-programming-interview-question-ever/

Disclaimer: I am not the part of you do not need math or it is not worth it brigade. I know the value of math skills thanks to my interest in some of the fields above and I am working hard to acquire more than what is mentioned in the post.

Overall a nice article but there are a few things that are just plain wrong or misleading. As mentioned above CS != Programming so is the case with the jobs in the industry. Most jobs are and WILL BE programming jobs even in specialized fields like AI and CV. The reason is simple : The industry does not work at that low level. There is a library for everything. Do you see how simple it is to play with neural nets with tensor flow? Do you code up classifiers yourself or use sklearn? Here is what Peter Norvig has to say about the same https://www.quora.com/How-do-I-train-myself-to-transition-from-a-career-in-software-engineering-to-AI/answer/Peter-Norvig?srid=XRPd

So, Yes math is important and it is must to go into a certain depth if one is looking to work on cool tech but the fact that an average joe programmer (even after a few years) will need master Convex Optimization is something that is not true. Also, the world will continue developing Apps (one platform or the other maybe AR, VR).

Other than the above a great article specially the point that fundamentals will always be important.

Number theory to analyse runtime of algorithms? You must be kidding.