It Can Be Done (2003)
multicians.org
multicians.org
The best code I wrote was in assembly language. I'd divide the code into blocks with comments. Each comment would document the expected state at that point, what the block would do, and the state after that block.
I wrote pages and pages in my noteblock, and while not everything was bug-free most of it was, and I have never experienced such a nice development process. Nowadays I have to consult five coworkers to ask how to call their undocumented methods and initialize the classes.
I have recently encountered the book 'Toward Zero-defect Programming', where exactly this approach is recommended. Key points are (from the top of my head):
1. You should know the programming language you're using inside-out.
2. Don't *try* your code, but *reason* about it, and comment/document this reasoning.
3. Do group reviews of the code and try to find holes in the reasoning, and problems with the code.And paper, paper is the most important thing here. It is the extended human memory. The short term memory of human beings is extremely sort.
I use paper with color marker pens all the time for programming. Nothing beats paper right now. For doing the same thing on computers you need expensive gear like Ipads pro or surfaces and the useful surface is minimal.
I could use several A4s(normal paper size in Europe), A3s(double that), A2s(4 times that) A1 and A0. I increase the resolution using fineliners. It cost nothing compared with expensive gear.
When you are done you take a high res picture for archival. You can replot it if necessary or wacht it on TVs.
And yes, more than the pencil-and-paper aspect of this, what I find striking is that it's one person working quietly and alone, with a manager who was prepared to take "Still designing" as an answer. There seems to be very little room for that in a lot of modern workplaces, and I find that rather sad.
But most people are not programming up things like this. Most of the time, either the data or customer usage informs next design decisions.
Even so, I spend about 40% of my time these days in "plan mode" because nailing a plan always halves the time it takes to implement some feature and can even tenth it.
Makes me want to go back to pure C/C++ development where you know the environment in and out.
This also carries to frameworks. Web frameworks like Ember and Rails rely very much on side effects, especially Ember. I don't even know how a rendered template is updated when updating a controller property. It just works automagically! Defining an app in frameworks like this is a lot of defining hooks that get called by the framework environment. Trouble then happens when it calls it when you didn't expect it or when it doesn't when you did expect it.
Haskell's Yesod, on the other hand, has been a pleasure to work with. If something's calling my code, the caller is going to be in my repo. I get control all the way to the final executable's main function. Yesod's code is there only as support for me to call.
Here's a write-up on Cleanroom:
http://infohost.nmt.edu/~al/cseet-paper.html
Here's a test of it by NASA around 1990 where the E.3 and E.4 sections highlight its benefits and requirements:
https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/199100...
Getting something on the screen is useful. It's motivating. It helps to expose the limits of the approach taken. The scope of the project becomes much clearer when have written a chunk of code. I have rarely felt that I should have spent more time dabbling with pen and paper, than firing up my text editor. After all, mistakes can always be corrected.
With the rising complexity of software, and of the whole ecosystem itself, does it make sense to know all the edge cases you're going to stumble upon beforehand? Not to mention that requirements can themselves change. And what about processes like code-reviews? You're not the only person working on the software. I am hard-pressed to say that seeking an extreme level of clarity isn't a great use of time.
I'd still like it in my filesystem, though.
I'd guess the mentioned "update" on the page is not relevant, that is, that there aren't any important changes compared to the 1994 original of the article.
I'm not sure https://motherfuckingwebsite.com/ is the analogy I'd make though. It uses a non-trivial amount of CSS (about 5k) -- but not so much that it'll slow most people's downloads, and not a big "framework". It's got some somewhat distinctive branding -- you'll know instantly if you navigate away from the site -- but the elements don't take up too much of the screen. It actually has some responsive elements (try making your browser window narrow).
There's a few lines of JS to make the drop down menus work. But again, nothing huge.
It doesn't seem to be consciously avoiding anything. It looks to me like the work of someone who's started from a clean sheet and is trying to build a site that works for them rather than ticking off a list of best practices. And yes, I like the results.
And by ridiculous I mean "worthy of ridicule" because as developers, we're largely the people responsible for cramming in more tracking, frameworks, features, and styling into the work we create.