How to become a better programmer

 byDominik Szczepaniak

A JavaScript developer in CKEditor Cloud Services team. Loves writing, coding, and writing about coding.

. Posted on

Being a programmer is not a simple thing. The variety of technologies, concepts, rules,
and terminologies can be overwhelming for newcomers. What's more, you need to be up-to-date all the time. Otherwise, you take a step back.

But if you made an effort and started your developer career, there is still much more to do to improve your programming skills. This article presents some ideas on how to become a better programmer. You will also find out how your company can help you with this endeavor.

# Continuous growth means challenging tasks

To challenge yourself as a developer, it is worth to participate in as many and as diverse software projects as possible. If programming is your day-to-day job, consider what kind of tasks in your current project would be most challenging for you. Then talk about them with your superiors. If you see room for improvement in your current project, mention it.

However, you shouldn't limit your learning experience to what your job throws at you. To develop yourself as a programmer you need to actively seek opportunities outside your daily work.

No matter if you are an active developer working in the field, a beginner or an IT student, one of the most effective ways to improve as a programmer is to become a member of an open source project. You can start your search on GitHub. Find a project that uses the technology stack you would like to learn about and make your first contribution. Sometimes it's even better to start something from scratch — GitHub is also a great place to begin your own project. You can adjust the technology stack to your needs, which allows you to learn whatever you want. Your project can be a clone of an application you use. It can also be a new idea for an application you need.

You shouldn't be afraid of programming tasks that seem to be hard or even impossible. Facing challenges and leaving your comfort zone is one of the best things you can do to speed up your growth. The most obvious benefit is experience which will make you more attractive in the job market. According to the Software Craftsmanship approach, both theoretical knowledge and experience are required to deliver good software.

An interesting approach to learning to code is CodeKata, which emphasizes combining practical skills with theory. This approach assumes that after gaining new theoretical knowledge, you should use it in practice. The more you practice, the more you learn along the way. To learn all you can, practice often. In this approach practicing is the goal, not a solution.

In challenging yourself, you will also gain confidence. Perhaps you have imposter syndrome, a psychological pattern in which you constantly doubt your own achievements. It is estimated that up to 70% of the population will experience at least one episode of imposter syndrome in their lives. The first observable symptom is that you don't believe you really deserve your success, which can discourage you and lead you to slow or even stop your growth. You can find a more in-depth analysis in this thesis prepared by the Behavioral Science Research Institute.

However, remember to choose your tasks carefully. Be reasonable and avoid taking on too much complex work at once. Failures also can teach you a lot, but don't bite off more than you can chew. Nevertheless, challenging yourself on your way to becoming a better programmer has many more advantages than disadvantages.

# Learn how to learn

After graduating from school or university some people lose their willingness to learn. Even for people who like learning, it may be hard to stay in a constant learning mode. Fortunately, there are a few tips that can help motivate you.

First, it is helpful to learn more about the topics you are interested in. Even if programming isn't your hobby, you can create an application or website that is related to your hobbies. Second, avoid context switching and learn only one thing at a time. Third, make sure you understand the topic, not only memorize it. Memorization is effective only in the short term. Finally — learn from more than one source. The way knowledge is learned is the most important aspect of learning aside from the knowledge itself. If you prefer videos — watch videos. If you prefer books — read books.

As a programmer, you have lots to learn. Do it wisely!
As a programmer, you have lots to learn. Do it wisely!

For effective learning, you will need the right environment. To start, clean your desk. Remove all unnecessary books, notebooks, and distractions. Turn off the TV, mute notifications from your phone, and stay off social media. If you feel that you need a break, then go for a walk. Getting your blood flowing from a brief walk may even spark some ideas to help you tackle the challenge at hand.

You should also consider getting official certification. For example, for non-native English speakers certificates like FCE, CAE, and CPE are useful. If you are passionate about testing, you can consider getting your ISTQB certification. To validate your cloud expertise, an Amazon certificate is a valuable asset. These certificates are not cheap, but the invested money can be additional motivation to learn.

# Learn how to be self-reliant

