Do you want to become a good programmer?

Of course you do, right?

But what do you know about how to become a good programmer?

One common misunderstanding is that one has to know a lot of programming languages and tools to be a good programmer. This is absolutely untrue.

Keep reading and I’ll show you why.

Today I’d like to share with you about my own experiences of becoming a good programmer. What I’m going to share with you are drawn from my programmer’s life and from various good programmers I know.

The following list consists of practical activities which I’ve been doing for over 10 years. You can practice them with any programming languages, not just Java. Here’s my list:

1. Studying Data Structures

2. Studying Algorithms

3. Studying Design Patterns

4. Reading Books

5. Reading Blogs/Magazines

6. Participating in Forums

7. Using Unit Tests

8. Doing Freelance Projects

9. Doing Side Projects

10. Participating in Programming Contests

11. Conducting Code Review

12. Reading Code

13. Teaching about Programming

 

1. Studying Data Structures

As computer scientist Niklaus Wirth said in his well-know statement:

“Data Structures + Algorithms = Programs”



Data structures are the building blocks of a computer program. Imagine they are bricks that make up a house. Indeed, data structures decide how fast and efficient a program solves problems. For example, given the same problem, one program can perform faster than others because it uses more appropriate and efficient data structures. Also, using the right data structures make the solutions become simpler and save development time.

So how should you study data structures?

First, pick a good book to grasp understandings about how data structures are designed and perform. I’d recommend the book Data Structures and Algorithms Made Easy by Narasimha Karumanchi. It is C/C++ version, and you can find Java version here.

Second, try to implement some data structures from scratch, e.g. list, stack and queue. You will not only understand deeply how they work, you also improve your coding skills by “re-inventing” these data structures.

Third, experiment the built-in data structures provided by your primary programming languages (for Java, it is the Collections framework) to comprehend which one is used for which purpose. For example, using lists for fast access to elements by index; using sets for random order of elements; using queues for producer-consumer processing, etc.

Fourth, always spend time to think and choose the most appropriate data structures that can be used to solve problems before writing code. And remember, don’t re-invent the wheels, always take advantages of the existing data structures provided by the programming language you use.

Having said that, I’d recommend you to send enough time, as much as possible, to master data structures at first.

 

2. Studying Algorithms

It’s obvious that good programmers are always good at using proven algorithms and writing new ones. While data structures abstract the inputs and outputs of problems, algorithms decide how the problems are solved.

Perhaps algorithms are the most difficult topics to learn in programming, as they do not only require good logical thinking, it also requires mathematics capabilities. So if you can manage yourself to be good at algorithms, you will stand out from the crowds.

Good news is that, we don’t have to invent algorithms from scratch, as our ancestral programmers already did the hard work. So we just learn to use the proven algorithms. I’d recommend you at least grasp understandings about the fundamental algorithms: sorting (quick sort, merge sort, etc), binary searching, recursion, graph exploration, greedy and basics about cryptography. In addition, you need to understand the algorithm complexity - the big O notation.

So how should you study algorithms?

In addition to the aforementioned data structures book, I’d recommend you pick the book Introduction to Algorithms to get the concepts and implement some well-know algorithms from scratch. Better writing programs that simulate how algorithms work. For example, write a program that visually shows how the quick sort algorithm works. I bet you will learn many things and get your coding skills improved significantly by doing this.

Let invest enough time to become proficient at algorithms, you will be unbeatable!

 

3. Studying Design Patterns

Programming is finding solutions to problems. However, the solutions also face its own problems, such as the need for better performance, more flexible design, more reliable architecture… and fewer errors and less potential bugs. Thus design patterns are proven solutions to solve common problems in software design.

To become a good programmer, you should be able to apply design patterns into your program’s technical design. In fact, using design patterns help you write software programs that are reliable, flexible, maintainable and less bugs.

So how should you study design patterns?

There’s a lot of books out there, and I’d recommend you start with the famous book Design Patterns: Elements of Reusable Object-Oriented Software (C/C++ implementation). For Java-friendly version, I’d recommend Head First Design Patterns. You should manage yourself to be well-versed in the foundation design patterns such as factory, builder, strategy, command, template, façade, visitor and singleton.

Make a plan to study design patterns by following the aforementioned books and write a lot of code (a lot of code) to experiment and test each pattern until you actually understand and confidently apply design patterns into your program’s design.

 

