hi everyone, several people pointed out to me that i didn't put a due date on HW3. my intention was to make it due on july 8 (today!), but i'll move it to sunday july 11 - future hws are due on thursdays. several people also asked about implementing in java, and that's fine too. chapter 3 is concerned with design and implementation and i have only a couple of remarks to make here - resist the tempation to start coding away, and first make a plan. for a relatively small programming project (e.g., as in a homework), read the description, and the code given to you, then sketch out the code you are going to write. list the types, functions, control flow, etc. also there's more to planning a programming project than deciding the control flow, types, etc. you have to decide on source code control facilities, coding/documentation conventions, CASE tools (languages, compilers, profilers, debuggers), the regression testing scripts, etc. - don't start optimizing for performance before you know where the bottlenecks are. (usually they aren't where you expect them to be, and determining the limiting factors in performance is (or should be) an experimental science. this is true for both the low level (e.g., using macros, using small arrays for strings) and the high-level (e.g., trying to increase cache hit rates by caching everything in sight). chapter 4 is about interface design, and while it seems trivial, it's really quite important. interfaces are really about abstraction, which is in my opinion the most important concept in programming. an interface allows you not just to document a data structure and associated routines, but also makes it much easier to expand. for example, i once wrote some code that bridged two network cards. i was tempted to just pass the two card ids, but decided to encapsulate them in a struct with some utility functions. very soon, i started adding fields to the struct - for statistics gathering, for keeping locks, and adding functions (methods) for initialization, probing, etc. - this would have been very hard without the encapsulation. people sometimes avoid encapsulation on the grounds of it leading to performance issues. in fact they are just making excuses for their laziness, since (1) optimizing compilers remove what little performance overhead encapsulation brings in and (2) interfaces are almost never where performance problems lie. GRADING: i noticed a couple of people havent submitted HW2 as yet. while i won't accept late hws, all is not lost - i will take the best 7 of your 8 hws for computing the grade. a former student of mine who is now at microsoft noticed i was teaching this summer class, and sent me a document on programming (it has a somewhat plain title - "how to be a programmer" - but it reads very well, and has the microsoft stamp of approval). i've put a link to it in the class page, you can access it here too. cheers, adnan