TechRepublic : A ZDNet Tech Community

bITs and blogs

Tags: None
Report as spam Discussion  -  Post 144 of 386
Elegance
<img src="http://i.i.com.com/cnwk.1d/i/z/200510/soapbox_420_2.gif" alt="Soapbox Graphic" />

<div style="text-align: justify">

elegant (adj.): characterized by a lack of the gratuitous



"There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies."


- C.A.R. Hoare



There's a long tradition of referring to the elegance of a system. In the IT industry, this tends most commonly to be applied to source code, and it is generally accepted that the more elegant it is, the better. Elegance is differentiated from other superficially good things in a number of ways, including the common assumption that elegance goes deeper, while these other "good" things are only good within certain constraints.



For instance, "clever" source code is good for its cleverness, but can be bad for maintainability -- mostly because clever code is often difficult to understand. Cleverness also falls short because of a simple principle first articulated in an email signature of Brian Kernighan's: "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."



Another example is object oriented programming. Probably ninety-some percent of the competent programmers out there are thoroughly sold on the concept that OOP is the holy grail of programming techniques, and any further advances in programming techniques are just fine-tuning OOP techniques. I think this common perception is an outgrowth of twenty years of corporate influence on the evolution of programming, where large numbers of mediocre programmers end up handling the same codebase over the course of its lifespan. Two orthogonal systems of minimizing the damage a mediocre programmer can do to a project have been introduced to programming practice with a great deal of success: version control and object oriented programming.



Object oriented programming isn't the holy grail, though. It doesn't in any way aid with the creation of truly excellent code. It simply aids in the avoidance of truly atrocious code, and even then only in an aggregate view of a complex project. When you start drilling down to the individual bits and pieces of a complex software project that has passed through the hands of a great many mediocre programmers, you'll start seeing atrocious bits of code that limp along just well enough to keep working, as long as they're strictly encapsulated and separated from the rest of the codebase (except for its API, of course). Encapsulation and modularity are good things in general, but they aren't immutable axioms of goodness.



One of the trade-offs with object oriented programming is that it encourages repetitive action and tedious effort in writing code. Have a look at some "enterprise" class Java source code some time and start paying attention to how much of it is actual program logic, as contrasted with how much of it is scaffolding imposed on the source by Java's object-orientedness. In fact, if you really want to understand what's going on with object oriented programming and other superficially "good" things in programming, I recommend you start comparing how easily one can produce short, elegant code in various languages, and pay attention to why one language produces a shorter, more elegant solution than another. I think you'll find some surprising facts come to light.



Of course, it's true that brevity is not strictly synonymous with elegance. In fact, Perl golf -- the practice of passing code around between programmers to see how short a given algorithm can be made -- is a thoroughly gratuitous sport, concerned little, if at all, with elegance. In pursuing elegance, it is more important to be concise than brief, though. In a general sense, however, brevity of code does account for a decent quick and dirty measure of the potential elegance that can be eked out of a programming language, with length measured in number of distinct elements rather than the number of bytes of code: don't confuse the number of keystrokes in a variable assignment with the syntactic elements required to accomplish a variable assignment. Armed with that definition of the term "shorter", you should be able to make some meaningful comparisons of the elegance possible when working with various programming languages.



In particular, you might notice that without using any object oriented techniques, Common Lisp and Perl produce much shorter examples of certain algorithms than Java and C++. Even if you cut out all the object oriented scaffolding in the Java and C++ examples, you still typically end up with a lot more code, as measured in discrete syntactic elements. Things like lexical variables and anonymous blocks (or, roughly equivalently, lambdas) tend to make for much simpler, more elegant solutions than imposing rigorous OOP structure. In fact, the more you examine the matter and make such comparisons, the more I suspect you'll come to realize that OOP itself has nothing to do with producing elegance, and everything to do with limiting opportunity for mediocre programmers to produce cruft and introduce bugs.



Elegance is about the gratuitous -- or, rather, avoiding the gratuitous. It's true that sometimes people disagree about which of two or more things is the "most elegant", but this arises from underlying assumptions rather than any true subjectivity of the principle. Each of us has a set of operating assumptions, some greater (meaning: bloated and cumbersome) than others. Where something conforms to one's expectations and assumptions, it is seen to not lack in elegance in that manner. Someone that does not have the same underlying assumptions might see the same thing as atrociously inelegant, but having a different set of assumptions would overlook similarly subjective quirks in another example that are, to the first person, inelegant.



Specifically, someone with assumptions derived from long indoctrination by the OOP crowd might overlook all the scaffolding imposed by a language like Java for using OOP techniques, and see something that takes up 50 lines of program logic and 150 lines of OOP scaffolding as elegant. Meanwhile, a long-time Perl hacker might take one look at that and see it as the inelegant monstrosity it is. This Perl hacker, on the other hand, might write 30 lines of procedural code to perform the same task, and the Java programmer might look at it and wonder why it isn't more modular, simplifying the program logic itself and making the whole thing more scalable for future code maintenance, thus rightly seeing the inelegance of the procedural hack the Perl programmer threw together.



This doesn't make elegance subjective: it only makes our individual perspectives on it subjective. If we can discard the assumptions of both the Java developer and the Perl hacker, and recognize the underlying principles of source code design that contributed elegance to each solution, we could probably turn the same set of solutions into something much, much simpler and more elegant, in terms of its program logic and cruft-weight. Unfortunately, languages like Java are not really suited to that sort of optimization for elegance: you really need a language more dynamic than that, such as Perl, Python, Ruby, or basically any Lisp. The more a language lets you define the language you're using on the fly, the more likely it is to allow an excellent programmer to produce elegance, which should really be the end goal of writing code, generally speaking: elegant solutions.



