It was my second internship.
My manager put down a research paper in front of me and said:
Here program this.
The paper was from this year and the system in it was complex. I had an idea how to do it, but the entire task was impossible, especially on a 4-month internship. So, clearly it was perfect for me.
What beginner programmers get wrong
Maybe not everyone, but particularly me and people like me.
We see the entire task and the moving parts of a system. But how do we ever get all these parts working in unison? The intuition is to build out the entire system and hope it works.
This will cause you a lot of pain. It caused me a lot of pain.
How do you eat an elephant?
Adding complexity too fast makes a system impossible to debug.
You need to break down a system into it's atomic components and build one module at a time. That way I was able to slowly work on each moving part. Each part had its own test and was therefore working as intended.
You eat an elephant one bite at a time. You build software one function at a time.
Machine Learning Engineers need to learn this
People in machine learning and data science are paid some hefty wages at the moment.
There's an interesting cognitive bias that leads data scientists to assume they have to deliver complex solutions when they're paid that much. High-level abstract software makes it incredibly easy to "just add more layers" and build out increasingly complex systems.
I learned in my internship to start simple and figure it out from there. Something my manager taught me that has still held true to this day.
It's difficult to debug simple machine learning systems. It's almost impossible to debug a complex machine learning system. It's beyond impossible to debug an untested complex system
You can always grow a model later. Until then start simple.