When you run into a problem, it is tempting to ask your colleagues or create new questions on Stack Overflow. Unfortunately, relying on somebody else's work or knowledge is just a quick fix. In the long run, a lack of self-reliance will negatively affect your path to become a better programmer.

To learn more and reach your potential, you need to make mistakes on your own. Of course, there is nothing wrong with googling and reading case studies. Many known programming problems have been resolved this way. Don't try to reinvent the wheel and don't be afraid to use well-known solutions. However, the very first person you should seek help from is you. There is nothing wrong with asking other people, but research the problem and come up with some ideas first. Do not always expect somebody else to solve your issue.

If you need help, know how to ask the right questions. For starters, ensure that the description of the problem is sufficient. Provide as many details as possible. If you've found a bug, provide reproduction steps, error stack, or a screenshot if possible. It's good to also compare the pros and cons of the potential solutions to your problem. You can ask Stack Overflow, GitHub, or even Slack channels related to your field.

A bad question may be:

"How do I quit Vim!? Please help!".

Now compare how the question should be asked:

"I need to close the Vim editor. I've tried to close it by using Esc and Alt+F4 and it didn't work. I can turn off my workstation but I have some changes in a document and I'd like to save them. Can somebody explain to me what I should do to close Vim and save changes?"

You can find the full list of good practices related to creating questions at the Stack Overflow Help Center.

# Expose your code

If you don't have an account at a place like GitHub or GitLab and want to become a better programmer, you should create one as soon as possible. The code you create says a lot about you. It shows your way of thinking, your skill, and your progress. It documents your growth as a developer. However, you need to be open to criticism.

Publishing your code also allows other programmers to review it. Even though being self-reliant is crucial to personal growth, the perspective of more experienced coders is extremely useful during the learning process.

Show your code and be ready to have it reviewed.
Show your code and be ready to have it reviewed.

If you don't want to develop your own project, you can try to contribute to others' open source projects. To make your first contribution, you will need to study a lot of code. Very often it will be undocumented code with a different code style than yours. It is worth it, though. You will not only learn a lot but also become more recognizable in programming communities.

To dive into a project smoothly, you can find an issue with the "good first issue" ("easy" or "beginner-friendly") label. This label is dedicated to tasks that are good points to start in a project, or are relatively easy to do. For example, this label is available in the CKEditor 4 repository, as well as in other very popular projects like Node.js or VSCode.

# Socialize and network

One of the simplest ways to dive into the programming world is to take part in conferences
and meetings. Being a speaker will help you grow your experience. If you don't feel confident enough to do a full presentation, you can give a lightning talk, a brief form of presentation that lasts only a few minutes. A short presentation in Prezi, Google Slides, or even just a slide containing a piece of code with explanation will do. Even if you don't feel comfortable with public appearances, just attend them and listen to what others have to say. Case study presentations are extremely useful for learning what went right and wrong in coding experiments.

It is said that people should learn from their mistakes. But it is much more comfortable to learn from the mistakes of other people. Conferences also give coders a forum to discuss, network and make new contacts in the developers community. Do not forget to add your new contacts to your social media accounts to stay in touch. If you don't use social media, it is a good idea to at least create a LinkedIn account for this purpose.

Engaging with other programmers is a brilliant way to verify your knowledge and opinions. It is worth trying even if you are an introvert. Encountering new knowledge and the alternate opinions of others can make a profound difference. Leaving your comfort zone can lead you to some realizations that you haven't had before, which will only help you grow as a developer. Discussions with other programmers can also be the first step to become a better public speaker.

Additionally, you can also join dedicated groups on Facebook, Reddit, or Slack channels to get even more new contacts in the software community, and to exchange knowledge and ideas.

Try to also reach out to locally-oriented social media groups in your area, for example on Facebook. You can find them through Meetup as well, which will let you join local coding events and notify you of new ones. Another place to search for these groups is at universities. At almost every university there are also coding communities.

Socializing also helps you develop your soft skills that are needed to become a better programmer. Being communicative, helpful, respectful, and open-minded has tremendous value, as does having the ability to see the software from the customer's point of view. Soft skills are the key to advancement in a programming career, especially if you want to become a team lead, mentor or trainer.

# Read, watch, and listen

