Logo

The Data Daily

Machine Learning Is Getting Easier. Software Engineering Is Still Hard

Machine Learning Is Getting Easier. Software Engineering Is Still Hard

Machine Learning Is Getting Easier. Software Engineering Is Still Hard
Why that's good for software engineers and bad for ML engineers
Photo by Andrea Piacquadio from Pexels
Disclaimer: This is an opinion article. It’s also biased. I think the world would be a better place with more generalists and makers (rather than specialists) to build things and solve problems.
Over the last 5 years, machine learning became easier. Meanwhile, software engineering is more complex than ever.
That’s a great thing for software engineers. But not for ML specialists.
This is the progression of ML into software engineering and data science into data analysis.
Machine Learning Tools Are Becoming More Approachable
Google would love to make training ML models approachable to everyone, regardless of their technical know-how (see: democratization of technology ).
As ML becomes approachable, the market for cloud services grows, and the value of understanding algorithms erodes.
Once upon a time, we hand-coded algorithms. Then Sklearn allowed doing the same thing in a few lines of code.
The original TensorFlow was hard to use. Keras made it easy.
Google, Microsoft and Amazon now all offer services to select, train and tune models in the cloud, then immediately provision a model behind an API.
It’s going to be some time before anyone can train AI. But as the complexity falls away, it becomes just another tool for the seasoned software engineer to put in their pocket.
Machine Learning Development Is Concentrated In A Few Languages
Languages are a moat. Full stop.
Do you know COBOL? If yes, you have a job for life . The world’s financial system depends on it. Nobody is learning COBOL anymore.
Most machine learning is implemented in Python , while software development is spread across a large number of languages.
https://www.tiobe.com/tiobe-index/
If every ML engineer has experience in Python, then you’re competing with every ML engineer. On the software side, you’re only competing with the subset of engineers who work with the same technology.
I’m always surprised to see lots of highly paid Ruby on Rails jobs. It went out of style years ago, but many large companies (Shopify, Instacart, Kickstarter, etc) are stuck using it for legacy reasons.
You absolutely can and should learn multiple language. Being a good software engineer depends on it.
Software Engineering Encompasses A Larger Scope Of Skills
We expect a software engineer to have at least some knowledge of everything.
A quick sketch
A backend engineer still knows how a browser works. A frontend engineer has some concept of databases. Both prevent security holes like SQL injection.
Having a wholistic understanding of software makes it easier to change specialties. It also gives you the ability to build end-to-end solutions.
The wide-ranging skillset makes software engineers better suited to ambiguous environments. Software engineers often shift into data science as the need arises. In contrast, data scientists are less likely to develop software.
We’ll see more software engineers doing ML as people begin to see it as an alternative to hardcoded conditional logic.
Becoming A Competent Full Stack Developer Takes Years
And comprises many discrete skills.
Optimizing a database, building an API microservice, and crafting a responsive frontend literally have zero in common. They’re probably implemented in 3 different languages.
We’ve seen very little automation in these areas.
Contrast this to the full stack ML engineer who is now completing with increasingly powerful AutoML, for which I could write an SOP, and delegate training a classifier to an intern.
It will be some time before all the pieces in the software engineering skillset are automated out of existence.
Machine Learning Complements A Product Rather Than Being The Product (Usually)
A few companies have AI as their core product, but most use it to complement an existing product.
Medium may use machine learning for article recommendations, but the core product is the writing/publishing platform.
Anecdotally, most companies use ML for simple and similar use-cases. This makes it easy for a single company to offer said use-case as a SaaS product. Then suddenly, startups don’t need to build it in-house anymore.
Contrast this to a problem like infrastructure, which is extremely complex and custom. No out-of-the-box solution on AWS will handle Medium’s infrastructure anytime soon.
Infrastructure Is Getting Ridiculously Complicated
AWS has ballooned into over 200 different cloud services.
Heroku’s PaaS approach to running apps in the cloud is great. But becomes prohibitively expensive at any large scale.
So now we have a whole new cloud stack to manage (network, databases, servers), where a small slip can open huge security vulnerabilities.
There is a whole subset of development called “cloud engineering” whose job is getting software to work on AWS, GCP or Azure.
In smaller companies, infrastructure usually falls onto a senior developers lap.
This is complex stuff. But it also means jobs and a hard-to-replicate skillset.
Frontend Development Is Constantly Evolving
Staying on top of frontend development alone is a skill.
When I got started in development it was ok to build responsive frontends with jQuery. Then companies moved to Angular or React. Angular become Angular 2 (with breaking changes). React moved from class to functional components and added hooks.
All the above frameworks/libraries work in fundamentally different ways.
There are a few companies working on auto-generating frontends based on mockups. But consensus from colleagues is that they’re a long way from production quality.
Technical competency in frontend development, combined with a sense of what is pixel-perfect, feels surprisingly defensible for the time being.
Conclusion
Software development is complex and encompasses a wide variety of problems. That complexity is good for employment.
But more importantly, the wide skillset bestows the ability to solve real problems, end-to-end.
To build a society where the typical person is empowered to solve problems in their own communities, software engineering is a great place to start.
Does machine learning have a place? Absolutely. But there is more to solving a problem than training a model
Learn software engineering. Make stuff. Solve problems.

Images Powered by Shutterstock