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…
The Case for Slow Programming
281–290 of 346 posts
Re: The Case for Slow Programming
#282I 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.
Re: The Case for Slow Programming
#283I 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…
We have a term for that as well -- cruising speed.
Re: The Case for Slow Programming
#284This 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…
Re: The Case for Slow Programming
#285I'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
#286Earlier 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?
Re: The Case for Slow Programming
#287Earlier 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...
Re: The Case for Slow Programming
#288I 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…
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
#289Then 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
#290Earlier 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.
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.