Do you prefer learning new languages or just working in your current language and increase your knowledge of it? Which one provides more real-world benefits, and why?
views:
1062answers:
24Which is more advantageous: Learning new languages or increasing knowledge of ones you already know?
I prefer being middle skilled in many languages, especially if their paradigm is different. Being open to new language brings a lot in imagination, and how to design algorithms.
However in compagnies usually like when you are top skilled in few languages..
I would go one step further and say learn new techniques. I have found the study of patterns to be especially helpful.
Both are important.
I always think of Chad Fowler's book book , he talks about being an "expert" and also about being the guy who even when you worked on one thing for a long time has the skills to step over and do something else.
Both skills are very marketable and important to a company.
Both. There is no such thing as stop learning a language, as well there is no such thing as stop learning new languages.
It certainly depends.
Besides, the excitement of learning a new language and obviously adding it to your skill set make sense. But in the end you end up becoming a Generalist .
I would prefer to be a Specialist first, i.e.get better at a language i like and regularly use and then become a Generalist.
This is a probably a decision you always have to make as a Developer. :)
It gets increasingly difficult to want to continue to learn more techniques in the same language. I'd have to say that learning a new language excites me a whole lot more, and I'm okay with that.
I rationalize learning a new language over learning deeper parts of a language I know by telling myself that if I ever had to use those advanced points of the language that I could easily pick it up because I know the language so well.
However, this does not have to be your strategy; perhaps it excites you to try to become one of the top language experts in one particular language.
Both are good idea :
You need to choose between be a generalist or an expert !
As generalist, I guess you will find easier a job that as expert.
In the other hand, you will earn more money being an expert !
Moreover, if you expect to become an IT manager, so learn as many different languages as possible !
Learning new language and that too the one really differs from the current ones you know in semantics and structure will definitely broaden your spectrum of knowledge.
There are two aspects to this question:
- Learning out of personal interest
- Your "Employability"
Point 1: Humans are made to learn. Thats why we play games and pursue new things. In this case, if you are interested in skills development for purely personal reasons, learn a new language over getting more involved in your current language. It will be more fulfilling to you.
Point 2: You programme to be economically active. The languages you know make you employable or not. So, if you know old/imminently outdated languages or a language that is a very minor player in the market, learn a new language asap to remain employable. If you know current languages, then you are lucky and have a choice: learn more about your language or pursue related technology options (e.g. you do C# web apps then look at PHP/Python and visa versa). This will really depend on your portfolio of skills, experience and future work intentions. But very important, whatever you do remain employable to others & yourself otherwise you are wasting your time.
:)
Why can't you do both? There is no reason that you can't improve you skills with the language you currently use AND pick up a second language. You don't have to stop programming and learning in your current language just because you are trying to pick up another one. One doesn't stop where another begins.
I honestly think that learning other languages such as Python and SQL has altered fundamentally my ability to think in my core discipline of C++.
For instance, the Pythonic approach to minimalism, legibility, algorithmic focus can unlearn a lot of bad habits. The aspects of functional programming present in newer languages can communicate deeply and teach more about alternative approaches for structuring a technical solution. Not to be reckless, but it is good to have more than one approach to consider in doing a job.
If I had to choose either/or as your question puts it, I would say that learning other languages adds more, as other languages naturally cross-fertilise your mind in your primary language.
You should however seek to know very well your language of choice, you can't be a great programmer in any language without knowing the language well.
Jack of all trades, master of none?
I think there is benefit in studying other languages because they bring ideas. For instance looking at java and C++ helps understand the motivations for C#.
I've also found that functional languages have greatly influenced Linq which helps you understand how to use it properly and the things that it can do outside of database work.
Still I guess everyone's answer will be different because their circumstances are different.
Personally, if it's a language of a similar type e.g. you know C# and want to learn Java, I would not be in a rush and instead polish what I already know in the language I know. If it is a completely different paradigm e.g. functional language, or dynamic, perhaps I would learn it
I think it is important to have 1 or 2 languages as the "main" languages you will use on a daily basis. This language will typically be something industry mainstream like Java or C# or C++.
Other languages can be used in your personal scripts or just keep them handy as the correct tool to use for certain problems.
I do suggest learning at least 1 functional programming language, as their idioms are used frequently in mainstream languages and also more frequently in Python and Ruby. I have found that they also tend to result in short code, which for me means less bugs :).
This is how I prioritize things:
Choose one of the languages that you use at work and become ridiculously good at it. If at all possible, be The Person To Ask if someone has questions about it, and welcome questions. This will both increase your reputation at work and help you learn the language better because you learn a lot by answering strange questions. For me this language is Python.
Keep abreast of the other languages you use at work. Keeping food on your table is the most important. For me these languages are Java and Bash.
For me this is about equal in priority with #4. Learn the language that you think is the Next Big Language. Even if it turns out that it isn't as long as you didn't pick the language completely stupidly, it will be moderately marketable in the future. For me this language is C#.
Learn a language with a novel paradigm that changes the way you think about programming. This will make you a better programmer in the other languages you use. For me, this language is Haskell (I'm nearly satisfied with my knowledge in Haskell, so I'll be moving to Clojure soon).
For me this is about equal in priority with #6. Maintain the old languages you know (basically, languages that used to fit into 1-4 but don't any more). You don't have to do much here, just look over some old code and see if you can still figure it out. For me, these languages are C, C++, PHP, JavaScript and Perl.
Grab a bit of knowledge in as many languages as possible. Think of this as "tryouts" for your next #3 or #4 language. I make it my goal to look at about one a week. Just like #5 don't spend a lot of time on this, just look over some code people have posted online. I've looked at too many languages for me to even remember, but some that I've recently looked at are Clean, Arc, Clojure, ActionScript, Snobol, OCaml, HLA, Prolog, Squirrel, Scala, F#, Factor, and many many more. I wouldn't claim to know much about any of these languages, but they give me interesting ideas sometimes.
Lastly, the best way to learn is by doing. I often get started in a language by writing a simple poker simulation or a problem from Project Euler. This is especially helpful for learning language gotchas, as you generally don't learn how the language tricks you until you've been bitten by it.
From my prospective, learning a language is not difficult to do. You might gain some perspective of a Computer Science concept by looking at it in multiple languages, but for a general real world role, learning a language has only as much value as your circumstances give it.
As a rule of thumb, I think it is a good idea to have one language that you know well, as well as a framework used by that language. It gives you depth that is necessary for a professional developer. If you are a really good developer, you might have a good deep knowledge of two or three languages and frameworks.
Beyond your core knowledge, it is a good idea to have working knowledge of any supporting languages that you might use (SQL, BASH, Perl, etc).
I would also say it would be a good idea to learn new languages that could replace your core language, but only at a shallow level (unless a need arises that you have to use it) because this will keep you flexible and capable of adapting if need be.
Really, today is all about the frameworks.... the language (especially on VM/CLR systems) are simply your path to using those frameworks.
I think learning new languages is a must. Not for the sake of using it - just for the sake of expanding ones knowledge.
Learning a new language widens your horizons and usually leads to better understanding the language you specialize in, thus better programs. You can import new approaches of the new language to your main language toolset.
P.S. Specialisation is for insects. ;-)
I think it's always good to specialize since an employer would rather hire someone with 6 years of Java experience rather than someone with 3 years Java, 3 years .Net.
I have been programming in Java for years, but lately I am exploring Scala and Erlang. Not that they will be taking over Java in the future but it's interesting the explore something completely different (OOP vs FP) and try doing cool stuff with it. Who knows, the new knowledge might change the way you think when you are programming with your trusty language.
Is it too much to ask for both?
Seriously, I've spent more three years (damn... that's it?) learning Java and I still havn't seen a quarter of it, and I'm sure 3 years from now I'll still be learning Java, actually let's extend that to 6 years. My point is even when you're a master at something I'm sure you'll still be learning it. (note: not talking from experience here, just pretty sure that's the way it'll be :P)
As for learning other languages, especially ones that use different paradigms, it IS like learning another language. With my java background when trying to go to c++ I feel like I'm just learning small syntax adjustments and new names for things I can already do (from a personal standpoint) much more efficiently in Java, whereas going to Python I see different uses where it can overcome limitations that Java has.
So learning different languages is like equipping a toolbelt. I'd say always learn new languages but keep learning what you're best at, that is, if it's something that is highly marketable. I know that mastering freeBasic is probably not the best language to master.
Neither.
Don't think about software development in terms of which languages (or tools) you use. Learning to write another CRUD application in a new programming language (or with an unfamiliar set of tools) might expand your knowledge and perspective slightly, but in the end, you'll still have a very narrow view of programming defined by the CRUD problem-domain.
I think the better question to ask yourself is: Should I learn to solve unfamiliar problems (compilers! raytracers! speech recognition!) or should I delve deep into the current research & state of the art for some problem domain I already know pretty well?
Either choice is valid, and a great way to learn.
But I think the focus on languages and tools is not very interesting.
I can imagine a conversation with an architect friend (not a software architect, but the kind of architect who designs actual buildings). If he said to me, "I'm thinking of either learning AutoCAD really well, or branching into MicroStation", I'd be very surprised. Instead, I'd expect him to say "I'm studying the modernist architects and trying to figure out a good way to blend the steel-and-glass look with Gothic forms and shapes."
In other words, be focused on WHAT you build, rather than on the tools you use to build things.
As an employer I want to see a varied background - it shows to me an ability and willingness to learn, but you need to be able to be good enough in one/some so as to be able to jump the qualification hurdles.
So if there are too many, especially if it is at the expense of becoming too skilled in any one, then I will wonder about your motives. Are you doing them to pad out your skills or because you've genuinely found them to be useful. I want to employ someone who'll be doing the job, not always playing around with the shiniest new toys.
If you're someone who isn't an expert in a particular technology, I would encourage you to consider gaining expertise in a technology.
If you've already got that expertise under your belt, I would consider broadening your technical skills. Another option you could consider is developing your softer skills.
I once read an excellent book called the Trusted Advisor, I think its quite relevant to the topic at hand and I would recommend to the questioner. The key thing about becoming someone that people trust is that you need to demonstrate expertise and competence in a area important to your clients/boss/potential bosses.