Is It Worth Learning a Little-Known Programming Language?
Nerval's Lobster writes: Ask a group of developers to rattle off the world's most popular programming languages, and they'll likely name the usual suspects: JavaScript, Java, Python, Ruby, C++, PHP, and so on. Ask which programming languages pay the best, and they'll probably list the same ones, which makes sense. But what about the little-known languages and skill sets (Dice link) that don't leap immediately to mind but nonetheless support some vital IT infrastructure (and sometimes, as a result, pay absurdly well)? is it worth learning a relatively obscure language or skill set, on the hope that you can score one of a handful of well-paying jobs that require it? The answer is a qualified yes—so long as the language or skill set in question is clearly on the rise. Go, Swift, Rust, Julia and CoffeeScript have all enjoyed rising popularity, for example, which increases the odds that they'll remain relevant for at least the next few years. But a language without momentum behind it probably isn't worth your time, unless you want to learn it simply for the pleasure of learning something new.
/thread
There is enough similarity between programming languages that there really is no point in learning any more than what you need. If you find yourself in a position where you need to learn a new one, as long as you have a pretty broad background it usually only will take a couple of days to get going and a couple of weeks to get really good.
you are doing it wrong, IMHO. Learning languages always broadens your horizon. Whether you want to spend your time doing that instead of getting more work done with a language you already know, or spend it doing something else entirely, is another question of course.
Only Windows 7 luddites use programming language. Modern app appers write apps written in App Languages!
Apps!
Bread and butter has been C# the past few years, currently enamored with f# and racket. I don't think I'll be able to find a job with these, but it certainly has returned me to a "fun" mode.
If you were me, you'd be good lookin'. - six string samurai
Go, no
Swift, (if you want to make iOS apps, it's a no-brainer yes)
Rust, no
Julia, no
CoffeeScript, really? either use javascript or support a new client runtime. - Quit trying to make up for deficiencies by making up meta languages to hide the hideous choices.
APL
Post 1:
Yes if you can afford the time (Score:2)
/thread
Post 2:
No. (Score:2, Insightful)
There is enough similarity between programming languages that there really is no point in learning any more than what you need. If you find yourself in a position where you need to learn a new one, as long as you have a pretty broad background it usually only will take a couple of days to get going and a couple of weeks to get really good.
Additional commentary
But really this is an ill-posed question, and slightly offensive. Why are we treating all "programming languages" the same? There are obviously different tools that come and go in terms of usefulness. The question, as it is posed, is nonsense. If it is little-known because it is no longer useful, then it might be worthwhile to learn if you are into the history of programming languages. If it is little-known because it was designed to be like that, such as Brainfuck, then it might be worthwhile to learn it if you are a masochist. And so on....
.. so drop everything and learn it.. lol
The answer is a qualified yes—so long as the language or skill set in question is clearly on the rise.
Very much this. There is a reason why I, and many of my colleagues, leave Ada off our resume. I know more than one person who's stuck doing maintenance work on defense projects that haven't been cutting edge for more than 20 years because they hitched their wagon to obsolete languages.
The better companies are innovating and looking towards the future. Learning a new language that is on the rise is a good idea. Even if it doesn't pan out, the experience isn't always wasted. And you can demonstrate to future employers that you a good hire because you're good at learning new things in new environments.
Learn Forth now. Or something else.
Yes. It's interesting to compare how different languages solve different problems. OTOH, I wouldn't necessarily *use* one of these less popular languages. I've been studying Haskell a bit lately. I understand it's used in finance applications and a few other places. I have no desire to use it myself for anything in particular. It's worth looking at it though, just because it gives you ideas. Wrapping my head around the monad concept... whew, it's up there with call/cc in terms of bending your mind, perhaps mostly because the explanations suck. I think I can just begin to see how there are monad-like patterns in some other things I've done. So. Yes. Learning strange new languages is good, even absolutely useless crap like funges and INTERCAL. Using them? That's a different question.
Nice that TFA titled, "Should You Learn a Little-Known Programming Language?" shows a screenshot of JavaScript, but I digress.
Little known languages aren't always actually little known or used, just less and/or not main-stream. They are often languages used in specialized areas or use less common syntax and or structure - like PROLOG and LISP. As such, using them can often help a programmer think and problem solve in new/different ways that may help programming in more common languages. I know learning LISP help my recursion skills.
My LISP and PROLOG skills two are a bit rusty, but I've used (and was proficient with) several dialects of LISP and would probably enjoy a job using either language again.
It must have been something you assimilated. . . .
Every week I seem to see a slight variation on:
"Is learning %s worth it?"
"What is value of learning %s vs. %s?"
"Would you learn %s to switch jobs?"
I'm beginning to think this Dice account is just an autopost with a random list of possible values.
Most of those were platforms, frameworks, tookits etc. for domain-specific applications. Those almost always pay more. The only language in there was Object-Pascal. Unless that is used to solve a very pressing problem in a very competitive industry, it probably doesn't pay all that much.
I'm very well versed in PPC assembly. I've found a quite wonderful niche working on automotive controllers. I also have several subordinates well versed in Tricore (Infineon automotive CPU) assembly.
Neither of those will ever make it onto any list of "popular" anything, but we all make plenty of money doing it.
As important as those two languages are to what we do, I've never hired anyone that listed either of those things on their resume. The ones that did list them specifically had at best a rudimentary understanding and little other practical background that would make them useful.
Don't learn something because you think you can make money with it. Learn something because you like it and want to use it. Then, find an employer that values your talents and willingness to learn whatever they need you to learn.
That's the best path to a good paying job.
For hobby yes. As a profession no.
Cobol -- there's old apps that keep on running that are valuable enough to companies to keep maintaining, yet they aren't willing to rewrite
RPG4 -- same boat as Cobol--although arguably one of the least pleasant language environments
CL -- many existing apps, plus there are companies writing brand new stuff with it, it's just as powerful as ever, and quite nice to work with
I'm sure there are others
Kinda off topic but: I remember in the late 1990s early 2000s assembly language language was kinda popular. Some of the freeware that I downloaded was written in Microsoft Assembly. Even the readme.txt file mentioned that the program is written in MSAM for speed. Programs written in Borland Delphi 6 and above were popular too. I remember downloading some free software written in Visual Basic too. Some programs even had custom OCX controls. Not sure how I remember all these details.
if its academic or for fun, yes.
If its just to get a job then no, unless you want to gamble with the chance of getting a job in a niche market.
The question is "is it here to stay".
Take Ruby on Rails. Was the craze not even half a decade ago. Everyone was on Rails. Too bad they led to the chasm and nobody bothered to build a bridge over it.
So learning a language because some startups are crazy about it isn't worth it. But what is? How can you tell whether a language "gets big" or is a tempest in a teapot?
Easy. It ain't the language, it's the people using it. It's the movers and shakers of an industry that decide what will grow and what will perish. If Bruce Schneier started writing his code snippets in Splfurt (I sincerely hope there is no such language, I just made that word up) and if people from Metasploit pick it up and code their stuff in Splfurt, Splfurt is the new big thing in IT security and every framework, scanner, tool and whatnot will have to have Splfurt plugin support and new exploit PoCs will come written in Splfurt.
It's not the language. It's the people using it.
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
It's only the language that a company with a $700 Billion market cap has decided should be the way to go to program all of their mobile devices.
If you play in the Apple ecosystem, then learning Swift is not "may be useful for a few years", it is a must for the future.
I am Slashdot. Are you Slashdot as well?
It's about training your mind to understand something hard. Learning a little language exercises will-power, discipline, and focus.
COBOL - While outdated, is still used by many large corporations. It is rarely taught in schools anymore and the syntax is quite cryptic (imho) compared to more modern languages (such as looping, fuction calls, type casting, etc. in C++ or javascript, for example).
:)
Specializing in COBOL could be a niche that is quite lucrative. Some of the largest fortune 500 companies - including big oil companies - still have crucial systems running COBOL applications on them.
If programming in such a bizarre language doesn't drive you to pull all of your hair out in frustration it just might be for you!
Or maybe just for bald people in general.
Political correctness is really just herd psychology pushed by insecure people who desperately seek social conformity.
Start with How to Design Programs and work it through, from beginning to end, even if you are a good programmer.
Then go to Structure and Interpretation of Computer Programs. Work through the chapters that you find interesting.
Then start with learning Common Lisp. Even after 30 years existence, there is still no other programming language which implements everything that is possible with CL. There might be programming languages which are more specialised in certain language subsets that are also part of Common Lisp, but none includes everything that CL includes.
Then learn Common Lisp macros, and realise that to get at the same level of possibilities in other programming languages, you need to embed a Lisp system. But that will be a slow interpreter, and Common Lisp can compile.
COBOL is an excellent example, it has become niche, but will be in use on "mission critical" systems for years to come. Perhaps ADA would be another example?
If you want news from today, you have to come back tomorrow.
"But a language without momentum behind it probably isn't worth your time, unless you want to learn it simply for the pleasure of learning something new."
It really depends what you want to get out of your eduction. I think that I understand where your coming from, namely that eduction can be goal-oriented. That is, one can design a curriculum around some kind of objective function E.g., maximizing earning potential, employability. However, there are other approaches that I think are equally valid, namely that the point of an education is to learn how to learn. As someone with a liberal arts eduction, I cringed when I read the sentence that I've quoted above. Is It Worth Learning a Little-Known Programming Language? Absolutely, yes!
I explicitly will not hire any programmer who knows only one programming language (C and C++ count as 1 for that score.) Learning a different programming language introduces you to alternative ways to think about problems and solutions. Lisp or Scheme, Ada or Eiffel, COBOL or MUMPS, all provide a different perspective on software design, coding, test and integration.
Too many hiring managers play "buzzword bingos" in search of "flying purple unicorns," candidates whose buzzwords match their current search list. Sure, you can make a living chasing buzzwords that way, with a combination of (primarily) resume engineering and (secondarily) training. And some people who do this are actually pretty good developers. But many more don't know how to apply the technology, they're just able to produce toy programs learned from " for Idiots" who produce the stuff documented on http://thedailywtf.com/ But the people I want are those who can think creatively about a problem, using more tools than just one hammer, and who can learn new stuff on the job. What's the half-life of a technology these days, 3 years?
Over the years, I've worked with about 20 different languages. I learned a lot of them purely out of interest. Even if you won't need it for any "serious" or paying work, it can be useful to learn a new language that is different from the languages you know. For example, if you know C# you won't learn that much by working with Java; they're too similar. By contrast, if you try learning a language like Haskell or Go instead you'll get introduced to new ways of thinking.
In almost all languages, there are things you can do easily or "naturally" in it. These language (and framework) features usually influence how you would design a program in that language. And it's these concepts that are worth learning. For example, when I learned Ruby and later Haskell, I learned how powerful concepts like map/select or working with closures are.
This knowledge then transferred to the languages I usually work with; my designs in my "traditional" languages changed because of the things I learned while working with other languages.
So even if the new language is not "one the rise" it might pay off by indirectly improving your skills in the languages that you do get paid for.
They might not be programming languages per se, but I've spent a lot of time with autohotkey, NSIS, apple applescript and the like. The one thing all of these have in common is quick, clean looking applications with a narrow degree of focus; automation and deployment.
I've done some pretty nice tricks with them, mostly from a IT side of things. I've done a few applications with autohotkey. One startup I worked at couldn't really customize their helpdesk system, but wanted more info from tickets. I made a nice little app that took it from editing a txt file, to a few tabs of checkboxes, radio buttons, etc that would copy the answers to the clipboard.
Automator has helped me tons, especially when creating apple accounts. I started with a script I found, and I've been customizing it for our own needs within the company. We have a few services that only have a web interface to administrate them. Using the appleIDautomator script as a base, I've been able to tweak it to set these up as well.
Finally did an active directory rollout a few weeks back and needed to bundle meraki, bit9, and forsit's profile migrator. Bundled all 3 setups in NSIS. I've done even better installers than that with NSIS. I took a 7 server JBOSS application, bundled mysql, apache, etc and made an installer that even did CRC checks on the files post install. Meh, it did all kinds of crazy stuff, changed the machine name, added entries to the hosts file. It cut the install time down from 40 hours to 4.
not little known and not obscure, but certainly worth to learn and sure to bring in the cash.
R
So, the less popular a language is, the lower number of accessible frameworks you will have. As such, please scale down your goals accordingly. You do not want to reinvent the wheel again, unless you are only focused on the wheel.
Several years ago, I fought tooth and nail over selecting the new test automation framework we were going to start using at work. I wanted a nice, modern, resume-building language like Python/Ruby/Java. What did they pick? - a legacy internal system written in Perl (and abandoned by the original author who had left the company).
Over the last year, I've become a moderately skilled, OO Perl programmer, and it's worth six figures to me. Good enough. :)
- Necron69
Even if a language is really hyped, in reality it may not offer anything useful.
For example, I've heard a lot about Rust lately, so I decided to investigate it.
I started by reading through the tutorial and the standard library reference. They were mediocre, at best. Nothing about them made them more useful than the docs for the other languages I use often.
The language has some lofty goals, but most of the time it just ends up being an awkward subset of C++. Syntactically, they're quite similar. Semantically, C++ allows you to do what Rust offers, but usually with more flexibility. The memory safety that Rust claims to offer can be achieved in C++ using smart pointer classes, or even garbage collection libraries, for example.
Rust uses a lot of abbreviated, two or three character keywords, which may be quick to type, but they're nowhere near as convenient to read. When I see the abbreviation "fn", I don't think "function", I think "fuckin'". When I see the abbreviation "impl", I don't think "implementation", I think "pimple". At least C++ tends to use the full word.
I never thought that C++'s standard library was very good, but it's a pleasure to work with compared to Rust's. Rust's string handling is a particularly bad disaster, and this permeates throughout the entire standard library. Rust's standard library is pretty pathetic compared to C#'s, or Python's, or even to all of the Perl CPAN modules that are out there.
There's only one Rust implementation currently. I found it big and bloated, and pretty buggy, too. For a language that's supposed to help make it harder to write buggy code, their compiler and standard library implemented in Rust by the developers of Rust are pretty damn buggy! Just look at all of the GitHub issues if you don't believe me. At least there are multiple high quality C++ compilers for every major platform, both open source and commercial.
I went looking for sample Rust code to learn from, and a lot of the code that's out there is totally out of date. People got interested in Rust, wrote a half arsed library, put it on GitHub, and then forgot about it. Only code written or updated within the previous week tends to be usable. The only other Rust code base that I found that was of any appreciable size was Servo. But it isn't a good reference either, because it sometimes uses outdated Rust idioms. I also tried running Servo on my desktop, and it was the buggiest browser I've ever used (although it is still under development). For a browser written in a language that's supposed to prevent bugs, Servo was pretty damn buggy!
I just don't see why Rust is getting as much hype as it currently is getting. There's nothing special about it. Anything it does can be done when using C++. Often it's easier when using C++, if you can believe that! I kind of regret wasting my time learning more about Rust. I didn't get anything positive out of the experience, other than a greater appreciation for C++, and a reminder not to believe the hipster/Silicon Valley hype.
I'm a Salesforce.com developer, which uses Salesforce's custom language "Apex" as well as "VisuaForce". These two languages are bastardized versions of Java and JSP respectively. They are highly in demand because Salesforce enforces governor limits which enforces "best practices" to be followed. For example, you can only have 100 queries in a single run so you can't do a loop and query the datbase. I make mid 100k a year in southern California, but can demand more, especially if I wanted to do full time consulting. Consultants can make $100-200 an hour.
Even if you never make use of the new programming language it is almost always worth getting your head around a new way of thinking about problems. You may not ever need to write code in Lisp but understanding what a functional language is and isn't good for is helpful in other languages. If you're building flight control systems then Python might not be the language to do it in but getting deep into it and start understanding why you'd want a metaclass in the first place can help you stricture your code better. There aren't a ton of job openings for Erlang programmers but there are lots for people who understand High Availability and Disaster Recovery and the background knowledge will stand you in good stead.
In short, yes, it's worth learning all the languages your brain can handle. Even if you forget the details the concepts will stick around and help you later.
If intelligent life is too complex to evolve on its own, who designed God?
Past paid experience with obscure and legacy languages saved my arse after the dot-com crash dumped tons of coders back into circulation on the west coast. I got no offers until I down-played my web experience and highlighted pre-web experience and languages. You never know what experience will come in handy. It's similar to investing advice: diversify your portfolio.
Table-ized A.I.
IMHO, after learning a 2nd language that isn't just a revamp of the first (ie: I'm not talking learning both C and java), should stretch your mind enough that you will be able to learn any language you want, given some time + practice.
So, the question is -- is that little known language different enough to be worth learning?
If you know java, C#, etc, then learning some other varient of C, is probably not worth the trouble.
If there's an employer looking for it, you can of course learn it. If you interview with them and don't know it yet, I would state confidently the languages you already know, and state that you are able to pick up new languages as needed, with some time and practice -- Faster depending on how close the language is to other things you know, and faster if you will have a mentor, but still that learning a new language is "a small hurdle, easy to deal with".
If you only know java / C type languages, and you want to learn something different, like one of the Lisp / Scheme type functional /recursive languages, then I think it is a worthy exercise. It will help you to approach problems differently. Or, even if your default approach never changes, it will give you an alternate approach that can be used to think about a problem in a new way.
The real key is you need Time + Practice. You won't know it instantly. Some employers will want you to already know the language they use. In that case, your only option is to learn it yourself ahead of time, or try to stretch the truth. But you also won't learn the language just from reading a book. You need to write programs, have them go wrong, debug them, enhance them, etc.
Which, can be a problem if you are already working full time with a different language. Trying to switch between your "day job" language, and your "after hours" language will make it harder. Not impossible, but harder.
If you simply have intellectual curiosity, why not? But if you want to use your knowledge commercially, you might want to focus on languages that businesses actually use. A language is much more than a set of syntax, it's an ecosystem. Try finding code snips on StackOverflow for your new language...good luck with that! The majority of the benefit of using a particular language is not the syntax, but the community support.
http://lolcode.org/
blah
You can't go wrong with REXX
"A person is smart. People are dumb, panicky dangerous animals and you know it." - K
You get typecast. You could have 3 decades of C/C++ and mention that you studied APL for one semester in college and all the calls you'll get will be for APL jobs. I don't even list LISP on my resume, even though I became enlightened in LISP in the 90's. With LISP, enlightenment is a heady feeling where you suddenly see the elegance with which everything fits together, followed by the sinking realization that if you want to actually do anything with the language you'd have to write all the libraries yourself.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
As always, the answer is "it depends on a lot of things":
1. Is the language little-used because it's a special-purpose language? UnrealScript probably doesn't crack the top twenty as far as general programming languages go, but in the game dev field it's probably one of the biggest. Using a specialized language for a specialized task is fine - usually even a good thing.
2. Is the language little-used, but library-compatible with a more common language? Clojure is a rare language, but it can call Java libraries and code, which is a massive boon. Actual programming languages don't matter so much as the libraries they allow you to use, and if you can piggyback on a bigger library of libraries, you can go far with a small, obscure language. This isn't sufficient to make the language OK to use, because:
3. Is the project going to be worked on by more than one person? Personal projects, sure, use whatever language you feel like. Small groups can decide what to use. But if it's a big project that's likely to cycle through developers, think about the impact using an uncommon language will have.
4. Is there something about your problem that makes common languages inefficient or ineffective? Is the uncommon language objectively better at the exact task you're solving? Or is it just "the syntax is slightly cleaner"? This isn't a full deciding factor, but unless the language shows promise as being useful in the future, I wouldn't use it on a personal project.
Do keep in mind that with these niche languages the markets are small, but so are the circles. Many job openings are not public and require previous references, some times some niche language is largely controlled by handful of big software houses.
The truly obscure one aren't even publicly documented, because they are considered business secret. Sadly, even the peer to peer is too busy with music and movies to bother with some ISO/ANSI/JIS standard needed by maybe twenty people in the world. If you have the docs or can pausibly deny having them, you get the job.
I wouldn't learn a language just in case with dollar signs in my eyes, unless I personally knew the place and people who needed the service.
Beyond that, the world is full of little unknown languages. The industrial equipment for example almost all run their own bastardized version of basic.
Learn at least one of each: postfix, infix, outfix, prefix, textural and visual language and you're done.
I'll assume the main reason to do this is to get a job, one that in particular advertises for a specific set of skills. One of which is an obscure programming language. Unless you have nothing to do it's probably more worth your time to spend a day before said interview learning enough to fake it. If you want to lie or be honest about this on your resume or in your interview that's up to you and how well you think you can pull that off but if you want your resume to get past HR and make a short list AND you are actively pursuing multiple opportunities. This is probably your best bet.
I bill out at $450/hr for maintaining 30 year old FORTRAN code that does computational electromagnetics for some alphabet soup agency in DC.
True, with the truly obscure ones having an access to the environment to actually train and test one's skills in practice may be the biggest barrier.
Surely, anyone can download Kuka and Hyundai robot manuals (I think with these manufacturers this includes even the maintenance manuals) online, but buing the $20000 robot to get the experience is another thing.
Robot programming is a bad example, as an engineer in that field is mostly expected to pick it up "on the fly", but the guy who truly can shave off seconds from the execution time in a critical application gets paid handsomely.
Predicting the future is hard and often just look. But you might want to learn an new paradigm. E.g. functional programming. If you haven't done, it will be eye opening. Or a different environment, esp. if you have only programmed in a MS environment look at non-MS languages and IDEs. People who can work in both are in the biggest demand. Or network databses vs relational databases (though you can build a network schema in a RDB, since a network is a relation), etc.
Look for differences and analogies and analogies between analogies.
putting the 'B' in LGBTQ+
Arcane build/script/regex languages.
The "obscure" languages I use every week which seem to give me rare and valuable skills are:
Bourne shell
perl
sed
awk
Make
python with regex.
Basically anything used for non-trivial build scripts, auto-code-generation and regex parsing. Almost no young "developer" seems to know how to do these things any more, although a few old school guys and sysadmins know a thing or two.
You have to balance the cost of throwing away the code and processes you know against the benefit provided by the language. The whole point of the language is to make it easier to express logic. If switching is simply creating an artificial barrier without providing something substantial you are wasting your time. That being said, there is a subtle shift going on in most languages and toolchains right now. It is a trend toward share-nothing actor based concurrent systems. The reason for this has to do with scalability and correctness. Thread-based concurrency does not scale as well as userspace lightweight FSMs, and maintaining correctness with shared state gets very difficult as the number of processors goes up and their caches get further apart on the chip. That's one reason NodeJS has taken off, because it implements a very lightweight concurrency model subject to certain limitations. Learn a language/toolset geared for this and it will be time well spent. Another shift is toward functional progtamming. Most functional languages share similar characteristics, so if you get a firm grasp of one the others won't be too hard to pick up.
Learning a language with a little different paradigm can be very educational and profitable.
Spend some time learning something like SystemVerilog/VHDL (for RTL design), MATLAB (for general math), or R (for statistics).
"Obscure" languages often are extremely useful for some applications. As an example, "awk" is a serious power-tool for dealing with tabular data. My own "8th" (8th-dev.com) is a new, and currently still obscure language, but learning it will give you the ability to write cross-platform applications with the same source code. If that's not useful to you, then you wouldn't be interested. But if it was, spending some hours to check it out may pay off big.
There is enough similarity between programming languages that there really is no point in learning any more than what you need. If you find yourself in a position where you need to learn a new one, as long as you have a pretty broad background it usually only will take a couple of days to get going and a couple of weeks to get really good.
But but... I was just scolded a couple of days ago about the differences between languages!
I was told that different languages will force me into different modes of thought!!!
I'm so confudded, I don't know *what* to think any more.
If you get out of coding non-esoteric programming languages, you are going to be nowhere near the top of your game anywhere else, or at least that's how a recruiter will see it.
Yeah, you're the master of Cobol, which is fine-- until you want to work somewhere else, or God forbid they shut down whatever it is that needs your leet Cobol skills, or your workplace starts to suck, or you don't want to live in Bloomington, Illinois.
Also, if you're doing it purely for the financial gain, the payout-to-effort ratio is a little lean.
I think most languages are the same. There is a productivity vs. speed tradeoff, but:
A functional programming style, can be done in C if you just accept that minimizing global variables and pass functions by their pointers. Learning a functional language is likely to improve your C style and pointer management faster than how you might develop a functional style out of your own assumptions of what it might mean.
Class based OOP programming can also be done with C implementations. The only benefit of OOP is that it lets you write more without thinking first. Defining data types first and data organization, and then later simply patching them together. Its very similar to relational DB models. Most programming is done this way, because it is the most accessible to people to write code before understanding the problem. Its very useful when the problem comes from someone else and not perfectly specified.
One exceptionally highly productive language that still fits both of the above paradigms but also expands your solution processes is J (Jsoftware.com).
Regardless of how popular it is, this language can be the best tool for some to most applications. If you were paying for your own time, you might use it if you know it. But even if you only care about employability, J will make your programming in any language better, because a consise J solution tends to map to a consise solution in other languages.
I'm firmly in the yes camp.
Since I began programming in 1985, I've encountered dozens of languages. The popularity of every language waxes and wanes, and occasionally it will wax and wane a second time (perhaps like Java is doing today). Programming languages never completely disappear, but the trend in usefulness of languages is on the rise due to more sophisticated toolkits.
Knowing these facts, it's never a bad thing to learn a new programming language. Since languages never completely disappear, you never know when your knowledge of that language may come in handy. I occasionally get job offers to work on languages and APIs that I haven't touched in 15 or 20 years. Software can have an even longer life. We still use software that's 50 years old (via ATM networks that connect to bank mainframes, for example). I once used a bank API that had a ridiculously complicated link like including -lcobol. It is possible that I was linking in code on that Linux system that was older than me.
If you're looking to learn a little-known programming language, lean towards a newer language. As I said, newer languages can do more, and do so more compactly.
Finally, think of the big picture. As a programmer, you do programming. The language is your tool. What your job really is is creating and manipulating mathematical expressions. I know that sounds super boring but that's what programming languages are, a way to make dealing with math a bit easier. The more ways you learn to deal with this math, the better programmer you will become. Think of repairing a car. The best mechanic in town might work at a Mercedes dealership, but if you put him in a GM dealership he would probably become their best mechanic after a short time. The job is not the tools.
Learning something new never hurt anybody. If anybody is telling you that learning X will hurt your ability to Y, they are lying.
So you haven't discovered Haskell yet... No idea who modded you insightful but a more realistic view can be read here: http://norvig.com/21-days.html (currently down). Sadly I know and then have to maintain code written by people who seem to think like you. I really don't get it why this myth is still alive.
Perl Programmer for hire
You bring up something I forgot to mention: the "But Rust isn't competing with XYZ!" excuse.
Whenever one person points out serious flaws that Rust exhibits, one or more others will come along and say, "But Rust isn't competing with XYZ!", where XYZ is Go, or Python, or Java, or Ruby, or D, or Erlang, or Haskell, or C#, or some other language that is in fact competing with Rust for a share of the market.
Claiming that Rust is only competing against C and C++ is a dumb thing to do, since C and C++ are both used for low level and high level programming. Rust is in fact competing with every other language out there, high level or low level, whether the Rust community likes this fact or whether they don't.
When pretty much every other language out there, including C and C++, can do string handling better than Rust can, the problem isn't with the fact that competition is happening. The problem is solely that Rust's string handling is total shit.
Maybe this tendency to point to the competition, rather than just fixing the goddamn problem, is because Rust is so tied to Mozilla. We see the same excuses from the Firefox community. Instead of fixing Firefox's flaws, they just point to Chrome or IE and say "But they're worse!" or something to that effect.
Enough with the excuses. Fix the problems with Rust, instead of trying to redirect the blame elsewhere.
There is enough similarity between programming languages that there really is no point in learning any more than what you need. If you find yourself in a position where you need to learn a new one, as long as you have a pretty broad background it usually only will take a couple of days to get going and a couple of weeks to get really good.
I would say that you should learn at least one example from each of these classes of languages before you are qualified to claims like that:
machine language (seriously)
assembly language
fortran-like (seriously)
C-like (in a unix environment, specifically)
ML-like
lisp-like (prefix notation with lambdas and cons based gc)
apl-like (array notation and array based gc)
forth-like (concatenative notation - ignoring gc)
sql
"enterprise" (cobol, javabeans with spring, whatever...)
haskell-like
dependently typed
Within one of these language families, I can see that claim being accurate. Sometimes. If your problem domain is also constrained enough.
But start jumping families, or start trying to do something *useful* with your knowledge, and I think you'd start singing a different tune.
Do you know how a computer works?
The language you program in is translated It is going to be compiled or assembled into machine language or interpreted by another program that constructs machine language.
All you are doing by learning another language is learning to say in different ways commands that will end up being the same directives to the hardware. In effect, you are just learning how to use different translators.
The key is to know which translators give you the best service. Do you want to get the best program performance on the hardware? Or do you want to say what you want efficiently? Or do you want to write in brainfuck? It's all just a few levels of indirection.
I was lucky enough to learn how to program in Neuron Data's toolkits before the 1.0 release of the GUI components were released to the public. I rode that gravy train for about 15 years before the market imploded, with a peak of $120/hr. in the mid-late '90s.
But I didn't choose that route -- I got lucky that something I knew well turned out to have relatively high demand (at least compared to the number of people who really knew that tool well.) I could just have easily been unlucky enough to learn one of the other two GUI toolkits that Northern Telecom was evaluating at the time.
On the database front, I missed out -- I was tasked with evaluating the first release of Ingres, and have never seen that product again in my entire career. Fortunately I was able to wrangle some Oracle work and training with my Ingres SQL experience, and from there sidestepped to Sybase ASE, DB/2 LUW, and SQL Server. But I had to work at becoming an SQL expert (cross-platform); with the GUI tools, I just got lucky.
On the major downside, most of my GUI experience is now useless because the only place you'll find Neuron Data left in are old legacy/maintenance-mode applications. There is no new work being done with Open Interface Toolkit.
I do not fail; I succeed at finding out what does not work.
One of my most rewarding jobs, in terms of fun and money, was writing code in Eiffel. Your mileage may vary...
...richie - It is a good day to code.
I had Pascal, COBOL, Fortran, Ada, LISP, C in my pocket. Then I came across this little beast. There are some companies (one of which I currently work for) that use this language in a major system. It is outsourced. For good reason, the syntax differs based on what column of the screen the code uses.
You won't work for a big company and work with this language you will work for a small company that does all of the stuff the big company doesn't have time for.
Do we mean popular as in lots of people like it, or as in lots of people use it?
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Learn DataBASIC and you can work on PICK. All 15 companies that still sell PICK based products
I completely agree. Learn paradigms, languages are not terribly difficult to learn (perhaps harder to 'master') but most good companies don't focus on the language as much as your ability to learn and your experience with certain paradigms. I've lost count of the languages I've used and I avoid candidates that are fluent in a language but can't speak to real Computer Science topics. A good Computer Scientist learns what is necessary to tackle a problem, not force their skills to solve a problem using only tools they know.
Unless of course, it's been around for 20+ years, and simply refuses to die.
Go PowerBuilder
Or is it a punishment?
So rise up, all ye lost ones, as one, we'll claw the clouds.
Learn FORTRAN and get on with life.
Is It Worth Learning a Little-Known Programming Language?
How sad that people have to ask such questions. What is worth? Worth with respect to what? For what?
Are such measuring worth in terms of potential monetary ROI? Or do they ever consider the significant value of learning for the sake of learning, stimulation of the mind, exercises which "laterally" help in being mentally agile and adaptable?
I lean to the later value of worth. And it is true that for a busy professional, sometimes time is not available, but to have to ask such a question, that is sad.
It's worth knowing a lot of things, even if those things don't directly translate into a bigger paycheck.
This doesn't just extend to programming either, you might enrich your life by reading a bit of the big three Greek philosophers, but it probably won't translate into improving your career strategy or make you more marketable.
But I would limit what programming languages you learn to ones that actually teach you something new about programming. If you already know C and PHP and Ruby, then you might not get much learning Python, but maybe FORTH or Lisp or Erlang or something even more exotic might teach you a little bit about different ways to solve problems.
“Common sense is not so common.” — Voltaire
Same with Java and Scala. A strongly functional language that allows you to keep using the thousands of Java libraries out there.
We're treating them all the same because... Dice.
...then you are in the wrong business. If the language is interesting, learn it. If you have trouble doing so, change careers to something you have actual talent for.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
The first rule is: Learn more than one language!
If you can do more than one, then you will know how to learn others as necessary.
If you only know one, then you can get "stuck in a corner". And vulnerable to "if all you have is a hammer, then every thing you meet looks like a nail."
And anyway, knowing something others do not can be, with a little luck, quite valuable. 8-)
That you have to ask that question proves you should find a McJob.