Date post: | 03-Jan-2016 |
Category: |
Documents |
Upload: | earl-walton |
View: | 219 times |
Download: | 0 times |
LECTURE 4:COMMUNICATION
CSC 313 – Advanced Programming Topics
Why Does This Matter?
Spot the Bug
public void read_db(String filename) {
Entry entry;
int i;
int n = 0, act = 0, e, s;
boolean OK;
byte buffer[] = null;
spec.harness.Context.out.print("Reading database "+dbname+" ... ");
spec.harness.Context.out.flush();
try {
spec.io.FileInputStream sif = new spec.io.FileInputStream(filename);
n = sif.getContentLength();
buffer = new byte[n];
int bytes_read;
while ( (bytes_read = sif.read(buffer, act , (n - act))) > 0){
act = act + bytes_read;
}
sif.close();
sif = null; // 03/11/98 rrh
if ( act != n ){
spec.harness.Context.out.println("ERROR reading input file");
//System.exit(1);
return;
}
} catch (IOException ioe) {
if ( n == 0 ) {
spec.harness.Context.out.println("Empty database");
return;
}
spec.harness.Context.out.println("ERROR opening/reading input file \""+filename+"\"");
// System.exit(1);
};
entry = new Entry();
spec.harness.Context.out.print("OK\nBuilding database ...");
spec.harness.Context.out.flush();
n = buffer.length;
s = e = 0;
while ( (e < n) && (s < n) ) {
// Check for CR also - rrh 2/18/98
while ( (e < n) && (buffer[e] != '\n') && (buffer[e] != '\r') ) e++;
if ( e < n ) {
if ( buffer[s] == '#' ) {
add(entry);
entry = new Entry();
} else
entry.items.addElement(new String(buffer, 0, s, e-s));
// Discard CR & LF - rrh 2/18/98
…
Brevity is the soul of wit
Complexity kills. It sucks the
life out of developers, it
makes products difficult to
plan, build and test, it
introduces security challenges
and it causes end-user and
administrator frustration.Ray Ozzie
Spot the Bug
public boolean isPrime(int n) {for (int i = 1; i < n; i++) { if ((n % i) == 0) { return false; }}return true;
}
Spot the Bug
public boolean isPrime(int n) {for (int i = 2; i < n; i++) { if ((n % i) == 0) { return false; }}return true;
}
Which Line Is Yours?
Shared Vocabulary Necessary Hints:
WiseCreativeHumorousAttractiveImpatientLazyFull of hubrisPerson assigning grades
Shared Vocabulary Necessary Hints:
ToolUselessLack of talentWaste of TimeAI HostDr. Hertz’s odd fascination
Shared Vocabulary Necessary
Shared Vocabulary Necessary
public interface Greeter {public void greet(String name);
}
public class Formal implements Greeter {public void greet(String name) { System.out.println(“Hello ” + name);}
}
public class Informal implements Greeter {public void greet(String name) { System.out.println(“Hiya ” + name);}
}
public class French implements Greeter {public void greet(String name) { System.out.println(“Bonjour ” + name);}
}
public interface Greeter {public void greet(String name);
}
public abstract class Interpersonal {protected Greeter g;
}
public class Worker extends Interpersonal {private String person;public void greet() { g.greet(person); }
}
public class DrHertz extends Interpersonal {public void greet() { g.greet(“Bob”); }
}
public class Flanders extends Interpersonal {private String person; public void greet() { g.greet(person + “doodly”);}
}
Strategy Pattern
Define interface for family of algorithms Method signature created for entire
family Coded up so each Strategy
interchangeable Each algorithm encapsulated in class of
its own Separates the Behavior from
Context Implies client uses 1 strategy at a time Also implies can change Strategy
dynamically
Shared Vocab. Not Sufficient
Brevity is the soul of wit
The competent programmer is
fully aware of the strictly
limited size of his own skull;
therefore he approaches the
programming task in full
humility, and among other
things he avoids clever tricks
like the plague.Edsger Dijkstra
Not a Free Gift
Design patterns are useful… Provide solutions at design level Enable shared vocabulary
… but are not panacea Do not prevent complex designs Programs continue having box
Not a Free Gift
Design patterns are useful… Provide solutions at design level Enable shared vocabulary
… but are not panacea Do not prevent complex designs Programs continue having box Are not “gift” in the box
Elevator Talk
VIP in elevator asks, “What are you working on?” You have elevator ride to explain it all Need to impress, but will lose them with BS
Boss comes by and asks, “How is it going?” Does not care/have time to get into details Have 90 seconds to get out important issues
This Matters
Need to market your ideas & designs Requires explaining to lazy, impatient
coders Well before your time is up, they are
bored If cannot explain design in elevator
talk Code created from design will have bugs Will require major effort to get to work
This Matters
Need to market your ideas & designs Requires explaining to lazy, impatient
coders Well before your time is up, they are
bored If cannot explain design in elevator
talk Code created from design will have bugs Will require major effort to get to work Coders are lazy and HATE effort and
work
This Matters
Need to market your ideas & designs Requires explaining to lazy, impatient
coders Well before your time is up, they are
bored If cannot explain design in elevator
talk Code created from design will have bugs Will require major effort to get to work Coders are lazy and HATE effort and
work
IT IS TOO COMPLEX
More Marketing
Explanations must be brief Coders should not see only necessary details Detail needed to code or not an important
details
Before software can be reusable it first has to be usable.
-- Ralph Johnson
An API that isn't comprehensible isn't usable.
-- James Gosling
Why Comments are Useful
If the code and the comments disagree,
then both are probably wrong.
Norm Schryer
Why Comments are Useful
As you're about to add a comment, ask yourself, 'How can I improve the
code so that this comment isn't needed?' Improve the code and
then document it to make it even clearer.
Steve McConnell
Your Turn
Give elevator speech on your current project
…and finally
For every complex problem there is an answer that is clear, simple, and
wrong.-- H L Mencken
For Next Lecture
Two (short) readings available on web Will start looking into how code is
optimized Begin by investigating how programs
actually run Also look at some of the simplest
optimizations Important to understand to improve
code written