Could spending time (and actively participating) on Programmers.SE and Stack Overflow help me improve my programming skills any close to what spending time on reading a book like Code Complete 2 (which would otherwise be next in my reading list) will help.

Ok, may be the answer to this question for someone who is beginning with programming might be a straight no, but I'd like to add that this question I'm asking in context when the person is familiar with programming languages but wants to improve his programming skills. I was reading this question on SO and also this book has been recommended by many others (including Jeff and Joel).

To be more specific, I'd also add that even though I do programming in C, Java, Python,etc but still I'm not happy with my coding skills and reading the review of CC2 I realized I still need to improve a lot.

So, basically I want to know what's the best way for me to improve programming skills - spend more time on here/SO or continue with CC2 and may be come here as and when time permits.

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.
If this question can be reworded to fit the rules in the help center, please edit the question.

+1 for perfect complement. I can only imagine what the eighties would have been like for me if SE or SO were around. they are great resources.
–
Cape Cod GunnySep 10 '11 at 16:59

1

+1 as a perfect compliment for a perfect complement. Just reading "real-world" questions, and attempting to answer (or duplicate existing answers' solutions) are great mini-katas to increase skill, knowledge, and intuition
–
Dave NewtonSep 10 '11 at 20:34

If anything, the ability to express problems and solutions in a easily understandable and accessible channel improves your ability as a developer, on top of improving your comm skills.
–
surfasbSep 11 '11 at 0:27

+1 (again) for perfect compliment. I read P.SE everyday. I don't always read all the answers, but I read most of the questions and the top answers. It's a great way to get yourself thinking about things in the field you might otherwise not come across. Sometimes I see something in a Q&A not directly to what I'm doing which ends up actually being useful too, which is nice.
–
AndyBurshFeb 3 '14 at 16:30

I've (currently) been a member of StackOverflow for 1 year and 10 months. During this time I have become a disciplined student of the art: cognizant of architecture, patterns, decoupling, unit-testing, and the list could go on ...but, what role did SO play???

First, it answered my immediate questions. But as I began to explore SO, I discovered that I was a very bad programmer. Desiring to be an artisan at my craft, I bought books ...but it wasn't C# Unleashed, Learn C# Programming, or other sub-standard beginner text that I needed. I bought the right kind of books that targeted skill areas I discovered were deficient. Of course, I took the time to see what the experts on SO recommended.

Second, SO gave me a place to continue learning from those who (represented by reputation) really know what they're doing - syntactically and philosophically. There is a certain amount of insight to be gained on SO, CodeReview, and Programmers that you simply cannot get from a book.

Obviously, SO cannot replace books or all other web resources (although, if I could combine MSDN and SO into a single content resource ...); instead, SO complements these other resources. The best teacher, however, remains experience.

Yes... and no. Doing more can be done without learning more. I could program in a certain language year after year and not learn anything new. Reading and school teaches you stuff outside of your "comfort zone". Not enough for a downvote, but still not a good comment imo.
–
WernerCDSep 11 '11 at 1:20

1

Truth is, i was programming a lot without learning. So i made websites in PHP without knowing objects or using a framework. You have to step away from the code and go and learn
–
Bojan KogojSep 11 '11 at 10:23

@Werner—very true. I meant to "program more" in the sense of "find something you want to build, and build it, ideally in a new way so as to learn something new"
–
Humphrey BogartSep 16 '11 at 17:25

I remember when I was an intern, the "teacher" at the job would sometimes give us programming assignments, expecting that we would learn best by doing. The problem was that whatever the problem was, we were often just not on that level yet. And when somebody would ask her a question about it, she would keep just saying, "Oh, this is so easy! You need to figure it out. You learn best that way." Several hours would go by, with us poring over documentation, trying stuff out, etc. When she finally would tell us the answer...
–
PanzercrisisFeb 3 '14 at 18:52

... it would be something that we simply were not given the information necessary to figure out. It would have taken all week or longer to find the necessary information, when we did not have the time, and when sometimes the information just wasn't available to either us or the general public. So suffice it to say, instruction is very important, and simply telling somebody to figure stuff out on their own is good when and only when they are ready and up to that level.
–
PanzercrisisFeb 3 '14 at 18:53

Two things that SO and P.SE offer that neither reading other books nor writing code yourself offer: testing and teaching. If you just blindly ask questions like

Why doesn't this compile

wall
of
code
100
lines
long

And someone says "on line 33 that comma should be a semicolon" and you accept the answer and carry on, and continue to ask the same questions forever, then you might not improve.

BUT, if you're reading other people's questions, thinking about the answer, watching to see what answers come in and how they compare to what you know, that will really improve you. If you type some code into your favourite editor and try a few things to see what the answer is, that will really improve you. And when you start trying to explain concepts (and people are waiting there to "clarify" what you say) that will also improve you.

For about 30 years now I have discovered I never learn a topic so well as when, believing I know it, I set out to teach it. To me that is the major contribution of the *.se sites to my skills as a developer. Plus, when I just want to know a simple fact, it's my number one place to look (or occasionally ask).

Books (and blogs, and SO) can expose you to concepts you might not have come up with on your own, but you become a better programmer by writing code.
–
Annika BackstromSep 10 '11 at 19:10

2

On the other hand, if I never pay much attention to external advice, I will not get too far. Other people have learned the hard way, and it would be foolish to not learn from their experiences. Sure, don't rely solely on reading and hearing, but don't make the mistake of trying to learn without help from others either.
–
PhilSep 10 '11 at 20:10

external reading goes in #2
–
user1249Sep 10 '11 at 21:19

external reading is necessary to discover the nonobvious, unique, or advanced features for a particular technique or programming language or libraries. They are stuffs that aren't strictly necessary to do any tasks, but may improve the way you do it (e.g. metaprogramming). Since they are never strictly necessary, people rarely come looking for them by experimentation alone.
–
Lie RyanSep 11 '11 at 9:50

As you answered yourself, no, but spending time here is a useful adjunct to more structured learning. I wouldn't depend on it standalone as there may be gaps in some concepts that may not be covered. One of your best bets for improving your coding for guys at the intermediate level is reading other good developer's code by spending time on GitHub or other open-source repository.

In and of itself no. The only way to make source of learning (book, blog, website, SO, etc) is by comprehension, analysis and then repeated incorporation. What people write on forums like this are not gospel and should not be treated as such no matter how many up votes it has. You need do your own analysis on the opinion rendered to figure out if it's:

A good idea

An idea applicable for your situation

The Best Way to Improve

Is often specific to the person. Some people get better through reading and research. Some people get better through play and experimentation. Other can even get better through self reflection and analysis. Try whatever appeals to you and see if it works better for you.

Learning java became much, much easier when I found out about stackoverflow. I didnt ask questions, but I started to read the java questions daily. Much of the questions were out of my understanding, but every now and then someone asked the beginner question. Many people ask about concepts they read from a book but dont understand, and get much more understandable answer here, often with small code sample to further explain the problem.