This document discusses different stages of software development and abstraction. It covers Piaget's stages of cognitive development as they relate to programming. The key stages discussed are preoperational, concrete operational, and formal operational. The document advocates reducing problems to their essential parts through abstraction. It provides examples of abstract painting and emphasizes focusing on the problem being solved rather than the solution. It also discusses various software development principles like separation of concerns, single responsibility, and establishing clear communication through naming conventions and language.
Why do complex software application projects drag?Stephen Erdman
Rough slides from my (also rough) talk given at Philly Bar Camp 2014 about conceptual problems facing complex software application projects and what can be done about these problems.
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Aaron Saray
Object Oriented Programming in enterprise level PHP is incredibly important. In this presentation, concepts like MVC architecture, data mappers, services, and domain and data models will be discussed. Simple demonstrations will be used to show patterns and best practices. In addition, using tools like Doctrine or integration with Salesforce or the AS/400 will also be discussed. There will be an emphasis on the practical application of these techniques as well - this isn't just a theoretical talk! This presentation is great for those just beginning to create enterprise applications as well as those who have had years of experience.
Why do complex software application projects drag?Stephen Erdman
Rough slides from my (also rough) talk given at Philly Bar Camp 2014 about conceptual problems facing complex software application projects and what can be done about these problems.
Enterprise PHP Architecture through Design Patterns and Modularization (Midwe...Aaron Saray
Object Oriented Programming in enterprise level PHP is incredibly important. In this presentation, concepts like MVC architecture, data mappers, services, and domain and data models will be discussed. Simple demonstrations will be used to show patterns and best practices. In addition, using tools like Doctrine or integration with Salesforce or the AS/400 will also be discussed. There will be an emphasis on the practical application of these techniques as well - this isn't just a theoretical talk! This presentation is great for those just beginning to create enterprise applications as well as those who have had years of experience.
The working architecture of node js applications open tech week javascript ...Viktor Turskyi
We launched more than 60 projects, developed a web application architecture that is suitable for projects of completely different sizes. In the talk, I'll analyze this architecture, will consider the question what to choose “monolith or microservices”, will show the main architectural mistakes that developers make.
Interpretierbarkeit von ML-Modellen hat die Zielsetzung, die Ursachen einer Prognose offenzulegen und eine daraus abgeleitete Entscheidung für einen Menschen nachvollziehbar zu erklären. Durch die Nachvollziehbarkeit von Prognosen lässt sich beispielsweise sicherstellen, dass deren Herleitung konsistent zum Domänenwissen eines Experten ist. Auch ein unfairer Bias lässt sich durch die Erklärung aussagekräftiger Beispiele identifizieren.
Prognosemodelle lassen sich grob in intrinsisch interpretierbare Modelle und nicht-interpretierbare (auch Blackbox-) Modelle unterscheiden. Intrinsisch interpretierbare Modelle sind dafür bekannt, dass sie für einen Menschen leicht nachvollziehbar sind. Ein typisches Beispiel für ein solches Modell ist der Entscheidungsbaum, dessen regelbasierter Entscheidungsprozess intuitiv und leicht zugänglich ist. Im Gegensatz dazu gelten Neuronale Netze als Blackbox-Modelle, deren Prognosen durch die komplexe Netzstruktur schwer nachvollziehbar sind.
In diesem Talk erläuterte Marcel Spitzer das Konzept von Interpretierbarkeit im Kontext von Machine Learning und stellte gängige Verfahren zur Interpretation von Modellen vor. Besonderen Fokus legte er dabei auf modellunabhängige Verfahren, die sich auch auf prognosestarke Blackbox-Modelle anwenden lassen.
Event: M3 Minds Mastering Machines
Speaker: Marcel Spitzer
Blog-Artikel: https://www.inovex.de/blog/machine-learning-interpretability/
Mehr Tech-Vorträge: inovex.de/vortraege
Mehr Tech-Artikel: inovex.de/blog
How to architect and build software components.
Improve your understanding of software components and how to architect and build them.
Examples assume familiarity with React.
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Ovidiu Farauanu
Discussing Design Patterns and OOP popularity,
Multithreading and OOP,
Functional Design for Multithreaded programming
and how Multithreading does not mean always concurency but multicore paralelism.
Frontend spectrum is changing rapidly. As new changes arrive, we have to be open to adopting new and better patterns and libraries. Learn about how the JavaScript scene has been evolving over the years.
Design Patterns for Fun and Profit is a talk about design patterns and metaprogramming in multiple languages, comparing static typed languages like Java and C++ with dynamic languages like Python, Ruby and Javascript.
Example code can be found here: https://github.com/dlitvakb/patterns_cc2018
NoSQL matters, on that much I'm sure we can all agree. But if we take a closer look, what really matters when it comes to choosing a data store and/or a data processing platform? What really matters when it comes to getting the most out of that platform? And what is really going to matter as we take things to the next level?
ER(Entity Relationship) Diagram for online shopping - TAEHimani415946
https://bit.ly/3KACoyV
The ER diagram for the project is the foundation for the building of the database of the project. The properties, datatypes, and attributes are defined by the ER diagram.
More Related Content
Similar to The abstract art of software development
The working architecture of node js applications open tech week javascript ...Viktor Turskyi
We launched more than 60 projects, developed a web application architecture that is suitable for projects of completely different sizes. In the talk, I'll analyze this architecture, will consider the question what to choose “monolith or microservices”, will show the main architectural mistakes that developers make.
Interpretierbarkeit von ML-Modellen hat die Zielsetzung, die Ursachen einer Prognose offenzulegen und eine daraus abgeleitete Entscheidung für einen Menschen nachvollziehbar zu erklären. Durch die Nachvollziehbarkeit von Prognosen lässt sich beispielsweise sicherstellen, dass deren Herleitung konsistent zum Domänenwissen eines Experten ist. Auch ein unfairer Bias lässt sich durch die Erklärung aussagekräftiger Beispiele identifizieren.
Prognosemodelle lassen sich grob in intrinsisch interpretierbare Modelle und nicht-interpretierbare (auch Blackbox-) Modelle unterscheiden. Intrinsisch interpretierbare Modelle sind dafür bekannt, dass sie für einen Menschen leicht nachvollziehbar sind. Ein typisches Beispiel für ein solches Modell ist der Entscheidungsbaum, dessen regelbasierter Entscheidungsprozess intuitiv und leicht zugänglich ist. Im Gegensatz dazu gelten Neuronale Netze als Blackbox-Modelle, deren Prognosen durch die komplexe Netzstruktur schwer nachvollziehbar sind.
In diesem Talk erläuterte Marcel Spitzer das Konzept von Interpretierbarkeit im Kontext von Machine Learning und stellte gängige Verfahren zur Interpretation von Modellen vor. Besonderen Fokus legte er dabei auf modellunabhängige Verfahren, die sich auch auf prognosestarke Blackbox-Modelle anwenden lassen.
Event: M3 Minds Mastering Machines
Speaker: Marcel Spitzer
Blog-Artikel: https://www.inovex.de/blog/machine-learning-interpretability/
Mehr Tech-Vorträge: inovex.de/vortraege
Mehr Tech-Artikel: inovex.de/blog
How to architect and build software components.
Improve your understanding of software components and how to architect and build them.
Examples assume familiarity with React.
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Ovidiu Farauanu
Discussing Design Patterns and OOP popularity,
Multithreading and OOP,
Functional Design for Multithreaded programming
and how Multithreading does not mean always concurency but multicore paralelism.
Frontend spectrum is changing rapidly. As new changes arrive, we have to be open to adopting new and better patterns and libraries. Learn about how the JavaScript scene has been evolving over the years.
Design Patterns for Fun and Profit is a talk about design patterns and metaprogramming in multiple languages, comparing static typed languages like Java and C++ with dynamic languages like Python, Ruby and Javascript.
Example code can be found here: https://github.com/dlitvakb/patterns_cc2018
NoSQL matters, on that much I'm sure we can all agree. But if we take a closer look, what really matters when it comes to choosing a data store and/or a data processing platform? What really matters when it comes to getting the most out of that platform? And what is really going to matter as we take things to the next level?
ER(Entity Relationship) Diagram for online shopping - TAEHimani415946
https://bit.ly/3KACoyV
The ER diagram for the project is the foundation for the building of the database of the project. The properties, datatypes, and attributes are defined by the ER diagram.
Multi-cluster Kubernetes Networking- Patterns, Projects and GuidelinesSanjeev Rampal
Talk presented at Kubernetes Community Day, New York, May 2024.
Technical summary of Multi-Cluster Kubernetes Networking architectures with focus on 4 key topics.
1) Key patterns for Multi-cluster architectures
2) Architectural comparison of several OSS/ CNCF projects to address these patterns
3) Evolution trends for the APIs of these projects
4) Some design recommendations & guidelines for adopting/ deploying these solutions.
This 7-second Brain Wave Ritual Attracts Money To You.!nirahealhty
Discover the power of a simple 7-second brain wave ritual that can attract wealth and abundance into your life. By tapping into specific brain frequencies, this technique helps you manifest financial success effortlessly. Ready to transform your financial future? Try this powerful ritual and start attracting money today!
1.Wireless Communication System_Wireless communication is a broad term that i...JeyaPerumal1
Wireless communication involves the transmission of information over a distance without the help of wires, cables or any other forms of electrical conductors.
Wireless communication is a broad term that incorporates all procedures and forms of connecting and communicating between two or more devices using a wireless signal through wireless communication technologies and devices.
Features of Wireless Communication
The evolution of wireless technology has brought many advancements with its effective features.
The transmitted distance can be anywhere between a few meters (for example, a television's remote control) and thousands of kilometers (for example, radio communication).
Wireless communication can be used for cellular telephony, wireless access to the internet, wireless home networking, and so on.
3. Preoperational
● Age 2 to 7
● Magical Thinking
● Why?
● Script Kiddies
● Copy and Pasters
4. Concrete Operational
● Age 7 to 11
● Thinks logically about problem and
systematically tackles it
● Focuses on the problem
● Large blocks of code
● Nested Ifs
● Repeated Functionality
5.
6. Formal Operational
● Age 11 to 15-20
● Abstraction
● Meta-cognition
● Problems belong to classes instead of one offs
● How a problem is solved is as or more
important as solving it
● Characterized by comfort with abstraction
7.
8. Abstraction
● Strunk and White – Elements of Style
– “Omit needless words.”
● Omit needless information
9. The Big Question
How do we figure out what is needless and what
is needed information?
10. Abstract Painting
● Move away from strict representation
● Remove aspects of the painting
● Convey impression, theme, idea, emotion, etc.
15. Step 0
● Where are we?
● Where are we going?
– Goals
● Metrics
● Focus is on solving the problem not on
making the solution
16.
17.
18. Three aspects of Software
Development
● Design
– Determine how the domain should work
● Code
– Determine how to implement design
● UI
– Create the user experience
● Interface with the code
● Read the data
● Modify the data based on the domain design
19. Clarity
● Understanding a problem = being able to
reduce it to the only important parts
● Step 0
– What do we want to do?
– What do we know?
– What is the least we can do this with?
20.
21.
22. Focus on what changes
● If I change this, does it matter?
● A process has two points of change
– Data inputs
– Internal processing based on conditions
● This is process state
23. Inputs
● What does this process actually need to know
to do what it is supposed to?
● What information do the system need that it
does not know?
24.
25. Is this input actually needed?
● Is it actually used in the core of the process?
● Is it already available either through another
piece of input or as part of the system?
● Am I actually using this input, or just a property
of it?
27. Models
● Contain only the aspects of the thing modeled that
are relevant to the situation
● Lets you use the same process across a very
different objects, as long as they can fit the model
● Creating a model (or interface) lets design to the
situation
● Can use a intermediate converter to make a model
out of something
28. MVC – many models to one view
View Model Interface
A view can have a defined interface for how it
gets handles the model data.
Providing a translation from your data models
to the interface will allow the view to display
and interact with it
A table can display a 2d array, a list of objects,
steps in a mathematical series, etc.
29. MVC – many views for one model
Multiple view types of the same model
A single data entity can be displayed by any
number of views
e.g. Song
Audio in media player
Music staff with lyrics
Word Cloud
Etc.
30. Abstraction collision
● Push a button versus generalized
● What are your goals?
● Start Date/End Date anti-pattern
32. How to identify states
● If you change this, does it change behavior?
● Externally handled
– Conditionals
● If
● Loops
● Encapsulated
– Subclasses with different processing
– Lambdas and/or method references
33. Make your states explicit
● What is the reason for the branch in behavior?
● Take complicated conditionals and abstract
them to descriptive methods
● If (movie.author == “George Lucas” &&
movie.containsCharacter(“Jar Jar Binks”)) → if
(isTerribleStarWars(movie)
36. Single Paths
● Eliminate needless duplication
● Present clear entry points for a process that are as
accepting as possible
● Identify when entering that process is earliest
possible
● If you are copying – pasting code (even to alter it
slightly), strongly consider combining them
● Reduce mutating a property to as few paths as
possible
37. Units of Work
● Be able to describe what something does in
simple English before someone gets bored
● Rule of thumb: As soon as you say “And
then...”, it's a new unit of work
● Non-trivial blocks for if then or loops are units of
work
– Prefer tying them to the conditional states
38. Embrace levels
● Core concept of traditional software abstraction
● Single entry point opens up to all possible state
combinations pathways
● Each level only needs to know what it needs to
know
● Accept what is given without knowing the
source
39. Single Responsibility Principle
● Prefer housing all logic on one path (i.e. don't
split your processing across unrelated sections
of the code, between code and database, etc.)
● Keep your object graph complete over the
process (i.e. have all necessary data accessible
through code/no explicit database calls)
41. Names
● Choose names that convey information
● Method name → what does this method
actually do
● Variables → what is this thing
– var x < int maxOccupancy
– adjectives (“temp”) and general nouns (“num”)
should modify nouns
42. In defense of Hungarian notation
● http://www.joelonsoftware.com/articles/Wrong.html
● In cases where you can't represent type information
with classes, etc., encoding that information into the
name is better than not
● Don't forget step 0
– “What's my goal?”
– Don't encode duplicate or otherwise useless
information
44. What are you actually presenting?
● It's not pages
● It's not components
● It's domain data and actions
– Understand the aspects of this data and actions
– Presenting these together makes up the user
experience
46. Consider: Dimensions
● Objects data properties that are comparable
● Two types:
– Directly comparable (i.e. determinable difference in
magnitude)
– Enumerable (can be mapped to a defined list)
47. Use or create a vocabulary
● Sapir-Whorf hypothesis
● Pidgin
– Quick communication
– Concerns itself only with what matters
48.
49. Establish a contract
● Any barrier should have clear indication of what
is expected/what is not allowed
● In a perfect world, derive code from the contract
50. Opinionated vs. Non-opinionated
● What you choose to display or not display and
what actions are and are not available should
be meaningful
● Non-opinionated
– Show everything/allow everything
● Opinionated
– Guides the user in the intended use by reducing
what is shown/allowed