"MINIMALISM" is an art movement started in 1960's and early 70's post world war-2.
the art form derived from reductive aspects of "post modernism" and is subjected to reduce to necessary elements only.
shows the trend in design, architecture and art during the movement and work of the various artist related to the movement.
So trendy, so hot topic. Pity many misunderstand minimalist design basics, don't get the core of the subject. I tried to show the roots and influences, shed the light by decomposing minimalist design principles one by one
"MINIMALISM" is an art movement started in 1960's and early 70's post world war-2.
the art form derived from reductive aspects of "post modernism" and is subjected to reduce to necessary elements only.
shows the trend in design, architecture and art during the movement and work of the various artist related to the movement.
So trendy, so hot topic. Pity many misunderstand minimalist design basics, don't get the core of the subject. I tried to show the roots and influences, shed the light by decomposing minimalist design principles one by one
Programming and Minimalism: Lessons from Orwell and the ClashJonathan Dahl
Programming is writing. A programmer's job is to express abstract ideas in a specific language - just like the poet, the essayist, and the composer. But while writers and composers spend years improving their style, many programmers think style stops with "two-space indentation". This needs to change.
This presentation will discuss style in music, writing, and software. We'll look at such diverse sources as George Orwell, Mozart, and punk music, and will find that much of art revolves around complexity and minimalism - just like software. Finally, we'll look at specific patterns and tools for writing software that is not just effective and efficient, but stylistically beautiful.
Worse is better, for better or for worse - Kevlin HenneyJAX London
Over two decades ago, Richard P Gabriel proposed the thesis of "Worse Is Better" to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly limited and incomplete. This is not simply the observation that things that should be better are not, but that some solutions that were not designed to be the best were nonetheless effective and were the better option. We find many examples of this in software development, some more provocative and surprising than others. In this talk we revisit the original premise and question in the context of software architecture.
Programming and Minimalism: Lessons from Orwell and the ClashJonathan Dahl
Programming is writing. A programmer's job is to express abstract ideas in a specific language - just like the poet, the essayist, and the composer. But while writers and composers spend years improving their style, many programmers think style stops with "two-space indentation". This needs to change.
This presentation will discuss style in music, writing, and software. We'll look at such diverse sources as George Orwell, Mozart, and punk music, and will find that much of art revolves around complexity and minimalism - just like software. Finally, we'll look at specific patterns and tools for writing software that is not just effective and efficient, but stylistically beautiful.
Worse is better, for better or for worse - Kevlin HenneyJAX London
Over two decades ago, Richard P Gabriel proposed the thesis of "Worse Is Better" to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly limited and incomplete. This is not simply the observation that things that should be better are not, but that some solutions that were not designed to be the best were nonetheless effective and were the better option. We find many examples of this in software development, some more provocative and surprising than others. In this talk we revisit the original premise and question in the context of software architecture.
Go Best Practices – Interfaces, Packages and APIsMarcus Kohlberg
Learn about designing interfaces, packages and APIs. Presentation by André Eriksson, founder of Encore. Originally presented at the Go naviro conference.
This presentation focuses on Deep Learning (DL) concepts, such as neural neworks, backprop, activation functions, and Convolutional Neural Networks, with a short introduction to D3, and followed by a TypeScript-based code sample that replicates the TensorFlow playground. Basic knowledge of matrices is helpful.
This presentation focuses on Deep Learning (DL) concepts, such as neural neworks, backprop, activation functions, and Convolutional Neural Networks, with a short introduction to D3, and followed by a TypeScript-based code sample that replicates the TensorFlow playground. Basic knowledge of matrices is helpful.
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the hexagonal approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the command bus, and design principles like dependency inversion.
Commands, events, queries - three types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best?
This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues.
You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
Worse Is Better, for Better or for WorseKevlin Henney
Presented at Agile Singapore (14th November 2014)
Nearly two-and-a-half decades ago, Richard Gabriel proposed the idea of “Worse Is Better” to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly compromised and imperfect. This is not simply the observation that things should be better but are not, or that flawed and ill-considered solutions are superior to those created with intention, but that many solutions that are narrow and incomplete work out better than the solutions conceived of as being comprehensive and all encompassing. Whether it is programming languages, operating systems, development processes or development practices, we find many examples of this in software development, some more provocative and surprising than others.
In this talk we revisit the original premise and definition, and look at how this approach to development can still teach us something surprising and new.
Hexagonal architecture - message-oriented software design (Symfony Live Berli...Matthias Noback
Commands, events, queries - different types of messages that travel through your application. Some originate from the web, some from the command-line. Your application sends some of them to a database, or a message queue. What is the ideal infrastructure for an application to support this on-going stream of messages? What kind of architectural design fits best? This talk provides answers to these questions: we take the *hexagonal* approach to software architecture. We look at messages, how they cross boundaries and how you can make steady communication lines between your application and other systems, like web browsers, terminals, databases and message queues. You will learn how to separate the technical aspects of these connections from the core behavior of your application by implementing design patterns like the *command bus*, and design principles like *dependency inversion*.
Similar to Strange Loop 2009 Keynote: Minimalism in Computing (20)
Emerging Languages: A Tour of the HorizonAlex Payne
A tour of a number of new programming languages, organized by the job they're best suited for. Presented at Philadelphia Emerging Technology for the Enterprise 2012.
A presentation at Twitter's official developer conference, Chirp, about why we use the Scala programming language and how we build services in it. Provides a tour of a number of libraries and tools, both developed at Twitter and otherwise.
"In this session, Twitter engineer Alex Payne will explore how the popular social messaging service builds scalable, distributed systems in the Scala programming language. Since 2008, Twitter has moved the development of its most critical systems to Scala, which blends object-oriented and functional programming with the power, robust tooling, and vast library support of the Java Virtual Machine. Find out how to use the Scala components that Twitter has open sourced, and learn the patterns they employ for developing core infrastructure components in this exciting and increasingly popular language."
Speedy, Stable, and Secure: Better Web Apps Through Functional LanguagesAlex Payne
A whirlwind tour of the benefits of functional programming languages and how you can put them to work in your web application's architecture. Learn how to make the most of a rich type system, immutable data structures, and other features of languages like Scala, Erlang, Haskell, and OCaml. Find out where to get started with functional languages, and how they stack up when it comes to web app development.
How the technology we use to build the Web shapes the web. A look at the history, present, and future of the programming languages and tools used in web development, and how they've impacted the culture of the Web.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
26. “Architecture is a way to understand complex systems.
Architecture is a way to design complex systems.
Architecture is a way to manage complex systems.”
28. “As computers have increased in complexity,
my enjoyment of them has plummeted.”
29. “Ingenious ideas are simple.
Ingenious software is simple.
Simplicity is the heart of the Unix philosophy.
The more code lines you have removed,
the more progress you have made.
As the number of lines of code in your software shrinks,
the more skilled you have become
and the less your software sucks.”
30.
31. “By avoiding complexity when possible,
and containing it when it is unavoidable,
we can maximize the probability
that the number of security vulnerabilities found
remains zero in the future.”
32. “The only hope is to
abandon complex software.
Embrace simple.”
39. unification via homoiconicity 2:
define f == 7 b ! . (* a function *)
fb@. (* execute the function (7) *)
define a == [15 b !] . (* a quotation *)
ai (* execute the quotation *)
b@. (* 15 *)
37 a rest cons (* modify the quotation: [37 b !] *)
i (* execute the modified quotation *)
b@. (* 37 *)
44. reduction of code:
+ leverage encapsulation
+ remove redundancies
+ stick to contracts
+ prefer code to comments
+ manage dependencies carefully
45. reduction of syntax:
|y|
true & false not & (nil isNil) ifFalse: [self halt].
y := self size + super size.
#($a #a 'a' 1 1.0)
do: [:each | Transcript
show: (each class name);
show: (each printString);
show: ' '].
^x<y
46. reduction of abstractions:
“I think the major good idea in Unix
was its clean and simple interface:
open, close, read, and write.”
47. reduction of hierarchy:
“In an extensible system,
the key issue is to identify
those primitives that offer
the most flexibility for extensions,
while avoiding a proliferation of primitives.”
Let&#x2019;s have a big round of applause for Alex Miller for putting together such a great event.
Introduce myself: Twitter, Down For Everyone Or Just Me, just finished writing a book about Scala (a decidedly un-minimal language).
This quote is from Eric S Raymond, &#x201C;The Art of Unix Programming&#x201D;.
I&#x2019;ve been thinking about minimalism in software for about two years. I maintain a tumblelog called Minima that captures example of what I call &#x201C;applied simplicity&#x201D;. I&#x2019;ve gathered dozens of examples, but it&#x2019;s something I&#x2019;m still thinking about. What I want to share today is the culmination of that thinking so far.
There&#x2019;s a difference between big-M and little-m minimalism that we need to establish straightaway. People have very different ideas of what constitutes minimalism, so first we&#x2019;re going to talk about what we&#x2019;re not talking about today.
This is little-m minimalism. It&#x2019;s beautiful, it&#x2019;s simple, it&#x2019;s marketable, but it&#x2019;s not what we&#x2019;re talking about today.
This is Steve Jobs in 1982. He hadn&#x2019;t just moved in. This is how he lived.
If you were hoping for a tutorial on how to be a minimalist, this isn&#x2019;t it. You know how to do that, in the back of your head: you get rid of everything you don&#x2019;t need, everything that makes you unhappy, and you just do it. You don&#x2019;t need someone to come up here and talk to you for an hour about that, just as you don&#x2019;t need blogs and self-help books to do it. That&#x2019;s the whole point. We&#x2019;re not talking about any of that today.
This screenshot was found under the headline, &#x201C;Beautifully Minimalist Conky Setup&#x201D; on the popular Lifehacker blog. This is the exact opposite of minimalism. It&#x2019;s fiddly, it&#x2019;s glossy, it completely unnecessary. It&#x2019;s also not what we&#x2019;re talking about today.
There&#x2019;s a quote that comes to mind when I see blog posts like this: &#x201C;The standing of Minimalist art has benefited from the mass of stupefying triviality that has followed it&#x201D;. It&#x2019;s from Edward Strickland in &#x201C;Minimalism: Origins&#x201D;.
This sort of thing is the definition of little-m minimalism. This is really more about simplicity than minimalism. They&#x2019;re closely related concepts, to be sure, but we&#x2019;re not talking about simplicity today.
A final counterexample: Google is currently experimenting with a super stripped-down home page.
This is pop minimalism, little-m minimalism. This is simplicity as a branding tactic. It doesn&#x2019;t mean anything more than that Google&#x2019;s brand has become so ubiquitous that they no longer need explain their purpose or how to make use of their search product.
So that&#x2019;s what we&#x2019;re not talking about. Now, I want to put big-M Minimalism in context.
We&#x2019;re going to start at the beginning of the 20th Century. In the world of art, we&#x2019;re exiting the successive dominance of Romanticism, Realism, Impressionism, and early Expressionism over the course of the previous century.
This Matisse&#x2019;s &#x201C;The Joy of Life&#x201D; from 1905, a quintessential representation of Fauvism, which some consider to be the first real modern movement in 20th Century art.
Fauvism was followed by Cubism. This is Picasso&#x2019;s &#x201C;Still Life With Chair Caning&#x201D; from 1912. Cubism, of course, is about turning our notion of perception on its head. Figuring out where said head is, then, becomes something of a challenge.
Following Cubism was Futurism, an artistic movement that&#x2019;s been hugely influential on modern culture not just in the visual arts, but one that has unfortunate associations with the rise of Italian fascism. This is Boccioni&#x2019;s &#x201C;Development of a Bottle In Space&#x201D; from 1913.
Dadaism followed Cubism and Futurism, and epitomized the chaos and nihilism felt by the Western intellectual elite after the senseless, unnecessary violence of World War I. Dadaism was a philosophy for a world that didn&#x2019;t make sense, one that produced as much graphic design as art.
Hausmann, &#x201C;ABCD&#x201D;, 1923-24.
The surrealists, active from 1924 - 1945 (right up to WWII) were the introspective, dreamy cousins of the Dadaists. Where the Dadaists explored chaos and nihilism, the Surrealists dove into the subtle and otherworldly influence of the subconscious.
Yves Tanguy - Divisibilit&#xE9; ind&#xE9;finie (1942)
This is the visual anarchy of Abstract Expressionism as hurled onto canvas by Pollock in 1947. In some ways, this is the quintessential post-WWII artistic movement: violent, rebellious, energetic, transformative. It&#x2019;s the expression of a world that&#x2019;s about to reinvent itself.
Finally: color field painting probably most closely precedes Minimalism, emerging in the 1950s. The style eschews the expressiveness of Abstract Expressionism for a focus on pure abstraction. Color field painting sees the art world exercising control, getting focused, exiting the chaos of the post-WWII era.
Barnett Newman - Vir Heroicus Sublimus, 1950-51
Then, we arrive in the late 1950s and early 1960s, and to Minimalism. Big-M Minimalism, though at the time it was alternating called Cool art, Rejective art, ABC art, and Primary Structures.
This a description of the style from one of its foremost biographers, Edward Strickland.
Frank Stella, Zambezi, 1959. One of the earliest Minimalist artworks, although Stella rejected the term. Part of his series of &#x201C;Black Paintings&#x201D;. Some critics at the time noted an almost religious quality when viewing the painting. At the time, it was utterly unlike anything else anyone had seen.
An emphasis on the geometric, the serial, but note the rough, hand-painted lines &#x2013;&#xA0;nothing more than a house-painter&#x2019;s brush used to create them.
This is &#x201C;Mountain&#x201D; by Agnes Martin, from 1960. It is again geometric and repetitive, but exudes a sense of peace and calm and, despite its rigidity, an organic, hand-drawn quality. This piece, too, typifies Minimalist art.
Another distillation of Minimalist ideals.
The idea that Minimalist sculpture, in particular, is as much about the object as its preparation and presentation. The object itself is art, but not in the sense of a &#x201C;found&#x201D; object being art. The object, bare, stripped of all context, is a complete artwork.
Donald Judd, Untitled
No frame, no pedestal, very little process, nothing that clearly demarcates the object as &#x201C;art&#x201D;. It could be functional - today, it could be an Ikea shelving unit. It is incidentally beautiful.
Donald Judd, Untitled. One of my favorite pieces of art from one of my favorite artists.
Minimalism is an expression of the sublime. It is the postwar aestheticism, the anti-dada. In a universe that doesn&#x2019;t make sense, Minimalism imposes order and beauty.
This statement, from John Perreault, a period art critic, is the bridge between the relevance of minimalism to art and to engineering. As engineers we, care about the end, but most often it is our clients and customers to whom the end is most relevant. We&#x2019;re here today, on a Friday, spending our day talking about programming because we care about the means.
What we are interested in is what this artistic approach can teach us an engineers. Because software engineering is such a young discipline, we need all the help we can get. What can other fields teach us?
Much of the way we think about Computer Science comes from physical architecture. The idea of patterns as applied to programming originates with architect Christopher Alexander&#x2019;s &#x201C;A Pattern Language&#x201D;. We often describe our trade and our works in terms of physical architecture, particularly when explaining it to non-technical folks.
Mies van der Rohe, German Pavilion of the Expo, 1929, Barcelona
There&#x2019;s a monograph from a committee at MIT entitled &#x201C;The Influence of Architecture in Engineering Systems&#x201D;. In it, the above are section headings. We look to architectural metaphors to understand, design, and manage the complexity of the systems we build.
These are the problems of designing for complexity, of building our entire discipline around the management and support of complexity.
John Graham-Cumming, author, programmer, recently secured an apology from the British government for the treatment of Alan Turing.
This is the philosophy of suckless.org, advocates for simple, reliable software. They are part of a whole generation of &#x201C;computing minimalists&#x201D; who eschew the complexity of modern software.
Absorb the previous quote, and think about what you can remove to great effect.
Robert Morris, &#x201C;Ring With Light&#x201D;, 1965 - 96
A quote from Colin Percival, security and cryptography expert, currently working on the Tarsnap secure online backup service. It reinforces the negative role of complexity in ensuring our safety and security in a digital world.
Chuck Moore, creator of the Forth programming language and a masterful engineer. Any of you in the audience running Macs? The firmware that booted you into your OS, Open Firmware, is written in Forth.
Moore said in the recent &#x201C;Masterminds of Programming&#x201D; that &#x201C;operating systems are dauntingly complex and totally unnecessary&#x201D;.
Can we work within a simpler way of thinking about the world? Are we always building buildings? Does every system have to be so complex? In systems architecture, we&#x2019;re encouraged to break systems down into their component parts. But can we produce our own works that are self-explanatory, self-contained, powerful, and unable to be further reduced?
Anne Truitt, Night Naiad, 1977.
The question is: if we had a blank canvas on which to inscribe a new way of thinking about the design of software, one informed by Minimalist principles, what would we end up with?
Untitled (To Dan Flavin) by Salvatore Panatteri, probably 2007.
We need guideposts with which to approach minimalism in software. Appropriately enough, there are just three broad strategies. We&#x2019;ll explore each strategy with some examples.
Recall the earlier discussion of Minimalist sculpture, the idea of the unification of object with materials. &#x201C;reveal materials as materials&#x201D;, as one critic puts it. This is the most powerful of the three concepts we&#x2019;ll explore today.
There are strong parallels to how we organize code and data in programs.
From homo meaning the same and icon meaning representation&#x201D;.
Wikipedia: &#x201C;a property of a language in which the primary representation of programs is also a data structure in a primitive type of the language itself.&#x201D; That is, the AST is the language, and the language is the AST.
Discussed primarily in the Lisp community, but present in Lua, Io, Ioke, Factor, Prolog, and many other languages, including machine code itself. This powerful concept enables metaprogramming, which can enable powerful, terse abstractions that reduce the number of necessary lines of code.
This is from the core of the MISC metacircular interpreter. The interpreter is written in terms of itself, a property enabled by homoiconicity. The entire example is 55 lines.
An example of homoiconicity in the purely functional Joy language, taken from the C2 wiki. The specification:
1. Create a "code" data structure (block) for assigning 15 to a variable.
2. Evaluate it and view the variable's contents, which should be 15.
3. Modify that data structure to assign 37 to the variable.
4. Evaluate it and view the variable's contents, which should now be 37.
Here&#x2019;s another way of thinking about unification as it applies to programming.
JSON is a subset of JavaScript. It doesn&#x2019;t represent the entire AST, as s-expressions do in Lisp, but it represents complete objects in a portable, interoperable way. Though XML is a far more robust data interchange format, JSON has become hugely popular for its simplicity to read, write, and parse.
HTTP has become the lingua franca not just for the client-to-server web, but even for the web inside the server clusters. Having back-end processes adhere to a RESTful architecture encourages the reuse of known, trusted pieces of software like HTTP load balancers and caching proxies that fulfill requirements &#x201C;for free&#x201D;. It keeps architectures clean, simple, and manageable.
Unification is a powerful concept. In Minimalist art, the object, its materials, and its presentation form a unified aesthetic whole. In Minimalist software, unification gives us a simple basis from which to extrapolate powerful ideas.
Dan Flavin
Recall the earlier discussion of Minimalist sculpture, the idea of the unification of object with materials. &#x201C;reveal materials as materials&#x201D;, as one critic puts it.
There are strong parallels to how we organize code and data in programs.
37signals released their Ta-Da List application in 2005, it was a mere 600 lines of code. Of course, that&#x2019;s building on a framework well in excess of 100,000 LOC, so does it really count?
We need practical strategies for code reduction in real, non-trivial codebases. In Kevlin Henney&#x2019;s &#x201C;Minimalism: A Practical Guide to Writing Less Code&#x201D; he offers a number of such pointers.
This code snippet, from a paper entitled &#x201C;Squeak: A Minimalist Syntax&#x201D;, illustrates every part of Smalltalk method syntax except primitives.
This quote, from an interview with Ken Thompson, one of the fathers of Unix, illustrates the need for a few simple, powerful abstractions in Minimalist software.
Niklaus Wirth, developer of Pascal, Modula, and Oberon, in &#x201C;A Plea For Lean Software&#x201D;. He offers nine lessons from the success of the Oberon project, and this is one of the most important, along with the use of a strongly-typed programming language. Too much hierarchy causes needless complexity and confusion.
Reduction isn&#x2019;t about doing as little as possible. It&#x2019;s about distilling complex ideas down to their essentials, such that decorations and explanations are unnecessary.
[Robert Ryman]
The idea of constraint, the final of our three strategies, is somewhat more abstract. It&#x2019;s more about structuring your work such that it is inherently bounded. Sometimes we don&#x2019;t choose our constraints, but more often that not we have too much leeway at the start of a project.
Talk about Twitter.
&#x201C;Minimalism results in reasonable and maintainable goals&#x201D; - suckless.org
Constraint is really about ensuring your success, at the end of the day. There&#x2019;s no shame in saying, &#x201C;we can&#x2019;t do that&#x201D; or &#x201C;we shouldn&#x2019;t do that&#x201D;. Overcommitting and over-featuring is a recipe for disaster.
[Sol Lewitt]
So, we&#x2019;ve talked about what Minimalism is and how we go about it in software. But what are some reasons to be skeptical about this approach?
If something appears simple on the outside (Apple products, Twitter, Actors in Scala or your favorite cleanly designed API) but has complex underpinnings, is it still simple?
A perpetual problem: it&#x2019;s rarely turtles all the way down, and nobody really knows everything about computing. Is there anyone in this room who can say with confidence he knows the lowest low-level and the highest high-level concepts?
C# author: &#x201C;It&#x2019;s all about &#x2018;do more with less&#x2019;. It&#x2019;s not about doing more with more with a simple layer on top.&#x201D;
Say we figure out how to build big, complex system reliably. Arguably, inside of companies like Google, they have. If that knowledge becomes widespread and institutionalized, is a Minimalist approach still valuable? If we can tame complexity, is Minimalism anything more than a stylistic preference?
This is probably the most worrying point.
James Rumbaugh, the designer of UML says that &#x201C;life and computing are too complicated for simple solutions&#x201D;.
We&#x2019;ve all the had experience of writing some beautifully simple piece of code, only to find out a few hours later that it doesn&#x2019;t really do the job. Likewise, it&#x2019;s exhausting work making a business of selling simplicity - it&#x2019;s not demonstrably the way to be a market leader in this industry.
Let&#x2019;s talk about a future of computing in which Minimalism can play a crucial role. In some ways, desktop and server computing are beyond help. They missed their chance to be Minimalist, and we&#x2019;re not reinventing that wheel anytime soon, realistically. But where can we apply these principles such that they&#x2019;ll make a big impact?
[Robert Mangold]
Mobile technologies offer us an opportunity to reinvent computing. Developing countries are experiencing information technologies for the first time, and there&#x2019;s no reason why they have to suffer the same computing mistakes that the developed world has. We can build simple, mobile, goal-oriented devices for the next generation of human communication.
One way of considering the problem of modern desktop computing is that we&#x2019;ve failed to break down the problem sufficiently. The promise of ubiquitous computing - intelligent devices everywhere around us - is a chance to reconsider computers as simple, single-purpose devices.
The artists all grouped together by art historians as the Minimalists never really considered themselves adherents of a common school or approach. They just did what they did, and most of them fought the Minimalist label for the rest of their careers.
If you liked what you heard here today, I&#x2019;m glad, but the point isn&#x2019;t that you should go out and brand yourself a Minimalist. The point is to take the ideas that work for you and make the world a better, simpler place.