views:

188

answers:

5

Hi,

I have been reading stackoverflow's posts for quite some time. And I think that all you guys are doing a great job by giving your time to answer queries.

I am currently working as a C/Perl developer. I've been working on building mailing system solutions and tools for around 3 years.I want to explore more and get a broader experience of what's out there. My queries are:

  1. If you want to work in a new language or a different tech while doing your job, how would you go about it?

I am thinking of working on C++ or Python or Ruby. My initial thoughts were to learn one of these, work on some self created assignments, maybe search an open source project I could contribute to. What do you guys think?

EDIT: Thanks guys for chipping in with your thoughts. I found many useful suggestions which will help me out. I really appreciate your taking out the time to help me out.

+3  A: 

I think you more or less have the right approach. I would also suggest seeing if you can't get a free-lance job using whatever language you choose, so you can honestly state on your resume you've used the language professionally. (Although a respected open source project could potentially work just as well.) That's more or less how I switched over from C to C++/C#.

Arkenian
That's a good idea. I guess I will give it a shot. Thanks.
Saurabh Hirani
A: 

The best way to learn is by doing. Books are nice, but most people read them and forget. If you want to learn how to program, you need to program.

Check tiobe for most popular languages in Industry. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Recursion
+1  A: 

I do think you have the right idea. Write actual code, contribute to free software projects, and build your skills.

C++ is obviously a good choice, because there are many C++ jobs out there. There is a lot of stuff to learn to truly master C++, though; ideally you would understand the low-level stuff, like how the actual computer hardware will run your code; but you also need to learn the complicated stuff involved in C++ templates. You should learn about the Standard Template Library (STL) and use it to write some stuff. As a strategy, you should get a good introductory book, and work through it; then get Effective C++ and read that.

(In fact, if you had some time and patience, you might even want to just learn plain old C first, then start over again with C++. You'll appreciate the fancy new stuff more once you understand how things used to be. And you'll understand the bizarre features of C++ better if you read The Design and Evolution of C++.)

With C++, you probably will also want to decide whether you want to focus on a Microsoft environment or a Linux/*NIX environment. If you are good with C++ you can work in either, but it helps to be familiar with at least one. If your dream is to write Windows games, you are going to want to know your way around the Microsoft toolchain, and you probably want to learn to use DirectX.

There are plenty of free, open source software projects written in C or C++. Some of them are games. Some of those are buggy games that crash. If you add some new features, and remove some bugs, from an existing game... put that down on your resume when you go looking for C++ work.

You might actually want to learn Java before learning C++. Some of the more dangerous features of C++ just aren't there in Java; you won't have to worry about "memory leaks" or errors in pointer math. And there are a great many job listings for Java.

Ruby and Python are both similar in important ways. They are both powerful, expressive interpreted languages; anything you can write in one, you can write in the other. (As a die-hard Python fan, I'm not a Ruby fan; bear that in mind as you read my comments.) Both Python and Ruby pay a speed penalty compared to Java, let alone C++; it's even worse for Ruby than for Python. (Google has a serious project to make a dramatically faster Python, and I read about a similar effort to speed up Ruby, so this may not be true forever.) Both Python and Ruby have large libraries of useful stuff, but Python has the edge here; I can't think of any mainstream programming task that doesn't have a Python library module available. Networking, web, math, AI, gaming, there are all sorts of libraries. Python has a clean and simple syntax that I like; Ruby takes elements from Perl, which you may like. (Ruby has "sigils" on variables and Python doesn't, for example.) The fact that Ruby takes ideas from Perl may help you learn it, but really either Ruby or Python are easy to learn. Both Ruby and Python have features borrowed from "functional" languages, and these features are very much worth learning and mastering. There are superficial differences between the two languages, but there really isn't any problem that can be easily solved in one but is difficult to solve in the other.

Ruby is noteworthy because it has Ruby on Rails. Python has Django, and my understanding is that Ruby on Rails and Django don't do things the same way, but they can do the same sorts of things, and either one works.

Depending on what you want to do, you might also want to learn Javascript. My understanding is that the best book on Javascript is the big one from O'Reilly. You should also look over Douglas Crockford's web pages.

My advice to you is to start by learning Python and writing some nontrivial Python code. Get a good book like Learning Python that teaches you the idioms as well as the core language. Or learn Ruby if that is your choice. Then, probably learn Java next.

Oh, and here is my most important bit of advice for you: figure out what you wish to do, and then study the want ads for jobs in that area. If there are lots of jobs requiring Java in your chosen area, learn that; if there are lots of jobs requiring C++ in your chosen area, learn that; etc.

Good luck, and I hope you always enjoy writing code.

steveha
Thanks for taking out time to post your views. They really helped to clear a few grey areas. The "study the want ads" part was really useful. I had also thought about it after I posted the question.
Saurabh Hirani
+1  A: 

My suggestion would be to see if there are tasks you do that can be automated by making an application. This gives some practice in building something that could be done in a different paradigm, whether that be through a web-based interface, windows, or console is up to you. I remember getting back into AJAX stuff 4 years ago now by researching it and seeing how easy it was to integrate into the application of my then employer.

JB King
Agreed - in any job there should be opportunities to try other languages and techniques out - automating various operations, building test servers, test data analysis etc. I program in C for embedded devices but frequently use C++/QT for various PC programs and python, perl, javascript for web utilites and automating tasks.If you really are a code monkey (software simian?) using one language then get out fast.
Dipstick
A: 

1) Whenever you switch job, check out job post and find a job that 20-40% of the job description is new and interesting to you. I did this a few times. Love it every time.

2) With your existing job, if someone else leave and you have opportunity to take over his/her job, try ask for it. Help your manager hire a new junior developer to take over your job.

3) Start a small project on your own.

tony-p-lee