Seminar Summary of Classic ACM Papers: Part II

Here is another of my seminar summaries from Student Originated Software on one of the classic ACM papers we have been reading.

As with my last summary post, please don’t bother stealing this.  It’s immoral, unethical, and usually just plain rotten.  If you don’t understand the paper but you are required to turn a summary in, you need to read the paper carefully – this summary comes straight from the paper text, as with the summary posted in Part I.

PARNAS, ON THE CRITERIA TO BE USED IN DECOMPOSING SYSTEMS INTO MODULES

Parnas utilizes the example of a KWIC system to demonstrate how programs can be constructed by utilizing a series of different modules. By way of this example, he demonstrates how different modularizations yield different results in the level of information hiding available. He suggests criteria that might be used to properly construct these modules in order to ensure that modules may be developed independently of one another. He claims that the managerial and development time should be drastically reduced and that it should drastically increase the comprehensibility of the program for coders.

Parnas explicitly defines a module as a “responsibility assignment” rather than a subprogram, which may actually limit his argument. In larger programs, subprograms could in fact be fully modularized via responsibility assignments controlled by a master module called by the remainder of the program – the level of decomposition he discusses here can be more widely applied than is implied by the remainder of the paper. He creates two different modularizations for a KWIC index system: the first is based upon the stages the program steps through, the second is based upon discrete units of functionality. The first modularization utilizes five modules: input (reading in data), circular shift (finding the location of each circular shift), alphabetizing (alphabetizes the shifts), output (prints the shifts), and the master control module, which controls the operation of the program. This first module, Parnas argues, is the approach that would be used by most coders in creating a modularized system.

The second modularization utilizes six modules: line storage (responsible for the management of information regarding circular shifts), input (reads in from the input media), circular shifter (manages anything to do with shifts), alphabetizer (manages the alphabetical ordering of shifts), output (prints circular shifts), and master control (same function as the previous modularization). Parnas then begins to compare the benefits and drawbacks of each modularization. Both modularizations ease the ability to program each section individually, but only the second appropriately hides information so that the other modules do not need to rely on or replicate knowledge provided by other modules. After assembly, each module could be analytically identical, but the second module has more potential to be developed in an inefficient manner due to the information hiding available in this approach. Parnas also extensively discusses the changeability of each module and areas that could be modified and the impact that such changes may have on the programming of each module. Parnas is also concerned about the comprehensibility of code.

He proceeds to give an analysis of the impact of changing a particular portion of the design on both modules, isolating the circular shift algorithms. He gives examples of advisable decompositions for the system: creating data structures as a single module, pairing routines with their calling instructions is a single module, control structures are a single module, and information about the inputs are a single module.He also discusses the difference between hierarchical structures and modularization. He states that having a partial ordering of modules that allows different modules to use lower-level functionality and stand alone is beneficial; higher levels can be pruned to create a new program with the same base functionality.Thus, he concludes, a combination of modularization and hierarchical ordering can be greatly beneficial to a program.

In his conclusion, Parnas disdains directly correlating program modules with steps in a flowchart, instead urging the usage of a list of design decisions that could change and to press for information hiding whenever possible.

Seminar Summary of Classic ACM Papers: Part I

Student Originated Software, my yearlong software development program at Evergreen, requires us to write a weekly summary of the reading assignment for that week. I thought I might share some of these summaries, as well as links to the papers themselves.

I shouldn’t have to say this, but in this day and age, better safe than sorry – plagarism is a very bad thing. As a writing tutor, I condemn it, and if you steal my summary and pass it off as your own, then you are likely in violation of some sort of ethics code (more than likely academic, but possibly professional). Save yourself the trouble – don’t do it. If you need to steal a summary instead of reading the paper, perhaps you’re in the wrong place in life.

WIRTH, PROGRAM DEVELOPMENT BY STEPWISE REFINEMENT

