This chapter, “Software Development,” follows the chapters on “Coding in C#” and “Programming,” respectively. The scope of concerns expands in each of these three chapters: how to construct a code artifact in isolation, to how to construct a code artifact as part of a system of code artifacts, and here, in a sense, when and how and perhaps even why to build systems.
The subject matter in this chapter is the process and values of software development, not the techniques and technologies. Even when it talks about techniques and technologies, it is using them only as vehicles to talk about processes and values. This chapter is probably best understood as a series of essays. As such, there are no exercises: what this course is teaching here is not skills that you can practice and master. What it is teaching is more like aspirations, and circumstances, and looking at situations in different ways. There is still homework, though: the homework is that you think about what is presented here. Read, and ruminate. The reading can be done in an afternoon. The ruminating, if I have done my job, will take the rest of your life. It has certainly taken the majority of mine.
The “intellectually broadening” aspect of travel to other countries and cultures is not that one gets exposed to lots of different details of how various peoples live. That’s just facts; you can read a cultural ethnography book and get the same facts with a lot less time, trouble, and expense. The advantage of travel is that one becomes experienced in observing how systems of behavior interact with and affect one another — and when one returns home, one suddenly sees how one’s own culture is constructed of systems of behavior that interact with and affect one another. It is that skill which in invaluable, and the goal of the exercise.
When we are presented with a new view or a new opinion, we always have choices. We can search for places where the view describes what can be seen, and places where the opinion is obviously true; or we can search for places where the view does not describe what can be seen, and places where the opinion is obviously false. This is a choice we always have, and a choice we always make, whether we recognize it or not. (This is essentially a restatement of Miller’s Law.) Even the most banal statement is true from some viewpoint and false from some other viewpoint: “the sky is blue” is obviously true; but not in orbit, or on the moon, or even at night; only infrequently to the incarcerated; and never to the blind. The question is not actually about truth or falsehood, because reality is so much richer than our naïve notions of absolute truth or falsehood: almost all statements are true, and almost all statements are false. When presented with a novel, sincerely held view, whether the view is accurate is not the question: you can take it as a given, the view is accurate. The question is whether we are dealing with a location from which the view is accurate; or even whether we want to be capable of dealing with a location from which the view is accurate.
Sometimes, the answer is no: we have never been in a place where the view is accurate, we will never be in such a place, and we have no interest in being capable of being in such a place. And that is neither honor nor shame, neither humility nor arrogance, neither strength nor weakness. It is merely a fact. But it is perhaps wise to remember that not dealing with a locale in reality, and not being capable of dealing with a locale in reality, is terribly inconvenient when one does not have the opportunity of not needing to deal with the locale in reality. Not everyone is so privileged.
There is really nothing you must be and there is nothing you must do. There is really nothing you must have and nothing you must know. However, it helps to understand that fire burns, and when it rains, the earth gets wet.
The chapter Coding in C# was about building code as part of a program. The chapter Programming was about building programs as part of an environment. And the chapter Software Development, this chapter, is about building environments as part of a community.
If you find yourself rejecting something here, that is fine. I am neither God nor prophet: I am just an observer, making observations and from those drawing conclusions. Disagree with, or even wholesale reject, the conclusions if you wish. Just do so thoughtfully, not reflexively.