SlideShare a Scribd company logo
1 of 71
# No comment.
# Stop clarifying code with comments;
# Stop clarifying code with comments;
# Write code clearly instead.
# Clarifying comments are not
                                         # documentation

# Converts the object into textual markup given a specific `format`
# (defaults to `:html`)
#
# == Parameters:
# format::
# A Symbol declaring the format to convert the object to. This
# can be `:text` or `:html`.
#
# == Returns:
# A string representing the object in a specified
# format.
#
def to_format(format=:html)
  # format the object
end
# Clarifying comments are not
                                          # documentation



# Converts the object into textual markup given a specific format.
#
# @param [Symbol] format the format type, `:text` or `:html`
# @return [String] the object converted into the expected format.
def to_format(format = :html)
  # format the object
end
# Clarifying comments are not
                                           # legal statements




# Copyright (C) 2012 by Nate Davis Olds. All rights reserved.
# Released under the terms of the GNU General Public License version 2 or later.
# Clarifying comments are not
                                   # reminder notes
# FIXME high priority for next
deploy
def process
 raise “n”
end

# OPTIMIZE refactor this code to
get more done
def goodnight
 sleep 6.hours
end

# TODO any other way to do this?
def process(str=’inter’)
 “use “ + str + ”polation”
end
# Clarifying comments are not
                                   # reminder notes
# FIXME high priority for next     $ rake notes
deploy                             (in /home/foobar/commandsapp)
def process                        app/controllers/admin/users_controller.rb:
 raise “n”                           * [ 20] [TODO] any other way to do this?
end                                  * [132] [FIXME] high priority for next
                                   deploy
# OPTIMIZE refactor this code to    
get more done                      app/model/person.rb:
def goodnight                        * [ 13] [OPTIMIZE] refactor this code to get
 sleep 6.hours                     more done
end

# TODO any other way to do this?
def process(str=’inter’)
 “use “ + str + ”polation”
end
# The attention of the comment
                                                   # is outside the scope
                                                   # of the accompanying code



# used by rake for task management
# TODO any other way to do this?
def process(str=’inter’)
 “use “ + str + ”polation”
end



# used by yard
 # Converts the object into textual markup given a specific format.
 #
 # @param [Symbol] format the format type, `:text` or `:html`
 # @return [String] the object converted into the expected format.
 def to_format(format = :html)
   # format the object
 end



# used by courts
 # Copyright (C) 2012 by Nate Davis Olds. All rights reserved.
 # Released under the terms of the GNU General Public License version 2 or later.
# A clarifying comment’s attention is
# directed internally
 # inserts a string between two other strings
 def process(str=’inter’)
  “use “ + str + ”polation”
 end
# Clarifying comments are
                                               # explanations
                                               # of the code that follows.


# inserts a string between two other strings
def process(str=’inter’)
 “use “ + str + ”polation”
end
# Clarifying comments are
                                 # redundant
                                 # of the code that follows.


# inserts string
def insert_string(str=’inter’)
 “use “ + str + ”polation”
end
# Clarifying comments are
                                             # apologizes
                                             # of the code that follows.


# This code sucks! I know it. You know it.
# I am sorry that you have to read it.
def is_this_example_good
 100.times { ”No! it sucks!” }
end

# I’m drunk.
def string_theory_patterns
 ...
end
# Clarifying comments are
                                            # rants
                                            # of the code that follows.
# At this point, I'd like to take a moment to speak to you about the Adobe PSD
# format. PSD is not a good format. PSD is not even a bad format. Calling it
# such would be an insult to other bad formats, such as PCX or JPEG. No, PSD
# is an abysmal format. Having worked on this code for several weeks now, my
# hate for PSD has grown to a raging fire that burns with the fierce passion
# of a million suns.
#
.....
# Earlier, I tried to get a hold of the latest specs for the PSD file format.
# To do this, I had to apply to them for permission to apply to them to have
# them consider sending me this sacred tome. This would have involved faxing
# them a copy of some document or other, probably signed in blood. I can only
# imagine that they make this process so difficult because they are intensely
# ashamed of having created this abomination. I was naturally not gullible
# enough to go through with this procedure, but if I had done so, I would have
# printed out every single page of the spec, and set them all on fire. Were it
# within my power, I would gather every single copy of those specs, and launch
# them on a spaceship directly into the sun.
#
# PSD is not my favourite file format.
# Clarifying comments are
                                             # open letters
                                             # of the code that follows.



#   Dear maintainer:
#
#   Once you are done trying to 'optimize' this routine,
#   and have realized what a terrible mistake that was,
#   please increment the following counter as a warning
#   to the next guy:
#
#   total_hours_wasted_here = 42
#
# Clarifying comments are
                                        # warnings
                                        # of the code that follows.


