9

I read A programmer should concentrate on at least how many languages?, and I found out that I don't know languages in number 2, 3 of first answer. I want to learn more languages to increase my knowledge and programming skill. However, usually in companies they use fixed framework and languages and changes seldom. So I'm not sure if I can get a chance to learn those languages and I think it would be same to other programmers.

However, I've seen many developers who knows multiple languages in here. How do you get chances to learn many languages?

Update

I think, there are many people who feel uncomfortable because it seems I don't want study in my spare time at all. Actually, that's not true.:) I'm an enthusiast programmer and that's why I posted this kind of question here. I study in my spare time but I just thought it would be not enough to be skillful in languages. Anyway, thanks for all answers!

3
  • 7
    Simply, learn new stuff in your sparetime.
    – Jonas
    Sep 4, 2011 at 13:49
  • 1
    Dude, that answer has been posted by a 39 yo programmer. I think that it is a good list, but do not kill yourself over it.
    – Job
    Sep 4, 2011 at 13:49
  • 7
    You don't "get" chances. You MAKE chances. If you want to learn more languages, then go out and do it. Don't wait for some mythical job responsibility to come to you. Sep 4, 2011 at 14:00

9 Answers 9

10

I find the best way to learn a language is by using it immediately to make something useful or that you need.

For example I found myself in the need to automate many operations I had to do manually every time. Repetitive tasks, files and folders creation, etc... so I simply chose a scripting language to make some useful tool. I went for Perl, and started to learn the syntax and the functions I needed to make my script, thanks to online tutorials and books.

In a couple of days I had my tool up and running, then in my spare time I kept learning new things about the language and adding more functionalities to it.


Another great option that comes to mind is: if you don't find a language you like, or you think doesn't fit your needs completely, you can still create your own language.

I'm doing it now with Perl, I chose a syntax that would help me best solving my specific problems (since you are writing your own language, you may want to choose the right syntax for the job, the one which best describes and solve your specific domain issues).

The result? Development is now much quicker and the code itself is much more descriptive because it's a domain specific language. I asked a question related to this topic some weeks ago with many useful links.

You can use any scripting language to create a new one, even with PHP.

2
  • I didn't know that I can create my own language with Perl. Could you elaborate it or give me some reference? Sep 5, 2011 at 9:46
  • I asked for this here. Basically you have to create a script which will understand (parse) your inputs and make different tasks based on what you type. It can be a merely set of functions or a completely new language syntax. Then you can automate it all if needed. Not only with Perl, you can use any scripting language to create a new one.
    – Jose Faeti
    Sep 5, 2011 at 9:58
8

These sorts of questions always baffle me. I've used 7 languages professionally, have written code in around 5 more languages in hobby and academic settings, and can read code in maybe a dozen more languages. Not once have I learned a language just for the sake of it. There's always some concrete and immediate goal in mind. For example, this weekend I learned enough Android libraries to start working on an app for my family. If we had iPhones I would have learned Objective-C.

My feeling is that knowing multiple languages is a symptom of being a skilled, or at least enthusiastic, programmer, not a cause of it. If you can't think of a compelling reason to learn a new language, I don't know how much it would benefit you.

3

The best way to learn a new language when you have a problem to solve. Rather than just using what you are comfortable with, spend some time to look at what tools (languages, frameworks, libraries) might be useful in helping you solve the problem. If you have the time to learn the new tool, go for it. You might not be able to do this at work, when you have schedule pressures and technology limitations driven by outside factors, but there's no reason why you can't take this approach to personal projects.

2

You just have to make the time to do it. Check out the book "Seven Languages in Seven Weeks" from the Prags. It will give you an intro to seven very interesting languages and from there you can go all sorts of places.

1

Just start using it. Obviously, building a production system from scratch in a language you have never had any exposure to is a bad idea, but here's a few suggestions:

  • Learn in your own time. Pick a project you find interesting, where you are confident you can finish it on your own. It's best to do some introductory reading on your new language to judge if it is suitable - each language has strengths and weaknesses, and it's best to start with a problem that the language was designed to excel at.
  • Start doing maintenance tasks on an existing project. This way, you can pick up a large part of the language without even reading documentation: a lot can be inferred from example code, and for the parts where you do need to read documentation, it will be much clearer because you've seen the code already. It's also easier to look up "what does this code do" than "how can I write code that does X".
  • Use your new language for small tools and helpers you need: shell scripts, throwaway code for specific tasks, quick calculations (e.g., the interactive interpreters of many dynamic languages - python, lisp, haskell, etc. - make for excellent calculators). Not all languages are suitable for this though.
1

Pick something relatively small that you've done in one language, and develop a drop-in replacement in another language. Do this just to challenge yourself. In order to complete it, you'll learn a great deal about the other language.

Just within the past week, I decided to learn and re-write a web-service back-end in NodeJS (previously a JSP service.) It only took about a day to get the bare-bones service working, and a few days later I had expanded its infrastructure, error handling, logging, and added live monitoring. It is now superior to the original. Whether management accepts it or not is immaterial, as I've learned something and am very happy with it.

1
  • I consider that some fraction of my job is "research". In 1998 research meant fixing Y2K bugs. Last month reserch meant learning Subversion. I have beeen doing research for 40 years. When I list the languages I must list them in alphabetical order.

  • When I learn a language, I read the reference manual cover to cover. Then I actually use it for a few months. Then I read the reference manual again. The second reading reveals lots of tricks and implications that I missed the first time through.

  • Practial research covers normal languages, like C# and Pascal. Advanced research covers weird languages, like LISP and FORTH. You will probably never use LISP professionally, but learning it broadens your mind considerably.

  • Of course, in my environment, I am not paid for time, I am paid for delivery. If I can deliver in two weeks, using six hours a day, I can use the other three for research. If it takes twelve hours a day, well, no research then.

  • All research, of course, should have some potential utility to the one paying me. Small utilities are good; next time you want to process your C source code, try it in Python. (No, I don't know Python, but I've heard it's good for string manipulation.)

0

Sometimes opportunities come from you employment. There are usually one of three drivers for this type of opportunity.

  1. It is a brand new technology. For instance, many companies paid for C# training for their developers in the first two or three years after .NET was released.

  2. It is easy to learn. For instance, in a linux shop, you will find you need to write .bash scripts. If you have been using terminal sessions, etc., and there are other developers who have experience writing them, you should be able to acquire this skill, if only to automate some of your own tasks.

  3. It is uncommonly used technical skill, and your company does not want to go through the time and expense of finding a consultant to do the work. For instance, I learned how to write XSLT because we needed an easy way to transform some XML (log) files for display.

Other opportunities you need to make for yourself outside of work. Choose carefully -- what technologies do you see being useful in the future? In these cases, you have to put time and effort into learning and applying the technology. This should be part of an overall career plan, and you may have to pay for classes. (I was lucky -- when I learned Java, they were teaching it evenings at a local community college).

0

Answering your question, from my own experience ( I am fairly new in industry so not much of it) I get to learn new languages by doing some research to see which language best fits my needs. In college, I had a projet in cryptography which required use of large Integers. It was becoming quite combersome in C++ so I turned to Java as it provided BigInteger class. In my current job, I could see that shell scripting was not able to completely solve my problem without becoming too complex so I learnt Perl. Learn on the fly is my advice as one;s requirement. Ofcourse if you find yourself bored, there is a whole world of languages to be explored.

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