Layers of abstraction - Page 1
Forum section: electronics / general

author: Chris Mr
author_rank: Regular Contributor
timestamp: July 11, 2016, 07:40:48 am
content: Sometimes people take the time to get themselves organised, taking the view that in the long run time will be saved. If you are one of those please read on else you might find this tedious.If you go to google maps you can use your mouse scroll wheel to zoom in and out and at different _heights_ you see different things, or rather you would use different language to describe what you are seeing. At the lowest level you would describe the image as streets, houses etc; then up a level you would lose the houses and streets and see it more like a road network; further up you see the outline of countries and so on.So, if you change the _height_ in that description to 'layers of abstraction' you can apply it to just about anything.Another example, scroll wheel somewhere low down:Electrons move inside transistors, next level up the transistors are used to build (amongst other things) NAND gates, NAND gates are used to build flip flops and arithmetic units, higher up you get CPUs, still higher you get software; and at each level the language changes to suit the 'level of abstraction'.So what you can say is, at the centre of everything is the standard model, in physics, and (probably) at the outer layer is thought, in the form of philosophy, imagination etc.I hope that's a good enough description to form a picture of where this is going next.The language we use at the different layers of abstraction is what we need to find things. There are many examples of threads started here simply because someone wants to find the right word for something so they can do a search on it - so how about a tool to do this that not only allows things to be found but allows 'surfing' of the layers of abstraction.In order to do this one would need a (yet to be defined) means of linking all the different layers of abstraction, and where they intersect, so you could navigate on one layer, find a layer that intersects it and then transfer navigation to that layer. Because this doesn't exist yet there has to be a leap of imagination by the reader as to what this 'looks' like.Here's me surfing the LOA (Layers Of Abstraction):I start on a map and scroll in to a train station platform. I change layer to 'local services' where I find trains & buses & taxis (under transportation), pizza (more generally food), bed and breakfasts etc so I change layer to transportation and select taxi which intersects with the layer named road vehicle. In that LOA there is the internal combustion engine, batteries, electric motors, electronics and so on as well as cost of journeys.... ad infinitum, or rather lifetime. There would be more things to find than one has time.So there it is, a 'find engine'Does anyone think this would be a good idea? Even if it were possible?Clearly, at the moment there is a significant bandwidth problem if it were an internet service; but that won't exist for long as 5G is 'just around the corner'.

author: RogerRowland
author_rank: Regular Contributor
timestamp: July 11, 2016, 08:18:45 am
content: This is a holy grail that's been sought and researched for many years.For example, see this 1990 paper, which echoes your thoughts (IMO) :https://journals.lib.washington.edu/index.php/acro/article/download/12464/11003I suspect what you're describing is what Google and Bing (and others) attempt to provide:https://en.wikipedia.org/wiki/Semantic_search

author: Chris Mr
author_rank: Regular Contributor
timestamp: July 11, 2016, 09:11:00 am
content: Thank you RogerIronicI mentioned that people ask what something's called and suggest something to find it, and find the words to look into it further!

author: dannyf
author_rank: Super Contributor
timestamp: July 11, 2016, 10:51:07 am
content: That's called modular programming, for programmers. Essentially, you need to break a complex task into manageable pieces (layers).I'm a big fan of layering, and tools / languages that facilitate such layering. To me, a complex task isn't possible without layering.Unfortunate for many amature programmers, especially those that come from assembly background or without former training, layering can be a challenge to get used to.

author: technix
author_rank: Super Contributor
timestamp: July 15, 2016, 06:55:02 pm
content: Layers of abstraction, to programmers, are called modular programming, which is considered a best practise for moderate-scale projects and up.What you described here, is the holy grail of artificial intelligence. If someone built a knowledge engine like this we are not too far from the technological singularity when computers will be able to make inventions and us human beings officially deprecated ourselves into some kind of lesser being after artificial intelligences.

author: nctnico
author_rank: Super Contributor
timestamp: July 15, 2016, 09:18:19 pm
content: I read a lot of abstraction because of abstraction. When programming in layers you have to ask yourself 'does this layer really add extra functionality?'. If the answer is NO then remove the layer and make the layers which should interface compatible.

author: Howardlong
author_rank: Super Contributor
timestamp: July 15, 2016, 09:35:03 pm
content: Quote from: nctnico on July 15, 2016, 09:18:19 pmTotally agree. I see this far too often. RedPitaya is the latest example I've been dealing with in this regard, but it pervades the industry, some know-it-all comes into the office one day and bakes their own turd on top of someone elses. Not good, especially if you enjoy bakery items.

author: RogerRowland
author_rank: Regular Contributor
timestamp: July 16, 2016, 05:43:28 am
content: Abstraction in software engineering terms is not simply providing functionality, it's normally - as you go "up" the layers - making generalisations, but more importantly it's changing the "language" of the interface. At the lower levels, the exposed interface might be something like ReadByte, WriteByte, etc. for a UART peripheral, with the details of register names and device-specific conventions hidden within that layer. At the next layer up, the interface might be ReadString, ReadDouble, etc. so hiding the translation of raw bytes to more useful building blocks. Then higher still, the interface should take on the semantics of the application, so SaveCalibrationData, or whatever.In that way, what would be - in my day job - the UI layers, the interfaces are domain specific and phrased in terms that the end user would understand. The complexity of what actually gets done in each intermediate layer is hidden from them. This normally results in middleware whose sole purpose is to arbitrate and manage multiple lower level modules because the abstractions don't stay in nice modular chunks all the way through the hierarchy.In contrast to the OP's question then, abstraction in software is intended to specificallyhiderelationships between layers. What the OP is aiming at is some thing that exploits such relationships torevealthe connections when using search terms from any level.Certainly an interesting, active and very well researched area - worthwhile getting to grips with some of the concepts.

author: grouchobyte
author_rank: Regular Contributor
timestamp: July 16, 2016, 06:08:40 am
content: Explained by one of the greatest philosopers (engineer and mathematician)..... Alfred Korzybski in a rare videoThe father of General Semanticsauthor of Science and Sanity and Manhood of HumanityKnown for his profound concepts like time-binding, abstraction, self-actualization, etc.https://youtu.be/A-7zYBKgzfs@grouchobyte

author: dannyf
author_rank: Super Contributor
timestamp: July 16, 2016, 01:39:43 pm
content: QuoteHumans inherently rely on abstraction: you ride a bike produced by others, you drive cars without understanding how it works, you fly on an airplane piloted by others and machines, etc.Without abstraction, we cannot live.

author: Kalvin
author_rank: Super Contributor
timestamp: July 16, 2016, 02:45:58 pm
content: One can call the software / design Patterns as a layer of abstraction, too:https://en.wikipedia.org/wiki/Software_design_pattern

author: captbill
author_rank: Contributor
timestamp: July 18, 2016, 05:27:57 am
content: I have seen this implemented as an "infinitely zoomable workspace" where there are distinct zoom levels that show finerdetail and the better description would be "Parametric Programming".I think these two terms are easily confused. Actually, in this instance, perhaps "Abstraction via parametric programming" best describe what you are after.

author: Chris Mr
author_rank: Regular Contributor
timestamp: September 12, 2016, 07:57:23 am
content: captbill - thank you for that; your suggestion made an instant connection