Functional Programming Is Letting Us Down <https:...
# thinking-together
d
Is this a PDF published through a substack?
k
The fact that we have pushed the function-based paradigm this far is not a testame_g_nt to functional thinking, but, is a testament to the tenacity of the human spirit. Humans will find workarounds for their inadequate tools, even if it takes them 50+ years.
True but only part of the story. There has to be inertia in technology if you want it to be useful. For stuff that lots of people depend on, you can't just pull the plug and start from scratch every couple of years. For that reason, the only possibility I see for your ideas to become reality is as a generalization of today's function-based systems. Future systems must allow today's software to remain usable, and then open up new ways that can be explored incrementally.
g
@Denny Vrandečić I'm not sure how to answer your question. This is a PDF created with Apple Pages. Lately, I've been using substack for blogging, but writing in Apple Pages (before that, I was blogging on github, then Obsidian (from which I have since escaped)). I've discovered that dragging a Pages document that contains footnotes and images into substack is a very manual mega-project. Subtstack allows me to drag'n'drop PDF files directly into a post, but, readers must download the PDF to view it. Github allows me to "embed" PDFs in a frame that makes them kinda visible, whereas substack doesn't do this. I am back to considering whether I should re-consider the use of leanpub or gumroad or ???).
@Konrad Hinsen
... There has to be inertia in technology if you want it to be useful.
Inertia only gets you so far. I claim that it is impossible to express asynchronous concurrency using a function-based paradigm. You can chip away at trying to get there incrementally, but you reach an asymptote that you can only get closer to, but, never arrive at. I claim that we're witnessing this phenomenon right now. The real questions are: (1) is it impossible to express asynchronous concurrency using a function-based paradigm, and, (2) is it really true that the crop of problems that we face are rife with asynchronous concurrency? If (1) and (2) are true, then continuing to push on the function-based paradigm is futile and a waste of time. Take the wins from thinking that way and move on. No need to wipe out what we've already achieved. Just stop beating our heads against the wall of what cannot be achieved in the future. Alpha-beta pruning. If the going gets tough, find a way to make it be less tough. If you end up in a corner, don't keep pushing deeper into the corner.
For stuff that lots of people depend on, you can't just pull the plug and start from scratch every couple of years.
Did I actually say that I recommend pulling the plug? I hope not. In fact, all of my experiments with this stuff are based on existing technologies, like Odin, Python, draw.io. Concurrency is easy (even the asynchronous kind). 5-year olds, without PhDs, understand hard realtime and written notation for expressing hard realtime (piano lessons and music notation). If concurrency using a specific paradigm looks not-easy, that's a tell. If you need to keep inventing workarounds to keep pushing a belief system, that's a tell. If you espouse an edict that contradicts reality, that's a tell (e.g. "no mutation" violates the basic premise of CPUs bolted to RAM ; e.g. "control flow is data" is patently untrue (the data that control flow interprets is data, but the interpreter is not data (CPUs are interpreters, albeit very fast ones))). When the tells pile up, maybe it's time to reconsider whether forging ahead on only one path continues to be reasonable.
For that reason, the only possibility I see for your ideas to become reality is as a generalization
There's something that I disagree with. The answers will not come from further generalization but from further specialization. Our current software development workflows are based on the idea of generalization. If you insist on incrementally developing something, how about incrementally developing a way to allow specializations to co-exist and to be composed into functioning code? (hint: I'm playing with and blogging about how to use existing languages as assemblers for new languages) [I view, correctly or incorrectly, "Moldable Development" as another idea for how to insert specialization into our workflows.]
Future systems must allow today's software to remain usable,
Agreed.
and then open up new ways that can be explored incrementally.
You, also, need to be able to tell if you're at a dead-end and when to stop wasting your time. Remembering and understanding how hardware works might offer up new ways to create new things. OTOH, pure research is, indeed, worthwhile. IMO, pushing on the functional paradigm has transmogrified into pure research into only one way to use ReprEMs (reprogrammable electronic machines - formerly known as "computers"). I wish to point out that there are many other vectors for pure research into the use of ReprEMs , that remain to be low-hanging fruit and might lead to more fruitful and cost-effective approaches to using ReprEMs.
d
@guitarvydas thanks for the explanation! It's a pity Apple Pages doesn't allow for a more webby export format, such as HTML
g
Firstly, it's substack - there appears to be no API for pumping stuff into it. I can't even drag'n'drop markdown into it. You have to use their editor, and manually enter text. Apple Pages can already export to epub and to .docx. The problem is that substack doesn't grok those formats. substack does partly grok Apple Pages format, but not footnotes and diagrams/images/screenshots (I haven't found anything yet that makes inclusion of .png / .svg easy and visible. Obsidian does, but it's paywalled, with unpleasant repercussions if you stop paying (ask me how I know 🙂). Github is close but no cigar). Substack's appeal is its distribution and other non-technical things. If substack would allow me to pump markdown or leanpub's markua at it, I would probably be happier. I continue to root around for solutions. I'm always open to suggestions to things that let me spend time building software instead of spending time writing about it. @Denny Vrandečić
k
@guitarvydas I actually agree with much of what you say! The only point we seem to disagree on is the role of inertia.
Inertia only gets you so far.
The role of inertia is to keep the rate of change in society at a level that society can absorb by adapting. So yes, it's an obstacle to innovation. But if you insist in innovating faster, the society will just ignore your work. Which is what is happening to most of us here (also for other reasons of course). A "dead end" for innovation may well be what non-tech people are happy with. I doubt that's the case for today's IT, but that's another story. You don't want to get stuck in a dead end when doing research, but then research is a minority activity anyway, and will always remain one. As a researcher myself, I mostly share your point of view. But I also understand the majority of non-researchers who just want to tweak mainstream stuff to get a job done. My choice of "generalization" was not the best one. The idea is that your new stuff and the old stuff must live in a single technological realm in which application-oriented people can move around with ease. Your new high-concurrency computers must be usable as coprocessors for commodity machines at first.
g
@Konrad Hinsen I'm enjoying this conversation and thank you for taking the time to read and comment. 1) I disagree with your disagreement. It appears that we disagree on deep-down beliefs, inertia is just a second order effect. 2) End-users don't care if developers use assembler or Haskell. It appears that most of my comments regard developers and practical application of programming research. Does that clarification of perspective change the thrust of this thread? 3) It seems to me that compute-ing is unduly influencing practical aspects of programming (while end-users just don't care). Extended comments can be found in...https://programmingsimplicity.substack.com/p/beliefs-that-adversely-affect-the?r=1egdky
k
@guitarvydas Maybe I am misinterpreting something. I read your text as a call for a technological revolution, from new chips to new software stacks. If you stay on today's commodity hardware and only change the programming toolchains, then it's indeed only developers that are concerned.