views:

165

answers:

9

I've taken courses, studied, and even developed a little by myself, but so far, i've only worked with Microsoft technologies, and until now I have no problems with it. I recently got a job in a Microsoft gold partner company for development in C#, VB.net and asp.net.

I'd like tips on how to diversify, learning technologies other than those from Microsoft. Not necessarely for finding another job, I think my job just fits me for my current interests. I think that by learning by myself other languages, frameworks, databases.. I may become a better programmer as a whole and (maybe) at the end of it all having more options of job opportunities, choosing what i'm going to be working with.

What should I start with? how should I do it?

A: 

Read books. (FFS!)

Piglet
which ones do you sugest? which technologies ?
MarceloRamires
Adam Luchjenbroers
+1  A: 

Microsoft technologies aren't bad to start with. My advice would be:

Make sure you aquire sound knowledge about the foundations of programming and the technologies you use. The more basics you know, the more independent you'll be from the latest fads:

  • Read "Windows Internals" to understand the operating system you're working with. In the process, you will understand other operating systems a lot better.

  • Toy around with other languages. Learn the differences between statically-typed languages and duct-type languages, functional programming languages, iterative programming languages whatever.

  • Learn the language you use the best you can. Become John Skeet!

In other words, don't move sideways first. Dig deeper and become better at understanding what you do.

Sebastian
Thank you! specially for the "Windows Internals" tip. I'm totally checking it out!
MarceloRamires
+3  A: 

If you're interested in other languages, just pick one and away you go. You sound like you have enough experience to be apt in another language.

If you're looking into a new desktop-development-language then I'd recommend Java or Python, both of which you'd ease into with your C# and VB.NET experience.

If you're looking into web programming, go for PHP?

  • Browse some source examples and see what catches your eye as the most interesting.
  • Pick up a book on that language.
Daniel May
Thank you! i've been checking a little into python, seeing your answer made me think a little more about learning it. Any book recommendations ?
MarceloRamires
Many people suggest PHP as the entry language to web programming - but then many others insist that PHP sucks. Confused :(
Amarghosh
There's an excellent Python book for free - www.diveintopython.org
Daniel May
PHP is a great entry language for web programming - it's consolidated, it's open-source, and there are more tutorials than you can shake a stick at. It has its issues, but doesn't every language? ;)
Daniel May
Professor Norm Matloff also wrote an excellent series of Python tutorials: http://heather.cs.ucdavis.edu/~matloff/python.html
Daniel May
+4  A: 

If you're comfortable with C# and VB, learn a language that uses different paradigms. The usual suspects would be Ruby, Erlang, Haskell, Lisp. All of these are available for Windows and other platforms. You might have to get used to different tools to interact with them but that's not necessarily a bad thing.

Timo Geusch
+1. Breaking out of your comfort zone is how you truly grow.
Adam Luchjenbroers
+4  A: 

At the risk of sounding trite, why not install some variant of Linux on a cheap desktop? The mere act of setting up a Linux box is educational.

Once you find your way around it, do some shell scripting and install things like a web server. That should keep you busy for a while. Once you past that, play with some dynamic languages like perl, ruby, python, PHP, etc.

Mark Westling
what distribution do you recommend ?
MarceloRamires
Yeah, why not install some cheap Linux? :)
mlvljr
I would suggest using a combination of VirtualBox and Ubuntu. That way you can run it from your Windows installation without having to faff about with dual boot and such.
Kaz Dragon
@mlvljr if i'm running from microsoft, why not? what's your argument on that ? it was a reasonable tip, why don't you say what you'd recommend ?
MarceloRamires
It was a bit joke (though linux may be really cheap). The tip is very reasonable.
mlvljr
Any distribution is good for starters. I use CentOS for production work but I read great stuff about Ubuntu. Why not install one, play with it, then install another?I've got CentOS running with VirtualBox on my Windows laptop, but I suggested using a cheap desktop because almost everyone I know has one that's too small for Windows. One nice thing about Linux is that you don't run into people often who complain that they need to upgrade their hardware to support the latest release :-)
Mark Westling
A: 

It would be a nice idea to get associated with one the open source programm on http://sf.net. That way you can even have your learning for new platform and also produce some legitimate code. Also you get to look at some good coding practices. Last but not least some giving back to the software community

codegoblin
A: 

Maybe think of a project that would be of use to you in your daily life and see if you could develop that in a suitable language. That way you have a goal and at the end of the project you have something useful.

Alternatively why not try learing something not directly programming related, project management might be of use for future roles or do some reading about the history of technology.

These won't add any new languages to your CV but they might add some different aspects to your thinking that might make you a more well rounded potential employee.

mfdoran
A: 

I see two main directions to go:

  • Specific technologies. Select these depending upon how you want to extend yourself, new language (perhaps scripting if you haven't done that, perhaps functional programming), or new techniques (for example, UI programming, or low-level network programming depending upon what you haven't already done), or new OS (Linux if you're a Windows person).
  • Or, look at higher level problems, for example Design Methods and Team organisation. Read books such as Brooks' Mythical Man Month and Beck's Extreme Pogramming. Consider how to deal with problems bigger that can be solved by one person. Read up on (Rational) Unified Process, UML. Explore revision control systems, Testing techniques, not just Unit Test, but otehr flavours. Think about how you would organise a team if you were the leader. How would the tasks be subdivided, how would communication be managed?
djna
+2  A: 

Ideally, one should know at least one example from each of the major "paradigms":

  • Assembly (nowadays a dying art, and not that useful)
  • plain C
  • one of the OO-variants of C (C++, objective C)
  • Java or C# (they are very similar, probably no need to learn both)
  • a scripting language like Ruby or Perl
  • Javascript (preferrably via Crockford's book)
  • a non-pure functional language, e.g Scheme (PLT Scheme is a nice learning environment)
  • a pure-functionalal language like Haskell or OCAML
  • Erlang (somewhat of a class of its own)
  • a mathematical/statistical language like R, or J (an APL-successor)
mfx
+1: Strong list
trinithis