Software engineering applies the principles of engineering to the problem of software development
Whether you’re new to the job market or simply contemplating the next steps in your career, the field of computer science can be a bit of a maze to navigate, filled with twists and turns. It seems like as the tech sector continues to grow, entire professions emerge out of thin air, or duties that used to be the province of one profession have grown to be a regular expectation in another.
Today, we’ll take a look at the fields of software engineering (an older, more traditional tech profession) and machine learning (the word that seems to be on everybody’s lips these days). We’ll define each field according to their traditional boundaries, identify key differences between them, and then finally look at the places where the two fields intersect and overlap.
What is Software Engineering?
In the simplest possible terms, software engineering applies the principles of engineering to the problem of software development. This involves work on front end development, back end development, databases, infrastructure, and more.
A consummate generalist, the software engineer develops a working library of programming languages and the wherewithal to know when and how to apply each language when appropriate. A software engineer might work with Java on one project, then turn around and use Golang for another, then turn around yet again and implement a database using SQL.
That means that the value of a software engineer is tied not only to the number of languages they’ve mastered, but also their ability to use those languages to achieve their goals.
In general, a software engineer develops software according to the Software Development Life Cycle (or SDLC), which is a continuous, cyclical process for implementing and refining software. Common variations of the SDLC include the Agile and Waterfall processes for software development.
What is Machine Learning?
Put simply, machine learning seeks to harness the processing power of computers to find non-obvious patterns in large amounts of data.
A machine learning professional works to develop machine learning algorithms, either supervised (where the machine is being “told” what to look for through a training data set) or unsupervised (where the machine is finding patterns in data without being told specifically what to look for).
In the case of “deep” learning, the machine learning professional deploys a layered neural network composed of distinct algorithmic “neurons” to process large amounts of data.
In practice, most machine learning professionals today use Python, specifically the scikit-learn, PyTorch, Tensorflow, and Keras libraries. These libraries are constantly being updated and improved, so machine learning has tended to get easier over time, so much so that the scikit-learn library can deploy a fully functional machine learning algorithm in as few as ten lines of code.
This means that the machine learning professional’s job is to determine what kind of algorithm (logistic regression, random forest, K Nearest Neighbors, etc.) is most appropriate to the situation at hand and to clean the data such that the algorithm can run with minimal distortion.
Now that we have a clearer understanding of what software engineering and machine learning are, we can observe some of the key differences between them.
Generally, software engineering is a much broader domain than machine learning, involving a larger variety of skills, languages, and processes.
In addition, software engineering involves a more direct approach than machine learning. A software engineer takes a given application from its conceptual stages all the way through its implementation in code, then also takes on the task of updating and debugging software throughout its lifecycle.
If you’re someone who likes to have a game plan from start to finish, rather than improvising on the fly, software engineering may be a better fit for you than a career in machine learning.
By comparison, a machine learning professional has much of their work done for them by the machine learning algorithm; they set up the parameters for an algorithm to produce results, but they are not involved in manually identifying the patterns in massive amounts of data.
As such, a machine learning professional may need to work with data scientists to interpret the patterns a machine learning algorithm discovers, so that the algorithm doesn’t function as a “black box” of sorts, identifying patterns that no human can interpret meaningfully.
Here, we encounter a key difference between software engineering and machine learning. Since a machine learning algorithm can, in theory, detect patterns that no individual human could, it can garner insights from a dataset that would never be obvious to an outside human observer.
This is a double-edged sword. On the one hand, machine learning is useful precisely because it can detect these patterns. On the other hand, if we can’t determine why a machine learning algorithm is returning the results that it is, we can’t know how to effectively use the insights to drive our business decisions, product choices, or decision matrices.
While it may seem like these two fields have nothing in common, they share points of intersection in practice.
If you are a software engineer at a company that uses machine learning to drive its business decisions, you may well end up shipping machine learning code into an application during production.
If you’re a machine learning professional, you’ll receive input from software engineers when it comes to integrating your machine learning algorithm into production as well.
Furthermore, the outcomes of a given machine learning algorithm may be used to drive changes in the software development life cycle, meaning that a software engineer can only benefit from being knowledgeable about their machine learning counterparts.
Finally, there is a position that straddles both software engineering and machine learning: the machine learning engineer. A machine learning engineer bridges the gap between data science and software engineering by acting as a liaison between model-building machine learning experts and the software engineers who have to implement their algorithms in production.
There is a high demand for machine learning engineers in the job market today, since the job requires a middling to deep understanding of machine learning along with the more general knowledge of programming that the role requires and few programmers fit the bill.
Among those that do, most are drawn to large companies that have kept up with the modern trends in machine learning and afford the most opportunities to their employees, so smaller businesses are being left behind in this machine learning revolution.
If you’re interested in machine learning and integrating machine learning algorithms into production, you might be a good fit for the machine learning engineer role. To check whether you’re on the right track, take a look at this machine learning interview question:
How would you build the recommendation algorithm for type-ahead search for Netflix?
Here’s a hint:
Let’s think about a simple use case to start out with. Let’s say that we type in the word “hello” for the beginning of a movie.
If we typed in h-e-l-l-o, then a suitable suggestion might be a movie like “Hello Sunshine” or a Spanish movie named “Hola.”
Now that you have a little more insight into the similarities and differences between software engineering and machine learning, you can take the next step in advancing your computer science career.
A good place to start is on Interview Query, where we offer courses in SQL, Statistics, and Machine Learning, as well as a host of questions from real interviews at companies like Google, Facebook, Netflix, and more for you to sharpen your skills on. Whatever direction you choose for your tech career, Interview Query has the resources you need to prepare for your next interview!