As a developer, we all start from somewhere. And when we started, we really sucked. But since we didn't know anything then, there was nothing to lose and everything to gain. That's the Day 1 mentality.
As we work through the ranks, we become more knowledgeable. At this stage, it's so easy to stay in the familiar and keep doing the same thing. If you've been doing Ruby on Rails for 5 years and are in a Ruby on Rails tech company (as I was), there is no reason to study other languages. You can just keep coding Ruby on Rails the same way, and the paycheck arrives at the end of the month.
If all you have is a hammer, then everything is a nail
By not exploring other programming languages/technologies, you are closing yourself off to their possibilities. Each programming language specializes in some sort of problem area.
- Ruby is really great for web development.
- Python: is more versatile. It is great for data science, machine learning, scripting, and web development.
- NodeJS: is great for web development. It allows you to code your frontend and backend codebase in the same base programming language: JavaScript.
By using Ruby to do everything, we are using a blunt tool to address different problems that other programming languages could have better addressed.
So why not use another programming language?
It's easy to say, “okay, we are going to use Python” for this task. But when no one in the team has coded Python before, there's a being tradeoff made. Starting over a new language takes time, and developers will eventually make mistakes as they start off. And these mistakes can be potentially costly.
At the core of this hesitation are fear and laziness. Fear of making a mistake that can potentially cost the business. And laziness of making sure that those mistakes don't happen.
What happens is a sort of complacency that's self-reinforcing. The more we don't try out new things, the more we build on the old tech. The more things we build on the old tech, the more we have to lose if we change it.
Day 1 Mentality
While we can't revert to our foolish state when we started, we can take the mentality we had back then and apply some of it now. We don't need to dive in recklessly and make all of our developers do Python all of a sudden. But we can dive in smartly.
We can define the feature pipeline and identify where our current tool (Ruby) doesn't quite fit. We assign a person to learn Python and find a small project (to be deployed in production) that uses Python. As the team gains confidence coding in Python, we roll that out for more projects.
With the Day 1 mentality, we don't accept the reason “it's been done the same way before, it's going to take much effort to change it” for not using the best tool for the project. We challenge assumptions we hold. Is this really the best tool for the task? If not, what's stopping us from using it?
My Day 1 Mentality Journey
I have been a Ruby developer for 6 years now. When I joined my current employer last year, I had to learn Python. This year, my current personal project is to re-learn JavaScript (specifically, ES6) and develop web applications with NodeJS and Express.
I'm not quite there yet, but I'm learning fast. It's a bit dry going over the basics again: ifs, loops, functions, objects. But I'm actually learning something new. Studying the fundamentals of ES6, I'm learning how JavaScript differs in its approach to programming as Ruby and Python. It's actually given me a richer appreciation of all 3 programming languages.
Don't get me wrong. It's a lot of work. And I have to apply NodeJS for my next project. But it pays off because over the long run, I know I'm using the best tool for the job.
How about you? When was the last time you let yourself be a beginner?
Photo by Jukan Tateisi on Unsplash