Page 1 of 2 12 LastLast
Results 1 to 10 of 20

Thread: Article: Why Code Readability Matters

  1. #1
    Co-Founder / PGD Elder WILL's Avatar
    Join Date
    Apr 2003
    Location
    Canada
    Posts
    6,108
    Blog Entries
    25

    Lightbulb Article: Why Code Readability Matters

    Have a read of this one guys. Since I work in another field (Avionics) that requires me to do more paperwork than actual hands-on work I can relate to this person's perspective on the matter. But I wonder if his approach is absolutely necessary the way he goes about it. What do you guys think?

    http://blog.ashodnakashian.com/2011/...e-readability/
    Jason McMillen
    Pascal Game Development
    Co-Founder





  2. #2
    I think the biggest thing I've learned in terms of readability is variable names. Having 1-3 character variable names that are used in multiple procedures or functions can get very confusing on first glance. I'm not quite sure about the multiple variable declarations in one line... it's readable enough if the variables have proper names IMO.

  3. #3
    Variable names (and ofcourse class/procedure/function names) are IMHO the most important thing to do right, because this is the only text you usually read apart from the comments. Using a load of comments to compensate for bad naming is just bad.

    Some things I also find important are the more subtle aspects of a coding style. For example, I find it annoying when someone writes his code using capitals everywhere (Especially for the reserved words: IF, BEGIN, ELSE). Because capitals are very attention-hungry, I tend to use them as least as possible. I think JAVA has pretty good conventions regarding case. They use lower camel case for variable/method names and upper camel case for classnames. Finally they use capitals for constants (were compound words are separated by underscores). I find this convention very nice, especially because allmost everyone uses it. I wish there was such a clear consensus within the pascal-world (Allthough I DO love the T, P and F prefixes, there is still quite a bit of freedom in using different case )
    Coders rule nr 1: Face ur bugz.. dont cage them with code, kill'em with ur cursor.

  4. #4
    Egh, the only time I ever completely capitalize something is for a constant.

  5. #5
    Co-Founder / PGD Elder WILL's Avatar
    Join Date
    Apr 2003
    Location
    Canada
    Posts
    6,108
    Blog Entries
    25
    I find most will just copy-cat from the conventions used in examples. Makes sense. Just going with what another programmer of that language/script is doing since it seems to work.

    For example, I was originally taught to use i, j and k consecutively in my for loops. What sense does this make in practice? I have no idea, I just use them instead of say... a, b and c for example. Though this doesn't become a readability issue unless I'm trying to use the darn thing globally or something weird like that.
    Jason McMillen
    Pascal Game Development
    Co-Founder





  6. #6
    PGDCE Developer
    Join Date
    Jun 2010
    Location
    California, USA
    Posts
    25
    I understand the i for iteration or for index, I always that the j was just because it looked similar to i

    I stand on the more structured your code is the better off you are in the future. I look back at some of my code from 5 years ago and think to myself "Dang i sucked back then." mainly because I can hardly read the code. It is all cryptic and never used any standards for scope named variables or any prefix for the variable type.
    var
    strName : String;
    intCurIndex : Integer;
    chrDelimiter : Char;

    and etc. this is the convention I use for prefix, and if it is a class variable it is prefixed with an underscore _chrDelimiter or _blnRunning

    it just helps me to know what to expect the value should be. after all, it is all preference if you are working on your project "el solo" The compiler doesn't care as long as you haven't made a grave mistake and called the wrong function or have declared something in local scope that overrides global scope and have forgotten to reference the global scope with Self.VarName

    Well that is just my 2 cents.

    Oh and indentation. that is a big one for me. I must always indent consistently.

  7. #7
    Nice article. It has a lot of good advices.

    I'm sorry but I use capitals for keywords and data types (not defined by user, just the ones defined by the language). I found it's easer to read for me even if I'm using syntax highlighting. You can locate almost any language structure at a glance. For everything else (variables, classes, procedures, etc) I use CamelCase. Often I use upper-case for constants too.

    About spaces, I put one before "(" always, and also after ",". See:

    Code:
      ThisProcedureHasSomeParameters(Parameter1, Parameter2, LastOne);
    
      ThisProcedureHasSomeParameters (Parameter1, Parameter2, LastOne);

    Also, I separate procedure implementations by three empty lines. This way is easer to find where it starts and ends. I use indentation, of course (2 spaces each level, 1 TAB for 8 spaces).

    And I never, never, NEVER use hungarian notation. That's true annoying. What if you change the type of a largely used variable? BTW, the proposal of the variable itself should be enough to know the type it is (i.e. a variable named "FileName" will never be of type "INTEGER", will it?)

    And use long names (very long sometimes) for everything except few short ones as "Ndx", "Cnt" and few more (never one leter though), and a lot of comments.

    Quote Originally Posted by gasdeveloper View Post
    (...) and if it is a class variable it is prefixed with an underscore _chrDelimiter or _blnRunning

    it just helps me to know what to expect the value should be. after all, it is all preference if you are working on your project "el solo" The compiler doesn't care as long as you haven't made a grave mistake and called the wrong function or have declared something in local scope that overrides global scope and have forgotten to reference the global scope with Self.VarName
    In this case I use the "Borland convention" and use "f" (i.e. SELF.fVarName), but only in variables not in properties. I read it in a paper published by Borland itself.
    Last edited by Ñuño Martínez; 08-06-2011 at 09:39 AM.
    No signature provided yet.

  8. #8
    Co-Founder / PGD Elder WILL's Avatar
    Join Date
    Apr 2003
    Location
    Canada
    Posts
    6,108
    Blog Entries
    25
    Quote Originally Posted by gasdeveloper View Post
    I stand on the more structured your code is the better off you are in the future. I look back at some of my code from 5 years ago and think to myself "Dang i sucked back then."
    I think everyone goes through this. Each program or game project is a learning experience I feel.
    Jason McMillen
    Pascal Game Development
    Co-Founder





  9. #9
    PGDCE Developer
    Join Date
    Jun 2010
    Location
    California, USA
    Posts
    25
    Quote Originally Posted by ?ëu?±o Mart??nez View Post
    And I never, never, NEVER use hungarian notation. That's true annoying. What if you change the type of a largely used variable? BTW, the proposal of the variable itself should be enough to know the type it is (i.e. a variable named "FileName" will never be of type "INTEGER", will it?)
    In code I have written no, FileName will never be Integer however it might be something like TBESEString or widestring, or any other format that it could fit. Also, I have used many libraries where a variable or type is actually an int or cardinal or a word but named as though it contained data and not an index for the data.

    And for changing the type of a largely used variable. Well My standard is I don't use variables outside of one unit if possible. So, normally I only have to change its name in a single file. And I love GREP and Search and Replace.

    Its not any standard notation I follow. I just use the structure that I find easiest to read. As I said, I don't like the way I coded 5 years ago. It's possible I would like the way I code now, in 5 years. It all comes down to preferences, there is no de facto standard. And even if there is, who cares. Follow the "Shop Standards" and if you are so lucky maybe you are making the "Shop Standards" wherever you are working.

    I really think it is a waste of time when you get with other programmers and no one codes alike. I would rather hate the formatting of the code and have to write code like that, then to have 5 different formatting standards on one project.

  10. #10
    PGD Staff / News Reporter phibermon's Avatar
    Join Date
    Sep 2009
    Location
    England
    Posts
    524
    I tend to vary my notation depending on context for example, for a large number of type declerations that get used often, I'll shorten the terms but also include information pertaining to that type ie :

    SInt8 - Signed 8bit Integer
    UInt8 - Unsigned 8bit Integer etc
    SInt16
    UInt16
    SInt32
    UInt32
    Float32
    Float64

    So this is similar to a lot of C stuff, OpenGL etc. I don't use classic hungarian notation simply because it's an old technique that isn't needed with modern code editors.

    For class definitions and methods I tend to use the most descriptive terms (in CamelCase) and group together classes by name whenever it seems appropriate :

    TJSpatialRegion
    TJSpatialEntity
    TJSpatialEntityController
    TJSpatialEntityControllerAnnotation

    I always use the prefix 'A' on variables in method declerations so there can be no confusion between private variables (F). class Properties exposed to end-users use no prefix.

    FVelocityVector : TJVec3;
    FSpatialController : TJSpatialController;

    procedure TJSpatialEntity.SetVelocityVector(AVelocityVector : TJVec3);
    procedure TJSpatialEntity.SetSpatialController(AspatialContr oller : TJSpatialController);
    procedure TJSpatialRegion.AddSpatialEntity(ASpatialEntity : TJSpatialEntity);

    property VelocityVector : TVec3 read GetVelocityVector write SetVelocityVector;

    I think that naming conventions are important for either :

    A) Adoption Speed - If you intend your code to be accessed by a large number of people, you'll want it to be as descriptive as possible.

    B) Coding Speed - If it's just you or a small team and the source is closed then use whatever shorthand is appropriate in order to save on time writing/reading the code.

    Very large code-bases require all coders to use the same system for notation if only to avoid adding additional complexity into already complex systems.


    P.S I would not recommend using layout rules with the intention of making the language syntax easier to read! that's why we have syntax highlighters etc. If you're doing a whole bunch of keystrokes to bring code-completion in line with your own layout, you're just wasting time. Use the layout defined in your editors snippets. Questions of notation should be about understanding what your code does not how the language works.
    Last edited by phibermon; 21-06-2011 at 09:14 PM.
    When the moon hits your eye like a big pizza pie - that's an extinction level impact event.

Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Comodo SSL