views:

549

answers:

17

I want to be improving as a programmer. I take time outside of work or university to achieve that goal. Time alloted for that goal is limited though because I want to do other important things too. Naturally, I want to know how to make this time more effective.

How can I use money at the problem of becoming a better programmer? Buying and reading books so far is not effective because there's too much of a gap between reading books and actually writing code. There's improvement, but not much. Watching screencasts and talks takes too long. Period. Working on pet projects seems most effective, except big portion of time is spent writing code I already know how to write, and when I encounter something I don't know how to do, it takes long to achieve the right solution. (kinda) Plus there's no way to know if what I wrote is actually a good way to do it.

What other ways are there? Is it common to seek a programming teacher? Just like paying piano teachers and martial arts trainers.

What's the best way to use money to help solve this problem?

+3  A: 

Take college classes.

Josh Curren
I disagree. "Don't let school interfere with your education" - Mark Twain
vidalsasoon
It's just plain stupid to completely ignore formal schooling just because someone who's been dust for a century plus said something witty one time. Formal training in programming is still the most valuable source of exposure to big-O and all of its variations, the foundational data structures at their most abstract, and the discrete mathematics at the core of every field of programming endeavour. Don't think that the general distaste for expertise founded solely in academics means there's nothing of value to be learned from a proper schooling. Those of us who have been there know the value.
Mike Burton
Mike you're clearly missing the "wisdom" in the ancient wisdom ;) Aside from that, I agree. Except that the value is dependent on the university you're able to attend.
Justin Johnson
+1; that's the best way to spend a lot of money!
Dennis Palmer
it sure is the best way to spend a LOT of money!!! Im not even half way done with school and it has set me back $30,000++
Josh Curren
+20  A: 

Hire an experienced software craftsman to pair with you full time.

Edit: Seriously though, how much money do you have? You can't buy experience and that's the one thing it takes to be good at anything. According to the book Outliers it takes 10,000 hours of practice to master a skill. You say books and listening to talks takes too long, but learning from books, podcasts, user groups, code camps and other conferences are the shortcut over trying to figure it all out on your own.

Edit 2: Regarding the time it takes to figure out how to do something you don't know how to do, try this.

Get started and try something that will stretch your ability!

When you get stuck, stop and compose a question and post it here on Stack Overflow. Many times you'll find that the mere act of describing the problem so that other programmers can understand it will be enough to trigger the right solution in your own mind. Post it anyway and see what answers you get. If you haven't noticed questions get answered very quickly here! People don't want to do your work for you, so make sure you post the code that you tried that didn't work.

This is basically how I learned to code back in the mid 90's except back then it was Compuserve forums instead of Stack Overflow. I highly value the programming classes I took in college because they gave me enough of a foundation to be able to ask intelligent questions. But doing real work on a piece of software that real paying customers were using is how I really learned to write code.

Dennis Palmer
Uncle Bob? Is that you? :) +1
Rex M
working in industry, and getting feed back from other professionals has been a big help for me. just don't limit yourself to a single source to learn from.
Matt Joiner
The day we can get that neural upload thing from the Matrix would be a good day to buy knowledge... until then you are still gonna have to learn.
Matthew Whited
Yup, the most important thing in becoming a better programmer is programming. It's a skill like martial arts. There are people who will sell you a black belt over the Internet, but if you want to earn one at the dojo I go to, you just have to go in and do it, over and over, for years, until you master it.
Bob Murphy
+2  A: 

Get a job doing the kinds of things you want to do and dive in. This has worked well for me.

Chris Ballance
+3  A: 

The best way to improve as a programmer is to write code. If you have loads of cash and wish to make that help, you could ask a local software company to give you a job without pay. This way you will get the experience early.

Practice makes perfect.

Good Luck

