Perl6 is finally here and I'm fairly excited about it. Last weekend, I thought it might be fun to set aside some time to actually learn the language. Unfortunately, I had already promised myself some time towards Docker. Naturally, I needed a project that would force me to do both of these things. And so, I decided to build tryperl6.org. This weekend I'm getting around to blogging about it.
It seemed that Perl6, for all of the amazing language feature that it provides, like hyper-operators, and optional type-safety, was a tiny bit under-advertised. I figured that anything that increased perl6's public exposure, anything that would inject it into conversation among my friends, would be a good thing.
I couldn't help but think back to the early days of Ruby in contrast. A time in which Ruby was horrendously slow, but many people still loved it. In comparison to Perl6, Ruby was very well advertised. I think a lot of that had to do with educators like Why-The-Lucky-Stiff, and friendly online tutorials like tryruby.org. Many of these guides and tutorials were targeted towards the newcomers, and I don't think that's such a bad thing.
Getting young programmers to adopt your language at an early age, during the formative years, is an effective way to gain long-term users. If you're introducing someone who has never programmed to a relatively new language under the guise of "hey look how easy it is to program", that user doesn't have the background or experience to say "this language is bad". To that user it becomes the definition of what a programming language should be. This early adoption strategy has worked very well for a number of languages, like Ruby and Python.
But the paragraph above isn't meant as an argument against this type of early-adoption advertising. Your first language or your first few languages will have a great deal of impact on what you expect from a programming language, what constructs you expect to exist on a language-level, and most importantly on how you think about problems. That fact is completely unavoidable, whether that language was advertised to you via some kid-friendly tutorial, or required reading for a college course. That's partly why I think it is important to put language learning tools on an equal plane of availability, to leave room for choice.
Many programmers that I've talked to feel that your programming language simply doesn't matter, "it's not important" they may say, or "simply a tool to get the job done", the tool itself being interchangeable. I happen to think that language matters very much. To realize how much it matters, imagine a world in which everyone only ever programmed in Fortran 77 -- a language without explicit support for recursion.
I believe that we generally form ideas on a finite set of available abstractions. Different languages offer different sets of abstractions, each of which vary in factors of ease-of-use. When a thing (language or otherwise) defines the pool of available abstractions, that thing has a great deal of influence on the set of ideas built upon those abstractions. Surely, the availability of construction materials influences the design and architecture of a building, perhaps a city, and perhaps to some minuscule extent the mindset of this hypothetical city's inhabitants.
Perl6 is a language from a community of people who truly care about language design. And my point is that Perl6 is important whether or not you ultimately adopt it for use in your projects. It's important not only because it greatly increases the diversity of available languages, but because it introduces language-level features sure to influence the way we think.