4 ms·
My own suspicions is that we've taken programming as far as it can go. All the big ideas were in invented in 1980 or earlier: subroutines, libraries, functional
by blippage 5y ago
My own suspicions is that we've taken programming as far as it can go. All the big ideas were in invented in 1980 or earlier: subroutines, libraries, functional programming, automatic garbage collection, etc.. We may have refined some ideas since then, but it seems that we are mostly arguing over what colour the wheel should be.
Alan Kay compared out current practises as akin to pyramid building; very little is understood about structural engineering properties of the materials, we just place block on top of block. He argues that there is no programming equivalent of the arch.
But suppose that big blocks of stone is all there is. I recall Linus Torvalds talking about one of his proudest achievements. I don't remember specifics, but it was some memory allocator IIRC. All of this was achieved at the microscopic level using C. It's one human sitting down and figuring out exactly what was required to solve the problem, which bits to twiddle, and which bits to leave alone. No shortcuts.
I would argue that programming is not like other engineering disciplines. It boils down to this: we can create specific solutions to specific problems, but we can't create specific solutions to general problems. That is to say, we can create programs like spreadsheets, do accounting, model airflow through turbines, whatever you want, because we understand the problem domain, and it is constrained. As to "how do I write my program", well, what program are you trying to write?
Compilers cannot reason about the structural integrity of a program. They are general purpose. They do not have any domain knowledge about the type of program you are trying to construct. They can therefore only tell you if a program is syntactically valid, not whether the program is flawed at the domain level.
Can we give compilers (or some other near equivalent) domain knowledge? In an exceptionally limited sense, perhaps. I have in mind configuration tools that some microcontroller vendors release. These programs have domain-specific knowledge about how their microcontrollers can, and cannot, be configured and for what purpose.
They are extraordinarily constrained in scope. The hard work of actually getting the hardware to do what you want it to do is left up to you.
So we shouldn't expect too much out of any domain-specific solution. Their scope is highly limited. We shouldn't expect many to be available.
So I'm not expecting much in the way of paradigm shifts in the near future.