Toby Allen
Yes. Reading, Talking and Watching cannot replace doing (http://norvig.com/21-days.html).
Thomas Jung
+5  A: 

I'm paraphrasing the Beatles but money can't buy you programming skill. Only programming can make you a better programmer. What you are working on, and whether you enjoy doing it, are far more important than who is teaching you.

justinhj
+2  A: 

and my 2 cents: by ACM and IEEE subscriptions. Together With SIGs. Really helpful information sources.

Also, if you have enough money consider full time participation in a big opensource project. like Apache or maybe web one. This will give you teamwork experience, standardized coding style and so on.

Trickster
+2  A: 

Go to a code retreat. Or join a local software craftsmanship group. Oh wait, those are free... but they are still good ideas for improving your skill.

Kaleb Brasee
+8  A: 

Live off the money and get an internship - this kind of experience is worth more than money and will give you a leg up on other applicants for entry-level jobs.

Andrew Hare
+2  A: 

IMO, there is little if anything more time and money efficient for learning programming than buying and reading the right books. The most obvious is to get the information (or at least the ideas for what to read up on) from the internet.

Reading books cover to cover isn't time-efficient. I generally refer to the books with something specific in mind, whether I have a specific problem to solve, or even if I've just picked some interesting topic to research. Learning is much more efficient, IMO, if you have an immediate use for what you learn - even if that use is just a made up learning exercise.

Steve314
A: 

Both seriously and kind of silly, but spend it on drugs. In particular, LSD has been shown to help engineers better understand complex and abstract systems, grasp complicated theories, and be more creative. I even have sources:

http://www.reddit.com/r/programming/comments/8rtjo/programming_on_lsd/

http://www.wired.com/science/discoveries/news/2006/01/70015

Edit: Alternatively, if you're worried about legal issues, I would recommend attending conferences. They open the door to creativity via exposure, and lower the barrier to entry to new technologies.

Justin Johnson
LOL! i dont recommend drugs - they alter your brain for the worse rather than better!
Chii
nah sif, this answer is great :) LSD probably doesn't help as much for pretend languaegs like C# or Java, but i'm sure it would help for C/C++
Matt Joiner
It's an interesting idea, but I'm not sure I want to try it. (@Chii: Drugs can alter a brain for the better, although the definite cases I know of do so by countering a problem, or are mild and of more general effects like caffeine. It's possible that there are more specific drugs to enhance programming ability, and it's conceivable that LSD does that.)
David Thornley
-1 and flagged.
hasen j
Ridiculous. Whether or not you agree with it, doesn't change the fact that this is a legit answer.
Justin Johnson
+1  A: 

There are lots of open source or free software projects you can join, or you can start your own one. Don't need any money for that.

Kinopiko
A: 

Here's a couple of different ideas about what you want to do:

  1. Code camps - Find some near you or organize some yourself as a way to see what others have done along with possibly testing your presentation skills and seeing how hard it can be to pass things from one person to another.

  2. Consider stuff aside from merely "writing code" - Requirements and testing come to mind as a couple of things beyond the actual code itself that are part of being a programmer. Reviewing different methodologies and paradigms may also be useful ways to refine your skill. Think of this as a "think outside the box" kind of suggestion and while there may be a lot of trial and error here, those failures may be worthwhile if you can see the lesson from them without having to make a mistake over and over again.

In terms of using money specifically, sometimes conferences will pay for speakers to come and so there is a cost in the first one in that form. In the second, it is a matter of finding what you want to focus in on and how you want to absorb the skill as it isn't like you can find a book that would give a +10 programming skill like something from a Dungeons & Dragons game.

JB King
+1  A: 

Spend it on hardware, particularly on a second monitor if you don't already have one. (If you don't own a computer, that's step 1, of course). The increased productivity will, in a way, make you a better programmer instantly (more productive == better), and, more substantially, increase your rate of learning proportionally to the productivity, since you don't learn anything while managing minimized windows or waiting those six seconds to compile.

This doesn't apply if your hardware is already pretty good. Going top-of-the-line is very little cost effective.

Emilio M Bumachar
A: 

No matter which approach you want to try, there are no shortcuts to master a skill. Hard work will be needed. Imagine you can take martial arts classes from Bruce Lee... that will make you a better martial artist? Not by itself, it will only give you better-than-average feedback, but only if you put enough sweat on it.

That being said, programming on your own is slow because you get no feedback at all, so the only way to find if your approach is good or not is after a lot of thinking/trying/failing. Get good books to learn the basics, after that, use them as a reference.

As it seems that you already know the basics, the next step would be to look and touch as much code (good code) as you can. Get a small to mid-size open source project (one that you think has good code quality) and try to dissect it, learn as much as you can, get into the developer forums and try to understand why this or that patch is good or not. After that, try to contribute a patch to some bug, start with easy ones. You will find it's harder than you thought, but you will get plenty of feedback and you will learn a lot.

After that, keep the fun on while you are learning and have time for it, in that or other projects.

machielo
A: 

Live off on it (i.e. use it to support yourself and/or your family) while you work on a fun and challenging open-source project full-time.

hasen j
A: 

Back in the mid-90s there was new thing in Windows programming called 'COM'. There was a fellow named Don Box who taught a one week cram course in COM programming for 2000 USD.

I took the course, and it was helpful. Honestly had I just spent a solid week working through examples in Don's book and writing my own COM applications I would have gained much of the knowledge that Don passed on.

Still, I felt the course was worth it.

Perhaps one of these one week cram courses in an area of interest to you would be beneficial.

Jim In Texas
A: 

Not only is writing code the best way to become a better programmer, I would go so far as to say it is the only way to become a better programmer. There are no shortcuts. Put in you 10000+ hours writing your own code, no exceptions.

SteveC