All really useful principles of programming, or systems design in general, seem to be practical, case-specific extrapolations from my fundamental definition of elegance. In short, they all seem to boil down to this one instruction: If it's gratuitous, find a way to get rid of it. For example, consider the Pragmatic Programmers' DRY principle -- Don't Repeat Yourself. In short, it is better to avoid repetitions of data and program logic in your code. Any time you find yourself having to repeat or rephrase something in your code, reinject data into your data model from wherever you have it stored, and so on, you're screwing up. Ask yourself whether DRY is really useful by reducing repetition in and of itself, or by reducing gratuitous repetition. After all, recursion and looping behavior might also fall within the definition of "repeat yourself", but I don't think anyone (sane) would ever recommend eliminating all loops and recursion from programs. Sometimes, you just need your program to perform a given set of instructions on a long list of slightly different items. Often, loops make source code more elegant.



This ties in very nicely with the more general, more philosophical concept of aesthetics, and that provides some understanding of why it is possible to look at source code and, without yet consciously knowing what's wrong with it, have an immediate intuitive reaction to its inelegance. That's not to say that something can't be aesthetically pleasing without being perfect in its elegance, of course. Instead, the ability to recognize some characteristics of elegance is what leads to an aesthetically pleasing perception of the subject.



Elegance is not about aesthetics. Rather, aesthetics is about elegance. Ostentation lacks aesthetic appeal, and is inelegant, because it's gratuitous. Simplicity is often not elegant either: if something is too simple, it is nonfunctional, and fails to achieve its aim. What makes something beautiful is not strictly simplicity, symmetry, complexity, or any other such characteristic. Instead, what makes something beautiful is that its characteristics are all appropriate to its purpose. Complexity can be exceedingly beautiful, as long as it's not gratuitous complexity, which is just chaos and confusion. Likewise, simplicity can be exceedingly beautiful, but if you make something gratuitously simple, you get dullness rather than beauty. Gratuitous simplicity is merely boring.



When you're writing source code, make it elegant. When you've written something, go back and look it over, and for each and every thing you've done you should take a moment to question whether it's really necessary, or even functionally desirable, to have it in there. You probably won't get it perfect, but you can at least make it awfully pretty, which is a good thing as long as you do so by addressing elegance rather than trying to disguise the inelegance of your code by conforming to formatting conventions without rethinking your program logic at all. Refactoring, in the end, is really just about looking with fresh eyes for any opportunities to introduce elegance by removing the gratuitous.



If you're unlucky, you may discover that making your code significantly more elegant might require rewriting it in a different language.



The following definitions are from Princeton WordNet:



elegant (adj.): of seemingly effortless beauty in form or proportion



gratuitous (adj.): unnecessary and unwarranted





<div style="margin-left: 4em; margin-right: 4em; background: #cccccc; padding: 3px;">
Want to see who's next On the Soapbox? Find out in the Blog Roundup newsletter. Use this link to automatically subscribe and have it delivered directly to your Inbox every Wednesday.


Subscribe Automatically
Posted: 01/01/2006 @ 03:40 PM (PST)  (edited 01/04/2006 @ 10:11 AM (PST))
avatar
apotheon     9
Job Role: IT Consultant
Location: Fort Collins, Colorado
Member since: 08/15/2003

View Profile  | Send Message

Print/View all Posts | Subscribe to this Thread 

