views:

855

answers:

11

How many languages should a software engineer need to learn? I am a student of B Tech 2 and and I only have a knowledge of C. Please tell me about other languages and courses which a software engineer needs.

+2  A: 

The key is not the number of languages but the depth of knowledge.

sharptooth
+1  A: 

I always say the number is 1 - the primary language you use daily.

It helps to be conversant in others, but its ok to be less proficient in them - you only need them to understand what's happening, and to know when to ask an expert in that language/setup.

gbjbaanb
A: 

If you understand the concepts behind the language (which could be any language) then you can pick up other languages as and when you need them relatively easily. Here I'm talking about the basics like loops, arrays and the like as well as object orientation, aspect orientation and procedural programming.

There will be certain aspects of any language that only someone with in-depth knowledge will know, but these are relatively rare and discoverable.

ChrisF
A: 

You should know enough languages to be able to make an educated guess on which would be most appropriate to use for any given problem that needs to be solved.

Christoffer
A: 

Hello, there isn't a specific answer to your question. Some people can do well with a few, while some people prefer to be the 'go-to' person who knows almost everything.

In my opinion, for a student like yourself, knowing as many languages as possible isn't going to be productive and by the time you graduate, possibly the things that you learnt aren't of cutting edge anymore. One thing you can do if you're the practical kind of person is to look at jobs listing and their descriptions to see what skills you need to do well at that job.

Totally unrelated, but someone once told me that good programmers do well no matter what programming language/environment they use. That being said, it's easier to do well in some environments than others.

I would recommend knowing at least a scripting language (like PHP) and another managed language (Java or C#) before you graduate.

As for skills, you just need to program more to gain experience. In my opinion, the more you practise, the better you will be at it. At the very least, you should know some OOP programming and data structures. Generally, just try to learn things that would make yourself useful (to the world, or to the employers).

I hope this helps. =)

wai
+1  A: 

There are things which are more important than the number of languages.

For example, The Base Knowledge, underlying architecture, programming paradigms etc.

IMO, instead of learning two OOP languages, you would be better of learning one structured, one OO and one Functional language.

Aamir
A: 

A software engineer does not need to know any programming languages at all. A developer needs programming languages. The purpose of a software engineer is to model a software system in general (like: How many tiers? SOA? etc.) - for that you don't need programming...

If you need to do software development it is most important to understand basic concepts (like Object Oriented vs. procedural, imperative vs. functional, compiled language vs. scripting language, etc.).

Also, you should understand algorithms and their complexity (but that again is language independant).

Thorsten Dittmar
The only problem with that is, in most cases, a software engineer starts as a developer or at least has some development tasks. If a software engineer can not function in all aspects of the software lifecycle, then that software engineer is, IMO, useless.
Thomas Owens
what you described is more often a technical architect's role. Software engineer often is another term for programmer, though presumably one that doesn't hack so much and has higher professional standards.
gbjbaanb
A: 

You might want to look at the popularity index. But, remember popularity is not everything.

Choose a programming language to start yourself -- And, C is quite good.
Continue getting better at programming over years. Track tutorials and practice.

Focus on Algorithms and efficient programming in whatever language you use.

nik
+2  A: 

At least 17

Grzenio
Unless one of them is Fortran 77, which only counts for .98 of a language, because of some problems with a long-ago upgrade. To make up the .02 of a language, a good engineer must speak in a bad French accent while talking about hash tables.
Beska
+3  A: 

Try to learn languages with different paradigms, this will improve your skills in all languages (one language for each paradigm is ok, I'm listing in my order of preference):

  • "Structured Programming": C, maybe Fortran if you're going to work with numerics
  • Generic Programming & OO: C++
  • Script Language: Python, Ruby or Perl; Matlab if you want numerics
  • Heavy Object Oriented with VM: C#, Java or Smalltalk
  • Functional Programming: Ocaml, Haskell, Scala
  • Machine Programming: i686 Assembly
  • Logic Declarative Programming: Prolog
  • Database Querying Language: SQL

But also don't rush yourself... learn one language at a time... maybe a new language every year... with this you're going to have a very handy toolbox for any problem you might need to solve ;)

e.tadeu
+1  A: 

As always, 42.


Barring that, I suggest you look into languages which are as different as possible, e.g. :

  • Learning C? Take Ruby for a spin;
  • Top-class Python hacker? Look into C# and see what that does.
  • Java know-it-all? Take a deep breath and dive into Haskell.
Robert Munteanu

related questions