# After you run this code, take the day off.
# It won’t finish until tomorrow.
def im_compiling(stop_at=14.hours.from_now)
 if stop_at < Time.zone.now
   puts "done."
 else
   print "."
   sleep 10
   im_compiling stop_at
 end
end
# Clarifying comments are
                                       # dialogs
                                       # of the coder that follows.


# This is brilliant!
# Thanks. It’s nap time.
def im_compiling(stop_at=14.hours.from_now)
 if stop_at < Time.zone.now
   puts "done."
 else
   print "."
   sleep 10
   im_compiling stop_at
 end
end
# Clarifying comments are
                      # inside jokes
                      # of the code that follows.




stop() # hammertime
# Clarifying comments are
                                        # misleading descriptions
                                        # of the code that follows.




# Returns the standard utility allowance
# based on how many utilities someone pays.
def standard_utility_allowance
 324
end
# Clarifying comments are
                                               # stashed code
def standard_utility_allowance                 # of the code that follows.
 324
 # Uncomment this by March 3, 2012 when estimations switch back
 #
 # case @answers[:utility_allowance]
 #
 # when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
 # 394.0
 #
 # when "Doesn't pay for heating or cooling but pays two other utilities"
 # 239.0
 #
 # when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
 # @answers[:actual_utility_cost]
 #
 # when "Pays telephone only"
 # 40.0
 #
 # else
 # 0.0
 # end
end
# Clarifying comments are
                                               # deserted code
                                               # of the code that follows.

def standard_utility_allowance
 case @answers[:utility_allowance]
 when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
  394.0
# when "Doesn't pay for heating or cooling but pays two other utilities"
# 239.0
 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
  @answers[:actual_utility_cost]
 when "Pays telephone only"
  40.0
 else
  0.0
 end
end
# Why should clarifying comments be removed?
# Why should clarifying comments be removed?


# Clarifying comments are codejunk
# Why should clarifying comments be removed?


# Clarifying comments are codejunk
  term from Katrina Owen # talk entitled Therapeutic Refactoring on
  confreaks from Cascadia Ruby Conference
# Why should clarifying comments be removed?


# Clarifying comments are codejunk
    term from Katrina Owen # talk entitled Therapeutic Refactoring on
    confreaks from Cascadia Ruby Conference

    codejunk is a play from Edward Tufté term chartjunk 1




  1 Tufte, Edward R. (1983). The Visual Display of Quantitative Information. Cheshire, CT: Graphics Press.
Chartjunk refers to all visual elements in charts and
graphs that are not necessary to comprehend the
information represented on the graph, or that
distract the viewer from this information.
Codejunk refers to all visual elements in code that
are not necessary to comprehend the information
represented in the code, or that distract the viewer
from this information.
Understanding Code
70%




                                                                      New Code
                                                                      5%




                                              Modifying Existing Code
                                              25%




# http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx Peter Hallam
# Why should clarifying comments be removed?
# Why should clarifying comments be removed?



Because we spend most of
our time reading and
understanding code
# Isn’t that why we write clarifying comments?
# Isn’t that why we write clarifying comments?




No. We write clarifying
comments because our code
isn’t clear enough.
The use of a clarifying
comment admits the failure
to write readable, clean code
The use of a clarifying
comment admits the failure
to write readable, clean code

          # Stop clarifying code with comments;
          # Write code clearly instead.
# explanations
# explanations

            # inserts a string between two other strings
            def process(str=’inter’)
             “use “ + str + ”polation”
            end
# explanations

            # inserts a string between two other strings
            def process(str=’inter’)
             “use “ + str + ”polation”
            end



# rename function

            def insert_string(str=’inter’)
             “use “ + str + ”polation”
            end
# redundant comment
# redundant comment

        # inserts string
        def insert_string(str=’inter’)
         “use “ + str + ”polation”
        end
# redundant comment

         # inserts string
         def insert_string(str=’inter’)
          “use “ + str + ”polation”
         end



# without comment


         def insert_string(str=’inter’)
          “use “ + str + ”polation”
         end
# apologizing
# apologizing

         # This code sucks! I know it. You know it.
         # I am sorry that you have to read it.
         def is_this_example_good
          100.times { ”No! it sucks!” }
         end
# apologizing

          # This code sucks! I know it. You know it.
          # I am sorry that you have to read it.
          def is_this_example_good
           100.times { ”No! it sucks!” }
          end


# make it better

          def is_this_example_good
           1000.times { ”Awesome” }
          end
# rants
# rants