bITs and blogsapotheon | 05/16/2005 @ 12:50 PM (PDT)
on blogs and ITapotheon | 05/16/2005 @ 01:14 PM (PDT)
on blogs and ITOz_Media | 05/16/2005 @ 04:05 PM (PDT)
on blogs and ITBob Starr | 05/20/2005 @ 03:42 PM (PDT)
on blogs and ITAV . | 05/20/2005 @ 05:19 PM (PDT)
on blogs and ITDC_GUY | 05/24/2005 @ 08:16 AM (PDT)
on blogs and ITAV . | 05/25/2005 @ 05:56 PM (PDT)
on blogs and ITjmgarvin | 07/19/2005 @ 04:45 PM (PDT)
wanted posterapotheon | 05/16/2005 @ 04:29 PM (PDT)
wanted posterapotheon | 05/17/2005 @ 09:32 AM (PDT)
Destroying Tokyoapotheon | 05/16/2005 @ 07:32 PM (PDT)
Washington outlaws Windowsapotheon | 05/17/2005 @ 05:43 PM (PDT)
Washington outlaws WindowsDC_GUY | 05/24/2005 @ 07:56 AM (PDT)
Now Playing: Slack Nerdeth - MMORPGsapotheon | 05/19/2005 @ 02:11 PM (PDT)
Now Playing: Slack Nerdeth - MMORPGsJay Garmon | 05/20/2005 @ 10:02 AM (PDT)
posting commentsapotheon | 05/24/2005 @ 01:52 AM (PDT)
What's INTJ, and what has it got to do with IT?apotheon | 05/24/2005 @ 02:25 AM (PDT)
Whatjmgarvin | 05/27/2005 @ 04:17 PM (PDT)
What's INTJ, and what has it got to do with IT?ruisert@... | 10/28/2005 @ 12:49 PM (PDT)
Is anyone buying this?apotheon | 05/24/2005 @ 10:57 PM (PDT)
Is anyone buying this?jmgarvin | 05/27/2005 @ 06:57 PM (PDT)
from the beginningapotheon | 05/27/2005 @ 08:21 PM (PDT)
hacker (n.): one who hacksapotheon | 05/28/2005 @ 03:33 AM (PDT)
hacker (n.): one who hacksJay Garmon | 05/31/2005 @ 02:08 PM (PDT)
hacker (n.): one who hacksjmgarvin | 05/31/2005 @ 06:35 PM (PDT)
living historyapotheon | 05/31/2005 @ 11:41 AM (PDT)
living historyJay Garmon | 05/31/2005 @ 01:49 PM (PDT)
T3H: programming for fun and profitapotheon | 06/03/2005 @ 07:10 AM (PDT)
T3H: programming for fun and profitjmgarvin | 06/03/2005 @ 09:45 AM (PDT)
T3H: programming for fun and profitagilbertson@... | 06/04/2005 @ 12:20 PM (PDT)
Understanding OSes: Bootingapotheon | 06/04/2005 @ 06:47 AM (PDT)
Understanding OSes: Bootingjmgarvin | 06/07/2005 @ 02:02 PM (PDT)
Wikimedia downtimeapotheon | 06/06/2005 @ 10:09 AM (PDT)
Wikimedia downtimeJay Garmon | 06/06/2005 @ 10:59 AM (PDT)
quotes from IRCapotheon | 06/06/2005 @ 02:23 PM (PDT)
quotes from IRCjmgarvin | 06/06/2005 @ 07:25 PM (PDT)
cheatsheetsapotheon | 07/06/2005 @ 03:02 PM (PDT)
cheatsheetsjmgarvin | 07/06/2005 @ 10:04 PM (PDT)
two minor epiphaniesapotheon | 07/12/2005 @ 12:18 AM (PDT)
two minor epiphaniesapotheon | 10/06/2006 @ 04:39 PM (PDT)
the life of a professional enthusiastapotheon | 07/13/2005 @ 12:26 AM (PDT)
the life of a professional enthusiastapotheon | 10/06/2006 @ 04:47 PM (PDT)
Understanding OSes: Kernel Modularityapotheon | 07/14/2005 @ 03:10 AM (PDT)
Understanding OSes: Kernel Modularityjmgarvin | 07/14/2005 @ 07:07 PM (PDT)
Linux: Introductionapotheon | 07/19/2005 @ 05:45 AM (PDT)
Linux: IntroductionPalmetto | 07/26/2005 @ 02:43 PM (PDT)
Linux: Introductionp_jones79@... | 07/31/2005 @ 03:52 PM (PDT)
The Future of ITapotheon | 07/19/2005 @ 05:31 PM (PDT)
The Future of ITjmgarvin | 07/19/2005 @ 09:54 PM (PDT)
The Future of ITJay Garmon | 07/20/2005 @ 06:37 AM (PDT)
following upapotheon | 07/21/2005 @ 02:44 PM (PDT)
following upapotheon | 10/06/2006 @ 05:11 PM (PDT)
Linux: To Migrate or Not To Migrateapotheon | 08/03/2005 @ 07:31 PM (PDT)
Linux: To Migrate or Not To MigrateSchuylkill | 08/05/2005 @ 07:49 AM (PDT)
Linux: To Migrate or Not To Migratepweegar@... | 08/05/2005 @ 08:03 AM (PDT)
Linux: To Migrate or Not To Migratearchie_cunanan@... | 08/12/2005 @ 10:00 PM (PDT)
Linux: To Migrate or Not To MigrateDeadly Ernest | 08/16/2005 @ 10:36 AM (PDT)
more about commentsapotheon | 08/03/2005 @ 07:43 PM (PDT)
more about commentsBeth Blakely | 08/08/2005 @ 10:55 AM (PDT)
more about commentsrtmjarhear@... | 08/19/2005 @ 01:16 PM (PDT)
Understanding OSes: Table of Contentsapotheon | 08/03/2005 @ 08:10 PM (PDT)
And now, here's Chad with the GNUs.apotheon | 08/03/2005 @ 10:15 PM (PDT)
And now, here's Chad with the GNUs.apotheon | 10/06/2006 @ 05:41 PM (PDT)
Language vs. Programmer vs. Toolapotheon | 08/06/2005 @ 02:57 AM (PDT)
Language vs. Programmer vs. ToolJaqui | 08/06/2005 @ 10:06 AM (PDT)
Language vs. Programmer vs. ToolGunnar Klevedal | 08/26/2005 @ 02:57 AM (PDT)
Language vs. Programmer vs. ToolGunnar Klevedal | 08/31/2005 @ 05:12 AM (PDT)
this crazy lifeapotheon | 08/08/2005 @ 11:05 AM (PDT)
this crazy lifeJay Garmon | 08/08/2005 @ 02:05 PM (PDT)
Daily Linux Lessons: aliasapotheon | 09/11/2005 @ 12:23 AM (PDT)
Daily Linux Lessons: aliasapotheon | 10/06/2006 @ 06:47 PM (PDT)
Daily Linux Lessons: fetchmailapotheon | 09/14/2005 @ 12:50 PM (PDT)
Daily Linux Lessons: fetchmailjmgarvin | 09/14/2005 @ 07:54 PM (PDT)
Daily Linux Lesson: bash basicsapotheon | 09/15/2005 @ 10:27 PM (PDT)
Daily Linux Lesson: bash basicspaul@... | 09/19/2006 @ 08:11 AM (PDT)
Linux Lesson: quittingapotheon | 09/17/2005 @ 02:00 PM (PDT)
Linux Lesson: quittingapotheon | 10/06/2006 @ 06:48 PM (PDT)
Another day, another serving of FUD.apotheon | 09/21/2005 @ 10:38 PM (PDT)
Another day, another serving of FUD.apotheon | 10/06/2006 @ 06:51 PM (PDT)
Open source software is doomed!apotheon | 09/26/2005 @ 03:09 PM (PDT)
Open source software is doomed!denwasson@... | 09/28/2005 @ 12:20 PM (PDT)
Open source software is doomed!anacompsolutions@... | 09/29/2005 @ 03:48 PM (PDT)
Open source software is doomed!Jack | 09/30/2005 @ 05:30 PM (PDT)
Open source software is doomed!ke_xtian@... | 11/07/2005 @ 08:04 AM (PST)
Open source software is doomed!jdhannah | 11/07/2005 @ 08:14 AM (PST)
Open source software is doomed!apotheon | 11/07/2005 @ 01:06 PM (PST)
Open source software is doomed!ecacofonix@... | 07/28/2006 @ 12:07 PM (PDT)
failing to understand how it worksapotheon | 09/30/2005 @ 08:27 AM (PDT)
failing to understand how it worksjmgarvin | 10/04/2005 @ 01:28 PM (PDT)
failing to understand how it worksjmgarvin | 10/04/2005 @ 03:53 PM (PDT)
failing to understand how it worksStubby | 10/05/2005 @ 02:16 AM (PDT)
failing to understand how it worksjdclyde | 10/05/2005 @ 01:14 PM (PDT)
failing to understand how it worksrah3000 | 10/05/2005 @ 07:29 PM (PDT)
failing to understand how it workslastchip | 10/10/2005 @ 01:50 PM (PDT)
failing to understand how it worksS.Howard-Sarin | 10/13/2005 @ 10:00 AM (PDT)
failing to understand how it worksjmgarvin | 10/18/2005 @ 05:33 PM (PDT)
a new programming paradigmapotheon | 10/12/2005 @ 10:05 AM (PDT)
a new programming paradigmWayne M. | 10/12/2005 @ 10:54 AM (PDT)
a new programming paradigmdavidmoses@... | 10/13/2005 @ 06:22 AM (PDT)
a new programming paradigmsbockelman@... | 10/13/2005 @ 07:25 AM (PDT)
a new programming paradigmapotheon | 10/13/2005 @ 09:01 AM (PDT)
a new programming paradigmjoe@... | 10/13/2005 @ 10:38 AM (PDT)
a new programming paradigmCheval | 10/14/2005 @ 02:22 AM (PDT)
a new programming paradigmchristineeve@... | 10/14/2005 @ 02:40 AM (PDT)
a new programming paradigmRoho | 10/19/2005 @ 04:43 AM (PDT)
a new programming paradigminnocent_bystander | 10/19/2005 @ 08:55 AM (PDT)
a new programming paradigmRichard P | 10/19/2005 @ 01:22 PM (PDT)
a new programming paradigminnocent_bystander | 10/19/2005 @ 01:28 PM (PDT)
a new programming paradigmillilli | 11/10/2005 @ 06:38 AM (PST)
A-Fisking We Will Goapotheon | 10/13/2005 @ 12:57 PM (PDT)
A-Fisking We Will Gojmgarvin | 10/18/2005 @ 06:11 PM (PDT)
Happy Halloween: I hope you have a job.apotheon | 10/31/2005 @ 09:41 AM (PST)
Happy Halloween: I hope you have a job.mfurman@... | 11/02/2005 @ 05:29 AM (PST)
Happy Halloween: I hope you have a job.AlanGeek | 11/02/2005 @ 06:43 AM (PST)
Happy Halloween: I hope you have a job.icubub@... | 11/02/2005 @ 08:27 AM (PST)
Happy Halloween: I hope you have a job.lfeldman@... | 11/05/2005 @ 07:49 AM (PST)
Happy Halloween: I hope you have a job.apotheon | 11/05/2005 @ 10:25 AM (PST)
Happy Halloween: I hope you have a job.bartlmay | 11/06/2005 @ 10:01 AM (PST)
Happy Halloween: I hope you have a job.tkirkpat | 11/06/2005 @ 01:17 PM (PST)
Happy Halloween: I hope you have a job.bheite@... | 11/07/2005 @ 01:52 AM (PST)
Happy Halloween: I hope you have a job.ali40961 | 11/07/2005 @ 04:28 AM (PST)
Happy Halloween: I hope you have a job.campbellcanuck | 11/07/2005 @ 08:22 AM (PST)
Happy Halloween: I hope you have a job.leslieevan@... | 11/07/2005 @ 12:01 PM (PST)
Happy Halloween: I hope you have a job.Mark Miller | 11/07/2005 @ 01:00 PM (PST)
Happy Halloween: I hope you have a job.lcave@... | 11/08/2005 @ 06:08 AM (PST)
Happy Halloween: I hope you have a job.Wayne M. | 11/08/2005 @ 06:15 AM (PST)
Happy Halloween: I hope you have a job.SysEngineer | 11/21/2005 @ 05:28 AM (PST)
Web Scripting: Another Lookapotheon | 11/09/2005 @ 03:50 PM (PST)
Web Scripting: Another Lookillilli | 11/09/2005 @ 06:01 PM (PST)
Web Scripting: Another LookJaqui | 11/20/2005 @ 03:01 PM (PST)
Web Scripting: Another Lookapotheon | 11/22/2005 @ 10:18 AM (PST)
a day in the life of the Internet: snortapotheon | 11/30/2005 @ 09:29 AM (PST)
a day in the life of the Internet: snortjmgarvin | 12/02/2005 @ 07:44 PM (PST)
internet vs. Internetapotheon | 12/02/2005 @ 03:13 AM (PST)
internet vs. Internetjmgarvin | 12/02/2005 @ 08:08 PM (PST)
internet vs. Internetapotheon | 12/03/2005 @ 09:47 AM (PST)
internet vs. Internetmaster3bs | 12/07/2005 @ 07:11 AM (PST)
simple iptables managementapotheon | 12/03/2005 @ 01:14 PM (PST)
simple iptables managementjmgarvin | 12/06/2005 @ 06:12 PM (PST)
What the heck are "iptables"?apotheon | 12/07/2005 @ 02:12 PM (PST)
What the heck arenre@... | 12/16/2005 @ 08:43 AM (PST)
What the heck areapotheon | 12/16/2005 @ 01:34 PM (PST)
What the heck aref.groen@... | 12/28/2005 @ 01:07 AM (PST)
Eleganceapotheon | 01/01/2006 @ 03:40 PM (PST)
EleganceSterling "Chip" Camden | 01/03/2006 @ 03:52 PM (PST)
Eleganceapotheon | 01/03/2006 @ 05:37 PM (PST)
Elegancewhollyfool | 01/04/2006 @ 07:56 AM (PST)
EleganceWayne M. | 01/04/2006 @ 10:27 AM (PST)
Elegancekovachevg@... | 01/05/2006 @ 02:15 AM (PST)
Elegancekovachevg@... | 01/05/2006 @ 02:15 AM (PST)
Elegancekovachevg@... | 01/05/2006 @ 02:15 AM (PST)
Elegancekovachevg@... | 01/05/2006 @ 02:15 AM (PST)
Elegancehippikon@... | 01/05/2006 @ 03:26 AM (PST)
Elegancerjacobsen@... | 01/05/2006 @ 06:36 AM (PST)
Elegancegrantwparks | 01/05/2006 @ 07:39 AM (PST)
Eleganceslackola | 01/05/2006 @ 07:42 AM (PST)
Eleganceapotheon | 01/05/2006 @ 10:27 AM (PST)
Elegancegeoff.arnold@... | 01/05/2006 @ 11:35 AM (PST)
Elegancegeoff.arnold@... | 01/05/2006 @ 11:41 AM (PST)
EleganceGoDaves | 01/05/2006 @ 06:30 PM (PST)
EleganceSJennett@... | 01/05/2006 @ 07:39 PM (PST)
Elegancehippikon@... | 01/05/2006 @ 08:06 PM (PST)
Elegancehippikon@... | 01/05/2006 @ 11:51 PM (PST)
Eleganceapotheon | 01/06/2006 @ 03:28 AM (PST)
Elegancerjacobsen@... | 01/06/2006 @ 06:08 AM (PST)
Elegancecletuspaul | 01/06/2006 @ 07:37 AM (PST)
EleganceTony Hopkinson | 01/10/2006 @ 09:14 AM (PST)
Elegancecletuspaul | 01/13/2006 @ 12:53 PM (PST)
EleganceSterling "Chip" Camden | 02/17/2006 @ 02:33 PM (PST)
EleganceSterling "Chip" Camden | 02/17/2006 @ 03:20 PM (PST)
The Sony Fiasco That Wouldn't Dieapotheon | 01/02/2006 @ 01:26 PM (PST)
The Sony Fiasco That Wouldn't Diejmgarvin | 01/07/2006 @ 11:08 AM (PST)
What's important in a computer?apotheon | 01/03/2006 @ 07:58 AM (PST)
What's important in a computer?Sterling "Chip" Camden | 01/03/2006 @ 10:15 AM (PST)
What's important in a computer?lastchip | 01/04/2006 @ 09:30 AM (PST)
What's important in a computer?apotheon | 01/04/2006 @ 01:42 PM (PST)
What's important in a computer?firstaborean | 01/05/2006 @ 02:13 AM (PST)
What's important in a computer?michael_orton@... | 01/05/2006 @ 06:28 AM (PST)
Whatsable.eminence@... | 01/05/2006 @ 09:07 AM (PST)
What's important in a computer?donaldcoe@... | 01/05/2006 @ 12:26 PM (PST)
What's important in a computer?jmgarvin | 01/05/2006 @ 07:25 PM (PST)
What's important in a computer?rpinson@... | 01/07/2006 @ 03:21 PM (PST)
brevity in codeapotheon | 01/04/2006 @ 06:31 AM (PST)
brevity in codeWayne M. | 01/04/2006 @ 12:38 PM (PST)
brevity in codeapotheon | 01/04/2006 @ 01:52 PM (PST)
brevity in codePalmetto | 01/05/2006 @ 07:04 AM (PST)
brevity in codeAurelije@... | 01/05/2006 @ 08:41 AM (PST)
brevity in codeflip-flop-flam | 01/05/2006 @ 02:04 PM (PST)
brevity in codeakhasha | 01/08/2006 @ 10:06 PM (PST)
brevity in codeJaqui | 01/11/2006 @ 06:42 AM (PST)
cuppa joe: Java In Contextapotheon | 01/05/2006 @ 10:11 AM (PST)
cuppa joe: Java In ContextDougOfCBS | 01/11/2006 @ 07:23 AM (PST)
cuppa joe: Java In ContextJaqui | 01/11/2006 @ 12:50 PM (PST)
cuppa joe: Java In ContextDougOfCBS | 01/11/2006 @ 07:47 PM (PST)
cuppa joe: Java In ContextDWRandolph | 01/11/2006 @ 08:45 PM (PST)
cuppa joe: Java In ContextJaqui | 01/16/2006 @ 07:32 AM (PST)
cuppa joe: Java In ContextDougOfCBS | 01/18/2006 @ 07:56 AM (PST)
cuppa joe: Java In Contextapotheon | 01/18/2006 @ 09:22 AM (PST)
cuppa joe: Java In ContextDougOfCBS | 01/19/2006 @ 06:43 AM (PST)
reply intelligently to emailapotheon | 01/19/2006 @ 06:18 AM (PST)
reply intelligently to emailmaster3bs | 01/19/2006 @ 08:23 AM (PST)
reply intelligently to emailJ Alley | 01/19/2006 @ 12:05 PM (PST)
reply intelligently to emailapotheon | 01/19/2006 @ 01:39 PM (PST)
reply intelligently to emailmaster3bs | 01/19/2006 @ 01:47 PM (PST)
reply intelligently to emailtracy_anne | 01/20/2006 @ 01:36 AM (PST)
reply intelligently to emailSterling "Chip" Camden | 01/20/2006 @ 09:14 AM (PST)
reply intelligently to emailPalmetto | 01/24/2006 @ 09:14 AM (PST)
reply intelligently to emailharrypritchard | 01/28/2006 @ 02:10 AM (PST)
reply intelligently to emailanewcoder@... | 01/28/2006 @ 10:02 AM (PST)
reply intelligently to emailGarryAllen | 01/28/2006 @ 02:07 PM (PST)
reply intelligently to emailcwhite5@... | 01/29/2006 @ 03:33 AM (PST)
reply intelligently to emailmckinnej | 01/30/2006 @ 03:54 AM (PST)
reply intelligently to emailLynne's Honey | 01/30/2006 @ 04:12 AM (PST)
reply intelligently to emailetruss@... | 01/30/2006 @ 05:10 AM (PST)
reply intelligently to emailjoe@... | 01/30/2006 @ 05:29 AM (PST)
reply intelligently to emailjoe@... | 01/30/2006 @ 05:45 AM (PST)
reply intelligently to emaildaveknight12 | 01/30/2006 @ 07:57 AM (PST)
reply intelligently to emailctuttle@... | 01/30/2006 @ 07:58 AM (PST)
reply intelligently to emailesa_batm@... | 01/30/2006 @ 08:44 AM (PST)
reply intelligently to emaildarinhamer | 01/30/2006 @ 08:58 AM (PST)
reply intelligently to emailLaFong | 01/30/2006 @ 09:45 AM (PST)
reply intelligently to emailcestover@... | 01/30/2006 @ 10:59 AM (PST)
reply intelligently to emailcestover@... | 01/30/2006 @ 12:54 PM (PST)
reply intelligently to emailfuddleigh | 01/30/2006 @ 04:08 PM (PST)
reply intelligently to emailkmatthia@... | 01/31/2006 @ 07:25 AM (PST)
reply intelligently to emailapotheon | 01/31/2006 @ 10:32 AM (PST)
reply intelligently to emailcestover@... | 01/31/2006 @ 01:03 PM (PST)
reply intelligently to emailrick@... | 02/01/2006 @ 03:16 PM (PST)
reply intelligently to emailapotheon | 02/01/2006 @ 04:25 PM (PST)
reply intelligently to emailbtljooz | 02/01/2006 @ 04:40 PM (PST)
reply intelligently to emailapotheon | 02/01/2006 @ 09:44 PM (PST)
geek valentine's dayapotheon | 01/28/2006 @ 11:11 AM (PST)
geek valentine's daySterling "Chip" Camden | 01/30/2006 @ 11:12 AM (PST)
geek valentine's dayapotheon | 02/07/2006 @ 07:02 PM (PST)
recap for the denseapotheon | 01/29/2006 @ 10:22 AM (PST)
recap for the densePalmetto | 01/30/2006 @ 08:13 AM (PST)
recap for the densecestover@... | 01/30/2006 @ 12:57 PM (PST)
recap for the denseDC Guy | 02/02/2006 @ 06:39 AM (PST)
recap for the denseDennis.Keeling@... | 02/07/2006 @ 03:55 AM (PST)
recap for the denseanewcoder@... | 02/07/2006 @ 04:58 AM (PST)
recap for the densePoconoChuck | 02/07/2006 @ 05:02 AM (PST)
recap for the densebfrericks@... | 02/07/2006 @ 05:29 AM (PST)
recap for the densebfrericks@... | 02/07/2006 @ 05:47 AM (PST)
recap for the denseGSG | 02/07/2006 @ 07:07 AM (PST)
recap for the densejdclyde | 02/07/2006 @ 08:29 AM (PST)
recap for the densekungfu | 02/07/2006 @ 09:39 AM (PST)
recap for the densejcurtis@... | 02/07/2006 @ 10:48 AM (PST)
recap for the densestew@... | 02/07/2006 @ 12:12 PM (PST)
recap for the denseapotheon | 02/07/2006 @ 01:30 PM (PST)
recap for the densePalmetto | 02/08/2006 @ 08:03 AM (PST)
recap for the denseapotheon | 02/08/2006 @ 12:35 PM (PST)
recap for the densePalmetto | 02/09/2006 @ 09:29 AM (PST)
recap for the densePalmetto | 02/09/2006 @ 10:09 AM (PST)
recap for the denseapotheon | 02/09/2006 @ 03:05 PM (PST)
recap for the densePalmetto | 02/10/2006 @ 05:39 AM (PST)
recap for the denseapotheon | 02/10/2006 @ 01:17 PM (PST)
beautiful software update tonightapotheon | 01/31/2006 @ 03:40 AM (PST)
beautiful software update tonightmedullaoblongata | 10/06/2006 @ 07:14 PM (PDT)
interesting newsapotheon | 02/07/2006 @ 06:42 PM (PST)
interesting newsSteven Warren | 02/08/2006 @ 05:22 AM (PST)
interesting newsSterling "Chip" Camden | 02/08/2006 @ 09:42 AM (PST)
business controversy winsapotheon | 02/21/2006 @ 10:36 AM (PST)
business controversy winsmedullaoblongata | 10/06/2006 @ 07:30 PM (PDT)
Core Architectureapotheon | 03/02/2006 @ 06:06 AM (PST)
Core ArchitectureJason Hiner | 03/02/2006 @ 12:25 PM (PST)
Core ArchitectureSterling "Chip" Camden | 03/02/2006 @ 12:38 PM (PST)
Core Architectureapotheon | 03/02/2006 @ 03:48 PM (PST)
IE: Incompatible Environmentapotheon | 03/05/2006 @ 10:59 PM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/08/2006 @ 06:41 AM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/08/2006 @ 10:41 AM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/08/2006 @ 02:41 PM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/08/2006 @ 06:41 PM (PST)
annoying surpriseapotheon | 03/08/2006 @ 08:10 PM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/08/2006 @ 10:41 PM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/09/2006 @ 02:41 AM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/09/2006 @ 06:41 AM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/09/2006 @ 10:41 AM (PST)
I?m cheating on her, I?m afraid.apotheon | 03/09/2006 @ 02:41 PM (PST)
broken RSS aggregationapotheon | 03/09/2006 @ 06:40 PM (PST)
I?m cheating on her, I?m afraid.Justin James | 03/09/2006 @ 09:35 PM (PST)
I don't know what to call this one.apotheon | 03/09/2006 @ 07:01 PM (PST)
Im cheating on her, Im afraid.Justin James | 03/09/2006 @ 08:42 PM (PST)
I don't know what to call this one.apotheon | 03/09/2006 @ 09:50 PM (PST)
I don't know what to call this one.Justin James | 03/10/2006 @ 12:30 PM (PST)
I don't know what to call this one.apotheon | 03/10/2006 @ 02:45 PM (PST)
RSS insanityapotheon | 03/27/2006 @ 07:22 AM (PST)
RSS insanityJay Garmon | 03/27/2006 @ 10:15 AM (PST)
RSS insanityapotheon | 03/27/2006 @ 10:55 AM (PST)
RSS insanitySterling "Chip" Camden | 03/28/2006 @ 01:35 PM (PST)
RSS insanityJustin James | 03/31/2006 @ 06:28 AM (PST)
What the hell?!apotheon | 03/29/2006 @ 09:44 AM (PST)
What the hell?!BFilmFan | 03/29/2006 @ 12:37 PM (PST)
What the hell?!apotheon | 03/29/2006 @ 12:46 PM (PST)
Top 10 TR Newbie Indicatorsapotheon | 03/31/2006 @ 09:53 AM (PST)
Top 10 TR Newbie IndicatorsJay Garmon | 03/31/2006 @ 10:29 AM (PST)
Top 10 TR Newbie Indicatorsapotheon | 03/31/2006 @ 10:47 AM (PST)
Top 10 TR Newbie Indicatorsjmgarvin | 03/31/2006 @ 04:30 PM (PST)
Top 10 TR Newbie IndicatorsAmberHaze | 03/31/2006 @ 05:14 PM (PST)
Top 10 TR Newbie Indicatorsnighthawk808 | 04/01/2006 @ 04:49 PM (PST)
Top 10 TR Newbie IndicatorsJaqui | 04/02/2006 @ 01:31 PM (PDT)
Top 10 TR Newbie IndicatorsBFilmFan | 04/03/2006 @ 08:19 AM (PDT)
Top 10 TR Newbie IndicatorsPalmetto | 04/03/2006 @ 09:13 AM (PDT)
Top 10 TR Newbie IndicatorsJay Garmon | 04/03/2006 @ 01:06 PM (PDT)
Top 10 TR Newbie Indicatorsnighthawk808 | 04/03/2006 @ 08:11 PM (PDT)
Top 10 TR Newbie Indicatorsjdclyde | 04/05/2006 @ 05:51 AM (PDT)
Top 10 TR Newbie Indicatorsapotheon | 04/05/2006 @ 08:21 AM (PDT)
Top 10 TR Newbie Indicatorsvaspersthegrate | 04/08/2006 @ 04:48 AM (PDT)
Top 10 TR Newbie Indicatorsdr.watts@... | 04/08/2006 @ 05:36 AM (PDT)
Top 10 TR Newbie IndicatorsConsultant-1 | 04/08/2006 @ 06:04 AM (PDT)
Top 10 TR Newbie Indicatorspropellerheadus@... | 04/08/2006 @ 06:51 AM (PDT)
Top 10 TR Newbie IndicatorsPScottC | 04/08/2006 @ 07:46 AM (PDT)
Top 10 TR Newbie Indicatorsjdtins | 04/08/2006 @ 08:45 AM (PDT)
Top 10 TR Newbie Indicatorspauloxley1@... | 04/08/2006 @ 08:51 AM (PDT)
Top 10 TR Newbie IndicatorsJCitizen | 04/08/2006 @ 10:27 AM (PDT)
Top 10 TR Newbie Indicatorsapotheon | 04/08/2006 @ 10:48 AM (PDT)
Top 10 TR Newbie Indicatorsjoetechsupport | 04/08/2006 @ 12:17 PM (PDT)
Top 10 TR Newbie Indicatorssammah1@... | 04/08/2006 @ 01:07 PM (PDT)
Top 10 TR Newbie Indicatorsr_jk2@... | 04/08/2006 @ 02:08 PM (PDT)
Top 10 TR Newbie Indicatorsdfirefire | 04/08/2006 @ 02:21 PM (PDT)
Top 10 TR Newbie Indicatorssilversidhe | 04/08/2006 @ 04:13 PM (PDT)
Top 10 TR Newbie IndicatorsAaron A Baker | 04/09/2006 @ 01:27 AM (PDT)
Top 10 TR Newbie IndicatorsnuSkool | 04/09/2006 @ 11:53 AM (PDT)
Top 10 TR Newbie IndicatorsRayJeff | 04/09/2006 @ 05:12 PM (PDT)
Top 10 TR Newbie Indicatorsapotheon | 04/09/2006 @ 05:21 PM (PDT)
Top 10 TR Newbie Indicatorsspazmid@... | 04/09/2006 @ 08:58 PM (PDT)
Top 10 TR Newbie IndicatorsJaqui | 04/10/2006 @ 12:32 AM (PDT)
Top 10 TR Newbie Indicatorsdodgeviper | 04/10/2006 @ 12:59 AM (PDT)
Top 10 TR Newbie Indicatorsdaveo2000 | 04/10/2006 @ 05:47 AM (PDT)
Top 10 TR Newbie Indicatorsjc williams | 04/10/2006 @ 10:43 AM (PDT)
Top 10 TR Newbie Indicatorsvanessaj | 04/10/2006 @ 11:10 AM (PDT)
Top 10 TR Newbie IndicatorsPapaWhiskey | 04/13/2006 @ 09:28 AM (PDT)
Top 10 TR Newbie Indicatorsapotheon | 04/13/2006 @ 03:52 PM (PDT)
Top 10 TR Newbie IndicatorsnuSkool | 04/14/2006 @ 12:21 PM (PDT)
Top 10 TR Newbie IndicatorsNZ_Justice | 04/26/2006 @ 03:11 AM (PDT)
Top 10 TR Newbie Indicatorsapotheon | 04/26/2006 @ 11:05 AM (PDT)
Mezilla Project: What language?apotheon | 05/22/2006 @ 02:00 PM (PDT)
SETI@home needs your help.apotheon | 05/22/2006 @ 02:00 PM (PDT)
Blogging vs. Writing, Login vs. Spamapotheon | 05/22/2006 @ 02:00 PM (PDT)
Dune, Reduxapotheon | 05/22/2006 @ 02:00 PM (PDT)
Prohibition, Intellectual Property, and Encryptionapotheon | 05/22/2006 @ 02:00 PM (PDT)
Sake makes my world go 'round.apotheon | 05/22/2006 @ 02:00 PM (PDT)
Dream a Little Dream (of IP)apotheon | 05/22/2006 @ 02:00 PM (PDT)
a bit about the blog spam situationapotheon | 05/22/2006 @ 02:00 PM (PDT)
a bit about the blog spam situationPalmetto | 05/23/2006 @ 05:37 AM (PDT)
a bit about the blog spam situationapotheon | 05/23/2006 @ 12:19 PM (PDT)
OpenDocument Format (ODF) vs. MS OpenXML Format (OpenXML)apotheon | 05/22/2006 @ 02:00 PM (PDT)
Reply-To Munging Considered "Big Fat Hairy Deal"apotheon | 05/22/2006 @ 02:00 PM (PDT)
glass housesapotheon | 05/22/2006 @ 02:00 PM (PDT)
Gun Control Legislation and the Principle of Inclusionapotheon | 05/22/2006 @ 02:00 PM (PDT)
Signs You're Doing Something Wrong (Part One)apotheon | 05/22/2006 @ 02:00 PM (PDT)
In Pursuit of Grok: Multiple Returnsapotheon | 05/22/2006 @ 06:00 PM (PDT)
In Convenienceapotheon | 05/25/2006 @ 12:05 PM (PDT)
EC Outlaws Software Patents, Sortaapotheon | 05/25/2006 @ 04:05 PM (PDT)
Lexical Closures as Object Modelapotheon | 05/26/2006 @ 04:05 AM (PDT)
Whitespace and Instructional Programming Languagesapotheon | 05/29/2006 @ 12:05 AM (PDT)
Whitespace and Instructional Programming LanguagesJustin James | 05/29/2006 @ 10:04 AM (PDT)
Whitespace and Instructional Programming Languagesapotheon | 05/29/2006 @ 12:38 PM (PDT)
Whitespace and Instructional Programming LanguagesJustin James | 05/29/2006 @ 12:52 PM (PDT)
Whitespace and Instructional Programming Languagesapotheon | 05/29/2006 @ 06:16 PM (PDT)
Speaking of instructional languages. . . .apotheon | 06/01/2006 @ 10:36 AM (PDT)
Speaking of instructional languages. . . .mallary.weintraub@... | 06/01/2006 @ 02:34 PM (PDT)
Sometimes, I just slay me.apotheon | 06/02/2006 @ 06:36 PM (PDT)
the glorious IBM Model M keyboardapotheon | 06/02/2006 @ 06:36 PM (PDT)
The Unspeakableapotheon | 06/09/2006 @ 01:11 PM (PDT)
Golfing between languages: Ruby vs. Perlapotheon | 06/21/2006 @ 03:17 PM (PDT)
They say Windows is getting gooder.apotheon | 06/22/2006 @ 11:35 PM (PDT)
They say Windows is getting gooder.Jaqui | 06/23/2006 @ 06:18 AM (PDT)
Movin' On Up: the necessity of space colonizationapotheon | 06/23/2006 @ 07:35 PM (PDT)
throw two away: programming practice and incompatible APIsapotheon | 06/24/2006 @ 07:35 AM (PDT)
As Old as What You Doapotheon | 06/27/2006 @ 08:32 AM (PDT)
Analyzing Web 2.0 (and the 98% rule)apotheon | 06/27/2006 @ 10:39 PM (PDT)
(My Links) TR: VisualCron, OpenVPN; Offsite: Cygwin, OpenSSHapotheon | 06/28/2006 @ 02:07 AM (PDT)
(My Links) TR: VisualCron, OpenVPN; Offsite: Cygwin, OpenSSHapotheon | 10/06/2006 @ 07:45 PM (PDT)
MS: Freedom is Slavery; FSF: Slavery is Freedomapotheon | 06/28/2006 @ 06:56 PM (PDT)
Sometimes, clicking ads yields good results.apotheon | 06/29/2006 @ 04:42 PM (PDT)
Night of the Living Short Posts II: Test your Web 2.0 mojo.apotheon | 06/29/2006 @ 04:42 PM (PDT)
2006 Tour de [L|F]ranceapotheon | 07/01/2006 @ 04:31 AM (PDT)
2006 Tour de [L|Fr]anceapotheon | 07/01/2006 @ 12:31 PM (PDT)
news from the Tour's Prologue stageapotheon | 07/01/2006 @ 12:31 PM (PDT)
weblog ecosystem mapping and the nature of network identityapotheon | 07/02/2006 @ 12:31 AM (PDT)
Tour stage 1: Hincapie in yellow, Hushovd in ambulanceapotheon | 07/02/2006 @ 12:31 PM (PDT)
Finding Licensesapotheon | 07/02/2006 @ 04:31 PM (PDT)
RMS and the FSF: one map, one flashlight, no ass in sightapotheon | 07/04/2006 @ 12:31 AM (PDT)
An Independence Day Wishapotheon | 07/04/2006 @ 06:22 PM (PDT)
ARChiveapotheon | 07/06/2006 @ 07:38 PM (PDT)
Okay, fine, I'll comment on Rocketboom.apotheon | 07/07/2006 @ 03:38 AM (PDT)

