views:

887

answers:

12

I'm an ICT student. Currently, the only languages I've ever programmed in are Java and C#.

Java can be run anywhere and C# is done via Visual Studio in school.

Still, there are somany other languages, somany sites having FAQs and tutorails, somany books and stuff to learn from, I wonder where to start. I don't want to be limited to C# and Java, when you have C++, Perl, Python, Ruby, Lisp and more Object Oriented languages (here's a list: http://en.wikipedia.org/wiki/Object-oriented_programming_language)

Seeing as there are a lot of experienced people here, I'm wondering howmuch diversity in programming really matters in the business. Can you really get a job by limiting yourself to C#, or do people expect you to know and work with at least 3 languages at the same time?

Also, where can I find a good C++ compiler? Visual Studio compiles its own files, but that's Visual C++. How about "normal" C++? When I try to use Netbeans to program something in C++, it always says I need a compiler first. My searching on google resulted in finding a bunch or tutorials and ads, but no downloads...

A: 

Most any *nix box will give you GCC, a C command-line compiler

Chris Ballance
+3  A: 

GCC is open source and freely-available, and it compiles C, C++ (these two are the "specialty"), Fortran, Java and a few others. You can use it on Windows, Linux or any Unix-like system. It runs and compiles for almost anything out there.

And yes, you can get a job knowing only one programming language. Although I'd say knowing C can get you in other kinds of jobs, like operating systems. So knowing more certainly doesn't hurt.

Eduard - Gabriel Munteanu
A person should look for jobs in a more "popular" language , there aren't that many companies that look for less-known languages . This depends mostly on the country you're from .
Geo
A: 

If you're looking for a reasonable C++ compiler for Windows, the Code::Blocks IDE bundles GCC. For straight C on Windows, I recommend the excellent Pelles C, which uses a compiler based on LCC.

With respect to the philosophical aspect of the question, I don't necessarily agree that it's hard to learn a new language by yourself, although if you're switching paradigms, it can be very tricky to get your head around a completely new way of looking at problems.

What I think is a bigger challenge is developing good practice in the new platform - without other developers and mentors to show you decent ways of performing common tasks, you may very well flounder around "discovering" all sorts of things that most experienced developers would avoid like the plague.

Rob
A: 

As a director of a software company I seek people who understand a particular stack of technologies very well. For me that is sql-server, linq to sql, c#, asp.net mvc, jquery, css.

A person claiming to know 10 languages, is a red herring to me. In most cases that person does not know enough about any of these language to be realy usefull.

btw: experience outweighs education as well.

Florian
Can can give some advice to someone who never went to school, that want's to get into a software profession? I've been programming for 3 years, and know all of the things you stated, but find it hard to get experience without a job. No job, no experience, no experience, no job...etc etc.
BBetances
- Consider moving to the Netherlands. I might hire you :o)- make sure your website is up and running- start writing a web log- state you are a developer (not an architect)- start an open source project- earn reputation points on this websiteIf you found my answer useful, could you vote it up?
Florian
+5  A: 

It's vitally important that you learn at least a couple of other languages as this will give you a different perspective on how to develop code. If you've only see Java and C# so far you have a very narrow view of what a programming language looks and feels like.

As to which languages then you need to cast your net wide. Many people consider LISP a must and there's several free implementations available. Pure C is well worth the time to pick up too, not least because it's genes are widely spread into many modern languages - and learning how to handle pointers and code closer to the metal will improve your skills. Myself I spent some time playing around with Prolog and although it's far from mainstream I'd highly recommend at least making it's acquaintance. A functional language is also worth experimenting with - perhaps Haskell.

It should be said however that working as a programmer at anything above the level of a journeyman is not about what language you should learn. In 20 years coding I have averaged approximately one new language a year - and I think that's pretty normal.

Cruachan
Just working them out - fortran, pascal, 86-assembler, C, prolog, cobol, natural, lisp, smalltalk, sql, delphi, c++, java, visual basic, perl, javascript, coldfusion, php, objective-c and ruby being things I have written serious (ie. paid) code in - probably another half dozen minor things too.
Cruachan
And just adding Python - particularly Ironpython - to that list.
Cruachan
+1  A: 

You can indeed get a job by limiting yourself to one language - I've seen many decently paid jobs where they are looking for highly experienced VBA programmers (I can feel some code purists cringing at this!).

