Take the 2-minute tour ×

This question already has an answer here:

I have always been fascinated with the newest and best technologies available. I graduate from college this year, and over the course of the past few years, I have spent a lot of time learning new programming languages, web frameworks, Linux distributions, IDEs, etc., in an effort to find the best of each.

I have installed and played around with Ubuntu, Gentoo, Debian, Arch Linux, SUSE, VectorLinux, Puppy Linux, Slackware, and Fedora, I have spend a good amount of time in Vim and Emacs, and have played around with Visual Studio, Eclipse, NetBeans, gedit, and several more obscure ones.

I have played with all sorts of languages - I started with the common ones like C, Java, Visual Basic, but always heard that they were "bad" (for relative definitions of bad). I then discovered the scripting languages and have quite a bit of experience in PHP, Perl, Python, and Ruby. Then I heard that functional languages are where it's at, so I played around with Scheme, Lisp, Haskell, Erlang, and OCaml. I've played around with obscure languages like Forth and J. When I do web development, I go back and forth between frameworks and languages. Should I use plain PHP, Ruby on Rails, Django, CakePHP, CodeIgniter, Yii, Kohana, or make my own?

I have a very broad and shallow knowledge of computer science. As soon as I have learned a useful amount of one technology, I see something else shiny and go after it. My progression often goes like this: "Perl is better than PHP, but wait, Python is better than Perl. Oh, but now I see that Ruby has the power of Perl and it is cooler than Python. Well, now that I have seen a little of Ruby, it is too complicated. Python is cleaner. Oh, but it is too hard to deploy Python, so I should use PHP if I want to do real web development." And so on and so forth.

What technology should I use for projects? Should I just pick one language/framework/IDE and sort of forget about the other things that are available for a while? I don't have all that much in the way of completed projects, because I never stay with something long enough to finish it.

share|improve this question
Sounds like you need a project that you care about enough that it makes you stick with it, rather than dropping it half-finished to play with something new. Of course, finding such a thing may be easier said than done. –  Carson63000 Oct 9 '10 at 3:24
Yeah, it is mostly for personal projects. –  dvcolgan Oct 9 '10 at 12:58
Thanks for the input everyone. This advice is very helpful. –  dvcolgan Oct 11 '10 at 12:06
One possible scenario that can help you to pick one technology and stick with it is to have (1) bills to pay, (2) a potential customer with a concrete project, and (3) a deadline. –  Giorgio Apr 28 '13 at 8:03
add comment



5 Answers

up vote 14 down vote accepted

Stop bikeshedding and start programming.

This might sound cliche, but it's true: good tools don't make bad programmers good, and bad tools don't make good programmers bad (despite what Dijkstra says). You can spend 90% of your time bikeshedding over technology X vs. technology Y and get nowhere. Or you can choose X (or Y, it doesn't matter) and use it to do real work and get useful experience.

Just pick a set of tools and master them, even if they have some drawbacks.

Once you really master your tools (that is, do more than half a dozen projects in them), you can play with others to try them out. In fact, it's recommended that you do so; you don't want to be a zealot who sees all other opinions as wrong. And sometimes, you might decide that another tool is indeed worth it over your current tool.

If you can't decide what to choose on your own, a good way to end your inner debate is to let others choose for you. For example: Python, Django, jQuery, Vim and Debian. Now go and learn them.

share|improve this answer
add comment

I tend to agree with Carson. I haven't exposed myself to as many technologies that you have. I did the play-around-with-CMS thing and also PHP vs Python (same reaction: too hard to get going). And the whole time, I get all these ideas bouncing around my head for websites, registering domains, etc.

And I finally realized over the past year that my problem is that none of the actual ideas for projects fully took hold in my "heart". I finally have one, and now I'm looking to nail down what I'm going to use. I think it will be a fairly quick process.

On the bright side, spending so much time dabbling around can only benefit you with a related and useful skillset... unlike careening from unrelated hobby to completely unrelated hobby. ;)

share|improve this answer
add comment


Basically, yes.

If you keep flitting between technologies, you'll never get the depth of experience that you need to be an effective developer in any of them. And when all is said and done, while no technology is perfect, many of them are good enough to get the job done ... depending on the job.

I don't have all that much in the way of completed projects because I never stay with something long enough to finish it.

You'll need to learn to deal with that, especially if you aspire to be a professional software developer. No boss is ever going to want to employ someone who doesn't have the self-discipline to finish projects.

share|improve this answer
add comment

I have a very broad and shallow knowledge of computer science.

This is your issue. Pick a language and stick with it. What are you developing? Want a wide range of coverage? Pick PHP. Want to shoot your career in the foot? Pick Ruby. (Kidding, maybe).

There is no "correct" language to choose, pick the one that you are comfortable with.

share|improve this answer
add comment

People have said "there is no correct language to choose" but you might want to take some criteria into consideration when you are choosing one. For example, I've run into problems in the past having developed a large project in Rails, finding that at the time it was pretty hard to find anyone hosting Rails and ending up having to do a lot of server configuration and setup myself. So depending on what you are planning to build, you may find value in considering the kind of performance you're going to need, whether it's going to need to be hosted and if not whether it's going to have any pre-requisites that need to be installed on your end user's machine in order for it to work. If you are aiming to target a particular platform, which platform will it be? If you're planning to be cross-platform that will affect which libraries and languages you choose.

Thinking through what you're going to be doing and how you expect it to work can be a very useful guide to what language you want to be working in.

share|improve this answer
add comment
