Live data from Hacker News

The Case for Slow Programming

ventrellathing.wordpress.com

281–290 of 346 posts

Re: The Case for Slow Programming

#281
post #260

Earlier quoted context omitted.

" Was your flexibility in the right direction? " Yes. " Why would your way have been different? " Because I had a form that created a form. You know, a lot of failed projects that I've worked on were my fault, because I was that guy. The guy who questioned the seasoned greybeard. The guy that knew JavaScript is the only answer. That agile is the only way to manage development. And if agile didn't work, it wasn't beca…

> Because I had a form that created a form. I have a text editor that creates forms. I have a good abstraction for what a form is, meaning I can represent one with a simple class that expresses only the things that make that particular form unique. And I have a whole bunch of standard tooling around managing this representation of forms, like my VCS. It sounds like you haven't really lost your certainty. "I just know…

> Wisdom comes with observation, not age. Scrubous Pip

Re: The Case for Slow Programming

#282

I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win. Our goal is architectural soundness. I believe the biggest fallacy of our industry is we think the only way to get these is to go "slow". Not true. What we're really saying…

With specific skill sets, you can build architecturally sound systems at no extra cost. Except the extra labor costs of someone with that skillset.

Today, yes. But that's a problem our industry needs to solve. A lot of our labor force has already paid in money and time for education. Our education system has simply failed to deliver the full skill sets. Not necessarily the education system's fault -- our industry needs to know what skill sets to ask for and what is their value.

Re: The Case for Slow Programming

#283
post #45

I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win. Our goal is architectural soundness. I believe the biggest fallacy of our industry is we think the only way to get these is to go "slow". Not true. What we're really saying…

> I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win. German has a very nice word for that: "zügig". It means "speedy" as well, but goes a bit towards "stable", "steady" and "friction-free". It's the good kind of fast, which…

German has a very nice word for that: "zügig". It means "speedy" as well, but goes a bit towards "stable", "steady" and "friction-free". It's the good kind of fast, which sometimes needs a step back and a look at things.

We have a term for that as well -- cruising speed.

Re: The Case for Slow Programming

#284
post #266

This article reminded me of something I read in the Vanity Fair article about Sergey Aleynikov, the Goldman programmer[0]. >He’d been surprised to find that in at least one way he fit in: more than half the programmers at Goldman were Russians. Russians had a reputation for being the best programmers on Wall Street, and Serge thought he knew why: they had been forced to learn programming without the luxury of endless…

This is a good point. I am not Russian but I learned programming in the same way because I started out doing embedded work. Where a build/deploy/test cycle could take hours to an emulator and debugging was very unfriendly. If you did not do rigorous thinking about your program and what you were doing, you could waste huge amounts of time. I no longer do embedded work, but the mentality has stuck. When I commit my work, it tends to have fewer bugs than what my co-workers produce.

Re: The Case for Slow Programming

#285
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 larger.

* Try to develop a mental model of the bit as it _should_ be. Do a diff between the 'is' and 'ought', make code changes as necessary, fiddle with the new code to make sure the shape of its function is roughly the 'ought' shape.

* Update the unit tests with specific tests for the 'ought' case, run tests, fix failures.

* Check in or submit code for review.

This is not how software is written now. How software is written now is a hill-climbing algorithm where each cycle is one "red-green-refactor" sequence. Write a tiny failing test which no matter how small or trivial still has a few lines of setup/teardown boilerplate, make the smallest possible code change to make the tiny test pass (change minus sign to plus sign?), run the ENTIRE test suite to make sure that your sign flip didn't break anything anywhere else, if the code needs to be refactored do so and run the entire test suite again, fucking repeat. There are a number of theoretical advantages to this from a management perspective:

* Developers produce working code quickly in the early stages of the lifecycle, whereas with the slow approach you do a lot of sittin' and thinkin' up front without much to show for it -- maybe some design documents or UI mockups, I dunno.

* Development no longer relies on developers' internal mental models of the code. Developers now code against a model which is incarnate in the test suite -- itself a deliverable, documentable artifact.

