I have been coding for a few years and still feel that my knowledge is not broad enough to become a professional. I have studied some books related to design patterns, but I know there are many others.

So could somebody list the patterns and principles which you think are good to learn to become a better programmer and more professional?

and when not to - definitely the most important thing to remember. A lot of people seems to go patterns crazy at first and tries to make everything into patterns, sometimes making very easy code much more complex for no gain what so ever.
–
Hans OlssonJun 1 '10 at 7:25

A lot of these (when grouped together) are known as SOLID (object-oriented design).

Patterns:

My biggets favourite by a mile is the Dependency Inversion Principle (DIP), also commonly known as (or at least very similar to) Inversion of control (IoC). It's really good for abstracting out data access implementations behind interfaces. Martin Fowler calls it a different name (sorry don't have my copy of 'Patterns of Enterprise Application Architecture' in front of me).

A final thing to keep in mind is that there are three basic types of patterns (plus a fourth category for multi-threaded / concurrency); it can help just to know about these categories and to bear them in mind when you're doing something, they are:

Thanks Mr Roys, any suggestion books for what you list?
–
pangJun 1 '10 at 7:41

I find the Pragmatic Bookshelf series very useful - pragprog.com/titles. As most in the series are quite short, they make good introductory texts too :) I believe there are quite a few posts on good books in SO, I'll try to find them and then edit the answer.
–
Mr RoysJun 1 '10 at 9:36

Mastering tools (e.g. programming paradigms, patterns, source control, unit tests...) is essential, but it's not enough to call yourself a "professional": IMHO, the mark of a truly professional programmer is the ability to understand what her client needs. Unfortunately, this kind of knowledge is very hard to learn from a book.

And I'd really recommend getting into TDD (Test Driven Development). There are a bunch of good TDD books but if you are doing brownfield development (which most of us are) then I'd really recommend Michael Feather's Working Effectively with Legacy Code.

And finally the book that shows you just how refactored and clean code can be:
Uncle Bob's Clean Code.

In addition to writing code you should also try reading code. For example, download code from open source projects, try to tinker with it and understand what it's doing and why.
Or try reviewing your own code from a previous project. What would you do differently now? Can you still understand why you built it the way you did?

You may also want to look into some of the practices that have come out of the agile community. Especially Test Driven Development comes to mind as a great way to improve the quality of your code.

I think,
All the patterns described in the book Head First Design Pattern are the minimum that a designer/programmer must know. I suggest this book to start learning design patterns.
Another book, Design Pattern Work Book is also good to practice.