There are three ways to attack the problem:

  • you jump right into the codes and learn along while you try to come to a solution (trial and error)
  • you learn a bit about the technologies used in written or video tutorials for a few hours before starting the task (courses)
  • you work together with a more experienced colleague in the subject (apprenticeship)

I remember few years back being assigned on a VBA task, to be completed within a week. The work itself was not hard but I've forgotten the details. I approached the task by trial and error.

Nonetheless, my first impression was that VBA was not like your day to day programming language such as C#, JavaScript or Ruby. It had an old syntax reminiscent of VB6, which I barely worked with during my college years. And it was difficult to add third party libraries which already solved certain things already. I needed to code the best part of it.

Once I understood the basic requirement and the current state of the application, I started coding the solution in mind while spending most of the time on stack overflow or similar websites. My biggest barrier was the difference of syntax and weird variable and function names. Easy stuff such as passing variables through different functions looked challenging compared to other platforms such as .NET.

One week passed by. From memory, I only managed to do 50 % of the task but by that time, I was completely tired. I grew confused on how I was not productive enough while working the hardest I could.

On introspection, I realise when you're learning a new skill, it takes far more effort and energy than if you already are competent with it. The same situation arises when you start learning to drive. At first everything seems difficult. After one driving session, you are exhausted. But with time and experience, this becomes second nature. You start enjoying the process.

Simply starting to work on a task whereby you don't have enough basic knowledge is counter intuitive unless it's simple and straightforward.

A better solution is to negotiate a longer development time so that you can at least form yourself in the basics. In the above scenario for instance, I should have taken two days to learn about VBA through online tutorials and how to do simple stuff. Once done, I would have a better background to tackle the issue.

Often when we work on something new, the basic issues we encounter have already been solved by others. They then usually share their experience through tutorials and/or videos. Even following a beginner tutorial on a set of technology has a more positive impact when you start the task that doing it immediately.