Software engineering is a hard job. Not many people are able to practice and endure the stressful life of an IT professional. But such endeavors can give back ROI to someone who invested on this profession. It is not only about money, and terms like esteem, self-actualization needs, may seem idealistic, but according to Maslow they are equally important for an individual. Of course, one can achieve these by working on any profession, an individual’s needs and perspective vary from person to person, but let’s focus on IT for now.
Computer science is a vast field, which hides so many exciting things, ready for an enthusiast to grasp. Even for veterans there is always something new to learn, and that new, shiny thing, might not always be something fresh. If we try to focus on just software development, we can easily see how overwhelming that part of computer science can be.
Mastery of algorithms, techniques, principles, patterns, programming styles and programming languages is knowledge that someone gets by experience. Although this is true, how do you define experience? Is it your everyday work on a startup or a big organization? Is it research? Both? Is it personal curiosity? The most common part of all these is one. Practice. Practice is crucial, it is the process where you learn something and then you put your own thoughts on the line, giving them life. It is when you understand what you just learnt, just like Confucius said:
I hear and I forget. I see and I remember. I do and I understand.
Well, of course, you may find myself a bit exaggerating with what follows, but what I am saying is not the rule. Nor it should be. People learn through different processes, we are different in any way, and of course learning is not an exception.
What practicing really means for us
This is one of the most common mistakes we do as programmers. We fall in the trap that knowledge comes from our workplace and by working for the X,Y,Z organization is going to sharpen our skills and in the end this is all that it matters, right? That is a wrong perception of the reality. In real world, this is not that straight forward. Your knowledge, your talent is defined by how much effort have you put on practicing (and of course many, many other factors that we don’t have the luxury to analyze in this post).
Let me give you an example to make this more clear. I personally, haven’t heard of any star athlete, let’s take professional footballers, that strengthens and evolve his skills by only playing in official football games. Is Messi only playing football for Barcelona F.C. at Sunday or Wednesday and then goes home to drink some beer? Of course not you silly! If they don’t go to training they will not play. Why? Because they will not be as fit as their teammates are, who are going to take their places in the starting eleven.
Another example. Conor McGregor, a professional UFC star. Do you think he made it that high by only going to official matches, beat his opponents to the ground and after the match, back home to watch the Simpsons? Again, no, he puts superhuman efforts in training to make himself better.
Did you notice what I said with my last sentence? He makes himself better, through training. Same goes for you. You don’t practice, you lose. You are less competitive than your fellow engineers, thus they’re going to take your place when the time comes. A true professional practices because he cares about doing his best in his job. He feels that it is his responsibility and not his employer’s to keep his skills sharp. You don’t get paid to practice, you invest on your own for that, because that investment is going to get you paid and paid well.
Like Uncle Bob says
When performance matters, professional practice.
So, don’t forget, when you code at work, you perform. You perform your magic, that made your employer hire you in the first place. You solve his problems, which are yours as well. Not his/them, yours. If you do not perform well, he is going to lose eventually, and if the employer loses, you lose as well. He is investing in you, to get ROI. You should invest in yourself, get profit from you. And profit is not only money.
Is coding for programmers equivalent to riffs for guitarists?
Yeah. They know what music to play and their fingers move on their own. The music is in their heads, the result comes through the brain to the fingers.
Like those people know music or can play music by just hearing, a programmer should know algorithms and patterns cold and implement them when asked.
Warming-up / cooling-off
But how do you achieve that? Personally, I have a technique for that, again, Uncle Bob on the rescue, I once heard him talking on a Youtube video, talking about training, what means to be a professional and how to become better. I liked the idea of warming up and cooling off.
Warming up, means everyday you should stretch. That is what you do before exercise at gym, no? Same you can do with coding. Rule of thumb is to go 10 minutes earlier at the office, open your editor and solve a simple algorithm or whatever you want to learn. Do it everyday. After some time, you will code with such ease, keystrokes will become natural.
Same goes for cooling off. You can do your cool off exercise after you leave your job or just before you leave. You shouldn’t spend more than 10-15 minutes for that.
At start maybe you will find yourself struggling to get used to it, but after a couple of weeks it will become extremely easy.
How do I practice all these? And how I find the time to do so?
That is a difficult question to answer. I find myself struggling a lot of times. I feel like a juggler, trying to balance personal life, work life and passion for coding.
The secret is to never give up. You need to set them as tasks and do them. Do them at specific time of day, everyday. If a task is vague, your subconscious is making you feel that it is not important. If it is scheduled though, you feel more obligated to take action on that. Of course, don’t throw away your life! People are important in your life, find a comfortable window for them and for you.
Rule of thumb: Practice at between 12-20 hours per week. It makes almost 1.5-2.5 hours (or some) per day to do so, which is not that much, if you take into account that you spend time to read/watch videos while commuting. Try to find your balance on that. 🙂
Rule of thumb: Get yourself a whiteboard. They are ridiculously cheap, I got mine for 29€! Then, decide your tasks and divide them in three categories:
- To do
- In progress
Make them to look as columns on your whiteboard. Write down your tasks in sticky notes and put them to the “To do” column. Move tasks that you are currently working on, to the “In progress” column. Move tasks done to the “Done” column. Don’t rush to throw away the “Done” tasks. Wait for it to be filled with a fairly good amount of them, then throw away immediately.
If your “Done” column is empty for quite a long time, it means you are doing nothing. This will make you feel stressed or make you feel lazy, or bad on organizing, depends on the person. The result is this is going to affect your mood in a bad way, so don’t let that happen.
If a lot gathers, filling the entire column, will make you feel good at start, but it can also affect you negatively, making you to do less tasks than you should be, if you leave them as is for a long time.
Again, all these vary from person to person, this is only my personal view on this subject.
Remember, being a professional is tough on this particular profession, you should compromise and be ready to make sacrifices if coding is your passion.
Just check on some rockstar engineers. Do they find time? No, they are struggling as much as we do. They try to enjoy their life at their best when they have a chance, something between conferences, tweeting, blogging, coding, travelling, etc. They have tons of shit to do but they do them well, in a professional manner.
I love coding kata’s. A programming kata is a precise set of choreographed keystrokes and mouse movements that simulates the solving of some programming problem. That way, you drive common problem and solution pairs into your mind, making you capable of solving them easily in real life.
My rule of thumb for kata’s is to work on one per week or two. Best time to work on a kata is Saturday or Sunday, when you have time to practice on your own and you are more relaxed to do so. Try to focus on portions of problems (not huge ones nor hard) that you want to be better at and try to solve them, but while doing that, practice shortcuts, refactoring shortcuts or navigation idioms on your editor. That way, you gain knowledge to the problem you are solving and in the same time you become faster and more productive in writing code. Agility is something that most developers want to have. Hopefully you have the tools, so make good use of them.
Also, be sure to practice test driven development while you do your warm-up/cool-off/kata. It will make you think the TDD way without even realizing.
Simple. Dust off your programming books from College/University, read and learn all the algorithms. Again. Most of us tend to forget what we learnt back then. Practice them everyday. Make kata’s with more hard ones (not extremely hard though).
You are expected to know and write cold sorting algorithms, trees, data structures like stacks, queues, linked lists and many more. Again, practice, practice, practice.
Learning new languages
Try to learn a new language every year. You don’t need to be an expert on that, you need to have an understanding of this particular tool. It will broaden your experience and it will make you decide better which tool is for the right job. And of course, you never know, you might end unemployed because no one will look for FOO language developers anymore. The BAR language is now popular on the market. People who made themselves familiar with the BAR programming language will have more chances of getting hired by those who are not.
Of course, I do not mean that those developers won’t find a job anymore because companies go for the shiny new things. They will be out of job eventually if the don’t move to something else, because the demand on the market is going to shrink and that is common logic. Of course, there will be companies with older or legacy stuff and that isn’t something bad. The problem is that they are not the majority, they might be just a handful.
You want to be flexible in the market, don’t you?
I love reading books. Of course I love on demand training on various educational sites, but books have their own value as well and this is proven for centuries.
My rule of thumb is try to read a new book every two or three months. In a year’s time you should have read 4-6 or 3-4 books and that is an exceptional number to achieve. The amount of knowledge you are going to get from them is invaluable, they will prove as a strong tool at your disposal, so try your best with that. I like reading books on my way to work and back. I like to read sometimes on my lunch break, but don’t do that too often, you want your mind to rest a bit. I like to read a bit just before I go to bed. With all these, I make roughly a chapter per day or two, so if your book is of short-medium size, with let’s say 250 pages, divided by 10 chapters, you should be able to read 25 pages per day or two and finish in 10-20 days.
Of course, this is not feasible sometimes, as books can vary on their context, even if they are talking about the same things. Sometimes a book is harder to read than another and needs much more concentration.
Practice all the time, practice in the morning, practice in the evening, practice, practice, practice. Make your mind guide your fingers without even realizing, be confident with algorithms, patterns, principles, data structures. Make some daily tasks and be honest with them, don’t cheat yourself.
Of course, never, ever throw away your personal life, I don’t recommend you practice 24/7, as this won’t help you, your brain needs some breathing space from time to time. Just find your balance, each individual approaches things differently.
How do you practice? What are your techniques? Feel free to share on the comments below! I want to know, they might suit for me as well!