To use knowledge in practice, you need to acquire it first. There is a wide range of knowledge sources to help you become a better programmer. The most obvious are books. However, it is important to choose a book wisely, as many are outdated (or are going to be outdated shortly). Mostly, they deal with specialized technologies, languages or frameworks. Before you start reading, check reviews and even the table of contents. It will help you filter out books not worth your time. With that said, many books are evergreen titles for software developers. Here are some books that probably will never go out of style and will let you improve as a programmer:

There is a wide range of knowledge sources that you can choose from.
There is a wide range of knowledge sources that you can choose from.
  • The Pragmatic Programmer by David Thomas and Andrew Hunt;
  • Refactoring: Improving the Design of Existing Code by Martin Fowler;
  • Introduction to Algorithms by Thomas H. Cormen;
  • Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin;
  • Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin;
  • Working Effectively with Legacy Code by Michael C. Feathers;
  • The Clean Coder: A Code of Conduct for Professional Programmers by Robert C. Martin;
  • Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides;
  • Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans;
  • Cracking the Coding Interview: 150 Programming Questions and Solutions by Gayle Laakmann McDowell;
  • Patterns of Enterprise Application Architecture by Martin Fowler;
  • The Mythical Man-Month: Essays on Software Engineering by Frederick P. Brooks;
  • Algorithms + Data Structures = Programs by Niklaus Wirth.

The alternatives for books are newsletters and blogs. Here is a list of blogs that are worth following:

  • Netflix Tech Blog,
  • Hacker Noon,
  • The Clean Code Blog,
  • Overreacted,
  • The GitHub blog,
  • The Practical Dev,
  • David Walsh,
  • CSS Tricks,
  • CodePen Blog,
  • Khalil Stemmler,
  • Smashing Magazine,
  • CKEditor Ecosystem Blog 😉

Unfortunately, many articles on less-known blogs contain mistakes and false claims. What's more, a lot of that content is dedicated to beginners or is strongly opinionated. But the big advantage is the blogs are mostly free. An awesome tool you can use to read blogs is Pocket, which provides a mobile app and browser plugin with a nice and convenient UI that lets you save articles for later reading.

Another good place to start improving as a programmer is issues and pull requests in open source projects. Discussions on GitHub, for example, are a plentiful source of knowledge. Even if you aren't working on an issue, you can still read or comment. See how it looks in CKEditor 5 or in Node.js.

If you have a bigger or more flexible budget, you can consider buying a more advanced training course. The cost of these courses can be very high, but the return of investment can be fast and significant. Before signing up, read some reviews. Be sure to check that your course of choice will get you a valid, reputable certification (and for how long).

Last but not least, audiovisual media can help you expand your knowledge. Videos on YouTube, podcasts, or courses on e-learning platforms like Udemy are all good ways to learn about programming. The biggest advantage of these forms of education, especially podcasts, is that they are easy to use. You can read, watch, or listen to them during your daily workout routine or on public transport. Listening to podcasts in a tram or a gym won't make you a noticeably more talented programmer overnight, but it is a tiny step forward in your development as a programmer. Additionally, archival materials from conferences are incredibly insightful. Many presentations are recorded and then shared on YouTube, such as Chrome Dev Summit 2019.

# Take care of your health

Do not neglect your diet and health. A bit of sport and healthy eating can positively affect your brain. Try to reduce coffee, alcohol, and cigarettes. Consider eating more fruit, vegetables and brainfood. Reduce junk food in your diet.

Do not forget to sleep enough — late working hours won't help you become a better programmer. Lack of sleep has also a negative influence on other parts of your life. Even worse if you don't get enough sleep and drink a lot of coffee to get going in the morning. It has a destructive impact on your body and your mind.

Consider using a bike instead of a car or public transport. Don't hesitate to walk to work if the distance is relatively short. Avoid sitting in front of a computer for long stretches. Take short breaks and short walks.

# Work for a company that invests in your development

If you work for a caring company, your path to becoming a better programmer can be much easier. Many companies know that investing in employees will benefit all involved. What's more, some of these investments are cheap and easy to introduce. Still, some companies may not be so generous. If your company has no obvious development programs, try speaking with your superiors. Explain to them what practices are worth introducing and why they are beneficial for the company. Focus on the benefits for your company and the company's bottom line. What benefits of employee investment are there, they might ask? Well, consider the examples below.

