Add hugo-easy-gallery (rev 2935729), try one post with it
This commit is contained in:
@@ -10,12 +10,12 @@ _Modularity_ and _abstraction_ feature prominently wherever computers
|
||||
are involved. This is meant very broadly: it applies to designing
|
||||
software, using software, integrating software, and to a lot of
|
||||
hardware as well. It applies elsewhere, and almost certainly
|
||||
originated there first, however, it appears to be particularly
|
||||
crucial around software.
|
||||
originated there first, however, it appears especially crucial around
|
||||
software.
|
||||
|
||||
Definitions, though, are a bit vague (including anything in this
|
||||
post). My goal in this post isn't to try to (re)define them, but to
|
||||
explain a bit of their essence, and expand on a few theses:
|
||||
explain their essence and expand on a few theses:
|
||||
|
||||
- Modularity arises naturally in a wide array of places.
|
||||
- Modularity and abstraction are intrinsically connected.
|
||||
@@ -60,9 +60,10 @@ different from being vague. The purpose of abstraction is not to be
|
||||
vague, but to create a new semantic level in which one can be
|
||||
absolutely precise." Joel Spolsky, in one of few instances of me
|
||||
actually caring what he said, also has a blog post from 2002 on the
|
||||
[[https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/][Law of Leaky Abstractions]]. The [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] is
|
||||
likewise a thing. So, abstraction too has its practical and
|
||||
theoretical limitations.
|
||||
[[https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/][Law of Leaky Abstractions]] ("All non-trivial abstractions, to some
|
||||
degree, are leaky.") The [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] is likewise a
|
||||
thing. So, abstraction too has its practical and theoretical
|
||||
limitations.
|
||||
|
||||
* How They Relate
|
||||
|
||||
@@ -112,15 +113,15 @@ some details implies that a module is handling those details, that the
|
||||
details shouldn't matter, and what does matter is the abstraction one
|
||||
is using.
|
||||
|
||||
# -----
|
||||
Consider the information this module deals in, in essence.
|
||||
One of Rich Hickey's favorite topics is *composition*, and with good
|
||||
reason (and you should check out [[http://www.infoq.com/presentations/Simple-Made-Easy/][Simple Made Easy]] regardless). This
|
||||
relates as well: to *compose* things together effectively into bigger
|
||||
parts requires that they support some common abstraction.
|
||||
|
||||
In the same area, [[https://clojurefun.wordpress.com/2012/08/17/composition-over-convention/][Composition over convention]] is a good read on how
|
||||
/frameworks/ run counter to modularity: they aren't built to behave
|
||||
like modules of a larger system.
|
||||
|
||||
What is the most general form this information could be expressed in,
|
||||
without being so general as to encompass other things that are
|
||||
irrelevant or so low-level as to needlessly constrain the possible
|
||||
contexts?
|
||||
|
||||
(Aristotle's theory of definitions?)
|
||||
|
||||
# -----
|
||||
|
||||
@@ -152,6 +153,33 @@ contains fewer incidental details, and more essential details.
|
||||
|
||||
# -------
|
||||
|
||||
* Information
|
||||
|
||||
I referred earlier to the abstractions themselves as both boundaries
|
||||
and communications channels. Another common view is that abstractions
|
||||
are *contracts* with a communicated and agreed purpose, and I think
|
||||
this is a useful definition too: it conveys the notion that there are
|
||||
multiple parties involved and that they are free to behave as needed
|
||||
provided that they fulfill some obligation
|
||||
|
||||
Some definitions refer directly to information, like the [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][abstraction
|
||||
principle]] which aims to reduce duplication of information which fits
|
||||
with [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][don't repeat yourself]] so that "a modification of any single
|
||||
element of a system does not require a change in other logically
|
||||
unrelated elements".
|
||||
|
||||
|
||||
|
||||
# ----- FIXME
|
||||
Consider the information this module deals in, in essence.
|
||||
|
||||
What is the most general form this information could be expressed in,
|
||||
without being so general as to encompass other things that are
|
||||
irrelevant or so low-level as to needlessly constrain the possible
|
||||
contexts?
|
||||
|
||||
(Aristotle's theory of definitions?)
|
||||
|
||||
* Less-Conventional Examples
|
||||
|
||||
One thing I've watched with some interest is when new abstractions
|
||||
@@ -256,9 +284,6 @@ machine learning conflicts with proper modularity and abstraction.
|
||||
a good post and shows some sorts of abstraction that still exist
|
||||
at least in neural networks.)
|
||||
|
||||
[[https://clojurefun.wordpress.com/2012/08/17/composition-over-convention/][Composition over convention]] is an important read on why /frameworks/
|
||||
can also run completely counter to modularity.
|
||||
|
||||
Submitted without further comment:
|
||||
https://github.com/stevemao/left-pad/issues/4
|
||||
|
||||
@@ -307,11 +332,6 @@ https://github.com/stevemao/left-pad/issues/4
|
||||
|
||||
- https://twitter.com/fchollet/status/962074070513631232
|
||||
|
||||
- How does this fit with /composition/? Does it?
|
||||
- The ability to sensibly compose things depends on them having some
|
||||
sort of well-defined, compatible boundary - right?
|
||||
- Note also /decomposition/ here, as in /decomposing/ something into
|
||||
parts.
|
||||
- [[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-9.html#%25_chap_1][From SICP chapter 1 intro]]: "The acts of the mind, wherein it exerts
|
||||
its power over simple ideas, are chiefly these three: 1. Combining
|
||||
several simple ideas into one compound one, and thus all complex
|
||||
@@ -338,14 +358,11 @@ https://github.com/stevemao/left-pad/issues/4
|
||||
boundaries, the abstractions that it interfaces with or that it
|
||||
implements) so that the 'inside' can change more or less freely
|
||||
without having any effect on the outside.
|
||||
- Abstractions as _contracts_ with a communicated/agreed purpose
|
||||
- Abstractions as a way of reducing the work required to add
|
||||
functionality (changes can be made just in the relevant modules, and
|
||||
other modules do not need to change to conform)
|
||||
- What is more key? Communication, information content, contracts,
|
||||
details?
|
||||
- [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][Abstraction principle]]
|
||||
- Reduce duplication of information
|
||||
- [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][Don't repeat yourself]]
|
||||
- [[https://simplyphilosophy.org/study/aristotles-definitions/][Aristotle & theory of definitions]]
|
||||
- this isn't right. I need to find the quote in the Durant book
|
||||
|
||||
Reference in New Issue
Block a user