I made a strategic error in setting followups to comp.edu -- theoretically
it's the more appropriate group, but it's close to dead. So here are the
responses so far, in hopes that there will be more comments:
From: Ed Wegner <***@tait.co.nz>
Date: Wed, 15 Feb 2006 17:34:06 +1300
Post by David Alex LambWhat technologies should we teach in undergraduate software engineering (or
those portions of computing science that overlap with software engineering)?
(not "subjects" but "technologies").
Excel (or its Open Office equivalent): myriad uses - eg. for project
estimating, project planning and monitoring, trend analysis of bugs,
comparison of algorithm attributes, etc. etc.
Source Code Version Control: CVS or SVN - require the students use it on
both individual and group projects.
Configuration Management for baselining consistency / compatability of
Requirements, Testware, and Implementation
Bug tracking
scripting language (any will do, but Perl and Ruby would be choices 2
and 1): software engineering is still one of the few (only) professions
where the practitioners make their own tools.
Finally, one that might be a "subject" - or even worse, a lowly "skill"
rather than a "technology", but you should include it, anyway.
activities that require reading and understanding lots of code written
by others (mostly good code, but some bad code to fix up).
From: "Phlip" <***@yahoo.com>
Date: Wed, 15 Feb 2006 05:33:43 GMT
Post by David Alex LambI'm
slightly sympathetic to the "teaching technology doesn't belong in academia"
viewpoint but a lot less than most academics I talk to.
I love it when Robert C. Martin busts on graduates with CS degrees who never
wrote a line of code. They remind me of a certain local retail sales
specialist who likes to tease customers "I just do this because I have a
degree in philosophy."
What did you expect to do? Graduate and get a job in the philosophy
department of a major corporation??
Post by David Alex LambI haven't learned XML and the associated tools yet, so that's one I wonder
about. I consider "flexible methods" and "extreme programming" to be software
process models rather than technology, so they're already covered (among
others) as academic subjects in our Software Process course.
How about using XPath to test web pages written as pure XHTML. No more
relying on browser forgiveness!
From: "David Lightstone" <***@prodigy.net>
Date: Wed, 15 Feb 2006 11:18:06 GMT
Topic 1
A refresher course on - How to do a research paper. Covering
(1) How to collect citations
(2) How to construct an outline
(3) How do allocate citaions to the outline
(4) How to write prose
When I first learned the skill (cerca 9th or 10th grade ) the technology was
4x6 index cards, indexed tabs and a metal box.
You may think that the response is flippant, but specialize the outline to
the present "approved" means for organizing the structure of a system, the
citations to wishes and wants of your favorite manager, and you have a
simple means for preparing a requirements specification (which probably, on
one form or another, has been used for over 4000 years)
Post by David Alex LambI expect a few to answer "none but our favourite programming language(s)"; I'm
slightly sympathetic to the "teaching technology doesn't belong in academia"
viewpoint but a lot less than most academics I talk to.
In the past I've tried to squeeze in some configuration management (at the
ancient RCS/make level) but not a whole lot else (there is often no room).
A
few years ago I introduced UML into an introductory software engineering/
software architecture course. I can't at the moment recall any others.
The
database courses usually do a little some-DBMS-or-other (DB2 in our case, last
time I looked), plus SQL. The graphics course uses OGL. I've been on medical
leave for several years, so I have probably missed a few others.
I'm not particularly interested in covering all, or even most, of the current
buzzwords -- just things that introduce ways of thinking that are likely
"fundamental" in the sense of being reasonably enduring and giving
interesting/different ways of looking at, and solving, problems.
I haven't learned XML and the associated tools yet, so that's one I wonder
about. I consider "flexible methods" and "extreme programming" to be software
process models rather than technology, so they're already covered (among
others) as academic subjects in our Software Process course.
Any others? or opinions on what I already listed?
From: "H. S. Lahman" <***@verizon.net>
Date: Wed, 15 Feb 2006 18:55:04 GMT
NNTP-Posting-Host: 71.245.234.122
IMO, the most important "technology" by far is process engineering. No
matter what technologies, tools, methodologies, or whatever one actually
has at hand in a particular development environment, they have to be
glued together in a development process somehow so that they play together.
Second on my list would be process improvement. New technologies,
tools, and whatnot show up with alarming regularity. If they are to be
integrated effectively into existing development environments, the shop
has to have some sort of process improvement discipline.
Third on my list would be SQA, specifically defect prevention. The
industry is facing a paradigm shift where the old quality-by-testing
view will have to be replaced with a more process-oriented view. [Just
as what happened in the '80s in manufacturing when the PacRim started
providing products that didn't break nearly as often. Customers are
finally beginning to notice that the only thing that breaks in their
lives nowadays is software.]
One could argue none of these are technologies. But they are at least
techniques and they all have very well defined alternative disciplines
(e.g., the alphabet soup for process frameworks: CMM, ISO, etc.) that
are "teachable".
Post by David Alex LambI expect a few to answer "none but our favourite programming language(s)"; I'm
slightly sympathetic to the "teaching technology doesn't belong in academia"
viewpoint but a lot less than most academics I talk to.
In the past I've tried to squeeze in some configuration management (at the
ancient RCS/make level) but not a whole lot else (there is often no room). A
few years ago I introduced UML into an introductory software engineering/
software architecture course. I can't at the moment recall any others. The
database courses usually do a little some-DBMS-or-other (DB2 in our case, last
time I looked), plus SQL. The graphics course uses OGL. I've been on medical
leave for several years, so I have probably missed a few others.
I agree here. The OO paradigm requires OOA/D for the fundamentals and
that requires UML, even if one ends up with an OOP-based process after
school.
Similarly, any RAD environment will demonstrate the data-oriented
paradigms for CRUD/USER processing, regardless of what specific IDE one
might use after school.
Post by David Alex LambI'm not particularly interested in covering all, or even most, of the current
buzzwords -- just things that introduce ways of thinking that are likely
"fundamental" in the sense of being reasonably enduring and giving
interesting/different ways of looking at, and solving, problems.
I haven't learned XML and the associated tools yet, so that's one I wonder
about. I consider "flexible methods" and "extreme programming" to be software
process models rather than technology, so they're already covered (among
others) as academic subjects in our Software Process course.
I think some version of markup processing (XML, XMI, SOAP, etc.) should
be in the curriculum. Muck with any one of them and one can quickly
learn the others. One key idea to get across is that there is a whole
world of portable, interoperable parametric polymorphism out there
beyond type substitution and markup processing is a versatile mechanism
for achieving it.
Post by David Alex LambAny others? or opinions on what I already listed?
I would be tempted to also provide some exposure to functional
programming. In particular, contrasting it to OO and P/R approaches.
[FWIW, I think it would be grand if courses in OO, P/R, and FP all had
the same lab problem application. Then anyone taking all three could
see just how different the approaches really are.]
I also think some layered model infrastructure should be taught. It
really doesn't matter which one so long as the course underscores the
basic features (layering, decoupling through interfaces, hiding grunt
work in canned infrastructure, serializing communications, etc.).
Finally, I think some presentation of MDA should be made. While MDA
doesn't affect application developers very much, it is rapidly becoming
hugely important to tool, OS, and infrastructure vendors because it
provides a systematic approach to implementing interoperability and plug
& play. IOW, if the curriculum has a course in OSes, then it should
have one in MDA.
From: ***@alum.mit.edu
Date: 15 Feb 2006 13:00:56 -0800
Off the top of my head, I think 'gprof' or a similar profiling tool
would be worth it. After a section on gprof itself you could have a
quick discussion-only thing on deeper tools (purify/boundschecker kinds
of things on the one hand, code coverage tools on the other).
--
"Yo' ideas need to be thinked befo' they are say'd" - Ian Lamb, age 3.5
http://www.cs.queensu.ca/~dalamb/ qucis->cs to reply (it's a long story...)