Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I know many programming languages ,skills and concepts in very basic, such as PHP, Java, Object-oriented technology.

Using PHP, I can build a simple website with CRUD, login function.

Using Java, I can make an basic swing csv/plain text editor in which user can switch between 2 different views.

In term of object-oriented Technology, I clearly understand what encapsulation, inheritance and Polymorphism are

I want to know more about programming. Sometimes I "google" some of the topics I am interested at , the more I see on the internet, the more I feel I am a small potato in the world ( indeed I am ). The codings/concepts are difficult to understand. I lacks confidence right now so I am asking this question :(

What is the best way to learn programming to advanced level?

Just buy a book and read it page to page? Thanks for any helps

share|improve this question

closed as not a real question by Mark Trapp, Yusubov, Oded, Walter, Jim G. Sep 30 '12 at 19:14

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. If this question can be reworded to fit the rules in the help center, please edit the question.

I think this is a good question but if you look at the faq you can see that this is not an appropriate question for this forum. –  miracle173 Sep 30 '12 at 20:49
Sorry for that I did't read the faq before I asked this question :( –  user1022209 Oct 1 '12 at 14:13
There are more than a few questions on here already about improving one's skills. Search around and then follow the advice of the various answers. –  JB King Nov 14 '12 at 17:39

2 Answers 2

Here's some general advice I give to everyone who aspires to be a programmer:

Learn the basics. "Hello World," some OOP, etc. Just enough to create a basic program.

Then, find a project. (Find excellent suggestions here.) Don't choose something advanced. The best project is one that only uses one thing you don't know how to do. For example, you know how to create a webpage in PHP. Next step, learn how to use PDO or mysqli to load parts of your website from a database.

I find that a lot of would-be programmers burn out because they try to do too much too soon. Make baby steps, and you'll learn.

Keep creating project after project until you feel that you have a firm grasp on the programming language. After that, the sky's the limit.

share|improve this answer
I will seriously take your advice into action :) –  user1022209 Oct 1 '12 at 14:11

Reading a book cover to cover isn't going to buy you a damn thing in terms of knowledge unless you put what you read into actual, working software.

You could read an entire book about, say, algorithms, and be positive that you understood and can remember most of it. By the time you will need to actually sort a directed acyclic graph, though, chance are you won't have a clue about how to do it.

So yes, read as many books as you want, but implement what you read. Try things out, play with concepts that strike you as interesting. Granted, that doesn't mean you will remember everything, but you will be better at recognising patterns that get thrown at you in the guise of new problems. Which, if you ask me, is far more important than remembering exactly how to implement that particular sort.

You write that you feel like a small potato, and I can completely understand that. We all are, to some degree. We've been programming for only a few decades, and already there's so much stuff to learn that one can and will feel overwhelmed.

Look at it this way: there's a huge amount of interesting things to learn about in our field, and we live in an amazing era, where a good part of this knowledge is only a few clicks away. It's all yours for the taking.

But diving into a random subject you won't touch ever again in day-to-day programming is only useful as an exercise in acquiring knowledge, and arguably it won't make you a much better programmer.

As with most aspects of life, getting out of your comfort zone and seeing what you can do is a key thing. So, try to do it with programming. Try to write a program that needs to do something you never did, and then try to figure out how to do it. If you feel like you don't know what to look for with Google, just ask here on programmers; there's nothing wrong with it.

Let me draw on the directed acyclic graph example from before.

Say your software needs to figure out the exact sequence in which it has to execute some tasks, where each task has a "depends on" kind of relationship to other tasks (which is much what tools like make, ant or rake are all about).

If you are a "just give me that keyboard, I don't need to do no stinkin' up front design" kind of guy, odds are you will iterate through the tasks, possibly more than once and, with a series of ifs, brute-force your way to the solution.

Most probably, though, when you're halfway through, it will occur to you that what you're coding is really a suboptimal solution, and you're producing a large, smoking, stinking ball of unmaintainable code.

So you begin looking for an elegant solution; after all, somebody must have dealt with this before, no? That's where the "ask around" part comes in, especially because, if you don't know that a set of related tasks can really be thought of as a DAG in disguise, it won't be easy to realize that what you need is a topological sorting.

Does not knowing what a DAG is mean you're not a good programmer? I don't think so.

Does putting in the will to ask around for pointers and then trying to figure it all out on your own mean you're a good programmer? I definitely think it does.

Frankly, I don't think that a good programmer is the one that can do everything by knowing a lot of topics by heart (nothing bad with that, by the way). I would rather hire someone that knows where and how to look for when some exotic problem comes her way.

Good luck.

share|improve this answer
Thanks for the long answer. I really appreciate your patient and encouragement. Good luck to you too. Thanks a lot :) –  user1022209 Oct 1 '12 at 14:08

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