What is our job, and how can we do it better?
For a while, I've wanted to write a blog about what it means to be a craftsman. However, I've always had trouble fitting some of the things I wanted to talk about under the Craftsmanship umbrella.
This brings us to SCNA (Software Craftsmanship North America). SCNA is a language-agnostic conference focusing on the topic of software craftsmanship. While I was at SCNA, I heard a lot of great talks that seemed to fall under a different category than Craftsmanship, which was just about doing a good job. Here's a brief summary with my ideas tossed in.
Cynicism is laziness. Chad Fowler at SCNA
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. Your customers have hired you to help them solve problems they have. This does not mean you should compromise on any of your disciplines. Also mentioned at SCNA was sometimes the best help you can give is to not write any code. Even suggesting pre-existing software might be the correct solution to a given problem.
Practice & Self-Education
Performance artists spend most of their time practicing.
Software Developers spend most of their time performing. paraphrased from David Chelimsky
Practicing is definitely linked with caring. You practice because you care about doing a good job. You practice because you care about improving yourself. And, hopefully, you practice because you enjoy it. We've all heard the phrase "be the worst." It doesn't matter how much experience you have, even a master can learn from an apprentice.
Things you should be doing:
- Code Retreats
- Reading blogs
- Reading books
- Learning a new language
When it comes down to it, writing code is what we do, but it's only a small part of what we do. Why do we write clean code or care about code quality? There are many reasons, including low bug count, readability, maintainability, etc. Writing clean code for the sake of having clean code is not one of those reasons.
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.
To summarize, one needs to:
- maintain a positive attitude
- care about all aspects of the system they are building
- care about their customers
Doing these things will go a long way towards improving yourself as a craftsman, regardless of title.