Temporary fieldAn attribute of an object is only set in certain circumstances; but an object should need all of its attributes Speculative Generality“Oh I think we need the ability to do this kind of thing someday” Data ClassThese are classes that have ﬁelds, getting and setting methods for the ﬁelds, and nothing else; they are data holders, but objects should be about data AND behavior
Mitigation of serialization:- Don’t extend java.io.serializable- ImplementreadObject and writeObject as final methods that throw IOException- If serialize you must: use transient or use java.io.Externalizeable plus Encryption
Every Programmer Should Know
Programming & Code review
• Programming is
– Taking an algorithm
– Choosing a language
– Using that language to implement algorithm and
• Code review is
• Increase Quality & Reduce Defects
• Improve readability
• Share knowledge in team
• Know your workmate better!
• Two Wrongs Can Make a Right
• NOT personal attack!
• NOT architect reviews everything
• Code Conventions
• Test case
Take care of
• naming convention
• business logic
• security (attack, thread safe)
• Refactoring modifies software to improve its readability,
maintainability, and extensibility without changing what it actually
• Martin Fowler uses “code smells” to identify when to refactor.
• Boss: "Refactoring is an overhead activity - I'm paid to write new,
revenue generating features."
• Bad names
• Duplicate code
• Long method
• Large class
• Long parameter list
• Temporary field
• Speculative Generality
• Data Class
• Don’t flood log
• Class names
– Should be nouns or noun phrases.
– Examples: Car, Account, DataRetrievalService, AddressParser
• Method names
– Should be verb or verbPhrases
– Examples: parseData, deletePage, save
– Methods that return boolean values should sound like question.
– Examples: isAuthenticated, hasNoErrors, isEmpty
• Interface and Implementation
– ICache LRUCache
– IExport ExportService
– SEP_COMMA, SEP_SEMICOLON
The Art of Readable code
• The book!
• I want to point out:
– Use blank to separate logic block.
Comments for complex process,
Aiming for simplicity
• Do one thing in a function (simple responsibility)
• Have no side effects.
• Prefer exceptions to return codes.
• Format your code.
DRY -- Don’t repeat yourself
• Duplicated code should be avoided.
• Object Orientation, Abstract!
• Design pattern!
• Simple responsibility principle: Class should have one and
only one reason to change.
• Encapsulation: Modules should not know internal details of
objects it manipulates.
• Polymorphism -- Liskov’s substitution principle: A subclass
can be used as an argument where a base class is expected.
• Open-closed principle: Class should be open for extention,
but closed for modification.
Pay Attention to Performance
• JAVA: JVM usage
– Don’t create object in loop
– Use ArrayList, HashMap etc as opposed to Vector, Hashtable etc
(synchronized) where possible. Even better is to use just arrays
– Set initial capacity of a collection (e.g. ArrayList, HashMap) and
– Concurrent Collection, Lock
– Lazy load or multi-threading where applicable.
– Cache (LRUCache, Distributed Cache)