Application - General Purpose - Data Structure and Abstractions

I have a bug lately – I see the data structures in the Internet world, the connections between the different blocks of information. I also see how all this tech point of view is so incompatible with all the other areas needed for a software or hardware product to actually be used it useful to a non technical individual. But, it helps me abstract things in my mind and as such – it is easier for me to model them to code or formal data structures – and as I see and think in higher – philosophical and ideological level, maybe, at some point, I will able to bring the abstractions to practice.

I’ve written my point of view about the data relation with the world – where the data is saved, and how it relates to the super data model – the user. In this article I’ll try to go deeper in the translation of the data to code and a little bit higher – to a non-tech user.

In architectural terms, there are not too many variations where and how to keep some data. I’ve talked about it before – https://tomavelev.com/blog/Developer%E2%80%99s%20Life%2021.03.2018%20-%20ways%20of%20handling%20data:

  • File
  • Simple Key – Value File
  • SQL RDBS
  • Object DB
  • noSQL DBS
  • *Graph Database – A colleague of mine is exploring – Graph Database. It has concepts from Object, SQL, noSQL – and trying to take the good sides from all of them.

The single file Data Storages are preferably used on the client side of applications where the data for a single user is not that big. When the information gets bigger, all the operations with it start to run slower so some Data Systems are used that, manage the data in different files, orders, places and structures – Relational Database, noSQL, Object, Graph or some other indexing technology.

What’s the point of all this for a non-developer? The focus of a normal user is not in the low level detail – implementation specifics of how and where data is saved. He wants to – view the images of user X, see what goals has hit specific futbol player Y, read his email or messages, find a job, sell some things on the Internet, etc.

Having this higher – user level of thinking, it seems like it does not matter where and how data is saved. It does for a technical person – so to achieve speed and efficiency. And while performance is relatively OK, keeping the mind in the head of a user may bring speed of extensibility, adaptability and searching – how to please a user. From a developer point of view – this is thinking meta, thinking in abstractions that are somehow closer to the real world. This is what I am trying to achieve lately with my Prototype Studio – finding the right application – to model and design it and to serve users. Once a data model definition that will be a solution for some problem is figured out – the technical implementation may be changed with the time according to the speed, scalability need – and hopefully with the help of Prototype Studio – the code may be even generated, as it creates applications – based on abstract definitions, not bound to specific platform primitives.

I’m finding analogies of what I do in my Prototype Studio with some technologies and approaches I see.

Java started the modern abstraction of stuff, maybe influenced by Next and other software companies and technologies at that time, 25 years ago by detaching application development from the hardware, the operating system, the different window tool kits, and so on - on which it runs.

Flutter – influenced by other Mobile Cross Platform Frameworks, taking advantage of the owned by Google Frameworks – is abstracting the User Interface and general purpose business logic from – the type of the device and platform – Android, iOS, Web, Desktop. You calculate things present stuff, integrate with Web Services (very much the same on all platforms), and you’ll think in how to display things to the users in terms of user interface components, not what components the platform provides and how to fit into them your idea of visualization.

Another colleague of mine is exploring the possibilities of Microsoft .Net Core and the Framework Blazor. Very similar like Flutter – the Application developers code the business logic in C#, a mix of HTML/XML similarly to React and they let the .Net Core Runtime or Specific Compilation setting decide what will be the output. It may be Web Assembly code, it could be HTML/JS/CSS + Server Side .net core intermediate language, or as WA is very much like LLVM (Compiler Infrastructure), nothing is stopping them from integrating compiler that produces binary executable files, not depending on any outside runtime.

And when an Application Developer generalizes the whole client requirements in terms of data structures and logic – “new” apps identical to the previous are easier to generate, create, migrate or manage. I’ll give example with Amazon – after selling Books, then – Music, Videos and so on, extracted the basic core for selling anything. After abstracting on the cloud hosting resources – giving resource APIs, Web Interfaces, installable just with few settings – software stacks and so on, repackaging and re-purposing of the cloud – has made them billions.

That’s the technical beauty of abstractions.

Share
Add comment