* Because programmers no longer work from internal mental models but the single-bit state of "do the tests as written pass or fail?", the concept of "code ownership" -- along with related management problems of coders waxing territorial over the pet modules they've spent days or weeks ruminating over in order to understand deeply enough to change -- evaporates.

* Programmers look busy all the time, because they are constantly typing out test code to exercise even the most trivial of changes.

* Thanks to pair programming, you no longer need worry about the "guy in a room" problem. Your dev team is always seen to be interacting with one another.

But I hate it because it is incompatible with my temperament. I like to think about _what_ it is I intend to write, before hammering out test cases to exercise it.

Re: The Case for Slow Programming

#286

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…

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.

Re: The Case for Slow Programming

#287

Earlier quoted context omitted.

Zügig is just so..Germanic! It's exactly how I imagine the stereotype of German efficiency. In the anglo-saxon world we pride ourselves on how many hours we work. In Germany they work fewer hours and produce more and of better quality. At least that's my impression.

Relevant: http://knote.com/2014/11/10/why-germans-work-fewer-hours-but...

That article reads like the inverse of the Japanese "salaryman" (company as family, patriarch, protector, provider of all material comforts), which is also sometimes fetishized in Western circles (in terms of results) as "more efficient" or somehow better than American working culture.

Re: The Case for Slow Programming

#288

I largely agree w/ the argument here, but "slow" is going to be self-defeating nomenclature, and is also inaccurate. Business doesn't want slow. So if we're pitching slow, we're setting ourselves up to lose and the speed-hackers are going to win. Our goal is architectural soundness. I believe the biggest fallacy of our industry is we think the only way to get these is to go "slow". Not true. What we're really saying…

You are probably right about the marketability of "slow" as a movement, but in hacker circles these ideas need to be discussed honestly and directly.

The analogy with house building is flawed. Home construction generally follows a preplanned architecture, schedule, and process that has been refined and tested over a long time in an environment which doesn't change much over time. The process of building houses is well understood and if a delay occurs it can be attributed to a lack of skills as you say (or funding problems, etc).

Software has a different nature. If you have thoroughly solved a problem, the solution can often be automated. There is no button you can press to build the same house you built once before. It still takes time, money, and materials. With software, if you are not spending a large portion of your time working on a problem that has a novel component or two, you or someone else has probably failed to automate enough.

As a result, you never quite possess the necessary skill set to solve your current task. You are always pushing some boundary, even if small. Gross skill set mismatch is a separate problem, of course, but a transient skill mismatch is an inherent aspect of good software development and I don't think it's justified to place any blame on moderate and transient skill mismatches as a result.

Whenever you are dealing with something novel, you will need to go slower than usual. It's the same for new types of buildings that use newer construction tools or technology.

Re: The Case for Slow Programming

#289
A lot depends on who you are programming for. Usually it is for a company that places more importance on a deadline than anything else, including quality. Other "ilities" are even less relevant. So you just hunker down, and produces something that "works" very fast. For, say, a small dataset.

Then either the project finishes (abandoned sometimes), or it grows (exponentially sometimes), and what was created fast no longer is usable. So you do it once again, now to support the new requirements. And so on.

We are constantly rewriting systems, as we continuously copy data from different media. It keeps us employed. It is much easier to be remembered for doing something fast than for creating something that lasts.

Re: The Case for Slow Programming

#290

Earlier quoted context omitted.

With specific skill sets, you can build architecturally sound systems at no extra cost. Except the extra labor costs of someone with that skillset.

Today, yes. But that's a problem our industry needs to solve. A lot of our labor force has already paid in money and time for education. Our education system has simply failed to deliver the full skill sets. Not necessarily the education system's fault -- our industry needs to know what skill sets to ask for and what is their value.

Our education system has simply failed to deliver the full skill sets.

Even if you ignore the question of what material post secondary education should be teaching, the more substantial bounds are the time limitation of school. Even a hyper-specialized curriculum can't cover everything, and isn't a substitute for real world experience.

It's soothing to sit around and find ways to opine and blame external parties (education is a popular choice) for the fact that experienced and skilled developers can't be had for the cost of green developers. But it's just an activity that releases energy without changing anything, aka (mental) masturbation.

Post reply on HN