I think the two key questions are, would you be content in limiting yourself to one language and do you see yourself as becoming a specialist or more generalist? You can only gain from broadening your knowledge in other languages and it may introduce you to different ways of thinking about code design that aren't inherent to your current languages.

Russ Cam
+3  A: 

The more programming languages you know the better you kan choose the "right" programming language for a specific solution. You get to know different approaches for similar problems. And you get a better overview of the "computer world".

But: the more languages you learn the less time you can spend to improve your skills in a specific language.

I think there is a basis set of languages you should know to choose from. One or two of each category:

A structured programming langue like:

  • Java (Web, os independent)
  • C/C++ (fast applications, driver development)
  • C#/VB.NET (Windows GUI applications)

A skripting language for quick solutions:

  • Ruby
  • PHP
  • Perl
  • shell skript (Bash)

Web specific languages:

  • HTML
  • JavaScript
Eduard Wirch
+1  A: 

I read one or two basic tutorials, then start writing code by setting up incremental challenges for myself and using the documents of the language to fill-in questions along the way.

Realize that pretty much every imperative language has the same core stuff and then maybe some sugar which makes it nicer/meaner for your specific task.

The core stuff should be quick to sort out: do i need a line-ender, what will i be doing loops with, how do i define a subroutine, if it has an OO element how do i make a class, blah blah. The sugar might take a bit longer to acquire because you'll usually have to write some programs to really get why its there.

When you have this grounding, code up the thing that motivated you to learn this language in the first place, maybe participate a bit in a community surrounding the language, and there you have it, you'll be pretty well versed!

A: 

My opinion is that you should at least one of the "popular" languages ( C/C#/C++/Java ) and at least one scripting language ( Perl/Python/Ruby ) . If you know a language from each category , you can learn any other language pretty easy .

Geo
+1  A: 

It's also important to familiarize yourself with the concepts of different programming languages, even if you never actually use them. IMHO people in general seem to spend a little too much time too soon learning nitty gritty stuff like syntax etc, and not enough time understanding the concepts of programming languages.

So read up a little on the history and intention of each of the common languages today, and see what programming paradigm they are associated with. Think about what the languages manages to accomplish in terms of problem solving, and what they failed at, why some languages are being abandoned and so forth.

jandersson
A: 

Define a project for yourself and use the tools and language best suited for it.

  • You'll need to learn Objective-C to make a good iPhone app.
  • You can't make a good website if you can only code in C# and Java.

When you have a ‘mission’, learning the best languages and frameworks to complete it is easy.  Learning a language for the sake of learning a language is a lot harder.  Additionally, the hard part often is learning some new framework, the grammar of a language is much easier to internalize than figuring out what The Right Way™ of building something with a specific framework is.

In your carreer you'll want to balance being an expert in something with being flexible enough to learn something new when you have a ‘mission’ that's best built using something you've never worked with before.

Like others have said, the more programming you do, the less important knowledge of specific languages becomes and the easier it will become for you to solve the real hard questions, like how to code for readability, maintainability and flexibility using the skills you've built up over the years.

Dirk Stoop
Actually, I mentioned Java and C# because those are programming languages.I do know HTML, CSS, Javascript and PHP too, but only PHP is a programming language. I wasn't aiming at Internet design with this question, so I didn't mention them.
Vordreller
I wouldn't personally, but you CAN make a good website if you only code in C# or Java, unless you mean: you will get stuck if you don't know HTML, which I agree, although I wouldn't call HTML coding, per se.
Jared Updike
Yeah, discussions of whether writing HTML/CSS should be considered 'coding', that's more or less what I was going for: Not a concrete answer to the question but merely an illustration for my idea that learning a language is easiest when you have a need to learn it.
Dirk Stoop
+1  A: 

i havent found learning a language difficult. However i found learning APIs difficult if you know nothing of the core and try to do a specific thing (you need a tutorial). msvc is great for c++, alternatively you can use gcc with codeblocks IDE.

You dont want to be limited to C#, well i recommend learning objective C, OCaml (i am using http://www.ocaml-tutorial.org/the_basics as we speak) and python (or lua). Learn them in any order. I also recommend mastering one of the language (you may want to master C#). I dont know what the C# counterpart is but i remember after i did A) template specialization + basic template metaprogramming B) copy ctor overloading C) return overload (class { ... operator SomeType() { return mSomeType; }) i was able to be especially productive and had no problems writing great classes and great code.

acidzombie24