> typeof universe
'recursive space turtles'
> universe instanceof RecursiveSpaceTurtles
'who's to say really?'
npm install
ag_dubs
npm install
a-brief-history
require('dijkstra');
The programmer is in the unique position... They have to be able to think in terms of conceptual hierarchies that are much deeper than a single mind ever needed to face before... the automatic computer confronts us with a radically new intellectual challenge that has no precedent in our history.
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.
It's all about containing complexity... By making small focused modules you can easily build large complex systems without having to know every single detail of how everything works. Our short term memory is finite.
When applications are done well, they are just the really application-specific, brackish residue that can't be so easily abstracted away. All the nice, reusable components sublimate away onto github and npm where everybody can collaborate to advance the commons.
require('gall');
A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a simple system.
require('cesar');
Information is not a thing; rather it is the arrangement of physical things. It is physical order, like what distinguishes different shuffles of a deck of cards. What is surprising to most people, however, is that information is meaningless.
The more I modularize my code. The bigger it gets.
Over 400ms is being spent simply walking the Browserify tree.
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){module.exports = 0},{}],2:[function(require,module,exports){module.exports = 1},{}],3:[function(require,module,exports){module.exports = 10},{}],4:[function(require,module,exports){module.exports = 100// etc.
(function () { 'use strict'; var module_0 = 0 var module_1 = 1 // ... total += module_0 total += module_1 // etc.
Yes, small modules are easier to write. Yes, they're easier to test. Yes, it's easier to adhere to semver. These are all things that make your life as a library author easier. As we've seen, they come at a cost for others.
require('kuhn');
Scientists work from models acquired through education and through subsequent exposure to the literature often without quite knowing or needing to know what characteristics have given these models the status of community paradigms.
require('ceejbot');
Your monolith is complex. A split system is more complex.
require('hickey');
Most of the big problems in software are problems of misconception.
require('hawking');
It is an interesting reflection on the general climate of thought before the twentieth century that no one had suggested that the universe was expanding or contracting.
require('parnas');
[Start] with a list of difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others.
None of us are born knowing how to write software.
require('sartre');
require('tef');
Write code that is easy to delete, not easy to extend. Instead of building re-usable software, we should try to build disposable software. I don't need to tell you that deleting code is more fun than writing it.
npm install
a-brief-history
{
"name": "a brief history and mishistory of modularity",
"author": "ashley williams @ag_dubs",
"version": "1.0.0",
"dependencies" : {
"Edsger Dijkstra": "On the Cruelty of Really Teaching Computer Science",
"Stephen Hawking": "A Brief History of Time",
"Rich Hickey": "Hammock Driven Development",
"Rich Hickey": "Design, Composition, Performance",
"Tef": "Write code that is easy to delete, not easy to extend.",
"CJ Silverio": "Cheating Gall's Law",
"Nolan Lawson": "The cost of small modules",
"Substack": "How I write modules",
"Sindre Sohrus": "Small Modules: Tales from a Serial Module Author"
}
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |