Letter to a Young Developer
avdi.org
avdi.org
One of the issues I've seen with CS students is simple inexperience. They simply did not have experience coding outside of the simple assignments they were handed. They, consequently, were largely bad at programming.
My single piece of advise to early CS students who want to get better but haven't really hit their stride yet is to code. Write and maintain a program that is over 5KLoC. Keep coding. And code some more. You have to have a base of experience, or all the sage advise will go over your head like a smell in the wind. :-)
I would suggest that the hardest part of programming is not coding, not learning APIs/tools, not managing projects or other people - and not even getting clear on specifications. It's understanding problems and creating solutions; this often requires designing new algorithms, but it also involves restating problems into forms that are easier to solve. Arguably, there is no actual coding in this.
But the way to be absurdly successful and useful is to find a need and meet it. The quality of programming (in itself) is of almost zero relevance to this.
* Build Something. Get some hosting and build something that works, who cares if anyone actually uses it. Start simple and add features. This should get you thinking about design, things you did wrong that is hamstringing you now, refactoring to solve those issues, etc. In the end you have something you can show to potential employers and talk about with them. You can show them the code without a pesky NDA preventing you from showing your chops.
First, you can't "force" yourself to love programming. If you came here for the money and not the challenge, then you will fail. I spent a lot of time in college learning about programming outside of class, but I also spent a lot of time avoiding programming.
The experiences in other parts of your life also help shape you as a programmer. Practicing 14 hours a day 7 days a week is not going to make you the best programmer. Problem solving skills come from all aspects of life.
If you truly want to be a great programmer then you are going to have to practice. The best advice isn't really about programming: -If you program 14 hours a day, and have no other life then it is time to find something else to occupy some of your time. It will change the say you think and help you solve problems better. You need some knowledge of people too or you will create horrible solutions to people's problems, and you will never be successful. -If you never program outside of work/school you need to find a side project. You won't get great without practice. Take at least 4 hours a week to work on something that someone is not forcing you to work on. This can be some OSS project you have been hearing about. It can be a new OSS project you want to build. It could even be the next big thing that will have you buying yachts and race cars for the time you aren't coding.
"Flip a coin. Heads pick Vim, tails pick Emacs."
That pretty much sums it up. Spending any time deciding between any of the two is just wasting your time, if you are serious about programming you will _eventually_ master both.
Starting to really dislike the text editor snobbery on HN.
At home I use TextMate for Python and Ruby, Eclipse for Java. At work, Eclipse for Java and Visual Studio for C#. I'm not 'serious' about my hobby and career because I like a different text editor to you?
But in all cases, just learning them will most likely improve your skills in many ways. Maybe you won't change from textmate to vim or emacs, but you will pick up many things from them that I believe will make your life easier.