Is it true that learning fundamental is more important than learning the tools?

One time, I have a thought about the question above and here’s my perspective.

It depends on the perspective. For beginner who just get started in programming, it is really important to know the basic stuff. In other side, one who already knows some basic stuff, it is also important to learn about the tools. Especially when there’s an abundance of available tools.

Because there’s no such tool which can address every problem, one have to make trade-off when dealing with particular problem. Having knowledge of majority of tools available could guide you to pick the right tool for addressing given problem.

It might be very conceptual to you. But here’s an example.

Let’s say you want to build a web app. You can use existing framework such as Rails or Laravel to build the entire web app in single codebase. The other choice is that you can use separated frontend and backend using React and writing the backend service using Go. In terms of scalability and speed, the React-Go stack is the absolute winner. But when you’re just bootstrapping a startup in which you have to build the Minimum Viable Product (MVP) and developing it to be market-fit under very constrained time, the development speed is the most important thing. Hence, the most logical choice is without-doubt to build the entire web app using Rails or Laravel. Besides, you can focus exclusively on the new functionality, not the standard stuff.

I care about performance speed, is it fast enough?

It is! For your first users which volume is relative small, it should be fast enough. Don’t overkill it. If your service is getting slow, you can always scale it vertically then horizontally. You might also notice that scaling the app is way more cheaper than hiring more programmers to build an efficient service.

My experiences behind these

When I first started developing COME, I picked Go for backend service simply because I wanted to learn-by-doing it. Back then, I didn’t have good grasp around REST API and existing frameworks to use. I was distracted by my desire of both learning Go and avoiding the boring PHP and Node.js. I ended up reinventing the wheel by defining my own standard (which is chaotic) for the interface of the REST API.

But in my journey, I also learned of good stuff in Go. I don’t regret because at least I learned something new. I didn’t pick the right tool for the right job back then, and I shouldn’t regret that because –borrowing from GOJEK’s engineering principle– every decision is correct at the time it is made.

Lesson learned

Wrapping it up. The lesson is that learning the tools is as important as learning the fundamental. So, when you are about to make a decision, you can pick the right tool to address given problem.