Software Craftsmanship Was Once Again the Main Topic at SCNA 2011
The Software Craftsmanship North America (SCNA) 2011 had a number of renown speakers including Corey Haines, Chad Fowlers, Uncle Bob, Michael Feathers, and others. We have created a digest of some of the ideas presented at the conference and shared by participants.
SCNA was organized by 8th Light and Optiva with InfoQ as media sponsor, and is a conference dedicated to promoting craftsmanship values among developers. The following is a digest of some of the attendees’ blog posts in an attempt to spread some of the ideas shared at SCNA for the benefit of those who might have gone to the conference but could not.
Zachary Spencer has created detailed mind maps of several talks containing the essential ideas shared by the respective speakers. Following are excerpts:
Can you learn C++ in 24 hours? Maybe. Can you learn software development in 24 hours? No
People who have enough skill to write a bit of code being put into startups or being brought in and expected to perform at a high level.
Software development is HARD. I've been doing it for years and I still make a ton of mistakes.
TDD: If it's faster to just rewrite the app, do you need to do TDD? TDD is a companion that helps me write good code.
I like well crafted software because it brings value to the business. It is fitted to a purpose. It is not over engineered. It lasts a long time.
Businesses hire us to help them. We want to be partners. We want to be more than contractors. We want to understand the business.
What practices could constitute a list of required practices for modern software development?
- Giving a shit
- Actually really giving a shit
- Knowing the first thing about coding
- See number 1
You make stuff, you write software. Really you're serving others. We are all in a service job. Everyone in the WORLD. We make experiences.
Be humble. Be transparent. Consistency. Gratitude.
Spencer also mapped Michael Feathers’ session.
“Cynicism is laziness.” - Chad Fowler
In short: stay positive! Not only is cynicism laziness, but it's also alienating. You should never speak negatively about your clients. Negativity breeds negativity and is disrespectful. No matter how smart you are, you are still replaceable. There is always someone as smart or smarter than you. If people don't enjoy working with you, they will find someone else.
“Your UI is your application.” - Billy Whited
It's important to take care in all aspects of your work. You should care to write maintainable code. You should care enough to test your code. This care should even be extended to how your user interacts with your application. If your application looks bad, your users will think your application is bad, regardless of the features it has.
“You should always says yes if someone asks you for help.” - Uncle Bob
Most importantly, you should care about your customers' problems. Essentially, your job is to sustainably and continuously deliver working software.
“Every line of code is a liability.” - Corey Haines
Code is just a means to an end. The user of the system doesn't directly care about your code. They just care that the app works. Most of the code you write is deleted, especially if you are taking the time to practice and refactor your code. Another reason to not be too attached to your code is because it will change. Instead of getting upset when someone makes changes to your code, try to learn from what they did.
Corey Haines started the conference off a bit worried. Are we repeating the mistakes of the ’90? Are “learn to code in 24 hour” mentalities populating startups with unprepared developers writing tomorrows legacy code? He suggests reading Learn to Program in 10 Years instead. Businesses are desperate for people who can code. If they were desperate for people who can build houses, would we see a glut of houses falling apart two years from now? He then pointed out a few rays of hope GirlDevelopIt and Craftsmanship Academy; prime examples of the professional community reaching out to beginners and peers to help guide them past the mistakes of the past. We bring value to the businesses that hire us, part of that value is sustainability.
Johnson also mentioned Michael Feathers’ talk on functional concepts:
Michael Feathers, a personal hero, followed up by challenging us to invest in learning functional concepts. He describes functional techniques as a DSL for a wider domain and it is time to integrate these techniques into a shared understanding in our programming languages. Traditional OOP developers initially have a “WTF is that?” reaction to functional techniques, proclaiming a lack of clarity. But Mr. Feathers points out that Arabic is gibberish to him, but millions of people communicate effectively every day using it. This reminded me of Rich Hickey‘s Simple Made Easy presentation at Strange Loop this year. Something that is unfamiliar to you does not make that thing complex. It may be very simple, just not easy from your current context. The line between readable and “clever” is relative to shared vocabulary. Here is a nice mind map of the talk by Chris Powers.
I think he should have titled it “Suitability vs Capability” but it was a brilliant talk and the one I considered the best of the conference. Here’s my best attempt at paraphrasing it:
Programming Language and Technology go through a constant ebb and flow of expanding and contracting over time. During expansion, these solutions are “Capability” solutions; that is, they are capable of solving problems but they are not yet suitable. Eventually there is a contraction that happens and “Suitability” solutions emerge.
Java first emerged as a Capability Solution during an expansion in the post C/C++ era. Time passed and a contraction occurred in which Java matured into a Suitability Solution for developing software.
Mosher also wrote down the most interesting ideas he took from Zed Shaw’s session:
It was probably surprising to people in the software craftsmanship movement that Zed Shaw was invited to speak, but his talk on “Propaganda, Indoctrination, Fanbois, and Education” was the most thought provoking talk at SCNA 2011. Here’s my translation:
Anyone who tells you that they have found the “one true way” to build software is a con-artist trying to sell you something.
If you aren’t writing code, you aren’t a programmer. Programmers build software, everything else is just marketing spin.
Indoctrination happens when you’re convinced to think something is the only way. Education gives you options and lets you make choices. Don’t be indoctrinated, be educated.
Somebody at the conference asked him:
“So what do you think about Unit Testing and Continuous Integration and all that stuff then?”
His response was pretty down to earth:
I’ve worked for big consulting companies doing every one of those things in the past. I’ve written tests, done TDD, used pivotal tracker blah-de-bloo or whatever you’re using. Those things aren’t bad but anyone who is trying to tell you those things are the “one true way” to build software is a con-artist trying to sell you something. If you believe that stuff you’ve got a mind-virus. You don’t want a mind-virus.
Regarding Shaw’s “anti-Agile” stance, it may be that there is no single “true way” that all software developers need to follow in order to produce quality software, but there are ways which are certainly better than others.