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?"
I love me some VB.NET, hope it never goes away.
A process of continual improvement is what I'd like to see.
Perl rocks (Mojolicious, AnyEvent, Moose)
Hand, Woman
I've had to add features to a classic asp web application within the last year...
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.
Jobs in C/C++ are rare these days, having been replaced almost entirely be Java and C# for most programming tasks.
But the real big winners in recent years are Objective C and Java, due to the popularity of iOS and Android.
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.
It's as hip as Java was in 1999, but without the commitment to backwards compatibility. That's the sure sign of a technology that's soon-to-be-obsolete.
"First they came for the slanderers and i said nothing."
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.
I remember the days getting started in our computer reuse / recycling business, that we had to boot PCs with "Caldera DOS" and I had to reprimand people for using MS-DOS (MS was threatening a lot of piracy enforcement vs. DOS, even in 2003). The staff looked looked at me like I was the silliest man in the world.
Gently reply
Any software that has no tests run on it. Ie., untested software should be considered as legacy, not the age of it.
Legacy and niche DSL's are where HIGH PAY is at, LOW COMPETITION in the job market is at, and lots of very cushy jobs :) (Ie., get a cold, your sallary goes up).
Flawless victory!
For instance, higher level stuff which is portable to C, running everywhere: Nimrod programming language http://nimrod-lang.org.
I'm looking to migrate from the .bat command shell technology to PowerShell. That .NET object shell technology sounds interesting. Oh, what did the summary say again?
It is restricted to a single market, that appears to be beginning to shrink.
Au contraire, Mono is in wide use (and growing rapidly) and lets you use .NET on everything from iOS and Android to Mac and Linux. So not only is .NET not restricted to a single market, but the markets it's in, as well as its use, appear to be growing, on the whole.
Mais au contraire, mon cher ! .NET what Wine is to PEs. It works for hello worlds, but that's about it. (I'm exagerating, of course). .NET libraries and pretty much anything that calls unmanaged code without P/Invoke.
Mono is to
For one, Mono doesn't support mixed-mode assemblies, wich unfortunately rules out most
And mono doesn't support newer APIs. It's outdated, and you'll spend an awful lot of time on compatibility if you try to do something a bit too complicated.
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
It's interesting reading the comments here, having recently worked on a Smalltalk application (creating some Scratch components for a university). The talk of .net and objective-c (I've used both), which borrow a lot from an 80's language... and I was quite taken with how much good stuff is still in such an elderly environment that still has lots of interesting ideas. (Even if it looks a bit dated at times). The hot method recompile, the refactoring support, the ability to easily customise the environment (there is so little code, and such rich examples that you can cross reference and copy). Of course - new stuff has borrowed from it (as Smalltalk did from Lisp), but I was quite taken with how easy it was to pick it up again 20 years later... In stark contrast with trying to do the same 3 years later with Objective-C (and I suspect .net), which just seem to get more and more complicated vs. simpler each generation.
The era of embedded linux is just on the horizon.
I'm running a dotnet (stupid name impossible to use properly in a sentence) geophysics application on linux using mono. That enables it to be run on a server with a lot of memory and processing power instead of on the users desktop machines. It also means they can just log in and run it over X as if it was on their own machine instead of various RDP weirdness.
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
We analysed a legacy application in C# two years ago. That does not mean that C# oder .Net are legacy, but that there are software systems implemented with these technologies which are legacy and subject to modernization.
My day job is C# and SQL Server. I have a couple of side projects that occupy my free time. When choosing the technologies, I did NOT go for latest and greatest. I wanted FOSS, of course. I wanted software that was established and not half-baked. I wanted to be able to Google the answer to whatever problem had me stuck. In one case, it's an app that's replacing something written in 2001 and still running. So I knew I wanted to use software that would still be around in another decade.
For better or worse, two apps are in PHP. Now that I've used it for a while, I can agree that it is a painfully ugly language. But it works. And there's a lib for everything. And I can Google answers easily.
One app connects to PostgreSQL. At the time I made that decision, MySQL was just bought up by Sun or Oracle or whoever, and MariaDB didn't exist yet. Once again, though, it's software that is relatively solid - not bleeding edge.
One app is running on WordPress. That wasn't my decision, and I've cursed WordPress hundreds of times if I've done it once. But, once again, I can Google stuff. And there's a ton of resources for it.
And I'm pretty sure all of those will still be around in 10 years.
Now get off my lawn.
Visual Basic, please let it be Visual Basic that's going away.
I suspect there are at least 1/2 dozen Forth programmers left in the world - probably doing embedded controller stuff. Who was it who said Forth is a write-only language?
Smalltalk and ALGOL are probably extinct outside computer history museums.
Every CPU has assembly language - the only "legacy" ones are for CPUs that are extinct.
VB6 - probably not - there are still corporate types who have never discovered dotnet. How about original MS or Waterloo BASIC? And there is still a current dotnet version of VB available, even if it's kind of a second-class citizen in the dotnet world.
COBOL and FORTRAN, however, are active standards. The most recent versions are fully buzzword compliant with objects, inheritance, and everything else - and they also will compile legacy COBOL and FORTRAN IV code, complaining all the way (the warnings list might be longer than the source). Hardly "legacy" except for some of the source code.
The way things have gone recently, I'd be inclined to add C itself to the "legacy" list. While still useful as a high-level assembler (which it was originally supposed to be), most use of C-like languages is probably now in the C++ and Java etc. realms.
Digging deeper into memory of funny old magazines that published source code: Modula2? Actor? RPG?
Alright, not really.
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.
Meetup is great for that. Find the technology you want to be in, and then go to a local meetup group, and do presentations / listen to presentations. Buy a book about it.
Stop worrying about your future, your boss / client won't let you work on new tech, you have to take the responsibility and make the jump yourself.
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.
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.
I've had similar experiences replacing Java with perl. Heck I've had similar experiences replacing compiled C code with perl. Perl has it's limitations, but it's often about picking knowing how to pick the right tool and how to use it.
Fortran 2008 is about as modern a language as you can find: OOP, overloading, runtime safety, and support for massive parallelism. C++ isn't even close.
As a long-time PHP dev, I recognize that it's very popular to hate on PHP, and has been for some time. And there are some valid criticisms of PHP, particularly from the domain of purity. PHP is a brutish language, with lots of warts. Whether it's the lack of any sort of parallelism or threads, or the random_underscores or the random(haystack, needle) ordering of variables in functions, there's plenty to complain about.
But PHP has its strengths, too. Its translation of strings to integers to hexidecimal numbers is "good enough" for most cases. Embedding variables into new strings works "good enough" that it's highly useful. It is extremely stable - I literally cannot remember a single incident of unexpected crashing. It's array/hash thingie is a highly convenient way to organize data from semi-sanitized sources, which is largely the norm in embedded, "enterprise" development and/or vertical stack software development.
And despite these strengths, PHP offers some interesting angles that are pragmatic (non-technical) in nature:
1) There are lots of PHP application templates and starter apps that work as a starting point for new start ups. The PHP community is generally very forgiving of newbies.
2) It's uni-thread model is simple enough for beginner/intermediate programmers to comprehend easily.
3) It's already installed on every 2-bit website hosting provider's servers.
4) You can get a tremendous amount of "real work" done with PHP. You could rather easily run a US national census by website using a small cluster of PHP servers.
Once, long ago, I was a beginner programmer, and I chose PHP for largely these reasons, reasons that have sustained me well as a developer. My company, founded on this technology, has grown rapidly and well, meeting the needs of our clients.
How can I not thank the PHP designers for the free gift that I built I career out of?
I have no problem with your religion until you decide it's reason to deprive others of the truth.
I only use one phone; why does it matter if what I write for myself only runs on the one phone I have.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
C is old, and remains popular. .NET is legacy, because no one uses it for new development anymore.
I would not call it "legacy". You coworker is just a hipster.
I have a deep love for FORTH, but its time is pretty much past. You could make a case for using it on really resource-constrained embedded systems, I guess.
But FORTH lives on inside of Postscript, and thus inside of PDF. Something of FORTH will be with us for the foreseeable future.
http://c2.com/cgi/wiki?ForthPostscriptRelationship
Fortran is far from dead, but I'm hoping that Python will take over its niche. Python itself is pretty slow, but you can use wonderful libraries to do powerful things at C speed (or at Fortran speed). The classic BLAS and LAPACK libraries are available in SciPy. So, the math calculations happen as fast as Fortran, but the glue code is a bit slower than Fortran... but you gain the elegance, convenience, and rapid development of the interpreted Python language.
I was able to attend the SciPy conference, and one of the keynotes was a guy from the Hubble space telescope project. He described how they have converted old "legacy" code in a language called IDL into SciPy code.
In science in general, and particularly in astronomy, as they walk away from legacy languages they are walking toward Python.
http://www.astrobetter.com/wiki/tiki-index.php?page=idl_vs_python
Personally I can't wait until Python kills MATLAB. Alas, that will not be tomorrow. But it will happen as surely as free web browsers killed Netscape's ability to charge $40 for Netscape Navigator.
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)
The latest extant standard is 2008, with the new one due out next year. Fortran 77 would count as very much legacy, but the new fortran variants seem to be decent enough modern languages.
SJW n. One who posts facts.
Exactly. Modern Fortran for many numerical applications is much better than anything else available.
And there are some valid criticisms of PHP, particularly from the domain of purity.
The major problems that most people have with PHP stem from the metric buttload of problems with SQL injection and XSS bugs that they're infested with. I know these are not the language's fault exactly, but it's usually very close to the epicenter of trouble and pain. I suspect that it's the legacy of poor community practice that's the biggest troubling thing in reality (as opposed to what people perceive), and that's very hard to fix; all those badly written applications and tutorials need work.
"Little does he know, but there is no 'I' in 'Idiot'!"
You had a typo, you left off the "d" in "lived". You're right, though, only people who have some experience are likely to appreciate how horrible Java really is.
Perl is the superior language over Java for most tasks. If I was developing an actual application, rather than a utility, these days I would probably use Python although I have developed many full-scale applications using nothing more than bash. Every Java application I have supported has produced a nightmarish amount of log file output.
You know, some people still have to write real applications.
.NET application in 2002, and it's still running without issue today. If it only ran in a browser it would have been scrapped long ago.
.NET is alive and well, and business for desktop apps is picking up.
There's a whole crop of big internal LOB web applications that are showing serious aging problems since they only work with older browser types. As they're being chucked at great cost, it's been getting easier and easier to convince people that desktop apps are better - you get a higher quality, more stable UI, and they don't just randomly break with browser upgrades.
I wrote a fairly large (100KLOC+) LOB
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.
Your younger coworker is an idiot.
Probably likes Mongo DB and MySQL as well.
You forgot: Power Builder, ADA, Culprit, MAD, PL/I, Modula-2, and REXX.
How badly would I get laughed at if I mentioned that we're phasing out the last of our FoxPro and VisualFoxPro code?
That bad, eh?
Forget I said anything, then.
And I'll post anonymously.
That's odd, IMHO Ace is a fairly modern programming language.
http://xml.coverpages.org/ace-overview.html
I dup programming-language Forth loved! anything with-it could-do.
- For the complete works of Shakespeare: cat
In theory, adaptive optimized JVM can be faster than C++, because it optimizes constantly during execution. For instance, JVM might turn on SSE instrucitons on your cpu, whereas C++ can not. C++ is compiled for a generic CPU, without SSE extensions. JVM can examine your cpu and turn on specific functionality.
Besides, most large fast stock exchanges are written in Java, they have extreme performance. The trick is to never trigger the garbage collector. In java you do that by preallocating objects, and reuse them all the time.
I wonder how much manpower is still spent maintaining and writing FORTRAN? Oh, I know that in fortran 90 there are structures and classes with methods, but think for a moment about all that legacy code still running out there, not to mention that many scientists still like Fortran for calculations. Maybe lots of scientists have migrated to Matlab but they need to turn to Fortran to unlock some of their old data.
it's still used by some crazy science people who still in 2014 can't get the same quality of compiler output from any other language
FTFY.
I'm surprised nobody's mentioned TLS/SSL as legacy technologies.
> Java is definitely the preferred language over those for reliability, uptime, performance, security, and manageability and maintainability of the source code.
I would have believed you if you didn't say performance and security. Since you claimed Java has great performance and security I kow you're just trolling. :)
Somehow I haven't seen anyone mention that .NET is actually newer than Ruby or JavaScript (the basis of node.js) and it is still developing rapidly, so I'm not sure what the criteria are for "Legacy".
I worked at a Ruby on Rails shop, and most of the twenty-something fanboys didn't understand language design or design patterns in general well enough to have a well defended opinion as to why Ruby on Rails was the right choice, they liked it because it was Ruby on Rails and that's what the cool kids use. It's performance is abysmal and it encourages terribly structured code. Language choices made "because it's cool" will quickly be replaced by the next buzzword. On the other hand, 40 years later, C/C++ are still widely used for performance critical applications at companies both stodgy (finance) and cutting edge (back-ends for tons of web companies).
The question is not what language you use, but do you know more than one? If you only have learned one language you are limited, both in your capabilities and in your way of thinking. It is known that languages effect the modes of thinking that people use. If you have not learned other languages you might not be -able- to think in other ways.
Applies to spoken languages as well...
The real problem is that some of the best programmers simply aren't interested in what the industry is using.
If a language doesn't have a huge market share and high visibility to companies it won't get used.
This is how we are mostly stuck with Java and C#. (And up until recently COBOL and RPG - Thanks 1980's IBM!)
Now If I had my way, we'd all be using more flavorful languages like C, C++, Python, Common Lisp, Scheme, Perl.
But those simply don't generate enough trade shows and complimentary CEO golf games to "close deals".
However, they are usually learned by people who are actually driven to make quality software.
The security of a web app (ie, running inside a container) is relatively secure. The "insecurity" attributed to Java is almost entirely browser plugin based, at least for the past few versions I ran through the last time someone made this claim. I personally would never write an applet, at least not using Java. I'd go for an application, in which case you're back to relatively secure. Now if you download a trojan, there's no helping that.
As for performance, I thought this one had finally been put to bed with results like these and many others. Yes, C/C++ can be fast. Yes, Java can also be fast. They all can be dog slow too.
The cesspool just got a check and balance.
Ibm used to say for a time that REXX was the most used language in the world.
Of course. Performance issues are often a matter of using a more efficient algorithm rather than a more efficient language. But in my experience, Java has the superior ecosystem when it comes to correct and performant packages most of the time.