Programming, according to Wirth, is too often taught in the abstract; rather than providing specific, concrete examples for students to follow and build on, students are crammed with abstract facts and information about a language, rather than focusing exclusively on methods of design and construction in the context of those languages. Thus, Wirth puts forth a problem by which to construct an ongoing example of how to design a program. The Eight Queens problem states that eight queens must be placed on an 8×8 chessboard in such a way that no one queen endangers the others. Wirth puts forth that the best way to develop a solution to this problem is, first, to develop an appropriately abstract notation in which to discuss the program’s development and evolution. He first posits an approach that is essentially “brute force”; try every possible combination until generating an acceptable result by examining every possibility in the problem domain. The issue with this solution is that it takes seven hours to come up with a single solution, much less multiple possible board layouts!

Wirth’s second solution is to generate two subset predicates from the overall result. Thus, the join of those two subsets yields the full domain of problem results. Through preselection, he reduces the problem to only a 100-second execution time. However, this second result isn’t beneficial either; rather than taking 2^32 tries to find solutions, this algorithm takes 2^24, an improvement of 0.003% – negligible! Wirth then proceeds with a third, far more elegant solution: treat each column on the board individually. As a queen is placed, she invalidates certain positions on the board: no queen may be placed on the same column, the same /-diagonal, or the same -diagonal. Since queens are being placed sequentially left to right on the board, you are only ever dealing with N queens in the Nth step. Therefore, place a single queen on the board; as that queen is placed, track in three arrays the diagonals and columns where other queens may no longer be placed according to a set of coordinates. If necessary, be able to backtrack from a particular solution so that all possible solutions within the problem domain are tested. Under this algorithm, the full solution set is found within 15 minutes.

Wirth then steps through the development of the code behind each of the possible solutions, showing how each step in generating the code is merely a refinement of the previous possible solution; he does so by developing a series of primitive operations and refining their definition step-by-step. By defining these instructions in the abstract and waiting until the last possible second to assert data representation, Wirth is able to create a solution that utilizes the same functionality in slightly different ways.

Wirth concludes that the best way for programs to be designed is through stepwise refinement which waits until the last possible step to determine data representation and to commit to a particular structure. This is the only way to do careful programming that yields a clean and efficient result.

Graduate School Updates

I thought I’d post an update to my musings on the future done last month. I’m scheduled to visit Bainbridge Graduate Institute (BGI) on November 5th to take a look around. My running questions list for these guys so far is as follows:

  1. What is sustainable business?
  2. What sort of impact do you envision BGI graduates having upon the practices of a non-sustainable business?
  3. Upon graduation, what jobs do BGI graduates usually take?
  4. Does BGI routinely create MBA students that are as well or better prepared than MBA students from other schools?
  5. How well does BGI prepare students to challenge the perceptions of business leaders and innovators?

I have basically ruled out Teach for America as an option for future work. I realized that, while I wholeheartedly support the social vision and ideology that Teach for America represents, that I have heard a lot of stories about Teach for America students who are not well supported or prepared for their work. I applaud their efforts, but such a program doesn’t fit who I am.

I am, at some point this fall, going to attend an information session for Evergreen’s Masters in Teaching program. I haven’t figured out exactly when yet — it depends upon my ability to fit it into my work and class schedule.

Class Progress and Musings

The last two couple of weeks in Student Originated Software have consisted of a lot of stress where it didn’t belong. I think part of this is because I’m still very overwhelmed from summer, but another part of it has to do with my own level of personal engagement with the material, which, at least for some portions of the class, is nonexistent.

I’m basically feeling like I’m getting nothing out of specific parts of the program other than a lot of frustration. I’m just plain not interested in the programming component, which is what I’ve realized over the last couple weeks, but the object oriented analysis and design, seminar, and project stuff is interesting. I’m actually in the middle of trying to chase down the possibility of submitting a software development project on behalf of the Writing Center, which I could get really excited about.

I think I could very well be a very engaged member of SOS, but I’m also feeling like there’s way too much on my plate academically — I’m only enrolled for 16 credits, and I’m not happy with my own engagement and interest in the program which is being clouded severely.

It’s a great program, but I need a little less academia in my life right now in order to pull this quarter off. I haven’t even started to consider whether I’m remaining for the entire year or not. This is dependent upon whether programming continues to be a central part of the credit allocation or whether it becomes an integral part of the projects. I think I’d do a lot better at the programming side of the program if it were self-driven.

Can’t Sleep: Musings on The Future

Lying in bed and not being able to sleep, I found myself quite preoccupied with the future and what was in store for me over the next couple years. I decided to organize my thoughts somewhat.

