How to go from beginner to mid-level programmer
I’m a self-taught developer, I studied design and art, I learned coding with online resources, books, dedication and support from IT communities, friends and colleges.
Now I’m a senior web developer with 10+ years of experience and I teach and mentor young developers.
I recognized a common struggle in my learning journey and the one of all of my students which is: How to go from ‘I know how to code’ to ‘I feel I’m a programmer.
Nowadays is relatively easy to learn to code, there are lots of great and free online resources so is not so difficult to get to code your first app. Probably you already created several ones.
Still, the confidence that you can code a solution on your own is not there yet.
Here is where many people, me in the first place, get stuck.
At this point there are not many resources online to help out and it is because you are at the point where you need to code your own solution. And nobody can tell you how to find your own solution, otherwise is not yours anymore.
However, there are intermediate steps and tips you can do to get there.
So don’t get discouraged, the fun is just some steps away!
Who is a senior programmer?
Let’s define first what are some of the skills that are expected from a senior developer:
- A Senior developer have good problem-solving skill — the ability to break down a big problem in smaller tasks
- A Senior developer has a 360 view of a program. They have a general understanding of the code but also of the ecosystem around the code and how to go from local to live.
- A Senior programmer is a good communicator
Most employers look for a good problem-solving skill rather than high qualification in a specific language or framework. If you know how to tackle a problem, you can find a solution even if you are not experienced in the language or framework you are using. (Obviously, you need some basic experience with a certain programming language.)
During an interview if you don’t know a solution, is often good enough to talk loud about the thinking process you are doing to get to the solution.
How to think like a programmer
I identify three areas to work on to being able to confidently write your own solutions.
I will focus on web development because is where I have the most experience but most of these tips are easily abstracted to any coding field.
Improve problem-solving skill
How many times did you find yourself being able to solve small to medium code challenges and then being completely stuck when it’s time to code a bigger task or a whole app?
Here are two main tips to tackle a problem:
1. Divide and Conquer
While I was learning about algorithms, I learned about Divide and Conquer algorithm and it was a game-changer for me.
My mom used to tell me the same concept whenever I had a life problem to solve! Maybe she is a programmer at heart.
Divide and Conquer simply mean: breaking the problem into smaller tasks and solving each task one by one. Is still the main piece of advice I give to all my students:
While reading an assignment, take your time to properly understand it.
If you don’t understand it, divide the sentences and create a task from each sentence. You know you understand it when you can formulate it in plain English.
I.e. Create a news feeds app from xxx API where users can interact with each other and share the news.
- create a news feeds from xxx API
- create a comment section for each news
- create a ‘share to’ functionality
Do not start to write code or even think code-wise (i.e.: here I use a loop, there I write a .filter() function, …).
At this point we are still thinking in English or pseudo code. Write down each step you want to do and then divide them even in smaller steps:
- Create a news feeds from xxx API
a. Create UI
b. fetch the API (check for authentication method)
c. Handle loading and error state
2. Debug
Exactly like in real life, when we find a problem that we have no experience with, we need to educate ourself about it and do some trial-and-error.
Lots of my students feel discouraged when they do trial and error, thinking they are blindly coding random stuff.
Wikipedia says: Trial and error is a fundamental method of problem-solving. So don’t feel discouraged, that’s the way to learn. Exactly like when you were learning to ride a bike or to swim.
Debugging is an important skill to strengthen to solve problems.
Debugging means being curious about the error you are having, spending time looking at the code, adding console.log() /debugger functions / running the code a thousand times, one step at a time (comment out code and run one step at the time, till it breaks).
Even if you don’t find the solution, you will for sure learn so much about the program you are writing and how it works.
Debugging also means doing your research and nowadays researching online is an art. There are so many informations that become difficult to find what you are looking for.
Try to:
- Know what are you looking for — is en error? a solution?
- Write the essential words — the programming language, the error code, the name of method/object/constructor
- Skim the article/documentation you are reading and focus just where you need.
- Learn to read technical documentation
Trial and error is a fundamental method of problem-solving — Wikipedia
Improve your technical know-how:
Again, here the advice are mostly web-related.
These are the steps I have done and have helped me tremendously in my learning journey:
- Understand how the web works. Learn about HTTP protocol and what happens when you hit the URL browser bar
- Learn about common design patterns of your favorite programming language.
- Read about algorithms. Even if your area of expertise doesn’t require the use of algorithms, is still good to at least superficially know about them. You will be surprised at how many parts of your life can be helpful!
For non-math people like me, I recommend this book: https://www.manning.com/books/grokking-algorithms.
Simple, fun and extensive. - As soon as you have the chance, learn more about deployment. You don’t need to go full-on with complicated CI/CD but at learn about the process of deployment. From local to testing (often called staging environment) to production. How do people usually “upload” code to their server? How can this be done safely? What are the possible problems and how do people solve them? Basically research about deployment process for your favorite tech stack.
- Educate yourself about different hosting solutions, DNS, redirect or forwarding. If you complete an app from a tutorial and deploy it somewhere, try to deploy it somewhere else too.
- When you feel ready, learn about the full stack. I don’t mean becoming a full stack developer, I mean having a general understanding of how server, database, frontend and hosting solutions are connected .
Improve your communication skills
Communication is vital, without it you cannot collaborate with others. But learning to communicate is not helpful just to work in a team, is fundamental also for your own learning path.
If you can’t explain the problem, you cannot find the right information online, if you cannot formulate the right question others will not be able to help you.
One thing is saying: “My application doesn’t work”. Another is saying: “I get an error when I click a button and I see a blank page”.
Also, if you can explain the problem, you understand the problem.
To improve your communication skills you can:
- Use the rubber duck technique
- Think out loud — While thinking about a possible solution and the steps to get there, say it loud, not just in your head.
- Pair programming — work on a project with someone else and explain what you are going to type or what you are thinking while you are doing it
Practice, practice and practice
Remember programming is a practical job. To become better at it you need a mix of theory and practice. Is fundamental to keep going back and forth between learning the theory and practicing it.
I wouldn’t recommend learning everything about a topic and then try out. Some stuff can be fully understood just when you practice it. And the other way around too.
I think is good to work on a big project to experiment with real-life cases but is also important to become better and better at solving small pieces of logic. If you know i.e. how to sort an array when you have to do this operation in a bigger project, you will be at least fast and more confident in that part of the code and you can focus on the whole structure of the application.
Websites like Codewars or CoderByte are great tools to practice solving small problems.
It might take some time to get used to the language they use, their platform and UI so don’t get intimidated, give yourself time and come back when you feel motivated.
If these platforms are not for you, just search for random problems online, find the ones that suit better your personality and brain.
Conclusion
Remember you are a junior and it takes time to progress.
Everybody started where you are now.
Nobody becomes a senior within a year or so. The most important part of becoming a good programmer is experience. There is nothing like writing bad code, making mistakes and learning from it.
The above tips are not intended to be done in a month or altogether.
Is a learning path that can be extended to years.
Dedication and passion (remember to have fun and don’t stress out yourself too much, you will get there!) will bring you where you want to be.