4. Reading Books

How many programming books do you read every year?

If your answer is less than 3, let blame yourself for not being more active. Good programmers are always hungry for reading, and I’d recommend you to read at least 5 books/year, or even more. Many books are collections of wisdoms that can open your mind, help you learn faster and show you how to do things in the right ways, not just “works”.

So which books should you read?

Always find the must-read books and read them first. Here I already found some for you. For general programming, I’d recommend the following must-reads:

For Java programming, Effective Java is a must-read.

So now, let make a plan to read these excellent books in one year from now.

And remember this thing when reading: Don’t read a book from cover to cover. You won’t have enough time and patient for doing so. It’s smarter to read only what you need first, and then read other sections when you have time. For example, if you need to apply the Strategy pattern, focus on reading the chapter about that pattern; if you need to write a servlet, focus on the chapter about servlet.

Also remember to take notes and do the exercises seriously, so you won’t waste your valuable time in reading.

 

5. Reading Blogs/Magazines

Blogs are always more up-to-date then books, as the authors tend to keep their readers posted. Find an authority blog/website in your niche and stick with it, e.g. reading a new post every week to update yourself with today’s fast-changing technologies.

I’d recommend DZone - a site that originally starts as a Java developers community, and now it becomes one of the web’s largest community for software professionals. You can find on DZone a lot of helpful articles, insights and advices on almost categories of programming, from Java to Javascript, from web development to Agile method, from big data to cloud computing, etc.

Also find magazines that are specialized in your niche. For Java, I’d recommend you to read Java Magazine - a bimonthly publication issued by Oracle - the steward of Java technology.

So to keep yourself always updated, read a new blog post every week and read a magazine issue ever one or two months.

 

6. Participating in Forums

More often, forums are the places where we seek helps and help others. More importantly, you will learn a lot when helping others solving their problems. That’s why I’d recommend you to actively participate in an authority forum in your niche and provide help for others.

For Java, I’d suggest you participate in CodeRanch - perhaps this is the largest Java forum at the moment. It was originally JavaRanch, then later gets expanded to support other programming areas. However, Java is still having huge support on this site, especially if you are seeking help on Java certification preparation. Let join it.

For other programming languages, I propose StackOverflow - the largest social hub about IT development. It is a questions-answers type of site, and what I am really impressed is the quality of answers - as the moderators are doing good jobs to keep you always get quality answers from the gurus.

So visiting CodeRanch and StackOverflow at least once a week helps you connected with the community.

 

7. Using Unit Tests

“Write tests first, write code later” is what I really want to tell you to do in your programming projects. Requirements are translated into very specific test cases, you then write code to implement business logics and make sure they pass the all the tests. In fact, you write code to test every method of a class, and every class of a program.

You know, unit testing has been being adopted widely by programmers as it has many benefits such as finding problems early, facilitating changes and refactoring, simplify integration testing, providing live documentation of the system, etc.

Unit testing leads to the emergence of Test Driven Development (TDD) methodology. TDD is employed by many programmers in many programming languages.

So how should you study unit testing?

I’d recommend you to read the The Art of Unit Testing - this is an excellent book about unit testing and TDD. For Java, you should start with JUnit - one of the most popular testing frameworks for Java development.

So if you haven’t used any unit testing frameworks, you are missing a powerful tool in software development.

 

8. Doing Freelance Projects

One of the fastest ways to improve your coding skills and become a good programmer is working as a freelancer (either part time or full time). In short, freelancing means that you find projects online, work from home and get paid online, too. The cool thing is that you can choose what kind of projects you love working with (desktop, web app, mobile app, design, writing, testing or even hardware projects).

This allows you to develop and expand your experiences in various areas which make you always feel exciting and challenging.

In contrast, working for a company may be boring as you may have to follow one project all the time. This might be obstacles to diversify your experiences.

However, doing freelance is not easy at all. It requires hard working because the freelance market is highly competitive with thousands of freelancers seeking for jobs. So it’s better to keep your current job and start freelancing gradually.

So how should you start doing freelance?

Well, I’d recommend you start with Freelancer.com which is one of the largest freelance market where you can find almost any kind of jobs. I’ve been working on this site since 2009 and have done 142 projects with average rating of 4.8/5 - that brought to me a variety of experiences.

 

