(Based on discussion at InsultJustificationDiscussion)
Despite what TopMind believes, practitioners do not have any social license to blurt technical opinions then hide behind a shield of ignorance. Practitioners are welcome. They're also expected, if they come to a forum about PeopleProjectsAndPatterns in SoftwareDevelopment, to willingly educate themselves.
We have a stalemate where both sides won't do homework that the other expects. I expect you to turn your pet theories into demonstration code samples and scenarios (RaceTheDamnedCar), and you expect me to read and figure out your favorite academic books and papers. This stalemate is because I put much less value on theory than you and you place much less value on empirical demonstrations than I do. This is largely because I believe that software productivity is mostly about psychology (PsychologyMatters) and fitting people's personal mental models, while you feel it is more about finding the one true central universal "math" or model. --top
There is a serious problem with what you say, TopMind: you claim to favor demonstrated code examples, yet the 'technical opinions' you blurt tend to not contain such demonstrative code examples of a claim. Sure, sometimes you write up some code (e.g. in GuiMachineLanguage), but rarely does it demonstrate anything relevant to the argument (e.g. that you don't still need scripting, improved support for CrudScreen relative to HTML++, etc.), and it certainly doesn't demonstrate the wide variety of other claims you make (that it meets real-world needs, that fanboyism will destroy any app-lang specific solution, that there's a 'security' benefit). If you wish to use demonstrative code examples to prove your arguments, I can respect that method (in profession, if not attitude, I'm a practitioner too). But your execution of your favored approach to argument leaves much to be desired, and you regularly fill in the gap with distractions (RedHerring), illogical leaps (NonSequitur), and unjustified or unjustifiable assertions (HandWaving), sometimes all at once. Even if you don't believe your that bad, you should at least accept that many other people do believe you're that bad. The fact is, even if you don't put much value on theory, you must still rely upon it to bridge the gap between a code example and a claim that it achieves some useful property. But, because you are inept or uneducated in both theory and logic, you attempt to bridge that gap with sophistry (or fallacy, since you claim to be so 'innocent' and 'ignorant' despite being told off repeatedly).
I don't know what you are referring to with regard to "waving away performance". If you are going to introduce specific instances of my alleged devious behavior, then either cite them properly or don't reference them at all. Half-ass citations are merely fodder for flame-wars. -t
As far as your list, I agree we should try to optimize most of them also. I just disagree with you on how to go about it. -t
And don't get me wrong, I am not a CowboyCoder against abstractions in general. But what I have found by experience is that big grandiose abstractions tend to fail harder and uglier than small, local abstractions, and that one must plan for exceptions to the rule (deviations from abstraction) such that deviations don't bring down the whole thing (EightyTwentyRule). Design machinery with tolerances for grit and bad replacement parts, because you won't always be around to police the machine. -t
Sure. Big, grandiose abstractions - like the general idea of tables and procedures - fail harder and uglier than small, local abstractions. One must plan (BigDesignUpFront) for the exceptions to the rule (deviations from abstraction) such that deviations don't bring down the whole thing (such as by having security, safety, scalability, composition, modularity, configurability, concurrency, well-timing, etc. issues). Languages should be designed to support modularity such that components can be fixed and replaced individually. I see nothing to disagree with here. I would say that you are the one who favors big, grandiose abstractions with your positions in TableOrientedProgramming, your anti-scripting stance on GuiMachineLanguage, your favoring 'entity' tables above 'narrow' tables, your attempt to generalize TypesAreSideFlags, etc. As noted above, I favor properties. 'Properties' (like scalability and concurrency and performance) are categorically different from 'abstractions' (like pure functions, procedures, actors, sets, lists, records, characters, numbers). I'm a fan of having many primitive abstractions, each with its own relatively narrow role to play. HorsesForCourses, PickTheRightToolForTheJob. If abstractions aren't pulling double and triple-duties, optimizations for performance are easier to automate without sacrificing the various other useful properties, and composition can be made scalable via layered language (e.g. procedures can use functions, but not vice versa).
I will resist the urge to rekindle those subjects in this topics. If you wish to pull something out for specific analysis that illustrates issues in this topic, then please do. -t
The above list IS a set of specific examples for analysis. If you've forgotten, though, the point of those examples is that TopMind - not I - is the one who favors 'big' abstractions, such as 'use tables for everything', 'use callbacks to server for everything', etc. That's a meta-argument position, is it not? Individual arguments are specific points in an argument discussing habits across arguments. There is no rational or logical reason for you to rekindle those subjects. There is no rational or logical reason for me to pull something out for specific analysis, because your 'anti-scripting stance for GML' IS ALREADY something for specific analysis, as is your entire concept of TableOrientedProgramming.
I generally meant big domain abstractions, not big tool abstractions. -t
I program a computer, not a domain. I represent input and output. I represent many 'tool' abstractions for program components (actors, functions, procedures, message channels, sets, maps, lists, records, variants, numbers, subscriptions, mutexes, cancellation points, threads, stacks, queues, etc.). But, with two exceptions, I very rarely represent 'domain' abstractions at all - much less 'big' ones. Those exceptions: planners, and simulators, which must know something of a domain in order to plan for it or predict it. For planning and simulation, I favor LogicProgramming idioms (and I'd favor a LogicProgramming language, too, if it readily fits the rest of my toolset) - SQL supports a few such idioms.
Anyhow, there is reason to believe you favor big 'tool' abstractions. I also like big tool abstractions, albeit specialized to the job.
What would you consider to be a big 'domain' abstraction?