I faced two problems after K:
1. The whole software engineering world starts to look like a ridiculous house of cards; When you're used to seeing implementations of fast and efficient in memory databases in ~20 lines, or an npm-style package manger[1] in less than ~400 lines (comments included). Modern software engineering practices enable and encourage solutions that are inefficient in many respects. Maybe it cannot be better at a large enough scale, but it affects and infects the smaller scales as well. It is extremely frustrating.
2. Getting actual work done requires interfacing with the world, which isn't quite up to the k/q/apl standards of terseness and efficiency -- mostly "accidental complexity"[2]; So, e.g., if you have to have web presentation, or work on import/export, they dominate your effort due to accidental complexity that cannot be removed. Which is doubly frustrating.
[1] https://github.com/yang-guo/qp
[2] https://www.quora.com/What-are-essential-and-accidental-comp...
HN discussion(2010) : https://news.ycombinator.com/item?id=1041500
http://www.softwarepreservation.org/projects/apl/Papers/Elem...
I'm not sure what you mean. C? C++? Java? Perl? Perhaps Python?
You can't write C++ or Java like you did 20 years ago (of course, you could but you shouldn't). Both languages and their whole ecosystems have evolved tremendously in 2 decades.
The C and Perl style OTOH has changed less. A programmer of those language from 20 years ago that is transported to the present day will have much less problems fitting in than a programmer of C++ and Java would.
Also a lot of applications were written as huge monoliths even a few years back.
These days people write applications to do one task properly.
Also that word represents a culture which is what I was talking about.
My 'design patterns' in C now has a lot more of the things I 'liked' about these languages, lots of abstractions, actors, compartmentalization and many many more, as well as the most important bits like multi-core/threads aware APIs and so on...
I think that if you stick not just to a language but to your set design patterns and even toolset, you fall into what I call 'mind sclerosis' -- HOWEVER -- it's not because your patterns evolve and you update your toolset that you need to change language and go with all the trends... Most 'modern' patterns can be done in any languages.
In fact I do a lot more C these days than I did for the last 20 years...
This is categorically untrue for Perl.
But yeah, I agree with you about Moose. But I also stand by my opinion that Perl changed muss less than C++ or Java in that time period.
- DBIx::Class instead of DBI is a huge change; even DBI was reasonably new back then, with people still using MySQL.pm
- Moose and Moo over everything being hand-roled. I remember in 98 trying to convince people to use OO at all for anything.
- The testing ecosystem is very different / much improved, and people actually write them?
- People are really using strict, "use warnings" is a thing instead of -w
- Catalyst/Mojolicious/Dancer on Plack instead of mod_perl being cutting edge; even then, most stuff in '98 was CGI, with CGI.pm being luxury as opposed to people rolling parameter parsing by hand
- There were still many many many CPAN deniers in '98
- UTF8 and Unicode is actually a thing now, rather than an after-thought
etc
> cl.exe Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
I hope they pay you enough for the pain and suffering of using it. :-)
Perl was launched in 1987.
Python was launched in 1991.
Java and Javascript were launched in 1995.
C# was launched in 2000.
So the newest out of the popular languages is already 18 years old.
You don't need Fortran or Cobol or Lisp to have been able to do this... It's already almost 60 years since that time.
C++ doesn't qualify, to my mind, because the language has had many iterations and also because, as the post's author points out, writing C++ in the early 90s was not always a pleasant experience.
Python and even Perl are good contenders, as they have both been relatively stable languages. I'm not sure Java counts - Java 10 is quite different to Java 1.0, not just in terms of language features but often paradigms too (think 5's generics and 8's lambdas).
As for C# - I've never done .NET, so I'll have to take you on your word.
So I'm not sure I buy this argument, unless someone has solid counter arguments.
Edit:
I suppose a major change was that back then, CLOS was not yet part of the standard. There was a competing system being used at the time called flavors that had a lot of the same features. No one uses that anymore to my knowledge.
[1] https://common-lisp.net/project/named-readtables/ [2] http://www.paulgraham.com/onlisp.html [3] https://letoverlambda.com/
Both are seen slightly controversial by some. On Lisp for example indicates that PG actually wanted to program in a different language - and eventually did: Arc.
I suffered some damage from not wanting to touch Windows (3.1) after discovering Linux in the early 1990s. Today, most jobs advertisements still look toxic.
I can only imagine how it would be for anyone using Lisp. The power there is so much, going to something like Java from there would feel down right suffocating.
Going from Perl to Python in my case largely felt like trying to a run a marathon in chains.
Even the designers of Java didn't expect programmers to go from Lisp to Java.
I find that not surprising. Python is geared a specific type of programmers. If Perl fits your programming, you will feel constrained by Python.
Me personally, I never liked Perl that much. IMO it's not a programming language but a write-only brain dump.
But Ruby is to me what Perl is to others. It's combining the power and expressiveness of Perl with a consistent OO model like Smalltalk and with a sane syntax.
There's all kinds of crazy little bits like that littered around Ruby.
It's still my favorite language, but it is also totally infuriating sometimes.
Apart from that I haven't seen any thing in Python that makes code more readable.