View Single Post
  #13   Spotlight this post!  
Unread 01-26-2011, 02:44 PM
Jared Russell's Avatar
Jared Russell Jared Russell is offline
Taking a year (mostly) off
FRC #0254 (The Cheesy Poofs), FRC #0341 (Miss Daisy)
Team Role: Engineer
 
Join Date: Nov 2002
Rookie Year: 2001
Location: San Francisco, CA
Posts: 3,069
Jared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond repute
Re: Bad Programming Practices

I subscribe to the philosophy that there is no single way to write good code - it all depends on how it will be used, re-used, modified, etc. Writing code for an F-22 is fundamentally different than writing code for a FIRST robot.

When writing code for FRC, I put tremendous emphasis on techniques that enable very quick code changes with a minimum of potential for new mistakes. In between two matches, if I need to disable a mechanism or alter autonomous mode, etc., I want to be able to get in there, find the part I care about, and have tools in place that will prevent me from doing something foolish.

To this end...

Giving good, informative names to all classes, methods, and variables goes a long way towards making code self-documenting.

Bad:
double Gyro.get();

Better:
double Gyro.getAngle();

Better yet:
double Gyro.getHeadingInDegrees;

When you read code written in this way, you don't need nearly as many comments to explain what you are doing, and it becomes quite obvious when you make a mistake. (Obviously, there's a fine line between being descriptive and re-writing the entire function in its name)

On top of that, I always name variables according to scope...

m_memberVariable (starts with m_ to indicate it is a member of a class)
k_someConstant (starts with k_ to indicate it is a constant)
l_someLocalVariable (starts with l_ to indicate it is local in scope to a given block)
g_someGlobal (starts with g_ to indicate it is a global variable)
a_someArgument (starts with a_ to indicate it is an argument to the current method)

There are likewise certain design patterns I like a lot, and others that I eschew in FIRST simply because they are less intuitive or compact.
Reply With Quote