Jan 092013
 
 January 9, 2013  Posted by at 6:32 pm Not So Stupid Questions  Add comments

[To celebrate my first year of programming I will ask a ‘stupid’ questions daily on my blog for a year, to make sure I learn at least 365 new things during my second year as a developer]

I come from a polyglot family. My mum is insane when it comes to languages and speaks Norwegian, Hungarian, Romanian, English, French, Spanish and more, I speak four fluently and two so and so. For my family, languages was there so we could communicate, and to create a bridge between cultures. We also enjoyed the challenge, the hunt for new words and possibilities, and the pure coolness of being able to switch over to another language when the situation required us to do so.

Should we aim to become polyglot programmers or not? What would your CS professor say?

Should we aim to become polyglot programmers or not? What would your CS professor say?

So when I started programming I never quite got why one would limit him or herself to just one language or platform. But most developers I met would religiously preach one language or platform, completely trashing any other possible option – without an appreciation, knowledge or understanding for the alternatives.

And I just recently read a blog post that states that “ployglotism is the worst idea I have ever heard”, beginning with the phrase:

Let me first start off being a little facetious with a little tongue in cheek…I’m an American. I have no need to speak another language because well, I speak English. 99% of the civilized world speaks English so WTF should I ever learn another language?- devloper and blogger

He then lists some problems, which I do think make sense (to some degree) such as maintenance, refactoring, installation and support. These arguments are in regards to polyglot software.

But I still do not agree, the benefits of learning different languages, and the evidence supporting the benefits, is for me too big to ignore, and therefore I have come to the conclusion that it must be beneficial to me as a programmer as well. And while I’m not sure how I feel about hardcore polyglot software, I fully embrace the idea of learning several programming languages fluently. But what do I know, I’m just 551 days in.

For me a polyglot programmer is a programmer that is fluent in several languages, also understanding where and how they are best used (set in context).

For me I can only see the following reasons for not wanting to learn a new language:
1. Afraid to step out of the comfort zone – reduce sense of risk ( and to some degree dissonance reduction)
2. Social inertia- (social pressure convincing you there is only one ‘right thing’ )
3. Some sort of Dunning Kruger effect in RE to the language and the person– not knowing what you don’t know leads to you thinking you know it all
4. Honestly not seeing the benefit or the need / disagreeing with the claimed benefits
5. Thinking that your mind is limited in its capacity (actually- learning new things increases our ability to learn and remember) or similar
6. Time constraint – or believing/feeling there is a time constraint
7. Scared they will like it more than the current language/framework they work with (dissonance reduction again)

