Ask Slashdot: What's New In Legacy Languages?
First time accepted submitter liquiddark writes "I was listening to a younger coworker talk to someone the other day about legacy technologies, and he mentioned .NET as a specific example. It got me thinking — what technologies are passing from the upstart and/or mainstream phases into the world of legacy technology? What tech are you working with now that you hope to retire in the next few years? What will you replace it with?"
Perl rocks (Mojolicious, AnyEvent, Moose)
I've been playing with computers since the mid-70's and one of the things that I did early on was learn to program in C.
One of the smartest things I've ever done; it's up there with my decision to start running Linux in the late 90's.
If you can program in C you can write a program that runs on pretty much everything that you'll come across that you might want to program.
Learn C if you want to learn a programming language that you can use for a very long time.
I like Android, got an Android phone and a couple of tablets, but the C NDK doesn't allow you to do things without having to jump through a bunch of Java hoops to get there. I would have more Android devices if it was easier to write a program on it in C.
["hip","hip"]
(Hip hip array!)
If you're a zombie and you know it, bite your friend!
Apparently the writer of the original article thinks "legacy" means that you have to maintain and enhance existing applications instead of developing new ones.
To me, "legacy" means that there are no new applications being developed in that language, and the only jobs available for it are maintaining and enhancing existing applications. .Net and Java are certainly not "legacy" in that sense by any stretch of the imagination.
I do not fail; I succeed at finding out what does not work.
Certainly not all of .NET -- as a whole it's anything but legacy and evolves at a fairly rapid pace -- but it also includes a lot of old cruft and a few poor design choices that affect even modern code.
Other legacy tech I'd love to get rid of: SSIS/SSRS -- terrible SQL Server drag-and-drop technologies that do a lot of stuff badly. 1D barcodes like Code 39 and Code 128 -- dead simple to implement but take up a lot of space and are prone to poor reads.
I'm mid-career, and this question feels very relevant to me. For the past 15 years or so, I've focused on cross-platform (mostly Linux) C++ programming, with a decent SQL understanding as well.
But lately, the market for straight-up C++ Linux jobs seems to be waning. For one thing, more dynamic / introspective languages such as Java, Python, Javascript, and C# seem far more prevalent than my loved/hated C++.
But a bigger trend seems to be a shift to frameworks, rather than languages + OS's, as the focus of job-posting requirements. It's no longer true that C++/Java + Linux + SQL experience lets me quickly find a well-paying job in the city of my choice. For that, one also (or instead?) needs competence in something like Hadoop, Cassandra, Ruby on Rails, Amazon Web Services, Django, etc.
This makes sense, as CPU's get faster, and as software development continues shifting to a more connected, more web-oriented world. But it's a little scary for someone like me, whose day job doesn't offer much opportunity to work with those newer frameworks in order to develop a marketable level of skill.
I'm guessing this is a periodic problem. Ace mainframe programmers found themselves less marketable when desktop development became popular. Desktop developers were partially outmoded by client/server, and have a more serious marketability problem now that most development is aimed at (ultimately) web browsers. It's not that serious C++/Linux/back-end geeks like me can't find work, it's just that I(we) feel a little trapped compared to those whose skills are currently in broader demand.
I guess the question, then, is do I(we) double-down on our current expertise and become indispensable in a small fraction of the job market, or do we accept the pros and cons of partially re-inventing our careers (and setting back our salaries) to retool?
My old abacus is giving me splinters. I asked my boss for a new one and he said "cào n zzng shíb dài". I'm not sure what that means but I'm hopeful.
Why was .Net mentioned as a legacy technology? Its actively developed, has a decent community, and is widely used - apart from some poor articles and conclusions that were jumped to here on /. There is no reason to consider .Net a legacy technology.
What is more likely is that the person was referring to projects that are stuck on specific versions in maintenance hell, which can happen with any language - Ive been stuck with VB.Net 2.0 WebForms projects, while at the same time I've been using MVC 4 and .Net 4.0. One I would consider a legacy project, the other not, but both use the same line of tech.
Jobs in C/C++ are rare these days
This is more a reflection on your lack of knowledge than the state of the software industry as a whole. C/C++ is where you make the big bucks.
"First they came for the slanderers and i said nothing."
You'll make bigger bucks in COBOL. So exactly what does $'s have to prove here, other than perhaps there are more jobs than qualified applicants?
The cesspool just got a check and balance.
You're basically acting like a parrot, quoting back rumors you've heard somewhere but you didn't bother to verify. Getting exact numbers is hard of course, but most surveys show that C/C++ are used much more than Python (for example), and sometimes are more used than Java. You really need to look things up before commenting.
The problem with garbage collection really is performance.....still. Once you have a large server with gigabytes of RAM, it can literally take 10 minutes to do garbage collection every hour or so. Companies cope with this by taking their servers offline while they are doing garbage collection (of course they have redundancy). Other companies are rewriting their Java code in C/C++. Google writes a whole lot of their code in C++ still. The reason Apple got rid of garbage collection in Objective-C is because of performance.
Now, don't get me wrong, Java isn't going anywhere, it has a place and a (very large) niche it fills really well. C/C++ have a (very large) niche as well. C# has a niche on Windows. How durable do you think that niche is?
"First they came for the slanderers and i said nothing."
I'm still waiting for FORTRAN to make a comeback. And none of this sissy FORTRAN 77 or FORTRAM 95 stuff either; real FORTRAN IV. If I wanted to program in something that looks like PL/1, I'd program in PL/1.
Cheers,
Dave
They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
Ben
And yet employers seem to discriminate heavily against people who have not been working with the latest version of .Net, and expect us to pass tests on the most obscure and arcane features of .Net 4.5, many of which as far as I can tell, will probably never be required in basic web solutions anyway.
Oh, and I didn't get a particular job because I didn't have SSRS experience! Laughed my arse off at that one.
If I had a DeLorean... I would probably only drive it from time to time.
It's not of course, but a man can dream can't he? .net isn't dying by any stretch of the imagination. But let's start with languages most people would agree ARE legacy languages:
COBOL (if you can't agree on this, end of conversation)
VB6
various assembly languages (maaaaybe the 68000 family?)
FORTRAN (starting to get controversial here since I know it's still used by some crazy science people who don't want to learn anything modern)
Smalltalk
ALGOL
Forth
I was about to add Pascal... but then noticed some crazy person is still developing Pascal in the form of freaking Delphi, and even has a port for Android phone. WTF?
So that makes me think... if I can't include Pascal, or possibly even FORTRAN, languages I've never known someone to write code for in the past 15 years, but yet there's still new releases of it in legacy languages... then what can I include? I'm sure some nutter will try to argue with me that Forth is still a viable language. COBOL.... just go away.
The better question is more likely, which languages should you really not put your career prospects on? Personally I'd list any of the above languages, but sadly not yet PHP.
AccountKiller
From what I see the game engines are still C/C++, but are scripted in things like Python. At the same time, using the right APIs a lot of the hard processing can be handed off to specialised hardware, such as GPU, whether for graphics or physics.
BTW while JS is not generally thought of a choice for high performance games, this demo shows what may be a sign of the future:
http://www.unrealengine.com/ht...
Jumpstart the tartan drive.
Javascript. PHP. Java and every stinking overarchitected hole of a framework built on top of it. C++ and it's various internal metalanguages. Anything which has appeared on more than 10% of the print-it-out-and-its-good-for-toilet-paper job ads on Dice. All the functional languages, which exist mostly to make people who know them feel superior. Go, because we didn't like Algol-68 the first time around.
I think we should just go back to counting on our fingers. From that first abacus, we were doomed.
Legacy properly describes a software system, not a language. Languages rise and fall in popularity. Sometimes a language has inherent limits, sometimes the implementation stinks, sometimes the syntax or paradigm no longer become fashionable. Sometimes languages and platforms disappear only to re-emerge years later. Back in the late 1990's NeXTSTEP/OPENSTEP was turning into a "legacy platform" ... yet today MacOSX and iOS rely on Objective-C and descendants of the NeXT APIs. Even if a language fades completely from the mainstream its ideas inspire new languages: Java borrowed from Objective-C and C++; Ruby borrowed from Perl, Smalltalk, and a little from Eiffel.
Stay in the industry long enough, you'll see everything come back.
C/C++ are unmanaged languages,
Which is great for very important and specific classes of problems.
so code written in them tends to be rife with security holes, buffer overruns, and memory leaks.
And a significant % of web applications written in Java, .NET or, say, Ruby, have security holes up to the wazzo.
You might not get buffer over runs, but you certainly get null pointer, illegal arguments, index out of range, and invalid state exceptions (corresponding types as per each language.)
Memory leaks? You get similar manifestations of those in managed languages (abandoned file handles, database connections that are never released). Memory specific, you can bring a VM to the ground if the creation rate of objects is so large that it causes the garbage collector to utilize CPU beyond a given threshold. In Java, for example, you can get an OutOfMemoryException if the GC is trashing the CPU even if you have plenty of memory allocated to the VM
. Anyone who works in software for a living (and that is at least decently good at it) knows these issues. Anyone else thinks these problems are exclusively the domain of unmanaged code.
Also their standard libraries are incredibly poor compared to other languages, so you have to fall back on 3rd party libraries that may or may not be available on the platform you need them on, and may or may not be maintained and supported.
A lot of times you do not require such rich language libraries in unmanaged code. If you are writing a device driver for a memory constrained platform, you wouldn't (shouldn't) be needed a, let's say, uber-rich concurrent container class with even richer iterator semantics. That is just one example.
If you are finding yourself with a significant need for a rich library, then you should be using a higher-level language.
70's style languages are going away for good reasons.
This only shows the significantly shallow view (or exposure) you have with respect of software technology. Look around you. There are more devices using unmanaged code that managed. Your toasters. Your microwaves and termostats. Your termometers. Your remote control. The cable/dsl/wireless modem that allows you to connect internet to post ignorant shit. The operating system and the myriad of hardware device drivers that make your computing experience possible.
What language do you think they are written with?
It is absolutely disturbing to see people think that unmanaged code is somehow waning away. That is where the money is. Those jobs are not decreasing. The jobs using managed code, that is the number that is increasing (and their salaries for the most part decreasing unless you are really a very good, Sr-or-Principal-level Java/.NET/Ruby/Python software engineer or architect.)
* source : 18 years of programming experience as a Java/JEE application and C/C++ systems developer in both the commercial and defense sector.
Jobs using those languages are waning.
And our jobs will go to India or China, and programs will begin to write other programs making us developers obsolete, the earth is flat and the sun orbits it, blah blah blah.
If you want to be employed in 10 years, you need to change with the times.
That is an oxymoron. Of course you have to change with the times. But changing with the times does not necessarily mean changing languages. It means evolving your skill set. You are looking at the problem of being up-to-date and marketable as if it meant one should become a language-trick pony. There are code monkeys, and there as software engineers.
Sure, there are still COBOL programmers and even well paid ones, but that doesn't mean COBOL is the language to learn if you want to do well in the industry. It's effectively a dead language even
Well, the jobs numbers don't lie. The most in demand language is Java.
And and a lot of those positions have mediocre pay and require not that much of technology depth. I know. I've worked on Java for a long time, and really, most web/enterprise stuff is really simple integration. It's barely engineering, and more plumbing.
Openings for C and C++ remain constant and will remain so simply because they cater to specific needs that won't go away with managed code.
Another thing. Look at Java job postings for the very best and brightest of companies (Adobe, Google, Apple, Lockheed Martin). Typically they desire (or even require that) people understand C and C++. Why do you think is that? I know that this is going off the tangent, but it should make you think about your claims that unmanaged code is going away.
I mean, for fucks sake, what language do you think the runtimes required for managed languages are going to be written? And if less and less people are competent in hard languages that are absolutely needed for problems that will not go away, who do you think will get paid the most.
The one thing I hate about many Java programmers (I am a Java developer btw) is that they look at technology from a lowest-common-and-dumb-denominator POV. They pigeonhole themselves into being one-trick ponies believing that such approach will provide stability in the future. This eventually shows in their quality of work and in their limited understanding of how software and hardware is supposed to work (which influences how systems are architected, designed and implemented.)
Suit yourself.
Though I'm not usually dealing with Microsoft platforms, I have enough experience with it to consider classifying it as 'legacy' in any sort of universal way an odd proposition. It is after all *the* first-party supported development framework for Microsoft platforms, very much continuing to be supported and developed by a pretty important market force (like it or not).
Of course 'Legacy' is mostly in the eye of the beholder. About the only place 'Legacy' seems to have unambiguous meaning is within a single development organization replacing/phasing out projects they control. COBOL continues to see pretty significant deployments and is actively being enhanced, though most people in the industry would consider that 'Legacy'. Similar story for Fortran. A number of languages that don't get so much 'glory' these days continue to play important roles in particular segments and continue to be developed. There are those that would consider PHP 'legacy' and others just moving onto the platform. If you try to name a platform that by popular opinion is almost certainly totally 'Legacy' you'll probably discover not only some groups doing new development in the language, but some companies or projects actually continuing to enhance the language for others. Basically, if you can remember it, it by some definition is probably still alive.
XML is like violence. If it doesn't solve the problem, use more.
Back in the early 1990s we wrote some software in Borland C++ to run under Windows 95 on an industrial PC to do some measurements and transfer data via an RS232 link and installed these boxes at various transformer stations at a utility. We've managed to "update" the setup to run under Windows XP but the utility didn't want too many changes for new installations so it was still compiled under a late 1990s version of the Borland C++. It is fortunate that we also bought the source code for the Borland RS232 driver as that company went out of business long ago. National Instruments provides "legacy" drivers for their A/D cards so we can still purchase those, too. Now that all of us have retired or left the company I guess the whole system is now legacy though these installation are still operating as far as I know.
Though I remember the parts of the software I wrote fairly well it takes quite an effort to build, install and test its operation using the legacy compiler and drivers.