Changes between Version 16 and Version 17 of HowtoGoodProgrammingTechniques


Ignore:
Timestamp:
Feb 25, 2013, 2:48:21 PM (12 years ago)
Author:
Deon Thomas
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowtoGoodProgrammingTechniques

    v16 v17  
    44
    55
    6 = This is a list of some good programming techniques that I learned myself over the time =
     6= This is a list of some programming tips that I found or brainstormed over the time =
    77
    88== Programming Procedure ==
    99
    10 I normally follow a simple steps procedure when coding, to do in every new function:
     10I normally follow a simple steps procedure when coding, that should be done on every new function:
    1111
    12 1. '''Write''': I have the idea in mind, so I need first to make it working, this is normally ugly code but here, the goal is to make it working
    13 1. '''Make it good''': Then I make better the code, including the methodologies of this coding like correct returning values, making a better structure and a better and readable identation
    14 1. '''Understanding''': Good names in variables and functions is maybe the better correct programming tip that you can have, see the section of convention-names, this is a little slow procedure since thinking in the best names to use requires some brainstorming
    15 1. '''Cleanup''': Now is time to remove all the useless parts, the goal is to use the simplest solutions and procedures, they are usually the most appropiate ones, try to reduce the code the maximum possible, this step consist in multiple reading of the function thinking on ''how it works'', you will discover on this step a lot of bugs in your code that you won't imagine that exists.
     121. '''Write''': I have the idea in mind, so I need to make it working first, this is normally ugly code but, the goal is to make it working
     131. '''Make it good''': Then I make the code better, including the methodologies of this coding like correct returning values, making a better structure and readable identation
     141. '''Understanding''': Good variable and function names is maybe the best programming tip that you can have, see the section of convention-names, this is a little slow procedure since thinking of best names to use requires some brainstorming
     151. '''Cleanup''': Now it's time to remove all the useless parts, the goal is to use the simplest solutions and procedures, they are usually the most appropiate ones, try to reduce the code as much as possible, this step consist in multiple reading of the function thinking on ''how it works'', you will discover on this step a lot of bugs in your code that you won't imagine that exists.
    1616
    1717
     
    1919== States ==
    2020
    21 When you programming, you will see that your code needs to be intelligent, he needs to know ''what to do now'' and how to deal with specific situations, this is a lot more easy to reach with states, in short, '''put boolean states everywhere''' they are cheap!, on that way we can always know how to deal in specific situations, but by other side we don't want to have a flooded code or confused states, so we need to think in a good way to organize them in our code, for example, the prefix '''is_''' is one of the best ones to use, just think about the possibilites to have states marked like ''is_sources_get'', ''is_sources_compiled'', ''is_interactive''... So everytime your application does a specific thing, you can set or unset the affected variables to define the state/progress of the application to know what to do next. Your application can also have different ways of work, so you can prefix those states with '''mode_''', see for example ''mode_interactive'' or ''mode_editing'', another useful one is also the '''ignore_''' prefix in order to ignore steps on our application.
     21When you are programming, you will see that your code needs to be intelligent, it needs to know ''what to do now'' and how to deal with specific situations, this is a lot more easy to reach with states, in short, '''put boolean states everywhere''' they are cheap!, this way we can always know how to deal in specific situations, but keep in mind we dont want a bloated code with confusing states, so we need to think of a good way to organize them in our code, for example, the prefix '''is_''' is one of the best ones to use, just think about the possibilites to have states marked like ''is_sources_get'', ''is_sources_compiled'', ''is_interactive''... So everytime your application does a specific thing, you can set or unset the affected variables to define the state/progress of the application to know what to do next. Your application can also have different ways of work, so you can prefix those states with '''mode_''', see for example ''mode_interactive'' or ''mode_editing'', another useful one is also the '''ignore_''' prefix in order to ignore steps on our application.
    2222
    23 It's important to think about the possible ''expected'' situations, since we are humans this is hard to reach but we need to keep in mind (by using any tip if needed) every different situation, like ''if the file is deleted when...'' or ''if at the same time the user...''
     23It's important to think about the possible ''expected'' situations, since we are humans this is hard to acheive but we need to keep in mind every different situation, like ''if the file is deleted when...'' or ''if at the same time the user...''
    2424
    2525== Special Situations ==
    2626
    27 To have states and flags to know how to deal situations is good, but is even better if you don't need to do that! before to deal with any special situation just think if is possible to deal with this element in a better way or totally avoid this need, try to always avoid complex coding.
     27To have states and flags to know how to deal with situations is good, but it's even better if you don't need to do that! before dealing with any special situation just think if it's possible to deal with this element in a better way or totally avoid this need, try to always avoid complex coding.
    2828
    2929
     
    3535== Checks ==
    3636
    37 Your code should be perfect, but in fact, it is not... so don't assume that everything is OK, sometimes by an unkown reason something fails and you could have catastrophic disasters, in order to avoid a buggy application or catastrophic disasters, there's a simple rule: '''always check everything''', simply create short functions for that, for example i have one that is called ''check_directories'' with arguments passed by commas which you should understand what it does, another called ''check_variables'' and another called ''check_files'', I decided to maintain this name-convention there simply because they are in the group of ''checkers'' and to have them by the prefix files_ variables_ directories_ has not much sense.
     37Your code should be perfect, but in fact, it is not... so don't assume that everything is OK, sometimes by an unkown reason something fails and you could have catastrophic disasters, in order to avoid a buggy application or catastrophic disasters, there's a simple rule: '''always check everything''', simply create short functions for that, for example i have one that is called ''check_directories'' with arguments passed by commas which you should understand what it does, another called ''check_variables'' and another called ''check_files'', I decided to stay with this name-convention, they are simple and they are in the group of ''checkers'' and to have them by the prefix files_ variables_ directories_ make no sense.
    3838
    3939
     
    4242=== Memory ===
    4343
    44 You don't have a genius memory (specially me), so you can't remember exactly ''what this code exactly does'' or ''why this thing is there'', a good way to avoid that is by adding comments but sometimes you forget to do that or they are not sufficient, in most of the cases you think that you don't need this part of the code, or that should be an old not-needed-anymore element or similar things, what I personally do for accelerate the development process and not think on it on that moment is to add on this step a function called named ''step_requires_fixme message'', which basically runs me a prompt/shell if i come to this state of the code asking me what I'm doing here or to verify something
    45 
     44You don't have genius memory, you won't remember exactly "what this code does" or "why is this thing there", a good way to avoid this is by adding comments but sometimes you forget to do that or the comments you made are not sufficient enough, in most cases you think that you don't need it in this part of the code or that the element of the code is old and not-needed-anymore or similar things. What I personally do to accelerate the development process and to not think about it at the moment is to add on this step a function name "step_requires_fixme message", which is ran at the prompt/shell if I come to this state of the code it will asking me what im doing here or to verify something.
    4645
    4746
     
    5251It is a good procedure to rename all the functions after the app is finished, by reading the list of all of them and decide the optimal names structure for the entire code, same for global variables.
    5352
    54 === Never do names like that ===
    55 * '''download_resource_now''': It doesn't has any sense or description, the action is in the first, now means nothing and resource nothing too
     53=== Never create names like this ===
     54* '''download_resource_now''': It doesn't make any sense or description, the action is in the first, now means nothing and resource nothing too
    5655* '''stmb_sizer_here_here''': The double ''here'' means that your code is so ugly that you don't even believe it, sizer is not easy to understand and if ''stmb'' is not the name of a library or evident element, it is almost impossible to understand what it means
    5756
    58 === Better on that way ===
     57=== The good way ===
    5958* '''cookie_download''': we know that we are talking about cookies, and we don't need to include ''now'' because ''download'' is already the action, in case that we will have 2 different kinds of download we should use ''download_foo'' and ''download_bar'', without keeping the possibility of a single ''download'' and having an extendeded one
    6059
    61 === But even better on that way ===
     60=== The optimal way ===
    6261* '''myplugin_net_cookie_download''': Structuring everything entirely is the best option, all our elements should start by ''myplugin'' which is our entire work about, ''net'' means the section were we are those codes (let's say we have core, net, visual, and sound)
    6362
    64 In short, most of the times you will see that the names are writed in the inverse mode that how you talk them, if you doubt, just imagine to have some similar possible names and you sort them, you will see how they are sorted and which part of the name needs to come before the other ones
     63In short, most of the times you will see that the names are written in inverse mode that is how you talk them, if you doubt, just imagine to have some similar possible names and you sort them, you will see how they are sorted and which part of the name needs to come before the other ones
    6564
    6665When the application becomes big and start having a lot of names for variables, it is good to know what's exactly that variable, to know if we are dealing with a file, with a directory, or with a value, I personally use for that a suffix (ending in) in the variables like '''_v''' for values, '''_d''' for identifying directories, '''_f''' for identifying a file.
     
    8079
    8180== The 5 steps coding procedure ==
    82 1. Write the feature and make it to work
     811. Write the feature and make it work
    83821. Minimize the code (less lines, simple and short functions, less-complex algorithms, etc)
    84831. Structure it correctly (spaces/readability, comments, begin-end parts, local variables, etc)
    85841. Document (comment) the needed parts to make it easly understandable, is suggested to use doxygen syntax
    86 1. Convention names, take some seconds to decide the optimal names for your variables and functions
     851. Convention names, take some time to decide the optimal names for your variables and functions
    8786
    8887== Extra ==