Duncan Cragg
04/30/2019, 9:34 PMibdknox
04/30/2019, 9:41 PMDuncan Cragg
04/30/2019, 9:50 PMDuncan Cragg
04/30/2019, 9:50 PMibdknox
04/30/2019, 9:50 PMDuncan Cragg
04/30/2019, 9:50 PMibdknox
04/30/2019, 9:52 PMDuncan Cragg
04/30/2019, 9:56 PMDuncan Cragg
04/30/2019, 9:58 PMDuncan Cragg
04/30/2019, 9:59 PMwtaysom
05/01/2019, 7:51 AMwtaysom
05/01/2019, 7:57 AMDan Cook
05/01/2019, 2:57 PMChris Knott
05/01/2019, 5:10 PMThat gets to the real question in my mind: how do you specify systems in such a way that the behavior you get is going to be in the positive class as opposed to the negative class. You can't control the world, but you might be able to meaningfully funnel it@ibdknox I think the solution to this is to structure the system not around explicit limitations but around smaller-scoped quid-pro-quo contracts, and to limit UB within contracts but not between them. One of the problems with the current generation of digital systems is that they severely limit flexibility. The supposed benefit of these systems over say paper ones is an increase in data integrity, but it doesn't necessarily have that effect. For example, suppose we have paper forms for people who are taken into police custody, and this form has a "DOB" field. Officers might reasonably want to write into this field things like "1970", "Claims 2005 but clearly older", "1st March, 1969 or 1968 (too drunk can't remember)" etc etc. If this form is digitized, then the DOB field might reasonably be made to be a Date picker. Now, not only can none of these be entered, but what's more we might be coerced into entering invalid data like "01/01/1970" instead of "1970"! However, obviously there were reasons to ask for the DOB to be a valid date. It let's us do powerful things like query all people born within a specific range. It let's us reason more easily around the rest of the system because we can make valid assumptions. However it's wrong to think that this more restrictive design is definitely "safer" - this is just arrogance on the part of the people at the time of design, thinking they definitely know better than future users. Systems like this should be designed more along the lines of; 1. I want a date of the form 01/01/1970, and I will let you know if you don't give me that 2. IF you give me that, THEN I can perform this other action 3. Otherwise, I can't help you I think this is why Unix tools are so heavily in the "good" side of emergent behaviour. Each one is simple, has an easy to understand contract, and individually has no undefined behaviour. Together they can create fantastic things in unexpected ways. The same is true (in a way) of LEGO. Disaster strikes when a tower of assumptions is built up and then changed somewhere in the distance. Keep assumptions local and explicit and this should be avoided.