Software development is not the God given talent. Yes, it is true that some people are genetically prepositioned to be better in that area, just the same as Math, Science, learning languages or fixing cars. But that will give you only small percentage of advantage over the less talented. You will not become a professional in that field unless you practice and learn, and you will not become proficient if you do not learn and practice every single day.
Practicing every single day does not mean that you will have to work at home after your day job. The work you are doing on your day job will be sufficient, but choose work that will challenge you every single day. Do not settle for every day routine. Make a note that you should learn new stuff every day. Just one thing, every day. It can be a new method from some language you are using, new bash command, new shortcut on your IDE, etc,.. It could be anything related to your profession really.
What most of programmers, or all people really do, is when things get hard, they give up. When I said previously that you should take work that would challenge you, it meant if stuff you were not learning or doing did not seem hard to you, then you were not pushing yourself enough.
The best results you get are when it becomes really hard. When you are annoyed and cursing at a problem and at yourself for not understanding something, that just means that it is perfect time to push more.
When you are running and when you feel like you cannot run any more, not even 5 meters more, that meant that you should push for more, try to run at least 10, because the reward will be sweet.
Trust the process
People usually get stuck on solving hard problems or they do not have nerves to finish learning of some new thing because they are focused to the final result. Instead, we should focus on a process.
For example, there are some children books that learn them how to draw certain objects. The process of learning is divided into steps.
For the first step, child is only required to draw a square. That is it. Then next step would be learning to draw a roof by only drawing a triangle. Third step is to mix previous steps, so now we have a square and a triangle that already have a premise of a house, and so on. So children can get frustrated when trying to draw a house if they start drawing the finished house, but if they go through the entire process, before they even realize it, they will draw a finished project, by following the certain steps.
Same thing is with learning the letters. Children learn to write letter by writing it multiple times, just repeating and repeating the letter “A” for example. Writing it 100 times in a learning book. The same thing is with advanced concepts in programming. We will learn them if we try and use them practically and repeat that as many times as possible. It seems that learning to write and learning advanced computer science concepts are not the same, but writing for little child is as difficult if not even more, as it is for us learning advanced programming concepts.
In my experience, programming is sometimes looked up as some different profession from the others. What that means is that we often think that different rules apply to us, then to other professionals who work in finance, or layers. They learned their work by repeating stuff. We think that we should not repeat ourselves. And that is mostly true, because we are going to repeat something then we should automate it, but we should only automate stuff that we know really well. Let us take an example. I want to create a new project in Laravel and setup the database credentials, generate secure key, run migrations and seed the database and maybe do some more custom stuff that I always do when I am creating a new project. Of course I want to automate that into one command, but first I want to repeat this process several times manually and get all the commands stuck in my brain, so that when I am on other computer on other environment I can still do these things without my custom all-in-one command.
Programmers tend to copy code they find on Stackoverflow or some other blogs, not even read it and forget about it afterwards, which is the worst thing you can do. You should take the code repeat it by hand several times and then you can make a script. That process of repeating code or commands is called “Code Kata” named after Karate exercises you learn and repeat.
Stop when you’re done
Les Brown, famous motivational speaker said that “You should not stop when you are tired, you should stop when you are done”. This saying is not something you should take literally, because I am a big advocate for rest when you get tired like I wrote in my previous post, Work ’till you drop dead, but it just means that sometimes our brains wants us to think we are tired, when actually we are not there yet and we can get the job done in that session.
Even though it became a cliché I must say that “Life is not easy”, everything you do that you are not feeling comfortable with will be hard, but if people did not get out of their comfort zone, world we know today would not exist, maybe fire and wheel would not be discovered and you and I would not even exist. So keep pushing and since it is beginning of a new year, let this be one of your New Year Resolutions.