# At this point, I'd like to take a moment to speak to you about the Adobe PSD
# format. PSD is not a good format. PSD is not even a bad format. Calling it
# such would be an insult to other bad formats, such as PCX or JPEG. No, PSD
# rants

# At this point, I'd like to take a moment to speak to you about the Adobe PSD
# format. PSD is not a good format. PSD is not even a bad format. Calling it
# such would be an insult to other bad formats, such as PCX or JPEG. No, PSD



# blog about it. tweet it. Or give a presentation about it. Just Remove it from code.


Why I hate Adobe PSD format!
by I. Rant
At this point, I'd like to take a moment to speak to you about the Adobe PSD
format. PSD is not a good format. PSD is not even a bad format. Calling it
such would be an insult to other bad formats, such as PCX or JPEG. No, PSD
# Open letters
# Open letters

        #   Dear maintainer:
        #
        #   Once you are done trying to 'optimize' this routine,
        #   and have realized what a terrible mistake that was,
        #   please increment the following counter as a warning
        #   to the next guy:
        #
        #   total_hours_wasted_here = 42
        #
# Open letters

        #   Dear maintainer:
        #
        #   Once you are done trying to 'optimize' this routine,
        #   and have realized what a terrible mistake that was,
        #   please increment the following counter as a warning
        #   to the next guy:
        #
        #   total_hours_wasted_here = 42
        #

# Schedule a fix. State the problem.

        # OPTIMIZE: or refactor. The problem is....
# warnings
# warnings

# After you run this code, take the day off.
# It won’t finish until tomorrow.
def im_compiling(stop_at=14.hours.from_now)
 if stop_at < Time.zone.now
   puts "done."
 else
   print "."
   sleep 10
   im_compiling stop_at
 end
end
# warnings


# if it is meant to run long, warn at runtime
def im_compiling(stop_at=nil)
 if stop_at.nil?
   print “This will take 14 hours. Proceed? (y/n):”
   should_continue = STDIN.gets.chomp

  if should_continue == “y”
    im_compiling 14.hours.from_now
  end
 elsif stop_at < Time.zone.now
  puts "done."
 else
  print "."
  sleep 10
  im_compiling stop_at
 end
end
# warnings


# schedule optimization

# OPTIMIZE: remove the n+1 database calls
def comment_summaries_for_everyone
 summaries = []

 Person.all.each do |person|
  person.posts.each do |post|
   post.comments.each do |comment|
     summaries << “#{comment.author_name}: #{comment.body}”
   end
  end
 end

 summaries
end
# dialogs

       # This is brilliant!
       # Thanks. It’s nap time.
# dialogs

       # This is brilliant!
       # Thanks. It’s nap time.


# email. chat. twitter. phone. how about talk?!?
# jokes
# jokes

     stop() # hammertime
# jokes

     stop() # hammertime



# funny the first time, but does it need to be checked in? Delete it

     stop()
# misleading descriptions
# misleading descriptions

    # Returns the standard utility allowance
    # based on how many utilities someone pays.
    def standard_utility_allowance
     324
    end
# misleading descriptions

    # Returns the standard utility allowance
    # based on how many utilities someone pays.
    def standard_utility_allowance
     324
    end

# Remove it or investigate what is correct.

    def standard_utility_allowance
     324
    end
# stashed code
def standard_utility_allowance
 324
 # Uncomment this by March 3, 2012 when estimations switch back
 #
 # case @answers[:utility_allowance]
 #
 # when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
 # 394.0
 #
 # when "Doesn't pay for heating or cooling but pays two other utilities"
 # 239.0
 #
 # when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
 # @answers[:actual_utility_cost]
 #
 # when "Pays telephone only"
 # 40.0
 #
 # else
 # 0.0
 # end
end
# stashed code
# write it inline, set a note to clean it up
# FIXME: After March 3, 2012
def standard_utility_allowance
 if after_march_3_2012?
   case @answers[:utility_allowance]
   when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
     394.0
   when "Doesn't pay for heating or cooling but pays two other utilities"
     239.0
   when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
     @answers[:actual_utility_cost]
   when "Pays telephone only"
     40.0
   else
     0.0
   end
 else
   326
 end
end

def after_march_3_2012?
 Time.zone.now >= Time.new(2012, 3, 3)
end
# deserted code

def standard_utility_allowance
 case @answers[:utility_allowance]
 when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
  394.0
# when "Doesn't pay for heating or cooling but pays two other utilities"
# 239.0
 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
  @answers[:actual_utility_cost]
 when "Pays telephone only"
  40.0
 else
  0.0
 end
end
# deserted code
# remove it. If it passes tests without the code, it is not needed.

