[Skip to Body]
Primary:
[Front Door]
[Schedule]
-
[Academic Honesty]
[Instructions]
Current:
[Outline]
[EBoard]
[Reading]
-
[Assignment]
Groupings:
[EBoards]
[Examples]
[Handouts]
[Outlines]
[Readings]
Related Courses:
[CSC223 2007F (Davis)]
[CSC223 2004F (Rebelsky)]
Misc:
[SamR]
Back to Project Status Day. On to Design Principles.
This outline is also available in PDF.
Held: Tuesday, April 13, 2010
Summary: We consider techniques for architecting a larger system.
Related Pages:
Notes:
Overview:
I got a few notes expressing severe frustration with the class (or with certain aspects of the class), so I thought it would be worth spending a bit of class time exploring these issues.
So, let's get started.
is this an appropriate designrather than objective issues, such as
can we prove this algorithm corrector
is the asymptotic running time of this algorithm acceptable?
ideasof any piece.
Normally, we learn something as follows: We read about it. Then we hear a lecture about it. Then we do a lab about it. Then we do a homework assignment on it.
A few of today's questions really got to the heart of the kinds of things
I want you to learn
from this class.
The book suggests breaking large problems down into smaller problems, which certainly makes sense. However, I found that occasionally when I tried to conceptualize flexible designs (creatures in our project, tiles in the book's project), occasionally I'd be so focused on making the design flexible that it was difficult to actually write a design - i.e. "let's think of all the possible ways someone could change this before writing down any version of it". In general, can we write a basic version of something first and then expand it to be flexible, or does that lead to moments when you may not be achieving goals the best way because you've already locked yourself into an implementation?
Now that I've had a chance to work with UML, I've noticed that it does not present a complete picture of how a program should work. It lays out the class structure, but does not include much information about how stuff actually "works". How core algorithms should be implemented appears to be an important component of a design. The core component of our design project is the algorithm for actually "cycling" the board. This is a complicated algorithm that involves a large amount of information flow through the program. Shouldn't the Head First book be focusing on this second aspect of design? Am I just interpreting what "design" means incorrectly?
One thing the book didn't cover was our group situation, in which you have multiple groups working on the same task and occasionally sharing information. In a real-world setting, if this were the case, would strict adherence to the UML diagram guarantee that our code worked together?
On page 364 the authors make the claim that "Sometimes the best way to write great code is to hold off on writing code as long as you can", this is at odds with the Extreme Programming philosophy of "program a lot to see what works best". Are these two approaches reconcilable?
There was even a note on a design question that we will explore a bit later:
Real Python programmers don't use getters and setters. Why are we?
Of course, we want to learn some concrete
things related to these
processes and perspectives.
This isn't to say that I haven't screwed up in some ways.
Some clarifications:
extra creditpoints.
Now it's your turn. What do you want to discuss about the class.
What were the primary lessons of these chapters? [Goal: 20 minutes]
We should also visit the question of high-risk first vs. small first [Goal: 10 minutes]
There was a request to discuss good and bad coding habits in Python. We'll spend fifteen minutes doing so.
Real Python programmers don't use setters and getters. Why are we?
Goal: Remaining Time.
Back to Project Status Day. On to Design Principles.
[Skip to Body]
Primary:
[Front Door]
[Schedule]
-
[Academic Honesty]
[Instructions]
Current:
[Outline]
[EBoard]
[Reading]
-
[Assignment]
Groupings:
[EBoards]
[Examples]
[Handouts]
[Outlines]
[Readings]
Related Courses:
[CSC223 2007F (Davis)]
[CSC223 2004F (Rebelsky)]
Misc:
[SamR]
Disclaimer:
I usually create these pages on the fly
, which means that I rarely
proofread them and they may contain bad grammar and incorrect details.
It also means that I tend to update them regularly (see the history for
more details). Feel free to contact me with any suggestions for changes.
This document was generated by
Siteweaver on Tue May 11 12:40:54 2010.
The source to the document was last modified on Mon Jan 25 20:52:44 2010.
This document may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CSC323/2010S/Outlines/outline.19.html
.
You may wish to
validate this document's HTML
;
;
http://creativecommons.org/licenses/by-nc/2.5/
or send a letter to Creative Commons, 543 Howard Street, 5th Floor,
San Francisco, California, 94105, USA.