Introduction to Software as a Craft
I have been thinking about software as a craft for some months now. Having gotten a new job working as a quality assurance cum process architect since October, and being surrounded by really cool software devs of varying experience, talent, and skills, I am thinking about how can one achieve the mindset of a master crafts-person in the realm of software development?
This involves many aspects, from being able to think about and approach problems, to interacting with users, managers, other devs, and so on, to learning the environments one needs to work in, to building the flows to make work go smoothly, to acquiring the skills to ensure high quality output, to just about everything else in the near and far vicinity of putting out a useful web site.
I’ve been writing in my wiki for years now gathering and curating information an knowledge about specific tools, implementations, snippets of code, how-toes, and so on regarding technology, consulting, management, and other arenas, yet I haven’t really been writing for anyone else to read and consume.
I’d like to start a blog/website/thingie that would help others acquire the necessary skills, theory and attitude of developing really great software.
What Do I Want?
(Note: these questions were from a previous version of this; I think I have some answers now, which I’m providing with these.)
There’s nothing that specifically stops me from writing about this stuff, yet something is. I keep thinking about the delivery vehicle for all this stuff I’m thinking about writing.
- Do I want to use wordpress?
- Do I want to use pmwiki?
- Do I want to write my own system?
I keep think I might, but it’s getting in the way.
- Do I want to make a compiled static site?
Yes. I’ve settled on using Github pages, and Jekyll.
- How can I update it easily?
Updating is as easy as editing a markdown entry and pushing to github!
- How can I get the smoothest flow from thought to published page possible?
I think this is really it. Writing in Markdown in Emacs is just dead easy.
- How should I design the presentation of it?
I went with a minimal twitter bootstrap implementation. Keeping the structure as simple as possible.
- How do I provide a means to find the content on the site?
Not approached this quite yet; there is no built in search. We’ll see.
- How do I organize the information?
Still up in the air. Mostly by categories and tags, I think.
- Where do I host it?
- What should I call it?
Just using the
- If I don’t self-host, what service should I use?
And these are merely self-interested technical questions.
What about the readers and contributors?
Who am I doing this for? And what do I hope others get from this? and why?
What is the purpose of the web site?
I love software development and all it’s trappings so much; it is the basis for much of my enjoyment in working, and sharing that with others has always been something I’ve enjoyed.
I love talking about it; I love helping people improve in it; I love learning more about it myself.
I have a lot of experience in it and have learned a lot about it. I am used to being asked questions about it and providing answers, insight, and directions for people to learn more, and providing others with the interest and spirit to want to learn more and do better.
I have a lot to say, I think – I don’t know if that will actually turn out to be true, but at this end of the pipe, I feel as though I do.
So, to me, the purpose is to provide a means to express my ideas in a way that others can pick them up and take them forward.
I don’t think I necessarily have anything new or profound to say that hasn’t already been said, but I feel the need to add my voice.
What do I want people to get from the site?
I want people coming to my site to gain understanding of what it means to treat software development as a craft, which is more than a means to solve a specific problem: it is a means to provide delight and capability to people as we become more and more dependent on software-driven appliances and tools around us, as the computer slips into the background more and more and the software largely becomes invisible, to not frustrate and annoy users.
I fully admit that such a vision might not be a good thing, ultimately. That increasing people’s reliance on computers and software might remove them from something more fundamental in their interaction with other people, with nature, and their world. Yet it is a trend I see happening regardless of anything I might want to do to stop it. So instead I would like to teach the people who write the software, who make such a world come to fruition, to do it in such a way that does not remove people’s humanity from them, nor remove their connections with each other and the world, but enhances it, improves it, makes it grow.
Who am I writing for?
I am not going to specifically write for people who are not software developers, yet there are many allied areas that would probably benefit, including managers, purchasers, vendors, supporters and users. Consumers benefit when they understand how the producers work. Both can influence the other. But even with that, the focus will primarily be on how software developers can learn to be craftspeople, with a sense of inherent pride, dignity and understanding of the role they provide in society.