def standard_utility_allowance
 case @answers[:utility_allowance]
 when 'Pays for Heating or # Cooling or receives MEAP or EUSP'
  394.0
 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)"
  @answers[:actual_utility_cost]
 when "Pays telephone only"
  40.0
 else
  0.0
 end
end
A more complex example
# Stop clarifying code with comments;
# Write code clearly instead.
# Questions?



                                                                             # References
                                                          Therapeutic Refactoring, Katrina Owen
                      http://confreaks.com/videos/1071-cascadiaruby2012-therapeutic-refactoring

                                                                                           Chartjunk
                                              http://en.wikipedia.org/wiki/Chartjunk#cite_note-tufte-0

         What Do Programmers Really Do Anyway? (aka Part 2 of the Yardstick saga), Peter Hallam
                             http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx

                                                                          Clean Code, Robert Martin




                                                                                       # My Info
Nate Davis Olds   #natedavisolds                                  Benefits Data Trust    lead developer

nate@davisolds.com   ndavisolds@bdtrust.org                                            www.bdtrust.org
No comment

More Related Content

What's hot

HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARFHES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARFHackito Ergo Sum
 
Powerpoint presentation final requirement in fnd prg
Powerpoint presentation final requirement in fnd prgPowerpoint presentation final requirement in fnd prg
Powerpoint presentation final requirement in fnd prgalyssa-castro2326
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kianphelios
 
Ruby -the wheel Technology
Ruby -the wheel TechnologyRuby -the wheel Technology
Ruby -the wheel Technologyppparthpatel123
 

What's hot (9)

HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARFHES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
 
Formation sh
Formation shFormation sh
Formation sh
 
Powerpoint presentation final requirement in fnd prg
Powerpoint presentation final requirement in fnd prgPowerpoint presentation final requirement in fnd prg
Powerpoint presentation final requirement in fnd prg
 
429 e8d01
429 e8d01429 e8d01
429 e8d01
 
Os Borger
Os BorgerOs Borger
Os Borger
 
Perl intro
Perl introPerl intro
Perl intro
 
P H P Part I, By Kian
P H P  Part  I,  By  KianP H P  Part  I,  By  Kian
P H P Part I, By Kian
 
Ruby -the wheel Technology
Ruby -the wheel TechnologyRuby -the wheel Technology
Ruby -the wheel Technology
 
Php Learning show
Php Learning showPhp Learning show
Php Learning show
 

Viewers also liked

Identify Literate Code
Identify Literate CodeIdentify Literate Code
Identify Literate Codenatedavisolds
 
Probability
ProbabilityProbability
Probabilitykrubud
 
ความน่าจะเป็น
ความน่าจะเป็นความน่าจะเป็น
ความน่าจะเป็นTeerayut Matha
 
ความน่าจะเป็น
ความน่าจะเป็นความน่าจะเป็น
ความน่าจะเป็นchantana17
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Viewers also liked (7)

Identify Literate Code
Identify Literate CodeIdentify Literate Code
Identify Literate Code
 
Probability
ProbabilityProbability
Probability
 
ความน่าจะเป็น
ความน่าจะเป็นความน่าจะเป็น
ความน่าจะเป็น
 
ความน่าจะเป็น
ความน่าจะเป็นความน่าจะเป็น
ความน่าจะเป็น
 
Event
EventEvent
Event
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar to No comment

Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in StyleBhavin Javia
 
Reverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxReverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxRick Harris
 
C++ programming language basic to advance level
C++ programming language basic to advance levelC++ programming language basic to advance level
C++ programming language basic to advance levelsajjad ali khan
 
Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...Andrey Karpov
 
The First C# Project Analyzed
The First C# Project AnalyzedThe First C# Project Analyzed
The First C# Project AnalyzedPVS-Studio
 
We built this city on Dev and Ops
We built this city on Dev and OpsWe built this city on Dev and Ops
We built this city on Dev and OpsKarthik Gaekwad
 
Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Andreas Dewes
 
Lecture # 1 introduction revision - 1
Lecture # 1   introduction  revision - 1Lecture # 1   introduction  revision - 1
Lecture # 1 introduction revision - 1SajeelSahil
 
Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Benjamin Bock
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAAiman Hud
 

Similar to No comment (20)

Preprocessor
PreprocessorPreprocessor
Preprocessor
 
Preprocessor
PreprocessorPreprocessor
Preprocessor
 
Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in Style
 
Reverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on LinuxReverse-engineering: Using GDB on Linux
Reverse-engineering: Using GDB on Linux
 
C programming session6
C programming  session6C programming  session6
C programming session6
 
