If you are a software engineer:
Build a simple database, a simple interpreter, and a simple web application (backend and frontend). Read about “distributed systems”, “devops”, “Conway’s Game Of Life”, and “fractals”. Read about these technologies/techniques (in whatever order is comfortable), how they work, their pros and cons, why they were created, how they compare to alternatives: “TCP”, “Open Sound Control”, “Plan9”, “REST”, “Lisp”, “Erlang”, “Smalltalk”, “Forth”, “Datomic”, “event sourcing”, “reactive programming”, “communicating sequential processes”, “APL”/“J”/“K”, “Ansible”, “jq”, “graph databases”, “Apache Kafka”
The idea is not to become an expert in any of these, but to digest the wisdom that lies in their design and surrounding literature. Each was created after lots of careful thought by brilliant people about how to build sustainable systems.
Started by building my own build system, monitoring solutions, taking at stab orchestration problems, graph databases etc.
The problem statement would be super simple like how do I install my application on 100 servers? And I will start off with bash, tar, ssh and work my way up.
The goal isn't too finish. You want to discover the problems first hand, decide upfront how you would evaluate an acceptable solution, attempt a naive solution, and then look at an open source system, note the family of algorithms + data structures then loop back and move onto the next set of problems in the domain.
Ideally the system you're building is distributed.
Mostly I work from the outside going in and counterintuitively I start with the two non-functional requirements, as questions: how fast do you want it to go, secondly how badly can the system fail. I find that I'm peculiar in this approach.
This won't work for everyone. It has for me because it's allowed me to build a handy library of interrogative and evaluative heuristics and develop strong understanding system architectures and design
- There is general systems theory [0] and within that systems engineering[1] where you will find software systems [2]
- OP is most likely talking about how to use of general theory of systems in different domains and not specifically software systems.
- If one considers JQ, SED and "One input stream, one output stream" and then compares that to a model of a system using a CLD (Causal Loop Diagram). A CLD is effectively "An input, followed by an output"
- Another word that could be used for "input stream" would be 'flow' from system dynamics [3]
- One could apply general systems theory (the abstract concept) to just about anything
[0] https://en.wikipedia.org/wiki/Systems_theory
[1] https://en.wikipedia.org/wiki/Systems_engineering
There are a _lot_ of systems out there that tie together various components with tools that behave a lot like jq (or literally are jq...)
There is nothing unique about jq in this regard, and there is nothing particularly “systems thinking” about any of them. You can and people have used them for decades without doing any special “systems thinking”.
Also a good example of loose coupling that allows for good thinking of systems.
In school we watched the 1990 movie [MindWalk](http://www.imdb.com/title/tt0100151/). You can watch it on YouTube https://youtu.be/Uec1CX-6A38
Does there have to be?
It's simply an example of a good systems pattern/approach.
I'd also substitute Ansible with Nix/NixOS because the conceptual takeaways are much greater there.
Well, except for reactive programming
So the first step to thinking in systems is the acceptance that there are more interactions out there in the world than what can fit in our mind or what jumps to us through intuition.
I find sketching diagrams helps. I also try to see feedback loops and bottlenecks.
My recommendation would be to try breaking down systems. For example, I do that on my blog:
- https://invertedpassion.com/revenue-requires-investment-prof...
- https://invertedpassion.com/science-of-setting-achieving-goa...
- https://invertedpassion.com/what-food-delivery-companies-can...
[0] 'An Introduction to General Systems Thinking', Gerald Weinberg [1] 'General Principles of Systems Design', Gerald Weinberg [2] 'The Logic Of Failure: Recognizing And Avoiding Error In Complex Situations', Dietrich Dorner
* Architecture of Open Source Applications (http://aosabook.org/en/index.html): always a nice reference for brief overviews of how various OSS projects are architected.
* Counterintuitive Behavior of Social Systems (https://ocw.mit.edu/courses/sloan-school-of-management/15-98...): primarily an argument by Jay Forrester (the "father" of system dynamics) for using computer models to test social policy changes, but also serves as a primer for how systems are complicated, and how to approach reasoning about complex systems.
* A City Is Not A Tree (http://en.bp.ntu.edu.tw/wp-content/uploads/2011/12/06-Alexan...): ostensibly a paper about the structure of cities, but but really a deeper insight into the limits of using tree-like structures to describe systems.
The writing style is kind of unusual, but there is a lot of wisdom to be found in it.
Of the books I've read, Sterman's Business Dynamics: Systems Thinking and Modeling for a Complex World is the best all-round introduction to both the theory and practice of systems thinking.
There are a lot of books and as a family of related fields, systems have historically attracted creative and iconoclastic thinkers. That can be fun, but also frustrating. I think Sterman strikes the right balance.
It can be surprisingly difficult to lay your hands on a copy; Amazon tends to list 2nd-hand copies at high prices ($200+). I waited several years before seeing one on sale for $90.
Looks like alibris will do a copy of the book in question for a bit under 20 USD as I type, with some searching around.
The quality is often, in my experience, significantly lower; the paper is thinner, the ink cheaper, sometimes the alignment of the printing is a little off. Colour plates are missing or decoloured, hardbacks become softbacks, and so on. But, the words are the same, and sometimes the International Edition is actually pretty reasonable quality. I've got some that are clearly pretty shoddy, and some that you wouldn't actually know were Internationals. I suspect that sometimes publishers don't reprint it cheaply; they just stamp some of them "International Edition, not for sale in countries <x y z>" on it and ship them abroad to sell, much as some semiconductor manufacturers' cheaper chips actually come off the same line as the expensive ones, and then get tweaked (or even just labelled down). A sale is a sale.
Much of the pioneering work in systems theory was done in the 1930-40's by different (but related) groups of academics in the fields of Systems Theory, Cybernetics, as well as Operational Research. Bertalanffy and Wienberg are progenitors of those fields, but I would stick to people like Ashby, who are much better writers. The work they produced is profound and laid the foundation for much of our modern academic disciplines and industrial practices.
There are a lot of fascinating people and fascinating work that came out of those academic groups during that period. They are too many to list, but I would give William Grey Walter and his robotic tortoise's as an example: https://www.youtube.com/watch?v=lLULRlmXkKo
This might be beyond the scope of what you want, but I would also heartily recommend Carver Mead's Analog VSLI and Neural Systems: https://www.amazon.com/Analog-VLSI-Neural-Systems-Carver/dp/...
They also have short courses on information theory, differential equations, and such.
[0] https://www.santafe.edu/ [1] https://www.santafe.edu/research/results/books
Systems Thinking redirects to Systems Theory on wikipedia: https://en.wikipedia.org/wiki/Systems_theory
Is that what we're talking about?
So, what is a system? A system is a set of things-people, cells, molecules, or whatever-interconnected in such a way that they produce their own pattern of behavior over time. The system may be buffeted,constricted, triggered, or driven by outside forces. But the system's response to these forces is characteristic of itself, and that response is seldom simple in the real world.
Donella H. Meadows. Thinking in Systems: A Primer (Kindle Locations 89-90). Kindle Edition.
This is one of the most important books I've ever read, if you want the way you think about the world to change read it. It's a very short read to.
See my other posts.
It is a way of thinking about the world, and contrasts with traditional linear thinking. It is where interaction and interrelationships are understood to drive outcomes and behaviours of the system under study.
As mentioned it is a massive field.
For an example of what I mean, take a look at this project: https://github.com/perspectivesonatheme/patterns
There is the GDPR regulation going to kick off in May 2018. Simply put it regulates how an organization has to handle personal data. And that is a huge deal.
The task is: Make the organization GDPR compliant.
Does anyone has a suggestion how to approach such a task from the most general “system design/theory” perspective?
I don't know your background but I also think learning programming is valuable.
by Donella H. Meadows (Author), Diana Wright (
ISBN-10: 1603580557 ISBN-13: 978-1603580557
https://www.complexityexplorer.org/courses/76-introduction-t...
It is an introduction to NetLogo (a free simulation software and a Programming Language), but in hindsight I think the couse and the book teach some useful concepts.
Building Evolutionary Architecture
The Checklist Manifesto
The Half Life of Data
How Buildings Learn
I recommend looking into anything around processes or process-building/management, project management, how incentives work, and how the brain works. The natural world and the corporate world are great examples of systems in action.
https://en.wikipedia.org/wiki/The_Death_and_Life_of_Great_Am...
At most, it's a recounting of someone else's very specific systems work that has some unexpectedly strong outcomes from surprisingly simple drivers.
General System Theory by Ludwig von Bertalanffy: https://www.amazon.com/General-System-Theory-Foundations-App...
https://www.amazon.com/Art-Thinking-Systems-Critically-Strat...
https://www.amazon.com/dp/B002LHRM2O/ref=dp-kindle-redirect?...
- design a QA process for a software product. How important is "blame" vs team learning? What are the tradeoffs of a blame-oriented approach vs a systems oriented approach?
- build something using AWS or App Engine infrastructure that makes you have to work around the various constraints imposed by the system designers. Consider how to make a system reliable when building it using "unreliable" services.
- consider a Marxist interpretation of the US legal system. I'd argue that it constitutes a reasonable systems oriented critique, and makes it clear how (at least for me) pre-existing biases made it at first seem absurd. I suggest this mainly to highlight how biases can impact systems thinking. The QA process example is also deeply emotionally charged for many engineers but should not be.
https://www.incose.org/ProductsPublications/Papers-Presentat...
[pdf] http://disi.unal.edu.co/dacursci/sistemasycomputacion/docs/S...
The course was delivered by a political scientist, but focused entirely on systems thinking.
I will look for it and return; But for now I don't have the name of the course, or the university. I can remember is the year :).
Edit: Found it; https://www.coursera.org/learn/model-thinking
http://zimmer.csufresno.edu/~sasanr/Teaching-Material/SAD/JE...
https://www.ofv.ch/lernmedien/detail/systems-engineering/145...
... and have a look at their handbook. Older copies should be available for free online:
https://www.incose.org/ProductsPublications/sehandbook
[pdf] http://disi.unal.edu.co/dacursci/sistemasycomputacion/docs/S...
The Fifth Discipline: The Art & Practice of The Learning Organization
is one I've heard a lot of systems people recommend
And also Ackoff's talks on Systems Thinking:
What is your goal with systems thinking?
I think while doing this for some time it's a little easier to think about other (real world) problems as systems and you may find parallels between software development and this real world.
- You are talking about the application of general systems theory. https://en.wikipedia.org/wiki/Systems_theory
- You would like to learn to apply 'systems thinking' principals and analysis in many domains or to new problems
- You would like to learn to model systems
- It is also important to note in many domains there are specific branches of systems theory that may be more applicable. https://en.wikipedia.org/wiki/List_of_types_of_systems_theor...
- You could spend an entire lifetime learning in this field as many have done.
Types of systems:
Systems can be broken down by multiple dimensions:
- Complex
- simple
- unitary
- pluralist
- coercive
Systems thinking approaches:
- Hard systems thinking
- Systems dynamics
- Cybernetics
- Complexity Theory
- Soft Systems
- Emancipatory systems thinking
- Postmodern systems thinking
Learning More about Systems Thinking:
- A great website is the systems thinker, that covers quite a bit of topics. The articles are actually archives of a newsletter called "The systems thinker" https://thesystemsthinker.com/
- To get an overview of various approaches to systems thinking from an organizational perspective:
Systems Thinking: Creative Holism for Managers by Michael C. Jackson. https://www.amazon.com/Systems-Thinking-Creative-Holism-Mana...
- For general systems theory: An Introduction to General Systems Thinking by Gerald M. Weinberg https://www.amazon.com/Introduction-General-Systems-Thinking...
- For systems thinking and the learning organization:
The Fifth Discipline: The Art & Practice of The Learning Organization by Peter Senge https://www.amazon.com/Fifth-Discipline-Practice-Learning-Or...
- There is a great course that covers soft systems methodology, specifically to solve social problems: https://www.plusacumen.org/courses/systems-practice
- Habits of a systems thinker: https://www.watersfoundation.org/systems-thinking-tools-and-...
- Systems thinking resources: http://donellameadows.org/systems-thinking-resources/
* Update added additional resources.
Especially since a couple of my favourite system thinkers are Jacob Lund Fisker and Elon Musk. They both have degrees in physics.
Ludwig von Bertalanffy
https://www.amazon.com/s/ref=dp_byline_sr_ebooks_1?text=Ludw...
John Seddon
Theory of Constraints
https://www.amazon.com/dp/B002LHRM2O The Goal / Eli Goldratt
https://www.amazon.com/dp/B00KYW1L66 Necessary but Not Sufficient / Eli Goldratt
https://www.amazon.com/dp/0884271137 It's Not Luck / Eli Goldratt
https://www.amazon.com/dp/B00408ALES Isn't it Obvious? / Eli Goldratt
https://www.amazon.com/dp/B002LHRM2E Critical Chain / Eli Goldratt
https://www.amazon.com/dp/B004THZ9VK Be Fast or Be Gone / Andreas Scherer
https://www.amazon.com/dp/1499660901 Hanging Fire / Jeff Cox
https://www.amazon.com/dp/1439158932 Velocity / Dee Jacob
https://www.amazon.com/dp/B00XKX1FEO Epiphanized / Bob Sproull & Bruce Nelson
https://www.amazon.com/dp/B0185JFYEO Focus and Leverage / Bob Sproull & Bruce Nelson
A full list of books on ToC here http://www.tocico.org/?page=toc_books
Russell L. Ackoff
https://www.amazon.com/s/ref=dp_byline_sr_book_1?search-alia...
Gerald M. Weinberg
https://www.amazon.com/Gerald-M.-Weinberg/e/B00459FFAC/
Philip B. Crosby
https://www.amazon.com/Philip-B.-Crosby/e/B001HD360A
Peter M. Senge
https://www.amazon.com/Peter-M.-Senge/e/B000AQ8R86/
And many more, most of which are mentioned by the above in their work.
Articles:
- Introduction to Systems Thinking (https://thesystemsthinker.com/introduction-to-systems-thinki...)
- Tools of a Systems Thinker (https://medium.com/disruptive-design/tools-for-systems-think...)
- The Mythical Leverage Point (https://blog.kumu.io/the-mythical-leverage-point-d582ce4b8b4...)
Videos:
- Peter Senge Introduction to Systems Thinking (https://www.youtube.com/watch?v=eXdzKBWDraM)
- I Used To Be A Systems Thinker (https://www.youtube.com/watch?v=3Ymt_TbNNwE)
- The (Failed) Promised of Systems Thinking (https://www.youtube.com/watch?time_continue=614&v=aelqgvFXGi...)
- Systems Practice Mindsets (https://vimeo.com/212281432)
Courses:
- +Acumen Systems Practice Course (https://www.plusacumen.org/courses/systems-practice)
Books:
- Thinking In Systems: A Primer by Donella Meadows (https://www.amazon.com/Thinking-Systems-Donella-H-Meadows/dp...)
- Fifth Discipline Fieldbook (https://www.amazon.com/Fifth-Discipline-Fieldbook-Strategies...)
- Systems Thinking for Social Change (https://www.amazon.com/Systems-Thinking-Social-Change-Conseq...)
Articles on Leading Systems Change:
- Dawn of Systems Leadership (https://ssir.org/articles/entry/the_dawn_of_system_leadershi...)
- Acting and Thinking Systemically (https://thesystemsthinker.com/acting-and-thinking-systemical...)
- Transforming the Systems Movement (https://thesystemsthinker.com/transforming-the-systems-movem...)
Relevant Tools and Websites:
- Kumu (https://kumu.io) - Web-based tool for building interactive system maps.
- The Systems Thinker (https://thesystemsthinker.com/) - Complete library of all "The Systems Thinker" publications over the past 30 years
(Disclosure: I'm a cofounder of Kumu)
The result is a discipline that has transformed into managing uncertain outcomes in large heterogeneous models, i.e. complexity theory, rather than reducing everything to balls-and-sticks. Meadows was famous for devising "12 basic places to intervene in a system", nowadays the focus is on hedging bets adequately such that interventions don't catastrophically fuck up.
That said, some of the basic tooling is still flexible enough for basic business problems and some of the old gems are able to explain important concepts found in other fields without getting bogged down in the math.
https://www.amazon.com/Early-Retirement-Extreme-Philosophica... is my favourite, it's not about retirement, it's about using systems thinking to devise a robust lifestyle.
https://www.amazon.com/Introduction-General-Systems-Thinking... will make a good complement to Meadows and should give you a calculus to rigorously think of systems with.
https://www.amazon.com/Introduction-Cybernetics-W-Ross-Ashby... for its explanation on entropy, I mean requisite diversity, which will you give you an approximate mental quantity of how "powerful" any given system is.
https://www.amazon.com/Sciences-Artificial-Herbert-Simon/dp/... and https://www.amazon.com/Design-Rules-Vol-Power-Modularity/dp/... I haven't read either of these, but Herb Simon is extremely influential and has great thoughts on the notion of system hierarchies (nearly-decomposable systems is a great concept for design). The second book is about the properties of modular systems, which will help grok the reasoning behind a lot of refactoring techniques.
Good luck.
-----
my favorite: New England Complex Systems Institute (NECSI) website!
* About Complex Systems : "Concept Map" http://www.necsi.edu/guide/concepts/conceptmap.html
* Learn: http://necsi.edu/learn.html
* "Dynamics of Complex Systems" - Full PDF: http://necsi.edu/publications/dcs/index.html
* NECSI Seminar Video Library: http://www.necsi.edu/events/vidlib/
* Research: http://necsi.edu/research.html
Nassim Taleb's collaborations with NESCI are worth their weight, though, and W Brian Arthur out of SFI produces works that I consider actionable for CTOs to get a conceptual handle on their craft. UoM's Scott E Paige is also a good resource on Complex Adaptive Systems in a way that is more unified.