# Assigning tasks to more than one person

Organized cooperation can shorten the development process. It also stimulates the knowledge sharing process among employees. Potential problems can be detected and resolved faster. Common goals also mean better relationships between employees.

Pair programming, where colleagues sit together and/or share screens, is another solution. Their ideas can be easily exchanged, and potential problems can be recognized and solved more quickly and satisfactorily.

# Code reviews

Code reviews have benefits both for employees and for the company. It is always better to detect a problem during the review process than after the release. In general, they reduce costs and save developers time. Code reviews also save you time later — many bugs could have been avoided if the code was reviewed well in the first place. In addition to that, it provides the same benefits as assigning tasks to more than one person and stimulates the knowledge sharing process.

Code review can be also the beginning of a longer discussion. Opinions and biases can be challenged, which leads to further learning and growth. During the review, problems and areas of improvement can be discovered. See how it looks in the CKEditor 5 repository:

A discussion during the code review can be enlightening.
A discussion during the code review can be enlightening.

# Development fund

Another form of supporting employees is a development fund. Books and courses are very often quite expensive, and participating in conferences usually isn't free either. Setting up a development fund is the most direct form of investing in an employee's development.

# Have an impact on the final product and used technologies

Having a real impact on the developed product not only sparks motivation, but it also helps you advance in your chosen career path. But with opportunities comes also responsibility. You are responsible for the technology you use. You will need to maintain, develop, and perhaps fix it in the future.

However, the whole process from research through implementation to deployment will teach you a lot. First, you will need to do research — find the pros and cons of proposed solutions, and finally, choose the best one. Next, you will need to prepare a prototype, then a ready-to-use implementation. Finally, you will have to handle the product release.

Each step can teach you a lot. Being a better programmer means not only being good at implementing features and fixing bugs. It means being good at research, maintaining products, and convincing others to use your ideas.

# How to find these companies?

To find the right company, the most direct way is to read reviews. Employer review sites are a good place to start. These pages provide very detailed information about salary, interview, and opportunities to grow.

You can also ask other programmers about their companies, or for companies they recommend. If you participate in meetups and conferences, you can often see which companies programmers work for. Focus on t-shirts and badges. If you meet some brilliant people that talk about interesting projects, why not apply to the companies where they work? Go and ask them about their employer and projects they participate in. What's more, if you see a programmer actively using their company's gadgets, it is a good sign that the company invests in employees.

All of these benefits are ones you can find working on CKEditor Ecosystem products for CKSource. Did you know that we are hiring? Visit the career page and see what else we can do to boost your growth!

# But most of all – have fun with programming

Without having fun with programming, it will be more difficult to develop your coding skills. As I mentioned before, programming isn't a simple thing. Learning a lot of stuff that's hard to understand without liking it is even more challenging than programming itself.

You need to be aware that programming is not only implementing new features and maintaining clean and perfect code. Very often you will spend hours or even days on arduous debugging or refactoring. You will also work with poorly written and buggy code.

However, thanks to programming you can create incredible things. You can simplify, automate, or even get rid of many daily activities. Furthermore, you can also develop your other hobbies. For example, if you are interested in meteorology, you can build and program a weather station. Then you can collect statistics and make forecasts. Or whatever else you want! That's the magic of programming.

Have fun with programming!
Have fun with programming!

People don't only live to work. You can develop and use your skills by playing some coding games:

  • Flexbox Froggy,
  • Grid Garden,
  • CodinGame,
  • VIM Adventures,
  • CodeCombat.

Another way to get a lot of satisfaction from programming is to create software that people need. Positive opinions from grateful customers and community can inspire a lot.

# And that's still not all…

Becoming a better programmer is an everyday job. It takes a lot of effort and dedication. There is no one universal path to improve as a software developer and this article, while giving you some hints, is definitely not complete. Why don't you share your tips and tricks to become a better programmer in 2020? Use Reddit, Hacker News or Twitter to discuss it with us!