42

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.

2

9 Answers 9

100

No, it is not a substitute, but a perfect complement. I feel a combination of the two holds a lot of power.

Why is it that a good lecture teaches you more than just reading a book? Interaction and the ability to ask questions.

By just reading a book, some questions might pop up to which you can't find any answers. Look for those questions here, or ask them if they haven't been discussed before.

4
  • +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. Sep 10, 2011 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 Sep 10, 2011 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.
    – surfasb
    Sep 11, 2011 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.
    – Andy Hunt
    Feb 3, 2014 at 16:30
12

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.

11

What's the best way for me to improve programming skills?

Programming more. Reading books and web pages is secondary.

You learn best by doing.

5
  • 17
    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.
    – WernerCD
    Sep 11, 2011 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 Sep 11, 2011 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" Sep 16, 2011 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... Feb 3, 2014 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. Feb 3, 2014 at 18:53
5

Learning needs some ingredients:

  1. Learner (which is of course you)
  2. Time (which you should manage and dedicate)
  3. Resources (from which, SE sites are only a small portion)

Are you a good learner? Do you spend enough time on learning? If the answer of these 2 questions are yes, then you already have enough potential to learn almost from any resource.

But to answer your question, yeah, I personally learned a lot from SE sites. IMHO, they shouldn't become your only learning source, but they are beneficial.

5

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).

3

Your programming skills is improved the best not by reading web sites or books, but by repeating

  1. write code based on current knowledge
  2. evaluate result
  3. learn from evaluation about what to do and what not to do.
  4. go to 1

Practice makes perfect. What looks nice on a blog or in a book may prove to be cumbersome to use for some reason not understood by the blog writer, or that the book author didn't cover.

4
  • 2
    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. Sep 10, 2011 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.
    – Phil
    Sep 10, 2011 at 20:10
  • external reading goes in #2
    – user1249
    Sep 10, 2011 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 Ryan
    Sep 11, 2011 at 9:50
2

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.

1

Critical Thought and Analysis is still required

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:

  1. A good idea
  2. 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.

0

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.

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