Live data from Hacker News

The Case for Slow Programming

ventrellathing.wordpress.com

311–320 of 346 posts

Re: The Case for Slow Programming

#311

Here are my Reddit comments on this story: I've always programmed thus: * Try to assimilate a mental model of the bit I'm working on, and as much of that bit's dependencies as is practical, into my head. This may involve fiddling with the code and seeing how it breaks when I do certain things to it, or hammering at it inside a REPL or similar. The bit that I'm concerned about could be a single method, but is usually…

This rings true with me. Some of my best work has been done laying on my bed (working from home) staring at the ceiling.

On one project, we initially gave ourselves a ridiculous deadline and subsequently made a lot of ad-hoc "fuck it" decisions without properly thinking out the consequences. The system is sufficiently complex that we ended up with something that _barely_ did what it said on the box (if it worked at all). I dreaded even adding the simplest of features, because I could just feel how fragile the whole thing was.

We ultimately made the decision to scrap the project (and piss off or outright lose some customers waiting to pay us money) and restart from scratch, and I spent a few months part-time just building up a mental model of the system and stress-testing it against all of the different requirements and scenarios we had to handle. I went through a couple of notebooks in that time, but I didn't write a single line of code.

For me, it was a lesson in the importance of deliberation and knowing what you should be building before building. As my uncle liked to say when we built houses together, "measure twice, cut once."

Re: The Case for Slow Programming

#312
I feel like "agile" has come to mean "get shit done fast" in today's programmer culture. But just as "agility" and "speed" are not the same, agile development does not necessitate a race to the finish and similarly is not the antithesis of the slow programming style (as some commenters seem to be suggesting).

I think people have wrongly used agile as an excuse to implement first, reflect later, refactor never. In the original agile movement, there is a lot of time devoted to refactoring. You hack something together that accomplishes your goal. You get to see how it's working, get user testing up and running, and then reflect. But underneath the hood the program is a complete mess. This is the time for an agile developer to go back and majorly refactor the program into a neat, well-organized system. Maybe even rewrite. The problem is people on the business side of things see a near-complete project that they want to launch ASAP. It may even feel that way to the developers. I think the refactor part of the process gets cut short because of the desire to push the product out the door or work on new feature sets. You're only doing half the agile process in this case.

