Fog Creek Software
Discussion Board

software engg. at school?

For those people who went to school and got a cs related degree, then stepped into the world of production code, did anyone think courses like software engg. helped a lot in terms of design and coding large projects
I have heard CMU has something related to course work for large projects

Wednesday, April 23, 2003

The help was essentially zero.

Brad Wilson (
Wednesday, April 23, 2003

You learn to do by doing. Courses can give you ideas. You can learn about methodologies. You can read about design patterns. You can be lectured on budgeting the process.

But if you never apply it, you've not learned a thing. The schooling can provide a lot of extremely useful perspective, but in my experience, you only understand after you've taken the collection of facts your school provides and put them to use.

Mike Swieton
Wednesday, April 23, 2003

School teaches you to think in terms of boundary conditions, forcing functions, systems of equations, logic, probability and both abstract and detailed thought.  Classical ideas which are portable to any technical application.

Mrs. Robinson
Wednesday, April 23, 2003

regarding the course I took that was called Software Engineering, I found it one of the more helpful classes. We used the Pressman book and discussed requirements analysis and design documentation, estimation, and other things useful to project management. To pass the class, you had to gather a team among your fellow classmates, find a real-life customer with a need, estimate the cost, sell your proposed solution, draw up contracts, design the product with full blown documentation and deliver a working product -- all in a one quarter (10 week) long class. It was pretty tough but was a good introduction to the real world and one of the only courses that dealt with management issues, an understanding of which is crucial for any professional developer.

X. J. Scott
Thursday, April 24, 2003

Yep, I took CMU's Software Engineering course, and I think it helped, although not quite in the way they hoped.  When I took it at least (1996 or 97), it was a few small warmup projects and then a single class-wide project (80 people in 8 teams of 10 that all had to interoperate).  There was a customer with some vague requirements that had to be fleshed out, and a few "management-imposed" requirements that optimized for something other than the strict development goals (simplicity for the professor/TAs and/or politics & partnerships within a software company).

It was good in that we ran into lots of real-world problems that other school projects would never have run into, related to team size and teams optimizing for themselves without understanding their role in the entire project, etc.  The "customer" interaction and the team interaction was helpful - it was my first exposure to the tradeoffs between, for example, exposing an interface that's easy for me to expose or one that's easy for my callers to use.  Not many college kids (IMHO) have any experience with this - a 10-week project certainly isn't enough to really understand it or get good at it, but it's better than nothing.

Thursday, April 24, 2003

What is "software engg." (sic)?

Thursday, April 24, 2003

I just finished a grad course called "intro to software engineering" - the 2nd and 3rd courses in the series are "Requirements specification" and "testing"

Here's the objectives from the syllabus:

1.    Understand various software life cycle models.
2.    Become proficient in using models for requirements specification.
3.    Understand the basic ideas and techniques of functional and structural testing.
4.    Understand the roles of the supporting software development disciplines: 
•    project management
•    configuration management
•    quality assurance.

Overall, It could have been an excellent course, but we spent far too much time on theory and not enough on practice.  I'm pretty sure that most of the class can now define boundary testing, equivilance testing, robust testing, and special testing, and, given scenerios, could tell you which one to do.

The problem is, given a software system written in Java, which GVSU teaches, I'm geussing that less than 20% of the class could actually do any helpful testing work on that system.

I wish the professor had assigned us reading like "mythical man month", "Rapid Development", or "Writing Solid Code."  That might have helped.


Matt H.
Thursday, April 24, 2003

Directly applicable software engineering knowledge? Very limited. That's not what universities and professors are into, quite basically...

However, was a CS degree does teach you is a fundamental understanding of the entire pyramid of technical concepts of which an application program is only the tip.

In other words: how does the computer work at the hardware level, how does this correspond to programming languages at various levels (this tells you why languages are designed the way they are!), how do you gauge algorithmic complexity, what are the basic algorithms and data structures...

That's a very valuable foundation for software development.  It's not, however, a substitute for actually learning and practicing software development itself; that comes on top of everything you learn there.

Chris Nahr
Thursday, April 24, 2003

What I think helps enormously when teaching is giving projects and exercises that have some relation to the real world.

For example, when I was at college one of the first things I learned is what a linked list was. So I knew what a linked list was, but certainly didn't appreciate when one should be used until I started programming professionally and came across situations where I'd have to keep a variable list of settings in memory, and suddenly ... aha, that's where the linked list comes in.

I certainly didn't "get" OO programming until some years into my professional career, despite having done a whole module on its theory at college.

Better than being unemployed...
Thursday, April 24, 2003

I think BTBU illustrates the point exactly. A Software Eng. course teaches you what a linked list is. It may give you some hints on when to use it, but they will be pretty abstract. You probably won't really understand when to use it until you get a real life situation.

On the other hand, if you are not taught what a linked list is, how will you ever realise when to use it?

David Clayworth
Thursday, April 24, 2003

For what it's worth, the software engineering course *I* took never talked about linked lists.

Software Engineering covers:

Software lifecycle
Requirements gathering
Development methodologies
Code reviews
The cost of change curve

and so on. Linked lists were part of Computer Science 101. That's not a software engineering course. If it's called software engineering, your CS department is crap.


P.S. For an outline of the class I took (although not with this professor) try:

Chris Tavares
Thursday, April 24, 2003


Generally it will be an introduction to programming or other Freshman class that discusses linked lists, binary trees and hash tables. Sophmore year you'll take an algorithms class and start talking about O(n) complexity, B-trees and more. Softeware Engineering is usually junior or senior year and deals with project management issues (like COCOMO, function points), business (contracts, case studies of great failures in software engineering) and architecture issues (like cohesion, coupling, patterns).

X. J. Scott
Thursday, April 24, 2003

Ah ya beat me to me own post. I agree with this and second the idea that one should be extremely cautious of any CS or other engineering program that calls intro to programming  SE.

X. J. Scott
Thursday, April 24, 2003

It may sound funny, but I am actually working on an undergraduate degree in Software Engineering (or so they call it) at U of Waterloo.

You can check out the curriculum at

So far it's been fine.

Pavel Levin
Friday, April 25, 2003

I actually took 3 classes that relate directly to SE.  2nd year basic se class that covers processes, req, design, coding, testing, code reviews , and you get to work on a small project with a team of classmates. 

Senior year there is a required senior project class that covers a full year.  We had a team of 8 people and worked with a real client on a real application, everything from req to final testing and deployment.  In our case we wrote an application(15k lines of vb, yuck!) for Raytheon.  This definitely taught us how to deal with a difficult client!  This was a very rewarding class, knowing that we actually finished something that was useful.  Last I heard it was still being used there. 

I also took a graduate level class as an undergrad elective that covered software process improvement.  We studied CMMI, ISO standards, and most importantly what was wrong with them and how to improve them. 

Overall I would say that these classes were very useful to me.   

Friday, April 25, 2003

*  Recent Topics

*  Fog Creek Home