The Codewright's Tale is a place to discuss the craft of software development. The focus is more about the human aspect of programming, there are plenty of sites which post the latest and greatest tools or blocks of 'how to' code. All the tools, methodologies, or languages in the world won't help if the primary obstacle of quality software is human nature and not a human invention.

Contributors

Friday, May 22, 2009

I know one of the first questions is, 'What is a Codewright?' Outside of a programmers editor by the same name, which I've never used, I think of a codewright in the same vein as you might a Shipwright. He is the guy who is in charge of designing a ship and making sure that its construction will be of such a standard that the finished product, a ship, will fulfill the purposes for which it was designed.

The next question is "How does one become a Codewright?" Is it an innate talent improved through practice, or a skill that can be taught? Considering the anecdotes of the genius programmer who never studied as a programmer, let's examine the subject of education; Joel On Software covered the ivory tower with this post about The Perils of Java Schools.

Even though I'm a Java advocate, it might surprise some of you that I actually agree with the premise of Joel's article. I disagree somewhat about Java's role in the problem. The way I see it, Java is a symptom of the disease that the 'JavaSchools' have contracted. I saw the same dichotomy when I was in college which was well before Java was released. Some instructors saw their role as people who prepared you for a job working in the corporate IT shop doing COBOL.

Lucky for us we had a few professors who wanted to make sure we had a grounding in theory and knew how to think through a problem. One in particular would do things like give you a quick hour on the syntax of Ada and the compiler with which he was currently toying and then give you a program and the assignment was to find and fix a bug he would describe. In another class, operating systems, we wrote a program to simulate different task schedulers complete with keeping track of a simulated memory heap and managing the task list like an old time-share system (waiting on i/o, actively running, ready to run, etc.) so we could see the effect of different scheduling policies and their implementation challenges. He wanted us to think, not just regurgitate a pre-digested answer.

This description of a 'JavaSchool' just indicates a school that thinks of itself as a trade-school. While his separation of M.I.T and Duke is appropriate, the Java tag is just unfortunate. There are several other candidate languages that could have had the same fate befall them. This trade-school behavior is evidence that industry doesn't want good programmers, it wants lots and lots of o.k. ones. It isn't much different from the Industrial Revolution changing our high schools during the previous turn of the century from places of learning (anyone learn Latin in H.S. anymore?) to an 'education' factory churning out workers with a mass-produced education that was just enough to get them one of the mass-produced jobs at the burgeoning new mass-production factories.

A Codewright is someone who drives his or her own education and does not rely on someone else to make such decisions. A Codewright is someone who enjoys learning because it means they can do what they love that much better. A Codewright transcends education and explores the world of truth for no other reason than, "because it's there"; anticipating that tidbit of knowledge that will provide the spark of inspiration for the next masterwork, knowing it to be just around the next corner or over the next hill. A Codewright keeps their feet on the ground, always the pragmatist; and their eyes on the stars, always the dreamer.