C++ programming language basic to advance level
C++ programming language basic to advance levelC++ programming language basic to advance level
C++ programming language basic to advance level
 
C++Basics.pdf
C++Basics.pdfC++Basics.pdf
C++Basics.pdf
 
Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...Consequences of using the Copy-Paste method in C++ programming and how to dea...
Consequences of using the Copy-Paste method in C++ programming and how to dea...
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
The First C# Project Analyzed
The First C# Project AnalyzedThe First C# Project Analyzed
The First C# Project Analyzed
 
C tutorials
C tutorialsC tutorials
C tutorials
 
We built this city on Dev and Ops
We built this city on Dev and OpsWe built this city on Dev and Ops
We built this city on Dev and Ops
 
C tutorial
C tutorialC tutorial
C tutorial
 
Alta disponibilidad en GNU/Linux
Alta disponibilidad en GNU/LinuxAlta disponibilidad en GNU/Linux
Alta disponibilidad en GNU/Linux
 
Bash 4
Bash 4Bash 4
Bash 4
 
Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...Code is not text! How graph technologies can help us to understand our code b...
Code is not text! How graph technologies can help us to understand our code b...
 
Lecture # 1 introduction revision - 1
Lecture # 1   introduction  revision - 1Lecture # 1   introduction  revision - 1
Lecture # 1 introduction revision - 1
 
Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

