55

By now I work with asp.net and C#. I have done a decent work in Java as well. I am planning my career in such a way I should be language-agnostic someday. What are the things that I need to learn?

First would OOP paradigms as its speaks about the Class design. Are there any others?

4
  • 2
    Are you trying to: avoid being labeled, have job flexibility, or on some vision quest?
    – JeffO
    Commented Sep 30, 2010 at 15:04
  • 2
    @Jeff Yes! to avoid being labeled and not to fight that my language is THE BEST ;)
    – Gopi
    Commented Oct 1, 2010 at 4:51
  • I'd be more likely to hire a guy with a strong opinion that didn't agree with mine. Because then he could write the Java. Commented Jun 14, 2013 at 6:30
  • If you did that recruiters would skip over your resume. Commented Mar 15, 2014 at 20:38

4 Answers 4

69

To be language agnostic you need to have experience in all of the common styles and types of languages.

  • An imperative language (You tell it what to do, step by step. Eg - C)
  • A declarative language (You tell it your goal, it figures out what to do. Eg - SQL/HTML/Prolog)

Also:

  • A functional language (Functions are key, avoiding state and side effects are the goals. Eg - Haskell/OCaml/Lisp/F#)
  • An object oriented language (Architecture where objects encapsulate related data and the methods that act on them). Eg - Java/C#)

Some typing styles:

  • A statically typed language (Data types are defined and checked at compile time. Eg - C#)
  • A dynamically typed language (Data types are checked at runtime. Eg - Python/Javascript)
    Experience of strong vs. weak typing is also useful.

Some different runtime styles:

Lower level stuff:

  • Something fairly low level (Eg - C)
  • Some dialect of assembly (Eg - NASM)

On top of that I would say you need experience of some concurrent programming and something event driven. You should probably also make sure you know something about the various domains such as web programming (client & server), rich client development/desktop, games. You might also want to learn about embedded programming, or dedicated hardware (like games consoles), and mobile development is becoming an increasingly relevant domain.

Others have also mentioned that it's worth getting some experience of Generic programming and Meta programming approaches.

When you learn these paradigms avoid just learning the syntax and writing in your old style. I've seen many C# devs write JavaScript as if it's statically typed. Don't do this, try to learn the language paradigms and embrace them.

If you've done all of this, the differences between languages will become largely syntactical so switching will become a fairly simple exercise of learning some new syntax.

Don't forget though that modern programming is almost always dependant on a framework, so familiarising yourself with the common and popular frameworks for each language you learn is also critical. Knowing C# is irrelevant without .net.

15
  • 9
    How is HTML declarative in the given sense? "Goal -> Action"? It doesn't do anything really. Commented Dec 23, 2010 at 14:42
  • 3
    A great declarative language that I can only recommend looking into is Prolog. It's different from anything else -- no functions (but relations that work either way around), no explicit control flow (the interpreter solves everything for you), just one great data structure (terms, nothing else is needed.) It's incredibly fast in what it does, doing millions of unifications and inferences per second -- and the time needed to develop something is about as short as in Python compared to C/C++. Commented Dec 23, 2010 at 14:50
  • 3
    @Felix: HTML, goal = "I want a label and a text box". Action = The layout & graphics engines figures out how to draw them. The details are down to the individual browsers. You only define what you want not how to do it. See here. I agree though, It's not really a "language" as such. Prolog is a better example, I'll update. Commented Dec 23, 2010 at 15:17
  • 1
    +1 For a good list of types, language choices are a little away from the paradigm in places, but overall excellent.
    – Orbling
    Commented Dec 23, 2010 at 15:38
  • 2
    By the way, you should add "Different domains/levels of abstraction" : web, interactive web, desktop tools, desktop games, persistant games are not built the same way as constraints and distance to the hardware is different, making the languages choice (or even existence) more obvious to the one wanting to understand what is it to be agnostic.
    – Klaim
    Commented Dec 23, 2010 at 15:49
4

I don't think you can become truly language agnostic. I find that I "think" in my current language (at the moment C#).

However, having said that, I think you might be able to separate the design from the code by trying to think in pseudo code rather than a specific language, and actually write it down in this format. This could help you concentrate on the design and architecture decisions rather than the implementation in your current language. The drawback with that - as Simon points out - is that the language and framework you ultimately use will inevitably influence the design. So as your design develops it will become increasingly tied to the language & framework.

2
  • +1 for "You can't be truly language agnostic". But I don't quite agree with your second paragraph. I do think it's important to design for the language & framework you are going to use. Commented Sep 7, 2010 at 11:32
  • @Simon - you've got a good point about designing for the framework. I'll update the answer.
    – ChrisF
    Commented Sep 7, 2010 at 11:36
3

Reading your question and some of the answers one can have the impression that you equal "language agnosticism" with "knowing every paradigm on earth".

I'm not sure whether knowing every paradigm that exists or knowing an assorted range of languages, spanning several paradigms and types of languages makes you "language agnostic".

It's like saying that having practiced all religions makes yourself religiously agnostic.

I think a language agnostic person regarding programming languages should be someone that doesn't know how to program in any language at all or doesn't care what language he/she is asked to programm with.

That said, some people say a true programmer can program in any language given access to that language's documentation.

If that is what you mean by "language agnostic" then almost any experienced programmer can program in any language he/she gets forced to work with, given access to the language documentation.

Maybe you want to be "language polytheist".

I myself am competent in several language paradigms but I'd prefer OOP when it aplies. So I guess I'm not agnostic.

You will hardly find anyone who doesn't prefer a certain paradigm or language given the liberty to choose.

0
0

It's not just the languages, Java itself has so many different modes that you could spend years just learning them all. You could learn:

  • J2EE features like Messaging and Persistence and the various servers
  • jsp and Apache-oriented toolkits
  • ant, maven and other build systems (Languages themselves).
  • The whole Groovy/Grails world
  • all the apache commons APIs
  • testing systems (Mocking, JUnit)
  • GUI builders like Swing, GWT...

And a hundred things I'm missing--JUST within java.

If you spend years covering the breadth (learning every language) you'll have trouble gaining the depth to work effectively in any one of them.

I'm not saying that learning a new language is EVER a problem, you shouold be actively doing so! I try to pick my next job based on what I can learn (what I haven't done yet), but I don't often pick a random language and learn it any more--Last time I tried that was with Scala and I left somewhat humbled...

2
  • To "the whole Groovy/Grails world" you could add ", the whole Scala/Play!2 world, the whole JRuby/Rails world, and the whole Clojure/Noir world". Commented Apr 3, 2013 at 14:37
  • 1
    I agree, wrote that a while ago and was just pulling things off the top of my head--although I'd probably just pick one of the web frameworks and go with it.
    – Bill K
    Commented Apr 3, 2013 at 15:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.