I am a programmer. I wouldn’t consider myself to be a “master” programmer, but I think I write pretty decent stuff when I get going. I also occasionally cut corners and write quick and dirty “hacks” to solve a particular problem or to test something out. I sometimes feel guilty about this, but then I read findings from interviews with master programmers, and I discover that they often write ugly but useful hacks as well…
I used to be a procedural programmer, with languages like C and Pascal. Now I’m migrating to object oriented languages. And I stumbled across a little article about the the bad side of code folding.
Code folding is a really simple concept with a mysterious sounding name. Basically, it allows you to group a section of code together in an editor and “collapse” it, hiding all the nasty bits. I discovered code folding in the Visual Studio .Net integrated development environment…
…where it is used without user intervention every time you write an application with a user interface. Microsoft automatically uses code folding to hide a bunch of control objects so they don’t clutter things up.
If you read that article in the link above, you would have heard the opinion of Matt Stephens, a fellow about which I know pretty much nothing. But his article is well thought out, and made me stop and think about what I use code folding for.
The answer is I use it almost not at all. But I do find it very handy when I do use it. Not because I write huge, “one method to rule them all” code segments. Personally I kind of like a method to never be much longer than one screen full…and no, I don’t have a 72″ portrait monitor with 1024×48000 resolution.
Instead, I use code folding or “collapsing” as a way to focus my attention. I might have 10 methods in an object. Nine of them are debugged and working happily, and the tenth is causing me some grief. I create a code section to conceal the “functioning” code and hide it so that I don’t get distracted by the other bits.
Does this make me a bad programmer? I don’t think so. I know I’m still pretty early in the migration from procedural thinking to object oriented thinking: I still struggle at times to break old habits, and I need some peer code reviews to continue my improvement. But I don’t see code folding as a sin. Like a lot of things, including object oriented development itself, it has its good and bad points.
In fact, one could argue that code folding is a true and proper outgrowth of object oriented programming. One of the key values to OO, or so I’ve always thought, is the promotion of idea of objects being “black boxes”. That is, I really shouldn’t be spending my effort as a programmer figuring out how an existing object works: I should know what properties it has, and what methods I can invoke or inherit and what they do, and that it works. Beyond that, I should just use the dang thing.
Extending this to its logical extreme, within my own objects I shouldn’t be continuously re-figuring out methods that I’ve already written. If they work, and I know what purpose they have and what properties or parameters they manipulate/use, then I shouldn’t be messing with them. I should be working on one code element at a time, refining each in term in isolation from the next. Code folding can, used properly, encourage that kind of thinking.
I suppose I could be missing something here in my thinking. And I’m open to contradictory opinion. But I’ll continue to use code folding from time to time, and I don’t plan on feeling guilty about it.