Practitioner, Engineer, Scientist
Once upon a time online, I found an interesting idea:
It was in a forum, talking about machine learning, and data science, and the kinds of things different people do with it. In Python, and other languages.
And it pointed out there are three different roles people fill:
The Practitioner. The Engineer. And the Scientist.
It's a great distinction, because it doesn't just apply to data science. It applies to all the kinds of software we write using Python.
To be a PRACTITIONER is the most pragmatic level... the easiest to attain. If you can mechanically apply standard techniques to solve common problems... that's being a practitioner.
The world needs practitioners. Lots of 'em.
That's being someone who can use Django or Flask to build a webapp, or use Tensorflow or Scikit-Learn to build an ML pipeline. The problem comes when the standard technique doesn't work. And you have to troubleshoot why, and fix it.
To do that, you need an understanding of how the tool works. To grok at least a little of what it does under the hood.
That's the ENGINEER level. The difference between a practitioner, is that an engineer could re-create the framework if necessary. Because you have that level of skill as a developer, and knowledge of the domain.
The engineer level is a good place to be. You can do things you couldn't imagine when you were a mere practitioner.
But there's another level above engineer. The SCIENTIST.
The scientist invents entirely new paradigms. Creates frameworks and libraries unlike any that existed before.
The scientist moves humanity forward into the future.
It also takes greater devotion. In machine learning, a scientist has an understanding of the unsolved problems in the space, and some possible approaches that may resolve them, someday.
In general software development, a scientist might invent something like object-oriented programming. (There was a time it didn't exist, after all.)
So which level do you want to be at?
I'll share my own: I'm basically at the engineer level, while dipping my toes into the scientist level sometimes.
And while I don't think someone is a better or worse human being at different levels, it's also clear these levels are not equal in skill, nor in impact on the world. On those dimensions, scientist is always better than engineer, and engineer is always better than practitioner.
There's also a massive difference in investment needed to reach each level. If I'm being more nuanced, I'll say I'm a practitioner in some areas, an engineer in some others, and a scientist in a small number of others.
If you can get away with being a practitioner in one area, do it. So you have more time and energy for those areas where you cannot.