Hacker News
My 1992 view of the problems of computer programming in 1992
miyoji
|next
[-]
I don't think this has changed much at all since 1992. Now you can say that it's less than 90 years old, and nobody is very good at it yet.
And most of our profession has already given up on getting any better at it because a machine can spit out code that compiles.
ozim
|root
|parent
|next
[-]
Juniors just label anything that requires putting effort to understand as „bad”.
There was insane growth in junior dev numbers last 3 decades. It is not like „no one knows”, it is more like there is much more people who don’t know.
GolDDranks
|root
|parent
|previous
[-]
The average programmer doesn't get better – if anything, we might be getting worse, because the tools allow us to, and the capitalist reality doesn't optimize for great programs or programmers but for more money.
But, at least, the tools are way better than in 1992, and I think we, as a collective profession, have learned a thing or two.
anthk
|root
|parent
[-]
GolDDranks
|root
|parent
[-]
What I mean is: we had memory safe system-implementation languages in wide spread production use only after/around the times of the publication of that memo.
We had memory-safe experimental programming languages, and scripting languages before that.
And the bit I want to correct is, of course, the point is if they are actually used. In that sense, I'd correct the introduction of Rust around 2023-2026 in actual, wide-spread use.
wood_spirit
|next
|previous
[-]
Occam’s razor IBM didn’t invest in Fortran I because the internal political environment at the corporation didn’t have the incentives aligned to do so. This is completely orthogonal to whether they could have used a better compiler or not.
IAmBroom
|root
|parent
[-]
Letting pride outvote usability is an insane business decision.
diseasedyak
|next
|previous
[-]
fsmv
|next
|previous
[-]
I think this is still true today. Software is only just starting and there is a lot of room to find better ways of doing things.
adamddev1
|next
|previous
[-]
Someone
|root
|parent
|next
[-]
- not writing compilers in assembly
- not requiring overlays
- knowing how previous compilers produced fast code (Web search doesn’t give me conclusive answers, but that Fortran compiler may have been the first to do loop unrolling and common subexpression elimination)
- having way more memory, CPU and disk available
- possibly: spending less time looking at optimizations. I expect IBM tried hard to make the output of their compiler to match the performance of hand-written assembly
The best link I could find is https://en.wikipedia.org/wiki/Fortran#FORTRAN_IV:
“In particular, the FORTRAN H compiler played an important role in the development of certain kinds of optimization approaches, such as allocating a specific set of registers to hold the values of variables while in a loop. Overall, the compiler had three levels of possible optimization, as Fortran compiler developers had learned early on that the ability to turn off optimization was a necessity, since it drove up compilation times considerability for program runs that often were not going to work anyway. Even with the larger amount of main memory available to it, the FORTRAN H compiler was still organized via a number of overlays.”
senfiaj
|root
|parent
[-]
>> - not writing compilers in assembly
Sure, but you still generate the machine code, right? You still have to master the instructions and their specifics of the target CPUs.
bigfishrunning
|root
|parent
[-]
You do, but self-hosted compilers tend to have two huge benefits:
1) they tend to be easier to reason about, being written in a high-level language
2) they exercise the code, and usually even seldom-used parts of the code, to make problems more noticeable
senfiaj
|root
|parent
[-]
jcranmer
|root
|parent
|next
|previous
[-]
There is a second shift that occurs around 2000-2005-ish, which is the transition of optimizing compilers from an instruction-based semantics to a more value-based semantics, in that modern optimizers make no real attempt or guarantee to preserve the structure of code. For example, an if statement may happily be converted into an expression lacking an if entirely.
fsmv
|root
|parent
|previous
[-]
I was just doing some research and apparently all of this stuff was invented around the late 60s and so in the 70s it was still new and by the 90s it was standard practice. The dragon book came out in 1986 and spelled it all out in one place.
Today we have the benefit of knowing the right ideas to use from the start and confidence that if you follow the formula it will all work out.
ch_123
|next
|previous
[-]
epc
|root
|parent
[-]
ch_123
|root
|parent
[-]
Aside from a few utilities, relatively little of OS/400 was written in RPG. Originally, most of it was written in two different dialects of PL/I. Some Modula-2 was added into the mix, and most of the lower levels were rewritten in C++ when they switched to PPC processors.
shakna
|next
|previous
[-]
Last time I was working with CCE, I was looking at blistering runtime speeds, but six or seven hour compiles. Huge codebase (40mil+ LoC), and the optimisations were great, but not exactly a fantastic dev lifestyle.
amelius
|next
|previous
[-]
Nowadays it's all about optimizing the same old algorithms but on a GPU.
aidenn0
|root
|parent
|next
[-]
2. Consider any algorithm of roughly linear complexity (this probably applies to N lg N as well): the only way to make it significantly faster now is to improve parallelism (whether making it so the CPU can exploit ILP, running multicore, or running on a GPU). In 1992, you could make things run significantly faster by just waiting until it was 1994.
Joker_vD
|root
|parent
[-]
In the late 90s a couple of companies, including Microsoft and Apple, noticed (just a little bit sooner than anyone
else) that Moore's Law meant that they shouldn't think too hard about performance and memory usage... just build
cool stuff, and wait for the hardware to catch up. Microsoft first shipped Excel for Windows when 80386s were too
expensive to buy, but they were patient. Within a couple of years, the 80386SX came out, and anybody who could
afford a $1500 clone could run Excel.
As a programmer, thanks to plummeting memory prices, and CPU speeds doubling every year, you had a choice. You
could spend six months rewriting your inner loops in Assembler, or take six months off to play drums in a rock and
roll band, and in either case, your program would run faster. Assembler programmers don't have groupies.
So, we don't care about performance or optimization much anymore.
— Joel Spolsky, "Strategy Letter VI" (2007)
Also, during that time the computer market grew extensionally as well: there were a lot of people who didn't have a computer, and when they went to buy one, they'd naturally buy one of the more modern, more powerful models. Nowadays, it's mostly people updating their already owned hardware.
bunderbunder
|root
|parent
|next
|previous
[-]
Also to some extent it’s just that we’ve pretty well standardized on algorithm implementations. Thinking about the relative merits of a BST vs a red-black tree vs a hash table with bucketing or open addressing or whatever just doesn’t happen as often when the standard library has one implementation and not choosing it would cost you a week of implementing testing and justifying the decision to your colleagues.
dwoldrich
|next
|previous
[-]
80% of the cost is maintenance, and all software dies so there will always be work to do.
hectdev
|next
|previous
[-]
KptMarchewa
|next
|previous
[-]
mackeye
|root
|parent
|next
[-]
Sharlin
|root
|parent
|next
|previous
[-]
dTal
|root
|parent
[-]
aidenn0
|root
|parent
[-]
This is true, but the implementation is constrained by the specification. Python is not just dynamic, but in many cases over-specified. If you read e.g. the Common Lisp specification, you will find that things are under-specified in places that leave a lot of low-hanging fruit for an optimizing implementation.
Scheme (particularly prior to R6RS) is so lightly specified as to allow a lot of variation in implementation strategies, even more so than Common Lisp.
photios
|next
|previous
[-]
s/FORTRAN I/Mythos/ for the 2026 version of this.