I am very curious what your opinion is
1. How do you define a polyglot programmer
2. Is there a benefit of being one, what are they?
3. Why do some many shy away from learning a new language / preach only one language?
4. What are some of the real concerns about polyglotism, in regards to software and the developer?

  15 Responses to “Stupid Question 123: What is a polyglot programmer and should we be one?”

  1. The best thing I ever did for my programming career was to leave the comforting confines of my beloved Delphi, and start exploring other languages. It helped me to move my thinking from “How would I solve this in Delphi” to “What design do I need to solve this”? It not only made me a better Delphi developer, but a better developer overall.

  2. 1. A polyglot programmer is somebody who knows at least 2 languages and can choose between them when appropriate. Very easy to pick up a new language within the same genre/paradigm, and extremely beneficial.

    2. The benefit of being a polyglot programmer is broad and deals with diversity. As much as knowing more than one natural language helps you communicate, it also gives you a window into another culture. It presents you with new problems and gives you the tools to think of different (perhaps better) solutions.

    3. There is some misconception or disconnect that people have that leads them to believe that it takes as much effort to learn a new language as it took for the first one. Given that is generally true for natural languages, I can see their point.

    Also, there is some theoretical basis to why established programmers get set in their ways and lose motivation for other languages in that they believe that one language fits all. This is theoretically true; all programming languages can solve the same problems and have equal power, however, our ability to express our solutions is important. That is the reason why we still make new languages, after all: more ease in our expression.

    4. There are concerns I personally have toward programming languages in general. You see, we make new languages, and recreate the wheel too much with the tools and support for each. The modularity is terrible! New standard libraries which do the same things, new IDEs to lock us in for no good reason, or even too much coupling with a new VM we don’t need.

    If we broke down such that languages could share or choose standard library implementations, IDEs, and VMs really easily (not as a second thought) then it might be easier to get an environment set up for many languages at once. Getting the environment set up for a new language is notoriously difficult. We need to reduce the curve at that point.

  3. I think that learning more languages is a way to become a better developer, with that said, I also thinks it’s dumb to try to learn as many languages as possible when you aren’t an experienced programmer in atleast one language. It’s not until you’re experienced enough in one language that you can learn new tricks in a new language. We see this a lot in people coming from a PHP background that wants to learn C#. With lacking experience they have trouble grasping the most basic stuff common to both languages. But with proper experiene it’s easy to learn a new language and benefit from it.

    With all that said, people learning new languages for the sake of knowing many languages are doing stupid stuff, learn each language well enough to learn it’s strengths and weaknesses.

  4. 1. I was having a discussion with another programmer who accused me of being a “blub” programmer. A blub programmer is a person who favors the hypothetical language “blub” more than any other language. He insists that the language blub is the best language for any given problem. I would assume that a polyglot programmer is somehow the opposite to this definition. I don’t think I’m actually a blub programmer, but yes, I do have some preferences.

    2. Most programming languages are “Turing-complete”, which is a property that says that any particular algorithm can be implemented in this language. Why then learn more than one programming language? There are many reasons. A certain language may work better in a certain problem domain. If you automatically discard other languages then you will not learn about their potential benefits and you will not be able to make independent assessments about strengths and weaknesses of different languages.

    3. I think it’s unavoidable that you develop certain preferences. Sometimes we let these preferences overshadow the fact that there is a better way to solve a particular problem. However, sometimes it’s just a matter of different syntax – in these cases why not stick to the syntax that you’re most comfortable with?

    4. There are some programmers that are truly polyglotic (knows hundreds of different languages); in these cases I’d say it’s more about an encyclopedic obsession with languages – nonetheless, it’s interesting to listen to what these guys have to say (they’re usually pretty bright.) However, and I think this is an important point: I think one should discriminate between one’s ability to comprehend a language and one’s ability to fully exploit it. If you just learn the words by heart then they might not carry a lot of meaning. Programming becomes meaningful when you think about ways to solve problems.

  5. Well, learning several languages allows you to step out of constraints of the only one language.
    Polyglot starts thinking in more complex, systematic way.
    One-language programmer migth take language limitations as axiomas. Polyglot knows, what’s possible, what’s just language limitation.

  6. I’m a bit ambivalent on this matter. I think knowing several languages is good for you personally. A good programmer adapts not only to the language, but also to style and conventions in a project. The code he or her produces fits seamlessly with the existing code base as a new chapter in a book. A lot of experience from different programming environments, in more aspects than just syntax, is necessary to pull this off.

    So being a “polyglot programmer” makes a lot of sense, in the same manner knowing several languages does as you point out. That does not mean that it makes sense to randomly switch language within a group of people with different knowledge of languages just because you think one particular point can be expressed “better” in some sense in Italian or Spanish or Python or C#. If I meet a group of unknown people in a bar in Rome and want to ask for directions to the bathroom it does not makes sense to use German just because I can express the question with fewer words in that language than I can in Italian.

    So “polyglot projects” generally does not make sense per se, unless you have to, e.g., if you are working with integration of bits of software from different environments.

    Even switching programming languages between projects but within the same group of developers is questionable. It’s fun, and beneficial for the members of the group, but a programming language today isn’t so much a language as it is an entire eco system of software libraries, IDEs, tools, conventions, etc, etc. Generally, mastering such an eco system takes years, even for good programmers.

    In my experience, when a programmer emphatically states that “we really should write this bit in language x, because it’s much better”, it often means either of two things, and neither of which that the programmer is “polyglot”. One, the programmer knows x much better than the language we are working in and tries to move the project into their comfort zone, or two, the programmer does not know x that well at all and is basing the opinion on a ten minute screen cast emphasizing all the benefits of x leaving out the draw backs and the internet hype produced by others who have seen the same.

    Social pressure goes both ways, both for keeping status quo and abandoning it. Which is dominating depends on the group.

  7. For me, one of the main reasons I love working with software development is that I get to constantly learn new things. Just doing the same thing over and over again, with the same tools, sounds cripplingly boring and I imagine it would really stump the creativity and general ability to solve problems.
    Despite that, every time I start programing in a new language I will, sooner rather than later, enter a phase where I ask myself what the heck I am doing and if it really worth going from feeling great at my job to feeling (and acting) as a complete beginner. The answer is always yes, the benefits are so many, including getting new interesting angles to common problems, quicker thinking, more knowledge about programming in general, etc.
    But I realise that the period of low confidence in yourself and your over all programming abilities might scare off a lot of people. It is a demon you have to face – the possibility that you might not be so good at something that matters to you as you think you are.

  8. In 32 years I’ve programmed (roughly in order) in BASIC (repeatedly), FORTRAN, COBOL, Pascal, Modula-2, Hypertalk, FoxBase, 4th Dimension, C, C++, Objective-C, Python, Flash, C#, Ruby, XSLT and dabbled in Smalltalk, Lisp, Forth and now trying to find time for Haskell. Oh, and there were a couple of strange scripting languages along the way.

    I can’t think of anything which provided a shift in my thinking about problems so much as when I learned Python, after about 20 years of mainly procedural languages. But I took the time to learn the idioms of Python.

    I was very fortunate that the friend who introduced me to programming in 1981 had a passion for languages (an account on the university mainframe as a member of the APL special interest club was shamefully also used to play a lot of Adventure) and I spent hours hunched over the 1980 Byte special edition on Smalltalk. So, even though my working life was firmly in the procedural languages my eyes were opened to the possibility of other languages, unlike most of my working peers. Unfortunately, I saw that as an exotic practice of distant American researchers, not something I could be doing.

    So put me firmly amongst the believers in studying other languages to change how you think. That study has to include using them enough in their natural context that you can idiomatically think in that language – given your spoken polyglottery I’m sure you know what I mean. (and, BTW, I’m always in awe of you multi-lingual Europeans. I’ve, at best, mastered rudimentary Japanese).

    A great book to guide you in a language odyssey is http://pragprog.com/book/btlang/seven-languages-in-seven-weeks

    I am not so much of a believer in using multiple languages together just for the sake of using them. I think there has to be either an easy coupling between domains to use them closely (eg: C++/CLI to bridge the C# and C++ worlds) or an architectural separation such as AJAX or a web-service backend for desktop or mobile client.

  9. Can any developer creating websites with database backend think of creating it with a single skillset? Microsoft platform development requires – C# / VB.Net, Stored Procedures, JavaScript, HTML and CSS skills at least to a minimum. Same is applicable with other environments.

    My view is Polygot Programming aids in a better understanding of development and debugging the application.

  10. I had the opportunity to learn a second spoken language, and I found that by learning the new language, I learned more about my native language. I don’t speak as eloquently in my second language, but it definitely has opened more doors to me than not having learned it.

    I think the same holds true for programming languages. The more languages you are at least familiar with, whether you frequently program in them or not, the more you will understand how your primary language works. Each programming language brings something to the table. They were all created with a different problem to solve. It is always good to be open to understanding more than you currently do.

    Most of the time, when I see people insist that their programming language is the only one that should be used, it’s usually because they have found one or two things that they didn’t like about one or more programming languages and decided that the whole language was garbage. It’s the same ill-informed stereotype that many people tend to put on anything else (cultures, people, etc.). Other times it’s similar to someone who isn’t very proficient in a second spoken language. It feels awkward until you get good at it. People typically don’t like feeling awkward, so they just don’t do it and never get good.

    The only real “concern” I see with polyglot programming is that it is easy to fall into the “Jack of all trades, master of none” type behavior. That, in and of itself, isn’t really a bad thing. Being able to handle simple tasks in any language will get you far. If you can take that to the next level of being master of at least one and jack of many more, they you can go even further.

  11. I think a programmer can only benefit from learning a second language. If you are familiar with more than one you can make a better choice, knowing what are the limitations of the others.
    I don’t think that there can be “only one ring (language) to rule them all”, you simply choose the one that you fell most comfortable with and can achieve best results. I don’t see a point in wasting time to build a JSF application when you can do the same thing with ASP for half the time.
    I was learning Java at first and because we had a C# course in the university I got familiar with .net programming as well. Now I can do twice the things in C# that I could do in Java. On the other hand a lot of my friend prefer Java over C#.
    For me it’s all about what fells best for you. But you have to get out of your comfortable zone and take a look on the other languages to be really able to say that one particular fits you best. There is no harm in learning something new, actually you may benefit from it.

  12. Regarding resistance to learn new languages, people, stereotypically speaking, tend to fall into two categories.

    Some people prefer depth, like to dig deep, master and become true experts on a subject. These are the ones that have most to loose and tend to be the ones resisting change. Other people prefer to know about lots of things, but get bored with too much depth. These are the ones that are likely to promote change.

    Both have their merits and in a workgroup you’ll typically have to balance their interests to keep both happy. You’ll also have to keep in mind that the first group tend to be the introverted one that doesn’t make a lot of noise, they’ve got the most to loose and tend to be taken as the grumpy, backward striving ones, while the other tend to be the extroverted one giving speeches and seminars about new fun stuff they’ve found, in house or on the net, so it’s easy to get the impression that it’s the second group that counts.

    Personally, I like the challenge and have actively sought it, don’t particularly fear going back to knowing nothing or less, I’ve been working in a wide range of areas with lots of different software technologies, and I’m all for change when it is for a good reason. I’ve also been fortunate to mostly work in environments where the development team has had great freedom in selecting technology and trying new things.

    Still, and perhaps due to this experience, I’ve come to found that while a technology change may introduce the claimed benefits, it generally also comes with new, unknown drawbacks introducing issues in areas you had none, since weaknesses generally aren’t advertised very much. It’s the success stories you hear about. The other side you’re likely to have to discover for yourself.

    So I guess nowadays you’ll find me somewhere in the, hesitant-possible-to-convince middle ground.

  13. 1. I would define it as a programmer who uses multiple languages, not just knows but actually uses. As I feel that it is important to learn multiple languages anyway. Learning functional programming when spending time in Haskell, Clojure, or a lispy language can help you to think of code in a different way that can be applied to imperative languages.

    2. There is definitely all kinds of benefits. When could knowing more be a negative thing? We are all in the knowledge game!

    3. Many stay in one language because they are just comfortable and their personality is very risk averse. People that preach hard usually are the type that needs to have one answer. Having this kind of binary thought can be destructive to your skills as a problem solver. The most important tool in solving problems is an open mind I think.

    4. The only problem is if you are not seeing the forest for the trees. You should learn different types of languages (imperative, functional, dynamic, scripting, logic, etc) to learn all the different types of programming patterns and techniques. Learning asynchronous programming vs multithreading. Also learning that almost all of the smart stuff in programming was thought up in the 1960’s-80’s is pretty eye opening. I feel that the best benefit of being ‘polyglot’ is language agnosticism. This means that you are not tied mentally to any languages. That you can see programming for what it is, not just the language it is implemented in.

  14. My opinion is probably of less value than Bjarne Stroustrup although it does align:

    “Nobody should call themselves a professional if they only knew one language.”

    See: http://www.youtube.com/watch?v=NvWTnIoQZj4

  15. It is beneficial to know more than one programming language. Sometimes you can transfer good habits or knowledge from one to another. But the most important thing is, you can approach problems with different points of view, and chose the best for the moment.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

What is 6 + 7 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)