Live data from Hacker News

My 1992 view of the problems of computer programming in 1992

blog.plover.com

31–40 of 56 posts

Re: My 1992 view of the problems of computer programming in 1992

#31
> Computer programming is still a black art. It's less than fifty years old, and nobody is very good at it yet. We can make better tools than we know how to use.

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.

Re: My 1992 view of the problems of computer programming in 1992

#33
post #26

I never hear anyone talk about big-O notation anymore ... Nowadays it's all about optimizing the same old algorithms but on a GPU.

I still think about it sometimes, but I don’t think it matters nearly as much nowadays as it did back in the day. Oftentimes I’m working in situations where the all the complicating factors that big O explicitly excludes matter much more now than they used to. Partially because they’re relatively larger (e.g., cost of memory access) and partially because they’ve become variable in a way that they weren’t 30+ years ago (e.g., the cost of a conditional branch instruction).

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.

Re: My 1992 view of the problems of computer programming in 1992

#34
post #24

Earlier quoted context omitted.

> Sure, but you still generate the machine code, right? You still have to master the instructions and their specifics of the target CPUs. 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

But once you have written in assembly, you could start to write the next version in the higher level language. The first version (written in assembly) doesn't necessarily have to produce the most optimal code, just good enough and correct. Most of the improvements can be done in the self hosted compiler (in a higher level language). So this period did not have to last many years.

I am sure writing a self-hosted Fortran compiler is possible, but it wouldn’t be my first choice for writing a Fortran compiler, even given the Fortran of today.

In the 1970s, it would have been really low on my list, likely below using a macro assembler.

Re: My 1992 view of the problems of computer programming in 1992

#35
I went to the University of Arkansas in the fall of 1993, into Computer Systems Engineering, and we were the first freshman class to work on C/C++ as a primary language to be learned, instead of FORTRAN. I still to this day haven't written a single line of that language, but I find it fascinating.

Re: My 1992 view of the problems of computer programming in 1992

#36
post #26

I never hear anyone talk about big-O notation anymore ... Nowadays it's all about optimizing the same old algorithms but on a GPU.

1. For the most common things people will write, we have a plethora of asymptotically optimal choices that have been discovered.

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.

Re: My 1992 view of the problems of computer programming in 1992

#37
post #25
post #21

Earlier quoted context omitted.

Languages were simpler (except for certain ones, like C++ which was a beast even in 1992), and incredibly complex and magical optimizers weren’t yet a thing, never mind a feature expected of a "passable" compiler. One could still write a reasonable non-optimizing Pascal or C89 compiler in a weekend more or less, and it would be both faster to write (thanks to more expressive languages) and faster at compiling (thanks…

I dunno, Chez Scheme is from 1985 and remains today one of the most magically optimizing compilers for a dynamic language in existence... kind of makes you wonder how we went so far wrong with Python.

People like to say that "languages aren't fast or slow, that's a property of the implementation."

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.

Re: My 1992 view of the problems of computer programming in 1992

#39
post #26

I never hear anyone talk about big-O notation anymore ... Nowadays it's all about optimizing the same old algorithms but on a GPU.

Big O doesn't capture parallelism well enough and that's really been the push since Moore's Law started to hit diminishing returns on single threaded perf.

Re: My 1992 view of the problems of computer programming in 1992

#40
post #36
post #26

I never hear anyone talk about big-O notation anymore ... Nowadays it's all about optimizing the same old algorithms but on a GPU.

1. For the most common things people will write, we have a plethora of asymptotically optimal choices that have been discovered. 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…

> In 1992, you could make things run significantly faster by just waiting until it was 1994.

    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.
Post reply on HN