I organize this by academic year because I know that I intend to continue in academic life for a few more years after my graduation from Evergreen.

Short Term: 2005-2006
I am currently working on a dual BS/BA at Evergreen in Computer Science and Writing, respectively. If I decide to chicken out on the Computer Science curriculum after Fall quarter, I have one program I really want to take — A Novel Idea, which is a full-immersion novel writing class that would finally give me no excuse but to work on the novel that I’ve been kicking around for so long. Of course, if I drop out of the Computer Science curriculum, that’ll lock out some of my future choices, which will make everything else significantly easier in terms of academic planning.

I also need to sign up to take the GRE and the GMAT, though I also need to do some assessment testing to see what path makes the most sense. Doing both the GRE and GMAT will leave my options open down the road so that I have those scores when I choose to go to graduate school.

I’m glad that’s a when, not an if. At least that part is settled.

There are other short-term choices I need to think about, such as applying for the Assistant to the Director position in the Writing Center come Spring Quarter (which I will definitely be doing).

Two Years Out: 2006-2007
If I’m not in the Assistant to the Director position, then this will be an interesting transition period where I will likely find another job while I plan my next step into graduate school or other work.

Three Years Out: 2007-2008
At this point, there are several options which all seem to me quite interesting, but I’m not sure how many are practical. I know I need to be doing one of them to be happy with the way my life is going by this point.

  • Graduate School: Business
    This one is really appealing to me because I have always been interested in business and the way businesses operate. I’ve taken a number of business programs at Evergreen which I enjoyed, which really makes this appealing. I also have a huge interest in sustainability, so the ability to combine sustainability and business (via an MBA through Bainbridge Graduate Institute) would be great. I’m not sure how this would fit into my life versus a normal MBA with no sustainability focus, however.
  • Graduate School: Creative Writing/Writing
    Writing has always been and continues to be a part of my life. My job at Evergreen’s Writing Center has been the best job I’ve ever had, hands down, and being immersed in that culture has allowed me to perceive writing from many different lenses. I can see myself still being a very active part of writing culture as a novelist or short story writer. I would also not be adverse to returning to the world of writing centers through a role as a director or educator.
  • Graduate School: Teaching
    For some people, this one makes no sense given what they know about me. However, I’m interested in how education can mold and influence future generations and how they interact with the planet and society. Changing the minds of children for positive means can change the future for the better. I believe in effecting change however possible; this is also why a sustainable MBA focus would be good for me, since that, in and of itself, is changing the way businesses think about the world.
  • Graduate School: Computer Science/Computer-related field
    Of everything so far, this one, right now, feels very unlikely. However, I keep in mind that my foray back into computer science next quarter is intended to allow me to determine once and for all whether computer science (or computer-related disciplines) is something I wish to pursue as a long-term commitment. There are no concretes about this yet at all. I put it here because it may still be a viable option.
  • Teach for America
    Of everything so far, this one is the one that feels like the biggest leap. I’ve always been interested in Teach for America and its philosophy of extending education into places that need quality teachers, but I’ve never really considered whether this is something I would fit into. It’s something that has crossed my mind numerous times and that would be very enriching for me if I chose to do it, but it would also delay my graduate school plans (which would still be in place after my two year commitment to the program, more than likely).

This may shift depending on whether I rule out Teach for America as an option I want to pursue.

Graduate Work

One night, doing a Google search, I ran across the Bainbridge Graduate Institute, which offers an MBA in Sustainable Business. This really piqued my interest, since sustainability, business, writing, and computer science are some of my more enjoyable academic topics.

I’m going to see about going up there for an open house sometime later this year, just to check it out. This will likely be towards the end of September, at the start of Evergreen’s academic year.

I’ll have to look into taking the GMAT and the GRE sometime in the next year or so. Of course, I’m not ruling out the possibility of doing graduate work in writing or computer science, but I will have to do a lot of deep thinking about where my priorities lie in order to decide which of those I follow.

Graduation Application and Evaluations

