Fundamental Coding Issues 2008-02-19 22:44:00 Everybody loves a short summary, one that can easily compress a complicated idea into a simple concept. They are hard to find, but always very useful.In software development there are many complex issues surrounding our computer language 'code' and the various conventions we use for programming. There are lots of different attributes that a program can have beyond just working, but ultimately there are only a few things that easily define a great program. With that in mind, I find the following summary quite reasonable:The secret to great code is to get the smallest program possible without resorting to being clever, while generalizing to as large a problem space as possible given the time constraints. Make all of the broad strokes explicit, while making all of the details implicit. Get th Read more: Fundamental
, Coding
, Issues
The Power of Expression 2008-02-10 21:37:00 My writing archives are littered with half-completed, mostly dead posts on the nature of expression. More so than any other topic, this one has defeated any attempt to roll up my ideas into a coherent, finished piece of work.Writing needs to come together in a way that leads the reader on a journey, while leaving them satisfied at the end. Half-thoughts, while interesting, leave the reader longing for more. Sort of like an appetizer with no main course. You won't starve to death, but your still very hungry afterwards.To get around that, this post is -- I guess -- a series of appetizers; hopefully enough to fulfil. If you don't like one, perhaps some of the following might be more satisfying. If you keep reading long enough, hopefully you'll be satiated. If your still hungry at the end, sta
The Age of Clarity 2008-02-02 11:56:00 "What do we really know? Hmmm." I pondered as we walked.I was out with the dog the other night. The quiet tranquil nature of empty suburban streets is a great place for deep thinking. The cold chill of winter keeps one from wandering too far off topic while wandering aimlessly in the streets. Dogs make wonderful intellectual companions for these types of journeys because they don't interrupt with too many questions. They are very good listeners.I was pondering information quality, and I foolishly started to wonder about how much inaccurate information was choking up my memory. Certainly, there are lots of spin, lies, half-truths, deceptions and other stuff built up over the years from less than quality sources like politics, news and TV. Somethings in my memory are just easy simplification Read more: Clarity
Essential Development Problems 2008-01-22 21:19:00 Over the years I've worked in many development sites, read tonnes of code and heard way too many horror stories about development projects gone bad. While software development is inherently risky, many of the problems I have witnessed were self-inflicted, thus fixable. It is an odd historically-driven aspect of programming, our need to make the work more difficult than necessary.I wasn't focusing on writing yet another list of things to simplify development, but in my other writings the same issues kept bubbling up over and over again. Sometimes even when you explicitly see something, it is not easy to put a name or description to it. In this case, as I explored more elementary topics I kept getting these 'pieces' floating to the top, but not fitting into the other works. Once I collected Read more: Essential
, Development
The Construction of Primitives 2008-01-14 22:46:00 There is still plenty of 'meat' left in exploring fundamental development issues. We could spend time on the more interesting higher-order topics, but when the discussions get gummed up in problems with basic terminology, understanding or process we don't make significant headway. As a young industry, Computer Science has established some level of competency, but many of our key assumptions are still open for discussion. We have built on our knowledge, but our results are clearly not reliable.Software developers, it seems, have all gone off to their own little worlds, a situation which is quite possibly analogous to mathematics prior to Sir. Issac Newton managing to enforce notational standards. With everyone running around using their own unique terms and definitions, we are getting a lot Read more: Construction
Abstraction and Encapsulation 2008-01-06 12:52:00 Some of our most fundamental programming concepts are steeped in confusion. Because software development is such a young discipline, we often question and redefine many of the basic definitions to suit our personal understandings.While this is a problem, it is also to be expected. Terms and definitions are the building blocks on which we build all of the higher concepts, if these are weak or incorrect they can lead us in circles long before we realize it is too late. Thinking in depth about their inner meanings is important. Older disciplines have no doubt survived much more discourse on their base topics; we are really only at the beginning of this stage. Other than what is mathematically rigorous, we should absolutely question our assumptions, it is the only way for us to expose our bias Read more: Abstraction
A Silly Little Storm 2007-12-26 15:53:00 This posting looks into a small and common problem, but one that frequently causes larger issues. Even the tiniest of problems, which starts as a small rock in a stream disrupts behind it an increasingly larger segment of water. This type of turbulence exceeds the sum of itself as more rocks combine together to cause larger and larger ripples. With enough rocks you get rapids; the whole being much larger than its pieces.Sometimes when I am commenting on other writer's blog entries I just want to end my comment with a little bit of shameless self-promotion. Usually my name and then a link back to my blog to make it easy for readers to stop by and visit me:Paul. are my favorite last two lines in most comments.Of course, to avoid mistyping the URL I generally go back to my blog's root page, h Read more: Silly
, Storm
Testing for Battleships 2008-03-21 16:50:00 In one of my earlier blog entries, I casually suggested that testing was like playing a game of 'Battleship'. It is an odd analogy, but as I pondered it a bit more I realized that there were interesting parallels between playing Battleship and testing, many that were worth exploring.Often, it is exactly our change of perspective that allows us to see things with fresh eyes; even if it is tired and well-tread ground.AN INITIAL DEFINITIONFor those of you not entirely familiar with it, Battleship was a popular kid's game, a long long time ago, in a galaxy far far away. Wikipedia has a great description of it:%28game%29The version I grew up with was non-electronic and consisted of two plastic cases each containing a couple of grids, the 'ships' and a huge number of little red and white pegs.In Read more: Testing
Controlling Development Chaos 2008-03-30 22:10:00 A lot of software developers really hate any comparison or analogy that involves building construction. I think the primary reason behind this dislike is the sense that construction workers are viewed as passive players in the whole development project, in the same way that factory workers are seen as nearly-mindless cogs in a production line.There is some reason to fear this type of comparison, intellectual pursuits are clearly not the same as physical. The rules are different. For whatever reason, we have a great deal of knowledge on how to refine and maximize the efforts of factory workers, but virtually none on how to do the same for white-collar jobs. Trying to take what we've learned from the physical and apply it to intellectual hasn't been particularly effective.Still, in this post Read more: Controlling
, Development
, Chaos
The Essence of Analysis 2008-04-13 16:30:00 In any venture if you do not start off on the right foot, your chances of success are dramatically diminished. So it is easy to understand that the farther away we are from our initial target, the longer it will take to get there. If we have no idea where we are even going, then we won't even know if we have ever arrived. Some things, just are.Many software developers understand that design is a highly critical part of getting the software right. You can't just magically iterate your way into the perfect system without first understanding what the system is supposed to do. Formal, or on the back of napkin, developers need a target to work towards. However, it is often the case that even the best of all designs still cannot help if the even earlier stages are fatal. Design is not actually t Read more: Essence
, Analysis
Creatively Speaking 2008-04-23 22:22:00 Somewhere in my youth, I came into possession of a very simplified model of the human brain. I'm not sure from where, it was so long ago its roots were lost in time.The idea is simple, the brain consist of three, and only three things. First is memory. We can memorize stuff. By that, I mean that we take some fact, associate it with a number of keys and then, on demand, we can return the fact as needed. It is committed to memory. It becomes a piece of knowledge, something we know. I'll quietly ignore long-term vs. short-term memory for this model.The next thing is understanding. That is, we understand something. For this, I mean that we can take some set of facts that we learned, and at the appropriate time use them for some piece of higher reasoning. If you've just memorized a fact, that's Read more: Speaking
Software Blueprints 2008-05-02 19:46:00 Over at www.hans-eric.com -- Hans-Eric Grönlund's most excellent blog -- an interesting discussion occurred in the comments for the blog entry "is agile only for the elites?":-agile-only-for-elites/I got into a conversation with Jack Repenning; we were talking about the ideas of Alan Cooper. The focus arrived at the point where Jack questioned whether or not blueprints for software can even exist. It is a 'big' topic, one that does not easily fit into a comment box, but one that I have given a great deal of consideration to lately. I thought, given the timing, that I could elaborate on my thoughts in a full blown blog entry. The crux of the matter is whether or not there exists some way to create a blueprint from which a complex piece of software can be developed. To an outsider, that may Read more: Software
Hard Code'n 2008-05-14 23:01:00 I think that at this stage in our industry, it is important to differentiate between several key, yet very different parts of the software development process. Specifically, I see a huge difference between "software development", which includes design, development and deployment of software, and "programming", which is focused on completing a set of instructions in a computer language to implement
Jurassic Office Park 2008-05-20 23:25:00 As I carefully peer around the giant palm leaf -- a great fan spreading out before me -- I keep my eyes facing forward. I am desperately in search of any sudden movement. The lush green vegetation closes in, providing some feeling of safety, if not also hiding my bulk from any unwanted observers. In front, the watering hole opens like a chunk torn from the forest canopy.I am -- in this daydream -- Read more: Jurassic
The Essence of Software 2008-05-31 21:50:00 A few posts ago, I did some wishful thinking about the possible value of having blueprints for software projects:-blueprints.htmlOne of my readers John Siegrist, became enchanted by the idea and suggested that we start a project to look further into it. To this end, we've put together a wiki at Wetpaint for anyone who is interested to pop by and give us a hand: NOTE of CAUTION: many discussions in Read more: Essence
, Software
Structuring Noun & Verb Data 2008-06-10 22:07:00 The "secret" to programming is to boil down 14 million lines of code into a few hundred thousand that do exactly the same thing, without introducing a significant amount of "extra" complexity by having to deal with a nasty configuration. Less is more. But only if you haven't just traded it off for some other type of complexity. Less must really be less.Some code is clearly redundant, so eliminatin
Readability 2008-06-26 22:27:00 You don't have to hang around many large software development projects before you realize that most of them are crippled by their own code base.The biggest symptom is how widely the differences in coding style are from the various collaborators.All programmers have different styles and preferences, but teams that are not trying to work together lead to heavily siloed code; code that is redundant a
Resources for Software Development 2008-07-16 16:25:00 We, the software development community, are often the source of our own really bad software. Sure, you can blame the managers or you can rail against the underlying technologies, but in the end the most frequent, most destructive problems come from the attitudes of the people involved in the development.Software
, as in any endeavor that involves constructing physical things, requires a great deal Read more: Resources
, Development
, Software Development
|