The Atoms of Programming
sicpers.info
sicpers.info
These two lectures by Jackson are great:
SATURN 2016 Keynote: Rethinking Software Design - https://youtu.be/LDny7VGLzTE
UMass Amherst CICS Distinguished Lecture: Daniel Jackson (Massachusetts Institute of Technology) https://youtu.be/cNe6g0qczxE
I guess my point is that paradigms are important, but that they are best learned in the context of languages that are designed around those paradigms and that learning them can actually be hampered if you are only familiar with languages that don't have good support for those paradigms. New paradigms are also often only really introduced and proved effective in the context of new languages designed around those paradigms. Dreaming up a new paradigm is rather an academic exercise if no language exists that can well represent that paradigm and can be used to build actual working systems proving the paradigm useful and effective.
The only thing left are non-functional requirements and while you could get a constant factor of slowdown, most compilers take care of 99% and you won't change complexities.
Isn't this another way of saying design patterns? I know the answer has to be "no", but I don't see why.
They do exist, but are very rarely known. Take object-orientation. Typically the primary pattern known is just object, class and inheritance. However, there are patterns that build on those to model the things, people, places, events and concepts, and the roles they interact in, and the constraints that limit them, in every "business" or real-world domain.
Why aren't they better known? I think it is because object modeling has entirely lost the battle today to data modeling, where data entities are acted on by external code organized using functional decomposition. It doesn't seem to bother most that for 45 years we have been struggling with the problem that doing so increasingly results in a "big ball of mud" as project size and complexity increases.
Lack of dependency inversion in systems like this is truly the road to ruin, as the system complexity grows so quickly in time, due to interactions, that eventually nobody really understands what it does or why it does it.
I suppose this is tolerable for some applications, but if you need to numerically validate it, it's a nightmare.
One definition/explanation:
https://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf
They also have a nice book: https://www.info.ucl.ac.be/~pvr/book.html
I personally think the notion of architectural style is more useful.
Say dataflow programming, for which Norvig's sentence generator in PAIP is an excellent introduction, one can use a switch/case or an object with functions as values. Both accomplish the same, but in the latter I change the flow of my program by changing a value in a map.
tricks->idioms->techniques->patterns->paradigms->...?
- Alan Perlis
I thought that was the article people were discussing and couldn't figure out why no one else was mentioning having trouble following the flow of the language:
But the utility, the summary configurations of suggestions that speed on these programs,
exist in fully separate condo and are merely (though the undeniable truth that here’s
that that you can maybe be additionally bear in mind is immensely worthy) translated
into the digital or paper medium.
I guess it's a previous version which hadn't gone through proofreading? Pretty confused here.There is an article on Milo which looks computer generated.
And then translated to English; instead of alt-right it has alt-correct!
And the phrasing is really weird.