SponsoredWhite Papers, Webcasts, and Downloads

White Papers, Webcasts, and Downloads

Browse by Tag

networking
Popular tags: windows,  software,  hardware,  security,  it management
e-mail
Popular tags: windows,  software,  networking,  security,  hardware
hardware
Popular tags: windows,  software,  networking,  it management,  security
programming
Popular tags: software,  windows,  networking,  hardware,  it management
software
Popular tags: windows,  hardware,  networking,  programming,  it management
windows
Popular tags: software,  networking,  hardware,  security,  it management
linux
Popular tags: software,  windows,  networking,  hardware,  security
it management
Popular tags: networking,  windows,  software,  security,  hardware
career
Popular tags: it management,  networking,  software,  windows,  feedback
security
Popular tags: networking,  windows,  software,  it management,  hardware
off-topic
Popular tags: software,  windows,  hardware,  feedback,  networking
feedback
Popular tags: software,  windows,  hardware,  networking,  it management
project management
Popular tags: it management,  software,  networking,  windows,  programming
IT Professional's Guide to Policies and Procedures, Third Ed
Whether you're creating policies for management, training, personnel, support, privacy, Internet/e-mail usage, security, or inventory, you'll meet the needs of your entire enterprise with this one download!
Buy Now
500 Things Every Technology Professional Needs to Know
Did you know Microsoft's RegClean does not work with XP but you can use shareware to clean your registry? Did you know most wireless access points don't have encryption enabled by default? Did you know there are 500 tidbits of information contained in TechRepublic's 500 Things Every Technology Professional Needs to Know that will help you become a successful IT professional.
Buy Now

SmartPlanet

Click Here