The Programmer Mindset
I want to describe what I have learned and hurdles I have faced in cultivating the mindset of a programmer. Doing this is not an easy task by any stretch, but important for progressing down this career path.
I have written this post for aspiring developers, developers who are at a crossroads in their careers and interested developers who want to get another developer’s take on the matter.
This blog post is based on my own personal journey through a sometimes challenging, but very rewarding career path.
Understand your own learning style
As developers we need to constantly adapt to the ever-changing landscape of the software industry. By understanding your strongest learning style(s) you can plan the most effective approach to learning a new language or understanding a new concept.
There is an in-depth questionnaire for determining your learning style called the Kolb Questionnaire. Click here to download the pdf.
Having taken this questionnaire I have discovered that I have an Assimilating learning style meaning I am strong in both Abstract Conceptualization (Thinking) and Reflective Observation (Watching). Combined these are what is known as an Assimilating style. This style is important for effectiveness in information and science careers.
Do the quiz and see what learning style suits you best. From there, you can read more about your strengths and weaknesses. At the end of the day, everyone has strengths and weaknesses. You just need to make sure you cleverly play to your strengths and mitigate your weaknesses. Knowing yourself is key to progressing in the software industry.
- You must keep going.
- Keep your cool and be reasonable.
- Break problems up. Step by step.
If all else fails, throw out any assumptions you have made. Such like “The problem must be here” and ask yourself “Is this where the problem really is?”.
Silence that little voice
Diving into an unfamiliar code base or a new language can intimidating for new, inexperienced or even experienced developers. This is known as imposter syndrome. An unfamiliar code base or language will take you out of your comfort one. Then as you slowly get to grips with the task in hand you will realise you have learnt many new skills. Skills that you can take with you throughout your career.
Ask for help!
We all need help sometimes. Yes, we can probably figure everything out given enough time, but time is finite and precious. The person sitting next to you may have already encountered your problem. If not, two heads are better than one… and together you can work through the problem faster.
The more experienced you are, the more difficult it is to ask for help… but ask for help!
Work creatively and have fun!
Software development, despite popular belief, is an incredibly creative job.
I would liken it to carving a sculpture blind (yes people do that!). You cannot see the structure you are building.
I would venture as far to say it is more creative than most arts. Imagine sculpting while blindfolded. That is how I see programming. Even blindfolded sculptors can touch the structure which they are shaping. Programmers are building a structure from the ground up which can neither be seen nor touched. It may have a veneer, but this is the equivalent of the blindfolded sculptor being allowed a 5 second peek half way through the job. It does not exist in the physical world the way most built structures do.
Don’t be lazy!
Your employer is not in charge of your career development, you are!
Of course, your employer may send you to conferences and on courses occasionally, but this is not enough. You need to learn more on your own and on the job than in most other professions. Nowadays, employers don’t want programming droids who will bang out code in the same language day after day after day. Adaptability will make you more appealing for promotions and for your future career.
The industry is developing at an incredible rate. You need to keep up with it or become a dinosaur.
Be lazy… but in a productive way!
Very often you will come across blogs saying it is good to be lazy as a software developer. They do not mean be lazy in the traditional sense. In fact, quite the opposite. Be lazy by never repeating boring tasks… automate them.
This applies to a lot of different scenarios. Here are just two possible examples:
If you have code that you find you have to write very frequently in a project, create a function/method that will automate the task. Then you don’t have to write it again. You can just call the function/method. If the function is complicated and could be used across multiple projects you could create a composer package which can be included and used in any project needed now and in the future.
Do you find you have to go through the same 12 steps to build / deploy your code? Use an existing tool or write a script that will automate these steps (or at least some of them) freeing you up to continue with other tasks while it’s processing.
So, to summarise, automation can save you a lot of time and make you a much more productive developer.
Keep the goal in your sights
You will have goals on many different levels. It is important to make sure that you don’t stray from the path to achieving them.
Function goals are short-lived. For example, I want x to do y and return z. Be mindful of the way you get to z. Ask yourself is this line of code really needed. Once you have reached your short-term goal, go back over your work and refactor it.
Feature goals are like collective function goals. Like function goals, ask yourself is this function required to achieve the feature goal and if so is it the best way to do so.
Project goals are like collective feature goals. Project goals can be more long term and harder to keep on track. Do the same process as before. Do these features meet to overall project goals? Are they the best way to get there?
Finally, we have your career goals. What are they? Where do you want to be in 1/5/10 years? Are you doing what you need to get there? These are questions you need to ask yourself regularly. Otherwise, your thought processes will be such that you will miss opportunities that present themselves to you. Keep on your path and doors will open.
You will stray from the path… but remember you can always make your way back.
Automate, automate, automate. Be lazy… but in a productive way.