Fog Creek Software
Discussion Board




Updated Software Engineering Course

I'm picturing an updated software engineering course that covers the topics of the past decade:

The course would be split between lecture and lab time.

1) Extreme programming:  Explain Unit Tests and Pair programming, code standards, etc.  Small programming taks can be assigned during labs, and partners rotated often.  Lab consists of a Graduate Student Instructor playing the role of the Client,  helping the team come up with one short story to be implemented during the lab

2)  Refactoring:  Lectures cover the refactorings themslevs, with homeworks to refactor small chunks of code.  This could be like math problem sets.  A lab could have the team wokr on a larger refactoring of a real piece of code (I have several I am willing to offer ;)

3)  Design Patterns.  Once the class is comfortable with refactoring, Design patterns would be introduced.  I like the industriallogic.com ordering.  Students would be encouraged to form study groups.

4)  Refactoring to patterns:  A set of programming problems would be analyzed in lectures showing how the code could be better structured using design patterns. 

5) Use acceptance testing:  The studesnt would switch roles to be the client.  In several media, the students would work through automating acceptance tests.

6) Optimization:  Students are taken through optimization issues on several platforms, from Database queries to embedded applications.  The practice of profiling and optimizing would lead, followed by a cross section of the skills to optimize.  The use of design patterns for effeicincy would probably be covered here as well.

7)  Code analysis:  This is where students have to read prexisting code, and come up with ways of understanding it.  Reverse engineering using tools like UML/ERD diagrams, notation.

Obviously there would be quite a bit more here, but I think quickly you would find that you needed to prioritize and only teach what could fit in to a semester course.


Any thoughts?

Adam Young
Friday, January 17, 2003

Seems like a rather odd collection, rather than being a coherent plan of instruction in software engineering.  It's sort of a "Topics in SWE" course.

z
Friday, January 17, 2003

Well, I have to admit I brainstormed as writing; I wanted to get my thoughts down and organized.  However, these are thetechniques I've found most valuable in Software Development over the past couple of years, and I think there is a coherent, thread betwen them.  I know a few people that are attempting to document this (Future Addison Wellsey Books).  But yes, the organization needs work.

One other Item I'd probably want to work in there somehow is generation of documentation from code:  Javadocs, perdocs, Doxygen.

The end produt I would see being a project for a small team.  Class members submit project suggestions.  I your project gets selected, you get to play the role of customer,  Otherwise, you end up on a team implementing.

Adam Young
Friday, January 17, 2003

Requirements gathering. 

Bob Greene
Friday, January 17, 2003

Sounds interesting, but I can't see that Design Patterns or Refactoring warrant more than a lecture or two each. I would hope that most SE courses are doing Acceptance Testing and Optimization already (or maybe I'm too optimistic).

I would think most Universities are leaving XP until they can be sure that it will still be around five years from now.

David Clayworth
Friday, January 17, 2003

It would take 5 years to get most univerisits to change their curriculum.

In my Software Engineering, we learend Object Oriented Design using Grady Booch's Method.  In Ada.  It was a fairly recent concept (back in 1991) that came out of industry.

As for requirements gathering, I would be interested in how you think that should be taught.

Adam Young
Friday, January 17, 2003

I learned all of this stuff on the job, whilst being paid to do it. Why would I want to pay for a course to do the same thing?

schooled
Friday, January 17, 2003

Martin Fowler's book "Patterns of Enterprise Application Architecture" is what I wish I had a general feel for back in my school days.  I just felt like I had no realistic idea what most programmers did.  I just couldn't believe that most programmers were writing compilers, crafting better algorithms, building better AI, and doing embedded work in assembly language.  Fowler's book maps out the territory of what I consider meat and potatoes programming in "the rest of the world."

ODN
Saturday, January 18, 2003

And I disagree with the poster who feels design patterns only warrant a lecture or two.  I would have benefitted greatly from a semester devoted to the GoF book, combined with the Fowler book.  These should be presented as depth concepts, not breadth.  Patterns need to be internalized far more deeply than say sorting algorithms.

