Day 4: Learn a New Programming Language
Hi, this is the forth part of a series of posts on 30 tips to becoming a better developer. If you would like to keep up to date with the topics that I am covering, just check the main post.
Why Learning a New Programming Language?
Few habits maintained by a good developer can be as beneficial as learning a new programming language from time to time. The reasoning is simple: no language is perfect, and most languages have some useful feature or abstraction that may enrich your pallete of abstractions. Consider for example what happens when you are used to strongly typed languages, such as Java. You start your program design looking for what types would be necessary to implement the concepts you are trying to represent. While I am not saying that this is the wrong way to go, there are other options that you can take when working with other languages. For example, if you work on a functional language such as LISP, you will be more interested in designing a domain specific language (DSL) that can more easily represent your problem — and this might be an even easier and more productive way of looking at the problem. Different languages have different things to teach about how to approach problems. By learning different languages, you are learning different techniques that would be unnatural in your original language. For example, it is possible to write OO programs using plain C. However, as everyone writing interfaces in GTK+ knows, it may be a process that is a little cumbersome. Learning a new programming language may be just a simple way to try a concept that you want to use somewhere else. For example, you may want to understand how a dynamically typed language works, and use some of the concepts in Java using reflection, for example. The combinations of possibilities are endless, you just need to start searching around.
How to do it
There are several opinions on how to go about learning new programming languages. Some people think that you should try to learn a language that is very different from the one you are using. For example, if you are using VB, try Ocaml (that might be a little too much, but you get the idea). Another option, which I think is easier to implement, is to use your current knowledge as a leverage for learning other languages. In that case, if you start with VB.NET, you can next try C#, which uses the same library and concepts, so it is an easier jump. Then, you can try Java to learn at least a different environment. You can also learn new languages based on the task you want to perform. For example, if you need to create a new website, you might try Ruby and a framework such as RoR. If you are going to write an AI based application, LISP or Prolog might be good options. You just need to search around for people that are working on the problem you want to solve, and try to learn the language they are using. Whatever the way you do it, I think it is good to try. You can’t learn all computer languages that have been created, but the experience of trying to master some of them will make you a more flexible developer, that knows the tool to use for a given problem.
Further Reading
- If you want at least to understand the differences between programming languages, the best thing is to take a general book on programming languages, such as Concepts of Programming Languages, By Robert Sebesta.
Go to the next post of the series:
Similar Posts:
About the Author
Carlos Oliveira holds a PhD in Systems Engineering and Optimization from University of Florida. He works as a software engineer, with more than 10 years of experience in developing high performance, commercial and scientific applications in C++, Java, and Objective-C. His most Recent Book is Practical C++ Financial Programming.
I definitely agree. I recently started learning ASP.NET (with VB. I’m not ready for C# yet. I’ll get there eventually) and it’s making my life easier in terms of making forms and pages. Also learning css has made it easier and helped me see other ways of developing web pages. I hope that all of what I’m learning will make learning Java easier for me, since that is my eventual goal. I’d like to “Master” a few rather than try to sample everything at once and not really be strong in any one.
Thanks for your informative posts!
By Caroline on Feb 20, 2010