About your own project, in which way does it give you more improvement?

  1. Read high quality code in the same domain, implement your own.

  2. Write one project from scratch with your imagination.

My point is that it is not practical to write something like networking lib or graphic engine without knowing what other people did in the same domain.

  • 1
    Your question is a little unclear and overly broad. Can you consider revising your question?
    – maple_shaft
    Commented Mar 26, 2012 at 12:23

5 Answers 5


Let me list down my approach to learning something new. Theses are raw and generalized steps.

  1. Read little about what you are going to learn. You may not understand everything but will definitely create lots of questions in your mind.

  2. Get a some sample code (from multiple sources) read and understand it.

  3. Hack the code, add your stuff, break it , debug and fix it.

  4. Read again (what you have learned from step 1 ) try and implement whats in the book.

  5. Start with a simple application of your own, keeping reference of what you have learned from the practice. In this step you should code, code and code.

  6. Read more to get thorough with concept and usage.

  • yes, after reading a network lib, I find that lots of the concepts are common in other libs, while some are defined by the author. I have to read more.
    – upton
    Commented Mar 26, 2012 at 10:29

I would suggest the following from my own experience:

  1. Read high quality code across all domains. It's the style and motivations behind the code design that is important.
  2. Work on the project over a long period of time (like years). As your skill at coding improves, you will see the old problems in a new light. This makes your learning tangible. You remember how you used to think and notice how you think with your new information and your new understanding.
  3. Rewrite the project from scratch every 6 months or year. It sounds like a lot of work but it is very fast and very rewarding because you can see how much progress you have made.
  4. Get some great books and work through one every 3 months or so. My favorites are Clean Code and Pro C#. You can find awesome books by looking at Amazon reviews, Programmers SE or Stack Overflow.
  5. Learning is a skill, and a critical one for programmers. Get good at it and find ways of learning that work for you.
  6. For more practice (if you get bored of your project), got to Project Euler and solve problems.

Having your own project gives you the drive to learn and keep at it when things get rough. In fact, it gives you as much or more drive to learn than taking a class because (by definition) the goal interests you.

This drive will push you to do all the things ManuPK put in his answer and you'll like it because it'll allow you to get closer to finishing your project.


Most important requirement for learning is to have a concrete project to work on. One year back I was too confused about how to improve and try to code a great code in my first major project.

What I learned after researching a lot is code and just code with an aim in mind.

Another thing is try to follow coding conventions which exists in your choice of language. For example, in python world pep8 conventions are followed and I did the same. Don't ever think that let me code first and then I will worry about conventions. Conventions are there for your benefits, use them.

Learning to code is easy but learning to write proper and maintainable code is a must.

After some time (if you are in learning stage not on sharp deadlines) go back and read your old code again and there is lot of chance you will cringe at it or may want to improve it.

No code is perfect. Always try to refactor after writing a working code.

Always unit test your code because unit test brings out your mistakes very soon not when you have written so much code that it pains you to find out that small mistake.


Try to change only one variable at a time (ie: A new framework, a new ORM, a new work methodology).

As such you are proficient in one programming language, do as you would normaly do, but add a new element to it, like a framework. Next time, use the same framework, but add an other variable (like an ORM) and keep repeating.

Make sure to choose project that are not too wide, but not too small to make sure you can cover most use cases of your new element.

Treat every project as if it's a "pilot", this way you won't stay in your comfort zone and you will keep learning an improving.

Not the answer you're looking for? Browse other questions tagged or ask your own question.