ODN
Saturday, January 18, 2003

don't be such an idiot, schooled.

it's not that -you- would pay for it, it's what does the person doing the hiring wish that the new grads already knew.

sammy
Saturday, January 18, 2003

It'd be amazing if they taught something that you could directly use.  I just graduated not too long ago and they never mentioned design patterns or refactoring or anyting like that.  I had learned and used them on my own but not because of school.  Granted, I wasn't a CS major, but I did take some programming classes that dealt with database programming and even OO. 

I'm still in my college town.  I wish they would teach a good SE course like we are talking about here that Alumni could go take.

Jonathan A.
Saturday, January 18, 2003

This course sounds more like Software Buzzword Engineering to me.

Pavel Levin
Saturday, January 18, 2003

Your course seems more an 'Applied Software Engineering' course than else, but nonetheless, I would be the first to attend.
In my university ( http://www.unica.it ) we do have a course where XP is teached (on par with Smalltalk), but both Refactorings and Design Patterns are just hinted. I had to learn Patterns by myself, and to bug my teacher till he let me attend a tutorial on Refactoring by Fowler himself.
Also, my final ssignment for that course was to build a web tool for managing an XP project, using an XP process.

Giovanni Corriga
Sunday, January 19, 2003

I doubt that optmisation is taught in many Uni SE courses these days. For most people that kind of thing would be wasted because you don't get to do it in RL. Some areas (embedded, graphics, etc) it is common, but in my experience most companies won't allow its engineers to sit around and twiddle to get an extra point of performance, whereas in the areas I mentioned it is often necessary in order to get the software to fit into the constraints (speed, available memory, etc).


Monday, January 20, 2003

I think the elements of the course I've laid out would be a follow on to basic "how to program"  course.  This style of programming is what distinguishes a professional from a ...not sure what term to use here.  I've coined the term ICIC which stainds for I Code in C, meaning people that code in OO languages without taking advantage of the OO sturcture.  But even in C there is organized and there is disorganized.  There are well though design patterns visible in both the Linux Kernel and GTK+ code I've examined.

Is it Buzzword compliant?  Nah, there are sload of current bozzwords we haven't even mentioned.  Is Design Pattern a Buzz word, perhaps amongst managers it is.  But when my coworker and can cut a conversation short by talking about "Repository Pattern" as happened this morning, they obviously have value. 

Applied Software Engineering seems a little redundant, don't you think?

Adam Young
Tuesday, January 21, 2003

Teaching XP is good. My university still explains the waterfall ..

Evgeny Goldin
Wednesday, January 22, 2003

I think that instead of studying XP you should "reverse engineer" it and find the problems it's trying to solve.

You can argue over the solutions, but they do address serious problems.

Stephen Jones
Wednesday, January 22, 2003

>Applied Software Engineering seems a little redundant, don't you think?

I dunno. In my uni, the 'Software Engineering' course is quite theorethical. You know, process models, cost estimates, risk management... not the kind of things that a student may immediately use. Design patterns and refactorings, on the other hand, are more "hands on" topics. So, I think 'Applied' is justified.

Giovanni Corriga
Wednesday, January 22, 2003

Antoher thing has come into my mind: what about adding CRC cards to the course?

Giovanni Corriga
Wednesday, January 22, 2003

I personally have never used CRC cards.  How would you suggest they be added to the course? 

Adam Young
Wednesday, January 22, 2003

CRC cards are quite useful when designing a system, for they allow a rapid individuation of the key objects of the system. You may use them to explain the design patterns (using CRC cards instead of the Booch's diagram used in the Gang of Four book), or when analyzing existing code.

For more info on CRC cards, see

http://c2.com/doc/oopsla89/paper.html

http://c2.com/doc/crc/draw.html

Giovanni Corriga
Thursday, January 23, 2003

*  Recent Topics

*  Fog Creek Home