Patrick Smacchia [MVP C#]

Sponsors

The Lounge

Advertisement

Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
Rules for Spartan Programmers

A month ago, Jeff Atwood (Coding Horror) wrote a blog post about Spartan Programming. The idea is to tend toward minimalism coding style: Minimalism isn't always the right choice, but it's rarely the wrong choice.

 

I figured out that many of Spartan Programming tenets can be expressed as CQL rules:

 

Horizontal complexity. The depth of nesting of control structures.

WARN IF Count > 0 IN SELECT METHODS WHERE ILNestingDepth > 3

 

Vertical complexity. The number of lines or length of code (all routines, and and preferably larger software units such as classes fit within a single screen).

WARN IF Count > 0 IN SELECT METHODS WHERE NbLinesOfCode > 15

 

Parameters. The number of parameters to a routine or a generic structure.

WARN IF Count > 0 IN SELECT METHODS WHERE NbParameters > 4

 

Variables

WARN IF Count > 0 IN SELECT METHODS WHERE NbVariables > 4

 

Conditionals. The number of if and multiple branch switch statements.

WARN IF Count > 0 IN SELECT METHODS WHERE CyclomaticComplexity > 7

 

 

Minimize visibility of identifiers (what I call Optimal Encapsulation).

WARN IF Count > 0 IN SELECT METHODS WHERE CouldBePrivate

This applies also to types and fields and to any non-public visibility level, for example.

WARN IF Count > 0 IN SELECT TYPES WHERE CouldBeInternal 

 

 

Minimize variability of variables. Strive to make fields read-only, methods pure and types immutable (see also Immutable types: understand their benefits and use them).


Immutables fields that could be declared with the readonly keyword. 

WARN IF Count > 0 IN SELECT FIELDS WHERE 
IsImmutable AND !IsInitOnly 

 

Immutable types that could be tagged with a ImmutableAttribute.

WARN IF Count > 0 IN SELECT TYPES WHERE IsImmutable AND
!HasAttribute "OPTIONAL:NDepend.CQL.ImmutableAttribute"

 

Pure methods that could be tagged with a PureAttribute. 

WARN IF Count > 0 IN SELECT METHODS WHERE   
  
!HasAttribute "OPTIONAL:NDepend.CQL.PureAttribute" AND 
  
!ChangesObjectState AND !ChangesTypeState AND
  
NbLinesOfCode > 0

 

 

Use annotations or restrictions whenever possible: Types that could be declared as sealed (see also Rambling on the sealed keyword)

WARN IF Count > 0 IN SELECT TYPES WHERE 
IsClass AND NbChildren == 0 AND !IsSealed

Posted Tue, Aug 5 2008 5:00 PM by Patrick Smacchia

[Advertisement]

Comments

DotNetKicks.com wrote rules for spartan programmers : Using NDepend Query Techniques
on Tue, Aug 5 2008 12:23 PM

You've been kicked (a good thing) - Trackback from DotNetKicks.com

Damon Wilder Carr wrote re: Rules for Spartan Programmers
on Tue, Aug 5 2008 12:25 PM

Fantastic content... Thanks!

Damon

Dew Drop - August 6, 2008 | Alvin Ashcraft's Morning Dew wrote Dew Drop - August 6, 2008 | Alvin Ashcraft's Morning Dew
on Wed, Aug 6 2008 8:20 AM

Pingback from  Dew Drop - August 6, 2008 | Alvin Ashcraft's Morning Dew

Jon Rowett wrote re: Rules for Spartan Programmers
on Wed, Aug 6 2008 8:26 AM

this is a bit like the list of "dos and don'ts for wives" in Marge Simpson's housekeeping magzine - they're all "don'ts".

Weekly Links #13 | GrantPalin.com wrote Weekly Links #13 | GrantPalin.com
on Mon, Aug 11 2008 12:04 AM

Pingback from  Weekly Links #13 | GrantPalin.com

Kartones Blog wrote Review: NDepend
on Sat, Sep 27 2008 5:36 AM

For this application review, I've chosen a proof of concept I built last year, a small dungeon generator

Add a Comment

(required)  
(optional)
(required)  
Remember Me?