On Quality, Speed, Practice: Software Development links for October 18th, 2009

Microsoft Research: Janie Chang: Exploding Software-Engineering Myths:

…there is one point that gives this software-engineering myth buster a great deal of satisfaction.

“I feel that we’ve closed the loop,” Nagappan says. “It started with Conway’s Law, which Brooks cited in The Mythical Man-Month; now, we can show that, yes, the design of the organization building the software system is as crucial as the system itself.”

Bruce Eckel: 5-2-03 Strong Typing vs. Strong Testing

Random Thoughts: TDD is not test-first. TDD is specify-first and test-last.

97 Things Every Programmer Should Know: Uncle Bob: Speed Kills:

If you want to be a professional, if you want to be a craftsman, then you must not rush. You must keep your code clean. So clean it barely needs comments.

Coding Horror: The Xanadu Dream:

Consider the reality of what’s actually possible, what people can understand, and what us all too human programmers can practically implement. It might not be the Xanadu you dreamed of — heck, it might even suck — but it’ll at least have a fighting chance of existing in reality rather than fantasy.

Dare Obasanjo: Duct Tape Programmers and the Culture of Complexity in Software Projects:

The urge the reduce the complexity of the tools used to solve software problems is one that every software developer should share. However even more important is reducing the complexity of the actual solutions that are delivered to your customers at the end of the day. End users can’t tell if you used complicated C++ techniques like template metaprogramming and mixins to build the application. They can tell when your application fails to solve their actual problems in a straightforward way or is so late to ship due to project delays that they lose interest in waiting for you to solve their problems.

On the future of CMS (is NPR actually there already?) – CMS Links for October 18th, 2009 –

Justin Cormack recently completed a three part series on the future of CMS that I think nails it. I might be biased because it’s what we’ve been building towards at CIM for the past few years. Go read: “CMS technology choices”, “Content Enabled Vertical Applications and taking the CMS apart”, and “Content enabled vertical applications (composite content applications) – executive briefing” – quote from the second link:

At the application layer, as Stéphane says, everything is a mashup, content from different systems, content from other APIs, this is the we application layer. It needs to be content aware, very much so, but it needs to be an application development environment. This is where most people will see the value added in the content management business, although in fact the value here is in implementation, design and integration services, not the technology itself. Application development environments no longer make a lot of money, and again they are dominated by open source (think Java, Eclipse, JBoss, Django).

Once you take out content infrastructure and application development, and the other tools like search, workflow, there is a core of tools for working with content, to support reuse, refactoring, cleaning, import and export, that one might call a Content Workbench. There is a lot of potential value if these types of tools are the value added end of the business, as they can differentiate vendors and add value. Interfaces for merging changes and so on would be part of this type of toolkit. This is the stuff where good UX means timesaving for content workers, but it is difficult to build on a customized per-project basis, so this still offers value from a particular vendor.

Overall then we see a picture where the monolithic CMS starts to break apart into infrastructure, application and toolkit layers, that can perhaps gradually be mixed and matched together to build content applications. We are just seeing the beginnings of this now.

Peter Monks had a reply to his pieces here: The Future of CMS Technologies.

Meanwhile, NPR is live with a CMS solution that resembles this. Read NPR’s Daniel Jacobson’s guest post on Programmable Web: “COPE: Create Once, Publish Everywhere”.

Content Here’s Seth Gottlieb explains how this approach might be too much for those who need less capability still, he concludes:

…at the very least, every publisher needs to start thinking on this level: creating and storing content in presentation neutral way to keep options open.

This conversation was kicked off by Julian Wraith. Check there for more.

I plan on doing my own round-up, as there are many, many interesting posts worthy of sharing. In addition, I think I’ll share some of my own thoughts as well. Would be great to contribute to the discussion Julian Wraith started instead of staying meta for once 🙂

Who said conversation doesn’t happen across bloggers anymore ?

And on another note, the CMS Myth just had its second anniversary: Two Years On: Still Puncturing Myths & Taking Names

“Programming is an exercise in overcoming how wrong you’ve been in the past.”

Kickingbear: “Blog Archive » Don’t Be A Dick: Compiled Flash and You.”:

Programming is an exercise in overcoming how wrong you’ve been in the past. At first you’ll overcome the syntax errors, then you’ll overcome the structural errors, and then you’ll come to align your code with the standards of a greater community and you’ll feel safe and like you’ve made it. You haven’t – you’re still wrong because you’re always wrong. You are playing a game you cannot win. And let’s face it – if it was a game you could win you’d not be playing at all.

via Arpit’s Web Quotes tumblr

Old classic essay on software artistry/craftmanship: “Hackers and Painters”, by Paul Graham

Paul Graham: Hackers and Painters:

When I finished grad school in computer science I went to art school to study painting. A lot of people seemed surprised that someone interested in computers would also be interested in painting. They seemed to think that hacking and painting were very different kinds of work– that hacking was cold, precise, and methodical, and that painting was the frenzied expression of some primal urge.

Both of these images are wrong. Hacking and painting have a lot in common. In fact, of all the different types of people I’ve known, hackers and painters are among the most alike.

What hackers and painters have in common is that they’re both makers. Along with composers, architects, and writers, what hackers and painters are trying to do is make good things. They’re not doing research per se, though if in the course of trying to make good things they discover some new technique, so much the better.

I’ve never liked the term “computer science.” The main reason I don’t like it is that there’s no such thing.

…For a long time I felt bad about this, just as I once felt bad that I didn’t hold my pencil the way they taught me to in elementary school. If I had only looked over at the other makers, the painters or the architects, I would have realized that there was a name for what I was doing: sketching. As far as I can tell, the way they taught me to program in college was all wrong. You should figure out programs as you’re writing them, just as writers and painters and architects do.