I'm definitely not in the "plan first, build later" vein of thought. It's not how I program or do artwork (I'm a hobby artist as well). I need time to play around and experiment with different ideas in real-life implementations before settling on my plan of attack. There are so many ideas that may seem great in your head, but don't do well IRL. Additionally, you may stumble upon a new idea in the process of experimenting.

The thing I long for the most as a programmer is more time to refactor. Time to refine my code. There is something to be said about craftsmanship as opposed to mere production. One thing I've enjoyed about my own personal programming projects outside of work is that I have time to sit back and reflect. Is this the best way of modeling X? Is there a more simple way of expressing X? And then I can do major refactors/rewrites that would never fit into a sprint at my workplace. But I do believe the investment will pay off in the future when it comes to maintenance. And extra day refactoring now could save weeks of debugging later on.

Re: The Case for Slow Programming

#313
One of the first things I learned about programming was to write the problem down on paper. Diagram it. Don't even start coding until you have a good map of where you're going, at least at couple levels of detail.

Most of the problems I've encountered myself or seen with others is directly related to coding too soon.

Re: The Case for Slow Programming

#314
Software Craftsmanship Vision See http://kp0.me/SoftCraft

The problem is that Software is in fact a new kind of object, i.e. it has a different ontology from most other objects which is defined by what is called Hyper Being by Merleau-Ponty and Differance by Derrida. This is in contradistinction to most objects which are either Pure Being (present-at-hand) or Process Being (ready-to-hand). Hyper Being objects are defined by Derrida in terms of differing and deferring, but we can talk about instead decoherence and delocalization of Software. Delocalization has to do with the fact that design elements are spread out within programs and in spite of object oriented design are not self-contained at the program level. Decoherence has to do with the fact that programs lack internal coherence intrinsically due to the nature of general purpose programming languages and their multi-paradigm nature and the solution to this is aspect oriented programming which attempts to render coherent elements that are non-localizable. But neither aspect oriented programming nor object oriented programming completely solve the problem of the intrinsic quantum like properties that occur in software. Software designs are like classical physics in relation to the quantum like nature of software. See my original paper on this called Software Ontology at http://kp0.me/SoftOntos. There are in fact various ontological levels identified in Continental Philosophy and beyond Hyper Being is Wild Being and Ultra Being which both have implications for our understanding of Software.

Also I don't see any reference to Fast and Slow Thinking by Daniel Kahneman. There is some basis for understanding the difference between Fast Thinking and Slow Thinking in his work. Fast Thinking makes up narratives on the fly while Slow Thinking creates arguments more ponderously. Actually in Software Craftsmanship we need both and we need to balance these two forces in the patterning of our development processes.

Kent Palmer http://kdp.me

Re: The Case for Slow Programming

#316

Earlier quoted context omitted.

I am clueless about this, How do you learn to make good architectural choices?

By not being insulated from the consequences of bad ones + iteration.

Good point. How many "rockstar" developers show up at Company X, build the initial versions of a product or architecture, then move on to the next company never to understand the longer term consequences of their choices?

Re: The Case for Slow Programming

#317

Earlier quoted context omitted.

I'm not saying that it doesn't take time to build software and I'm not making a case for how to do management. In my decade of experience on different teams and products, the main impedance to productivity has by far been to do with bad code and architectural choices. The justification is always "speed" but my point is that is wrong. It's not speed that is at fault, it's that most software engineers don't know how to…

Describe good architectural choices?

You've probably heard it as ones that lead to low-coupling and high-cohesion, which is correct. But in my experience this needs to be made more concrete -- many people can say these words, but couldn't tell you accurately to what degree a system was cohesive and uncoupled.

Re: The Case for Slow Programming

#318
post #168

Earlier quoted context omitted.

I now love german culture. It's like finding my soulmate.

Please note that another german culture is to be overly pedantic in following rules, no matter if their initial intention applies or whether we just set them five minutes ago. Rules are followed because. This culture makes administrative processes bulky and tedious and tiring. It often fuels my Ungeduld, because I want to get s t done zügig.

Indeed. I needed some paperwork when I got married with a german. I'm from Sweden. I called the tax office in sweden that was taking care of the papers I needed to file for marriage certificate in Germany and the woman on the phone was laughing heartily saying "Then you know how byrocrazy feels!" :-) They happily sent all papers I needed in the mail to me in Germany, translated to English. The clerk in Germany was eying it suspiciously and asking some colleagues and took quite some time before finally putting down his stamp.

Re: The Case for Slow Programming

#319

Earlier quoted context omitted.

How do developers currently learn to build scalable, maintainable, well-architected systems? Certainly there are some books on the subject, and that might be a good start, but I'd be willing to bet that these skills are largely learned "on the job" through a bunch of trial and error. Are there any good ways to dive in and get experience with a lot of smaller examples, similar to the "code school" approach but for mor…

It is all trial and error from my perspective. I like this line of inquery. The problem I see is the technology is constantly changing, and the meaning of 'scalable' is always expanding. Ie the 'Enterprise' archticture of the past didn't scale to 'internet scale', will 'internet scale' scale to 'internet of things' scale?

That's a good point -- things are constantly evolving and current tech becomes outdated so quickly.

At the same time though, I think it supports my point that the training for these kinds of things should be faster than reading a big thick book followed by a bunch of trial and error.

Re: The Case for Slow Programming

#320

Earlier quoted context omitted.

But NextSTEP didn't fail. It succeeded, in the biggest, most spectacular way I can imagine an operating system would. So, design does matter. Design seems to matter a great deal at Apple, so that backs up your other point that most other businesses could care less about their software's design and that NextSTEP at Apple is an exception.

BeOS !== NextSTEP http://en.wikipedia.org/wiki/BeOS

I brought up NextSTEP because it was a notable success that was not mentioned by the parent comment.

And arguably, NextSTEP is a success story because of its design which enabled it to crossover successfully into mobile through iOS. NextSTEP's blueprint allowed iOS to operate at a performance level that other OS'es and architectures could not match when it debuted.

BeOS was fine, but it was rightly or wrongly seen as a spiritual successor to Amiga, which only had a niche market.

NextSTEP wanted to be a spiritual successor to MacOS, but never really could until Steve Jobs forced it in there.

Even so, the technical design points of NextSTEP were well-suited for a resource constrained mobile platform, and that is one reason iOS has been such a success.

Post reply on HN