I went in and turned in my graduation application today. The woman at the Registration and Records desk knew why immediately, asking me whether I was applying for a BS. The answer is essentially yes, though it’s actually the BA and BS combined. The requirements for that are 225 credits with at least 90 of the final 135 earned at Evergreen, which include 72 credits of science, math and computer science, of which at least 48 are upper division. At the moment, I have 22 upper division credits, only 8 of them in computer science. No biggie — I stand to get an additional 48 upper division computer science credits through Student Originated Software.

Thus, my BS is obviously in Computer Science. I’m sticking with the idea of having my BA in Writing, since I’ve done enough of it within the last four years. That’s an easy argument to support.

I also went in and had the second part of my evaluation appointment. I should be getting 4 upper division writing credits out of the 8 credits total for that contract. Cool.

Only another year left…

Fall 2005 Class Debate Over

I decided to go with Student Originated Software, though I admit to still being worried as to whether that’s the right choice. We’ll see what happens. I’m really interested in being on more of the executive side of computing or business, but I figure that having a computer science degree will help with bridging the gap between business and technology.

My dad made a point — programmers today are a dime a dozen, and much of the glory of being a programmer is fading. That’s not really why I’m taking the program, though it is heavily software development — the process inherent in software development can be applied in other places, and bridging disciplines and differences is inherent in Evergreen’s Five Foci of Learning. I think I can use what I learn out of this process within a business environment quite successfully if given a chance.

I paid both summer tuition and my Spring 2006 graduation fee today. I’ll be dropping off my graduation application for a combined BS/BA the next time I’m on campus (sometime next week). The BS will obviously be in Computer Science; I figure that the BA will likely be in Writing. Neither of these will actually be on the degree, but I can make the argument with my summative eval that I have enough experience in writing to pull it off.

The Fall 2005 Class Debate

So now I have to decide which program it is that I want to take for
Fall, and it’s giving me a bit of a headache. I can see pros and
cons for taking either one. I reverted back to something that I
did when I was selecting colleges and started typing up a pro/con list
for taking either program. Right now, it doesn’t feel like either side
is winning. On the one hand, I really enjoy business and I like the
idea of focusing more on business ethics after my experience a couple
years ago. On the other, I also rather enjoy computer science, but I’m
not at all sure of whether I could succeed in another computer science
program after my rather frustrating experience with Data to Information
last year. The clincher here is that the only part of Data to
Information
that really gave me heartburn was the Discrete Math
component — I did well in and really enjoyed all of the other
components of that program. Student Originated Software has no math.

One of the other big tripping points for me is that I know that what I
graduate with, in the short term, will control what jobs I can get. I
have also considered applying for a dual degree if I take Student
Originated Software
, since I definitely would have enough credit to be
awarded both a BS and a BA (and, in fact, dual degrees are why most
people stay a fifth year). If I did that and decided I didn’t want to
do computer science, I’d have the BA as a fallback, but it wouldn’t be
in business. I guess what I’d love is a BS in computer science and a BA
in business, but I’m fairly sure my credits won’t support that by the end.

Here’s my pro/con list for both programs as it stands:

Reasons to Take SOS

  • All-year program focusing in Computer Science
    would allow for application for dual BS/BA graduation with computer science and another possible arts topic (writing?)
  • Challenged to succeed and defeat previous beliefs regarding strengths in computer science
  • Opportunities for practicing oral presentations
  • Upper division science credit for BS in Computer Science; closely related to second bullet
  • Strengthens work with databases
  • Real-world opportunities for practicing oral presentations and leadership skills with a chosen software client (likely the Writing Center, unless assigned to another project)
  • No math component

Reasons to Take Business in Society

  • Reviews and strengthens an area I am already strong in
  • Focuses upon business ethics, a topic of interest to me
  • Higher confidence in business and business management than in software development
  • More opportunities for writing to strengthen possible degree focus in general writing
  • Confident of success in the program
  • Opportunities for practicing oral presentations
  • No initial problems with staying for full program

Reasons Not to Take SOS

  • Not confident of succeeding in the program
  • No strong math background to back up computer science degree (though this may not necessarily be a negative)
  • Not sure of remaining for all three quarters, which could be problematic depending upon the project

Reasons Not to Take Business in Society

  • Two-quarter program, no further coverage in business currently planned for Spring according to catalog
  • May not be satisfied in the end with my own effort to overcome challenges by not taking SOS