By investment I mean, books, courses, certificates, equipment etc. Many may get these for free from your employer. You may spend thousands of dollars on equipment and stuff but which one gives best value?
Which investment has given you best value for your career as programmer?
Dual Monitors and a decent keyboard.
A good chair.
You have to sit on it for 8 hours a day so you'd better get a good one.
ACCEPTED]
Books:
I've got a lot of books for a developer (27 after 2 years), but the two that I would grab if the office caught fire are:
Edit: Book recommendations on StackOverflow [3]
[1] http://rads.stackoverflow.com/amzn/click/0735619670If I look at the gained productivity compared to the price, this was my best investment.
Just investing your own time into studying the subject.
Every 18 months I spent some time learning a new language (I use the term language loosely here) just to see how things are done in other languages.
For me reading about techniques/languages is not enough I need to get my hands on a keyboard and try them bash them around a bit and try and understand what the author of an article is talking about.
I try to surround myself with people who are smarter than me, then learn by osmosis.
CodeRush/ReSharper
Most things I use to develop are paid for by my employer. The one thing that I've spent my own money on and use all the time now is CodeRush (many others use ReSharper). This little tool has saved me countless hours of refactoring time and other things that normally take a lot of time to do or are "dangerous" (will likely break your code).
My degree, first and foremost.
And after that, reading c2.com [1]. A lot.
Which then led me to invest a whole time in learning things like Smalltalk, Common Lisp, functional programming and, lately, Haskell.
[1] http://c2.com/cgi/wikiHonestly, my best resource as a programmer has been taking the time to get involved with online communities such as stack exchange, experts-exchange, and programming language-specific forums and sites.
You gain a wealth of knowledge and skills in not only specific languages and environments, but in the art of describing problems and solutions. It teaches patience, diplomacy, generic problem-solving skills. This sort of experience makes you an invaluable employee at a small company, where you earn the reputation of being able to solve almost any problem, even outside of your expertise. If you're working on your own, having quick access to such communities, plus your acquired self-sustenance, will save you thousands on consulting and hours of time.
I'm still just at the very start of my career, but investing the time to be involved in a community that shares problems and solutions on a daily basis has potentially infinite value at zero cost.
Investing the time to learn the real dangers of Repetitive Strain Injury/Cumulative Trauma Disorder [1]
From Wikipedia [2]:
Repetitive strain injury [...] is an injury of the musculoskeletal and nervous systems that may be caused by repetitive tasks, forceful exertions, vibrations, mechanical compression (pressing against hard surfaces), or sustained or awkward positions.
More than just a good chair (which is a must), you need to be aware of desk/monitor height, changing focal distance and -- most importantly -- getting up and stretching throughout the day. If you're going to be programming for years to come, learn and implement preventative techniques now! It will save you much pain and heartache in the future.
[1] http://en.wikipedia.org/wiki/Repetitive_strain_injuryHigh Speed Internet
Internet is playing major role while you are learning a new things.
Learning how to use VIM, and then setting up gVIM to be my default editor on my Windows dev machine.
I invested a huge amount of money is all sort of trainings and conferences. I have no regret and still have a yearly budget for that.
During the past 10 years, I purchased an average amount of 1,25 books a month (I have more than 150+ technical books) and according to amazon, I kept that pace in 2010. I think it's the easier and cheapest investment you could make as a developer.
The next big investment you could do is failing. Failing fast, often, in many different situations. Failing has a big cost. But the reward, what you learn, is far more valuable.
Believe it or not, my Microsoft Certification in SQL Server has been one of the best investments for me as a developer. I think certifications in general can be a great investment since it requires you to learn the material to the point of being able to pass a test. Some could argue that real world experience is better, and I agree, but a certification course/test still has a lot of value. I call out my database certification in particular because having a good understanding of database design has dramatically increased my skills as a programmer.
Buying a nice flat screen instead of my CRT from the older days, and also an ergonomic keyboard and a mouse pad with that pillow thingy for my wrist.
It didn't generate a monetary return on investment, but my eyes and hands are quite grateful.
1,5 year at a game company startup that ended up setting me back financially a bit. Got a real job then and was back to zero after a year or so.
However, I learned a lot. Both about software development, architecture, ecosystems as well as traits and issues to look for and avoid with companies, projects and people. Had a great time with good friends too. :)
You learn by mistakes, and you don't make mistakes by playing it safe.
Get a job/internship in computers
A lot of the other answers given mention investing time or coding a big project but these only really hit the tip of the iceberg. The point of doing these things is to force yourself to do something unfamiliar, learning in the process. If you get up one day and decide to write another program in a language you already know, you will learn some from the new techniques necessary to solve the problem, but you are still only expanding in one direction.
Myself, I've been employed at my university for a little over a year as a junior system administrator. While this hasn't directly forced me to expand my programming ability, it has given me the opportunity to do a lot of things I couldn't have done alone. I am often given the job of maintaining former employees' hardware and software so this forces me to learn languages I never would have taught myself like Perl and PHP. I get to use older, retired hardware for my own projects such as building a website and managing a small domain. These projects built my skills in bash and python scripting. Finally, being a system administrator has enabled me to build my interpersonal skills with other computer-minded individuals.
In short, having a job in the computer field, even if it is only loosely related to software development, expands a programmers understanding and develops skills that wouldn't have been exercised elsewhere.
Working with the commandline and its utilities
Having spent most of my time in the Windows domain, changing over to unix/linux for a while and learning to do everything at the commandline (compiling, sed/awk/grep, system administration etc.) has completely changed the way I think about most of the development tasks I do.
Knowing what the IDE does during compilation and the 'find-the-best-tool or write a script' mentality does wonders, also when returning to domains where this is not the common practice.
Although it probably isn't what you are expecting, the best investment I have made recently was the admission charge for the Durham Beer Festival. It was here, with my elbow on the bar, that I learned of a contract that I have since won. I have since resolved never to miss the Durham Beer Festival again.
I spent around 450€ on components which I used to build a simple home server (Dual Core Pentium 2.93 GHz, 2GB RAM and 1TB HDD). It runs Ubuntu Server Edition 10.10 and I host multiple things on it, many greatly enhanching my coding productivity.
Some things one could mention:
I might add some more things, such as support to off-load compilation onto it and if I did more web development I would probably use it as a testing server
Windows Home Server on mine. - Matthew Whited
I'd been a self-taught developer for years but only started getting sensible job offers after I'd been back to university and done a Masters degree in computing. It's paid for itself many times over since. (I'm not sure it made my code any better, although it did make me a more rounded developer - but the truth is that a degree in CS is a very valuable asset to have on your CV/resume.)
Fast Laptop for development I Buy a laptop that doesnt frustrate me and that helps me doing my work in peace. Configuration Intel Core i5, 4GB RAM
Publish!
I wrote 3 articles for O'Reilly's "onLamp" magazine some years ago and I landed at least a bunch of interviews because of them. I am now working on a book on HTML5 for O'Reilly that should be out in the spring.
In addition to looking good it forces you to really think about your topic and present it clearly.
In addition to the many sensible answers here, here's a tip to people using non-English keyboard layouts: set up your system so that you can switch between your native layout and a standard US layout, and invest the few weeks it takes to learn to code with the US layout. It'll increase your speed and reduce strain. The languages you're using were (hopefully) developed for the US layout.
I moved from the Swedish layout approximately 5 years ago. AltGr is not meant to be used when programming :).
Web Hosting
Being a recent college grad, I didn't have a lot going for me in the connections area so I ordered some web hosting and started on a personal project. Through that I was able to make my own website and learn some new languages which helped me land my first job.
Third party libraries and tool kits. The extra speed you can get out of a well selected toolset can be a time (and money) multiplier
I would say there are 2 investments that generated the max. return on investment for me:
Books: From Wirth, Kernighan & Ritchie, Stroustrup, Papadimitriou, Skiena and the likes
The right equipment: My IBM Thinkpad with 2GB RAM 1.83GHz with WinXP, VMWare and Ubuntu may seem a trifle dated in these times of cloud computing, but they have survived loads of experiments that helped me learn how these beasts work.
That'd be probably some books. Although I do consider these things given. Best investment you can make is your own time. I'm thankful for sleepless nights in high school while trying to learn HTML, PHP and SQL (10 years ago). Those are the best investments in my life. They got me first job, which led to more books, courses, equipment.
I guess the DevExpress components
Specialized schooling
I went to a community college and began getting certifications. I had a chance to get an Associates degree if I filled my two years there with gen-ed classes and a few specifics. Instead, since the school let me work at my own pace, I ran through as much stuff as I can. In my two years there I completed two courses that should have each cost me two years of my life. I'm not trying to show off, I was just hungry to learn. Network topographies, website architecture, Java, C#, PHP, SQL, HTML/CSS/Javascript, multi-threading, network transactions, e-commerce, website and general cyber security, we covered so many topics and I got several certifications in my time. It really wasn't hard if you actually want to learn it. I learned a lot of things for starting out with only a little VB6 knowledge.
My time there is priceless to me and by far one of the best decisions of my life.
Books, courses, and equipament are very, very important. You should read and study a lot, no doubts about that.
But don't overlook the non-technical aspects of your career. Health, mood, and stress level can harm more than those things can help you. There is no best investment, only a balance between every aspect of your career. I know this sounds obvious, but what we usually sacrifice first?
Bought a new notebook? Try to spend at least the same amount on a travel. Read 2, maybe 3 romances for each technical book you read. Equilibrium.
3 college courses:
Data Structures and Algorithm Analysis... focusing on proofs rather than implementation.
Computer Systems... nothing like learning to program a BST with recursion in assembly.
Discrete Mathematics.
Learning to touch type, and then learning VI have both come in handy too.
Perfectionism is of course not a virtue, but attacking a problem hard enough that I understand the fix and its limitations instead of just monkey patching always widens the knowledge basis and opens up possibilities for improving existing code. One bug fix almost always leads to improvement in several places.
The MSc in CS helps getting the "big picture" as opposed to just adding features until you end up with a big ball of mud.
Switching to Linux has made me much more productive by facilitating keyboard use and allowing an enormous amount of customization to my mode of work.
Basing all software on the shell or the web rather than a GUI gives you a ton of flexibility for free.