Realizing this has real implications for software design. It means that a programming language should, above all, be malleable. A programming language is for thinking of programs, not for expressing programs you’ve already thought of. It should be a pencil, not a pen. Static typing would be a fine idea if people actually did write programs the way they taught me to in college. But that’s not how any of the hackers I know write programs. We need a language that lets us scribble and smudge and smear, not a language where you have to sit with a teacup of types balanced on your knee and make polite conversation with a strict old aunt of a compiler.

Make sure to read the whole thing.

I’ve disagreed with Graham on a number of things over the years. In particular his assertion that “good hackers prefer Python to Java” (note that ‘hacker’ in this context refers to a software artisan, not the caricature you see on TV), but as I get older… well I’m appreciating Python more and more and my realize just how right he probably is.

Programming (software artisan/craftsman?) Links for October 7th, 2009 – Don’t be an engineer – be a craftsman, be an artisan

Andrew Hunt and David Thomas: The Art in Computer Programming

Design By Gravity: Don’t be a Coder, Engineer, or Developer: be a Software Artisan!

Linux Journal: Everything Your Professor Failed to Tell You About Functional Programming

Peter Seibel: Unit testing in Coders at Work

Programming Links for October 4th, 2009

Coworker and friend Kevin Fitzpatrick’s “The Masterless Apprenticeship” new series on learning and craftmanship. Absolutely fantastic.

rallydev: Jean Tabaka: Escalation is Killing Agile – Can We Please Stop It?

plope.com: You’re the Smartest Guy In The Room.. but please, try to restrain yourself.

org-babel: executable source code blocks in org-mode – I need to try this – it sounds amazing.

Links on thinking, parenting, teaching, creating for October 4th, 2009

Boston.com: Inside the Baby Mind:

One of the most surprising implications of this new research concerns baby consciousness, or what babies actually experience as they interact with the outside world. While scientists and doctors have traditionally assumed that babies are much less conscious than adults – this is why, until the 1970s, many infants underwent surgery without anesthesia – that view is being overturned. Gopnik argues that, in many respects, babies are more conscious than adults. She compares the experience of being a baby with that of watching a riveting movie, or being a tourist in a foreign city, where even the most mundane activities seem new and exciting. “For a baby, every day is like going to Paris for the first time,” Gopnik says. “Just go for a walk with a 2-year-old. You’ll quickly realize that they’re seeing things you don’t even notice.”

Boston.com: Thinking literally: The surprising ways that metaphors shape your world:

Metaphors aren’t just how we talk and write, they’re how we think. At some level, we actually do seem to understand temperament as a form of temperature, and we expect people’s personalities to behave accordingly. What’s more, without our body’s instinctive sense for temperature–or position, texture, size, shape, or weight–abstract concepts like kindness and power, difficulty and purpose, and intimacy and importance would simply not make any sense to us.

NYTimes: Can the Right Kinds of Play Teach Self-Control? :

In the end, the most lasting effect of the Tools of the Mind studies may be to challenge some of our basic ideas about the boundary between work and play. Today, play is seen by most teachers and education scholars as a break from hard work or a reward for positive behaviors, not a place to work on cognitive skills. But in Tools of the Mind classrooms, that distinction disappears: work looks a lot like play, and play is treated more like work. When I asked Duckworth about this, she said it went to the heart of what was new and potentially important about the program. “We often think about play as relaxing and doing what you want to do,” she explained. “Maybe it’s an American thing: We work really hard, and then we go on vacation and have fun. But in fact, very few truly pleasurable moments come from complete hedonism. What Tools does — and maybe what we all need to do — is to blur the line a bit between what is work and what is play. Just because something is effortful and difficult and involves some amount of constraint doesn’t mean it can’t be fun.”

NurtureShock: Are Time-outs for Tots Conditional Love? :

The real problem with Kohn’s articles is that, already, there is a lot of confusion about when to praise, and his pieces just add to it. They give the impression that parents must make a choice between unconditional love on the one side, and praise and punishment on the other. And that’s just not true.

Most research finds that kids need rules and structure – not as a form of prison, but a scaffold of autonomy they can build on.

Oberlin College professor Nancy Darling has surveyed thousands of adolescents, in the US, the Philippines, and Chile. She’s found that when parents set no rules, or when parents fail to enforce rules they’ve set, it sends a message that parents simply don’t care about their kids’ well-being or the kids’ actions. The adolescents think the parents just can’t be bothered by their transgressions.

While combining praise with a statement of love is problematic. For example, “You’re such a smart girl, and I love you,” sends a child a message that if she’s no longer is smart, the love will stop. But there’s nothing in the research that says parents should stop saying, “I love you.” It just that they should stop combining displays of love and affection and praise for achievement. Keep them separate. Once again, this isn’t an either or situation.

Stanford professor Carol Dweck’s perspective on praise is that – when we praise or punish – we need to make it clear that we are responding to what a child does, not who they are. We shouldn’t say “Bad Boy!” when the kid breaks a vase, and we shouldn’t say “Boy Genius!” when he made a vase in art class. Both “Bad Boy” and “Boy Genius” are wild overstatements of what we really think.

Instead, we can simply say, “You know you shouldn’t play ball in the house,” and “You worked really hard on that vase, didn’t you?” those are fine.

Beyond the moment, they teach children that we pay attention to what they are doing, and that we can be trusted to give them a fair and accurate response when they need it. Lessons we want them to remember when they’re 17, and they have a broken heart or just had a fender-bender.

As I said earlier, we just don’t have to make a choice between praise, punishment and unconditional love. That’s just a false choice.