What Makes Machine Learning so Hard for Software Engineers
How decades of learning a mindset makes adapting difficult
Follow me on X and LinkedIn for more frequent posts. Subscribe on YouTube for videos.
Machine learning is a challenging subject for software engineers to learn. I don't say this to discourage anyone—in fact, I encourage developers to understand ML. It's only a matter of time before software engineers will need machine learning knowledge to solve problems. I mention the difficulty of learning ML to help you understand what makes it challenging and to boost your confidence in your ability to grasp it.
Software engineers are taught a specific mindset that helps them succeed. This mindset is reinforced daily on the job, and those who can't adapt tend to struggle. While this mindset is crucial for software engineering success, it differs entirely from the one required to build machine learning systems. For software engineers to build with ML, they must break some software engineering habits and balance both ML and software engineering mindsets.
Let's explore the key differences between these mindsets and how I think you can make learning easier.
Challenges of Learning ML as a Software Engineer
I decided to bullet list these, because it turns out I have a lot to write about each and I started to ramble on. Here are the factors that make learning ML as a software engineer so difficult in their simplest, shortest form:
The probabilistic nature of ML requires engineers to embrace uncertainty and statistical thinking. This contrasts the deterministic logic of traditional programming.
Data-driven approaches in ML demand extensive experimentation and iteration while software development requires an implementation-focused workflow.
Software engineers are accustomed to writing explicit instructions with pre-determined success criteria, easily measured by output and test cases. ML systems don't have clear-cut success criteria and find success through iteration.
Software engineers are taught to eliminate uncertainty while ML engineers embrace it to explore their systems' capabilities.
ML projects lack concrete time horizons. There's often no set finishing point for ML systems—it's more about reaching a state that is good enough to ship. Software engineers have been taught for decades to estimate work time frames and measure success based on it.
While software engineers design modular systems with clear interfaces, ML systems often involve complex interdependencies. This requires ML engineers to navigate intricate relationships between data, features, and models, making these systems more difficult to design and debug.
Traditionally, software engineers separate data and code for easier system management. In ML systems, this isn't an option, and traditional management approaches break down.
The logical foundations of software engineering are rooted in discrete mathematics and formal logic. ML requires a shift to continuous mathematics, statistics, and linear algebra.
There's so much that can be learned to be an effective ML engineer. Software engineers are tenacious learners which is helpful, but they also don’t tend to be comfortable not knowing things. With the sheer amount of ML concepts and the fact that the field of ML is still in its infancy, learning everything isn’t an option.
The knowledge required for ML engineering spans three domains: machine learning, software engineering, and data science. Keeping up with all three is overwhelming.
My tip to overcome these challenges is to focus on one thing at a time. While this advice may seem simple, it's tougher in practice. Direct your learning by what interests you and what's most beneficial for your career or project goals. For example, I see many software engineers focusing on modeling while most would probably benefit more from starting with ML infra rather than diving into modeling, as it leverages their existing experience while introducing ML complexities.
Don’t get overwhelmed and take your time to learn. You've been taught for years to approach problems in a certain way, and ML requires a different approach. It's okay (and even good) to feel challenged by this shift.
I hope this was helpful! If you have any questions, leave them in the comments or reach out to me.
Always be (machine) learning,
Logan
I guess it's because I like working at early stage companies, but I've found software engineering has plenty of uncertainty. You know how code should work, but you never know how users will react.
I salute are you software and machine learning people a lot of it is all Greek to me, but I love to learn♥️