No comment

  • 2. # Stop clarifying code with comments;
  • 3. # Stop clarifying code with comments; # Write code clearly instead.
  • 4. # Clarifying comments are not # documentation # Converts the object into textual markup given a specific `format` # (defaults to `:html`) # # == Parameters: # format:: # A Symbol declaring the format to convert the object to. This # can be `:text` or `:html`. # # == Returns: # A string representing the object in a specified # format. # def to_format(format=:html) # format the object end
  • 5. # Clarifying comments are not # documentation # Converts the object into textual markup given a specific format. # # @param [Symbol] format the format type, `:text` or `:html` # @return [String] the object converted into the expected format. def to_format(format = :html) # format the object end
  • 6. # Clarifying comments are not # legal statements # Copyright (C) 2012 by Nate Davis Olds. All rights reserved. # Released under the terms of the GNU General Public License version 2 or later.
  • 7. # Clarifying comments are not # reminder notes # FIXME high priority for next deploy def process raise “n” end # OPTIMIZE refactor this code to get more done def goodnight sleep 6.hours end # TODO any other way to do this? def process(str=’inter’) “use “ + str + ”polation” end
  • 8. # Clarifying comments are not # reminder notes # FIXME high priority for next $ rake notes deploy (in /home/foobar/commandsapp) def process app/controllers/admin/users_controller.rb: raise “n”   * [ 20] [TODO] any other way to do this? end   * [132] [FIXME] high priority for next deploy # OPTIMIZE refactor this code to   get more done app/model/person.rb: def goodnight   * [ 13] [OPTIMIZE] refactor this code to get sleep 6.hours more done end # TODO any other way to do this? def process(str=’inter’) “use “ + str + ”polation” end
  • 9. # The attention of the comment # is outside the scope # of the accompanying code # used by rake for task management # TODO any other way to do this? def process(str=’inter’) “use “ + str + ”polation” end # used by yard # Converts the object into textual markup given a specific format. # # @param [Symbol] format the format type, `:text` or `:html` # @return [String] the object converted into the expected format. def to_format(format = :html) # format the object end # used by courts # Copyright (C) 2012 by Nate Davis Olds. All rights reserved. # Released under the terms of the GNU General Public License version 2 or later.
  • 10. # A clarifying comment’s attention is # directed internally # inserts a string between two other strings def process(str=’inter’) “use “ + str + ”polation” end
  • 11. # Clarifying comments are # explanations # of the code that follows. # inserts a string between two other strings def process(str=’inter’) “use “ + str + ”polation” end
  • 12. # Clarifying comments are # redundant # of the code that follows. # inserts string def insert_string(str=’inter’) “use “ + str + ”polation” end
  • 13. # Clarifying comments are # apologizes # of the code that follows. # This code sucks! I know it. You know it. # I am sorry that you have to read it. def is_this_example_good 100.times { ”No! it sucks!” } end # I’m drunk. def string_theory_patterns ... end
  • 14. # Clarifying comments are # rants # of the code that follows. # At this point, I'd like to take a moment to speak to you about the Adobe PSD # format. PSD is not a good format. PSD is not even a bad format. Calling it # such would be an insult to other bad formats, such as PCX or JPEG. No, PSD # is an abysmal format. Having worked on this code for several weeks now, my # hate for PSD has grown to a raging fire that burns with the fierce passion # of a million suns. # ..... # Earlier, I tried to get a hold of the latest specs for the PSD file format. # To do this, I had to apply to them for permission to apply to them to have # them consider sending me this sacred tome. This would have involved faxing # them a copy of some document or other, probably signed in blood. I can only # imagine that they make this process so difficult because they are intensely # ashamed of having created this abomination. I was naturally not gullible # enough to go through with this procedure, but if I had done so, I would have # printed out every single page of the spec, and set them all on fire. Were it # within my power, I would gather every single copy of those specs, and launch # them on a spaceship directly into the sun. # # PSD is not my favourite file format.
  • 15. # Clarifying comments are # open letters # of the code that follows. # Dear maintainer: # # Once you are done trying to 'optimize' this routine, # and have realized what a terrible mistake that was, # please increment the following counter as a warning # to the next guy: # # total_hours_wasted_here = 42 #
  • 16. # Clarifying comments are # warnings # of the code that follows. # After you run this code, take the day off. # It won’t finish until tomorrow. def im_compiling(stop_at=14.hours.from_now) if stop_at < Time.zone.now puts "done." else print "." sleep 10 im_compiling stop_at end end
  • 17. # Clarifying comments are # dialogs # of the coder that follows. # This is brilliant! # Thanks. It’s nap time. def im_compiling(stop_at=14.hours.from_now) if stop_at < Time.zone.now puts "done." else print "." sleep 10 im_compiling stop_at end end
  • 18. # Clarifying comments are # inside jokes # of the code that follows. stop() # hammertime
  • 19. # Clarifying comments are # misleading descriptions # of the code that follows. # Returns the standard utility allowance # based on how many utilities someone pays. def standard_utility_allowance 324 end
  • 20. # Clarifying comments are # stashed code def standard_utility_allowance # of the code that follows. 324 # Uncomment this by March 3, 2012 when estimations switch back # # case @answers[:utility_allowance] # # when 'Pays for Heating or # Cooling or receives MEAP or EUSP' # 394.0 # # when "Doesn't pay for heating or cooling but pays two other utilities" # 239.0 # # when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" # @answers[:actual_utility_cost] # # when "Pays telephone only" # 40.0 # # else # 0.0 # end end
  • 21. # Clarifying comments are # deserted code # of the code that follows. def standard_utility_allowance case @answers[:utility_allowance] when 'Pays for Heating or # Cooling or receives MEAP or EUSP' 394.0 # when "Doesn't pay for heating or cooling but pays two other utilities" # 239.0 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" @answers[:actual_utility_cost] when "Pays telephone only" 40.0 else 0.0 end end
  • 22. # Why should clarifying comments be removed?
  • 23. # Why should clarifying comments be removed? # Clarifying comments are codejunk
  • 24. # Why should clarifying comments be removed? # Clarifying comments are codejunk term from Katrina Owen # talk entitled Therapeutic Refactoring on confreaks from Cascadia Ruby Conference
  • 25. # Why should clarifying comments be removed? # Clarifying comments are codejunk term from Katrina Owen # talk entitled Therapeutic Refactoring on confreaks from Cascadia Ruby Conference codejunk is a play from Edward Tufté term chartjunk 1 1 Tufte, Edward R. (1983). The Visual Display of Quantitative Information. Cheshire, CT: Graphics Press.
  • 26. Chartjunk refers to all visual elements in charts and graphs that are not necessary to comprehend the information represented on the graph, or that distract the viewer from this information.
  • 27. Codejunk refers to all visual elements in code that are not necessary to comprehend the information represented in the code, or that distract the viewer from this information.
  • 28. Understanding Code 70% New Code 5% Modifying Existing Code 25% # http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx Peter Hallam
  • 29. # Why should clarifying comments be removed?
  • 30. # Why should clarifying comments be removed? Because we spend most of our time reading and understanding code
  • 31. # Isn’t that why we write clarifying comments?
  • 32. # Isn’t that why we write clarifying comments? No. We write clarifying comments because our code isn’t clear enough.
  • 33. The use of a clarifying comment admits the failure to write readable, clean code
  • 34. The use of a clarifying comment admits the failure to write readable, clean code # Stop clarifying code with comments; # Write code clearly instead.
  • 36. # explanations # inserts a string between two other strings def process(str=’inter’) “use “ + str + ”polation” end
  • 37. # explanations # inserts a string between two other strings def process(str=’inter’) “use “ + str + ”polation” end # rename function def insert_string(str=’inter’) “use “ + str + ”polation” end
  • 39. # redundant comment # inserts string def insert_string(str=’inter’) “use “ + str + ”polation” end
  • 40. # redundant comment # inserts string def insert_string(str=’inter’) “use “ + str + ”polation” end # without comment def insert_string(str=’inter’) “use “ + str + ”polation” end
  • 42. # apologizing # This code sucks! I know it. You know it. # I am sorry that you have to read it. def is_this_example_good 100.times { ”No! it sucks!” } end
  • 43. # apologizing # This code sucks! I know it. You know it. # I am sorry that you have to read it. def is_this_example_good 100.times { ”No! it sucks!” } end # make it better def is_this_example_good 1000.times { ”Awesome” } end
  • 45. # rants # At this point, I'd like to take a moment to speak to you about the Adobe PSD # format. PSD is not a good format. PSD is not even a bad format. Calling it # such would be an insult to other bad formats, such as PCX or JPEG. No, PSD
  • 46. # rants # At this point, I'd like to take a moment to speak to you about the Adobe PSD # format. PSD is not a good format. PSD is not even a bad format. Calling it # such would be an insult to other bad formats, such as PCX or JPEG. No, PSD # blog about it. tweet it. Or give a presentation about it. Just Remove it from code. Why I hate Adobe PSD format! by I. Rant At this point, I'd like to take a moment to speak to you about the Adobe PSD format. PSD is not a good format. PSD is not even a bad format. Calling it such would be an insult to other bad formats, such as PCX or JPEG. No, PSD
  • 48. # Open letters # Dear maintainer: # # Once you are done trying to 'optimize' this routine, # and have realized what a terrible mistake that was, # please increment the following counter as a warning # to the next guy: # # total_hours_wasted_here = 42 #
  • 49. # Open letters # Dear maintainer: # # Once you are done trying to 'optimize' this routine, # and have realized what a terrible mistake that was, # please increment the following counter as a warning # to the next guy: # # total_hours_wasted_here = 42 # # Schedule a fix. State the problem. # OPTIMIZE: or refactor. The problem is....
  • 51. # warnings # After you run this code, take the day off. # It won’t finish until tomorrow. def im_compiling(stop_at=14.hours.from_now) if stop_at < Time.zone.now puts "done." else print "." sleep 10 im_compiling stop_at end end
  • 52. # warnings # if it is meant to run long, warn at runtime def im_compiling(stop_at=nil) if stop_at.nil? print “This will take 14 hours. Proceed? (y/n):” should_continue = STDIN.gets.chomp if should_continue == “y” im_compiling 14.hours.from_now end elsif stop_at < Time.zone.now puts "done." else print "." sleep 10 im_compiling stop_at end end
  • 53. # warnings # schedule optimization # OPTIMIZE: remove the n+1 database calls def comment_summaries_for_everyone summaries = [] Person.all.each do |person| person.posts.each do |post| post.comments.each do |comment| summaries << “#{comment.author_name}: #{comment.body}” end end end summaries end
  • 54. # dialogs # This is brilliant! # Thanks. It’s nap time.
  • 55. # dialogs # This is brilliant! # Thanks. It’s nap time. # email. chat. twitter. phone. how about talk?!?
  • 57. # jokes stop() # hammertime
  • 58. # jokes stop() # hammertime # funny the first time, but does it need to be checked in? Delete it stop()
  • 60. # misleading descriptions # Returns the standard utility allowance # based on how many utilities someone pays. def standard_utility_allowance 324 end
  • 61. # misleading descriptions # Returns the standard utility allowance # based on how many utilities someone pays. def standard_utility_allowance 324 end # Remove it or investigate what is correct. def standard_utility_allowance 324 end
  • 62. # stashed code def standard_utility_allowance 324 # Uncomment this by March 3, 2012 when estimations switch back # # case @answers[:utility_allowance] # # when 'Pays for Heating or # Cooling or receives MEAP or EUSP' # 394.0 # # when "Doesn't pay for heating or cooling but pays two other utilities" # 239.0 # # when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" # @answers[:actual_utility_cost] # # when "Pays telephone only" # 40.0 # # else # 0.0 # end end
  • 63. # stashed code # write it inline, set a note to clean it up # FIXME: After March 3, 2012 def standard_utility_allowance if after_march_3_2012? case @answers[:utility_allowance] when 'Pays for Heating or # Cooling or receives MEAP or EUSP' 394.0 when "Doesn't pay for heating or cooling but pays two other utilities" 239.0 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" @answers[:actual_utility_cost] when "Pays telephone only" 40.0 else 0.0 end else 326 end end def after_march_3_2012? Time.zone.now >= Time.new(2012, 3, 3) end
  • 64. # deserted code def standard_utility_allowance case @answers[:utility_allowance] when 'Pays for Heating or # Cooling or receives MEAP or EUSP' 394.0 # when "Doesn't pay for heating or cooling but pays two other utilities" # 239.0 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" @answers[:actual_utility_cost] when "Pays telephone only" 40.0 else 0.0 end end
  • 65. # deserted code # remove it. If it passes tests without the code, it is not needed. def standard_utility_allowance case @answers[:utility_allowance] when 'Pays for Heating or # Cooling or receives MEAP or EUSP' 394.0 when "Doesn't pay for heating or cooling but pays one utility bill (NOT telephone)" @answers[:actual_utility_cost] when "Pays telephone only" 40.0 else 0.0 end end
  • 66. A more complex example
  • 67.
  • 68.
  • 69. # Stop clarifying code with comments; # Write code clearly instead.
  • 70. # Questions? # References Therapeutic Refactoring, Katrina Owen http://confreaks.com/videos/1071-cascadiaruby2012-therapeutic-refactoring Chartjunk http://en.wikipedia.org/wiki/Chartjunk#cite_note-tufte-0 What Do Programmers Really Do Anyway? (aka Part 2 of the Yardstick saga), Peter Hallam http://blogs.msdn.com/b/peterhal/archive/2006/01/04/509302.aspx Clean Code, Robert Martin # My Info Nate Davis Olds #natedavisolds Benefits Data Trust lead developer nate@davisolds.com ndavisolds@bdtrust.org www.bdtrust.org