9. Doing Side Projects

If you don’t like doing freelance projects, you can specify some interesting projects and work on them in your free time. Working on your own projects definitely help you improve your skills in all phases: coding, testing, designing, documenting, deploying, etc. This gives you vast experiences of the whole process of software development, in contrast to working in a company where you may involve in only the coding phase.

So how should you start doing side projects?

My advice is “Start Small First”. Don’t go with big projects from the beginning, as you won’t have enough resources and experiences. So it’s wise to start from small projects, then with bigger, bigger ones gradually. And remember to manage yourself to complete each project within the period of 2 or 3 months.

 

10. Participating in Programming Contests

Perhaps this is the most challenging way to develop yourself to become a good programmer. As when you join a contest, you have to devote your time and resources, and highly focus on the development. This helps you a lot in terms of improving your programming skills.

Remember that prizes do not matter. The only thing does matter here is how you grow yourself during the contest. I was participating in a couple of contests (a mobile app and a desktop game) without getting any awards. However, I admit that I learned a lot when I was working hard to submit the programs before deadline.

There are some well-know programming contests you can try: Imagine Cup from Microsoft; ACM-ICPC sponsored by IBM and TopCoder. The first two are for students and the last is for all programmers. Also looking for contests organized by local companies in your country.

Don’t be afraid that you don’t have experiences to join a contest! Just sign up and the rest will follow. Be brave!

 

11. Conducting Code Review

Code reviews should be taken place regularly in your team. Let other programmers review your code, and give reviews on code of others as well. Being reviewed forces you write better code and reviewing code of others help you learn the pros and cons from others.

I’d recommend you to use a code analysis tool like Sonar Qube - this tool scans your entire codebase and produces detailed reports based on various code quality standards. You fix your code until the tool no longer reports ‘red alert’. Some code analysis tools can be integrated with your IDE (Eclipse or NetBeans) nicely, that makes code review more naturally.

So I strongly encourage you to conduct code review sessions in your team regularly with the assistant of a code analysis tool.

 

12. Reading Code

This is different than reviewing code. I’d suggest you to spend time to read code of other programmers. You will learn a lot through this process because no one writes code exactly like you, especially code written by experts for well-know products. If you give a problem to 1,000 programmers, there would be 1,000 solutions written in 1,000 ways. You will find creative solutions which you have never experienced before.

For Java, I’d recommend you start reading source code of the Java Collections framework (you can find it inside the src.zip file which is under JDK’s installation directory). Also try to read code of popular frameworks like Spring, Hibernate, Struts, etc.

 

13. Teaching about Programming

“The best way to learn is teaching” - You can record videos, write articles, create books or organize a programming course to help others learn about programming. Teaching is a great way to learn because when you teach, you tend to study everything related to the topics, in contrast to coding in which you tend to just make the code “works”.

I strongly recommend you to choose a favorite way to begin teaching, as I’ve been doing so since 2012 when I wrote Java tutorials for some programming websites before creating my own site CodeJava.net.

I also created a Java course (via emails) called JavaTipsEveryDay. This course aims at helping you become expert in Java programming during one year. I’m learning a lot during the preparation for this course. I also an instructor on Udemy with this Java Servlet, JSP and Hibernate course.

So if you haven’t taught anything, it’s time to think about it.

So far I’ve told you the 13 activities you can practice to develop yourself become a really good programmer. This is solely my own experience, so I’d very happy and welcome your comments.

Which of the above ways you are currently doing? And what would you add to the list?

 

Other Java Coding Tutorials:


About the Author:

is certified Java programmer (SCJP and SCWCD). He began programming with Java back in the days of Java 1.4 and has been passionate about it ever since. You can connect with him on Facebook and watch his Java videos on YouTube.



Add comment

   


Comments 

#19RATAKONDA REDDY MITH2021-12-17 02:10
Best insight.Thanks.
Quote
#18M Fahad Imtiaz2021-04-29 14:28
Thanks for your valuable information
Quote
#17Wesley Mainga2021-04-16 02:26
Just came across this,Awesome. Starting Implementing each of them. Thank you
Quote
#16Jlan2020-11-13 18:13
Thanks sir for this great article, I will try to practice these 13 points
Quote
#15Durga Prasad Damarla2020-08-28 09:27
It is super helpful to get better in programming.
Quote