Editor's Notes

  1. \n
  2. \n
  3. RDOC\n\n
  4. YARD\n
  5. \n
  6. - When you become aware of something that needs to be done; just not now\n- Worse than clarifying code if there is no process to return to these problem areas.\n- Acknowledge a problem, stashes it for later fixing, and prevents sidetracks\n\n
  7. In all of these examples, the attention of the comment is outside the scope of the accompanying source code; \n\nin contrast...\n\n\n
  8. in contrast, clarifying comment&amp;#x2019;s attention is directed internally\n\nPOINTS TOWARD THE CODE\n\n\n
  9. EXPLANATIONS\n\n
  10. REDUNDANT\n\n\n\n
  11. REDUNDANT\n\n\n\n
  12. REDUNDANT\n\n\n\n
  13. REDUNDANT\n\n\n\n
  14. REDUNDANT\n\n\n\n
  15. REDUNDANT\n\n\n\n
  16. JOKES\n\n\n\n
  17. REDUNDANT\n\n\n\n
  18. REDUNDANT\n\n\n\n
  19. REDUNDANT\n\n\n\n
  20. I first heard this\n\n\n\n
  21. I first heard this\n\n\n\n
  22. I first heard this\n\n\n\n
  23. I first heard this\n\n\n\n
  24. DESERTED CODE\n\n\n\n
  25. DESERTED CODE\n\n\n\n
  26. Peter Hallam asserts that coders spend more time reading code than writing code; a lot more.\n\n\n\n
  27. DESERTED CODE\n\n\n\n
  28. DESERTED CODE\n\n\n\n
  29. DESERTED CODE\n\n\n\n
  30. DESERTED CODE\n\n\n\n
  31. EXPLANATIONS\n\n
  32. EXPLANATIONS\n\n
  33. EXPLANATIONS\n\n
  34. REDUNDANT\n\n\n\n
  35. REDUNDANT\n\n\n\n
  36. REDUNDANT\n\n\n\n
  37. REDUNDANT\n\n\n\n
  38. REDUNDANT\n\n\n\n
  39. REDUNDANT\n\n\n\n
  40. REDUNDANT\n\n\n\n
  41. REDUNDANT\n\n\n\n
  42. REDUNDANT\n\n\n\n
  43. REDUNDANT\n\n\n\n
  44. REDUNDANT\n\n\n\n
  45. REDUNDANT\n\n\n\n
  46. REDUNDANT\n\n\n\n
  47. REDUNDANT\n\n\n\n
  48. REDUNDANT\n\n\n\n
  49. REDUNDANT\n\n\n\n
  50. REDUNDANT\n\n\n\n
  51. dialogs\nmake sure they get it\n\n\n\n
  52. JOKES\n\n\n\n
  53. JOKES\n\n\n\n
  54. JOKES\n\n\n\n
  55. REDUNDANT\n\n\n\n
  56. REDUNDANT\n\n\n\n
  57. REDUNDANT\n\n\n\n
  58. REDUNDANT\n\n\n\n
  59. This makes sure that it works correctly on time and also scheduled to clean it up.\n\n\n\n
  60. REDUNDANT\n\n\n\n
  61. REDUNDANT\n\n\n\n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n