Forgot your password?
typodupeerror

Software Dev Cycle As Part of CS Curriculum? 431

Posted by Cliff
from the from-start-to-finish dept.
tcolvinMI wonders: "I graduated from a small private college a few years ago with a degree in Computer Science. The main focus of the program, at this particular college, was to give you the tools necessary to be able to learn any programming language based on conceptual information, while having been introduced to several popular languages such as VB, C, C++, and Java. However, there was no 'final project' course that introduced a student programmer to the process of software development as a whole. Today, I was talking with a professor and pitched the idea of introducing such a course that would allow students to essentially go through the entire process from design to deployment. Is there any need for such a course? If so, what lessons would you place an emphasis on? So far, my idea is to allow a student to design an application that can be completed within the alloted time frame, develop in an approved language (one they've had and one the professor also knows), go through the QA process and then finally deploy the app to be evaluated by the other students in the class, who have not participated in the project." If you went CS, how well did your lessons prepare you for real project work? If you had a chance to prepare other college students for a career in development, what things would you teach them, and why?
This discussion has been archived. No new comments can be posted.

Software Dev Cycle As Part of CS Curriculum?

Comments Filter:
  • CVS (Score:4, Insightful)

    by JoshJ (1009085) on Saturday November 11, 2006 @07:05PM (#16808834) Journal
    You need to be able to work on a team, and you need to be able to deal with a large group. A large group coding requires CVS or something similar. This should be included in the curriculum.
    • At UofT... (Score:3, Interesting)

      by ThomasFlip (669988)
      At UofT we have a software engineering course. We do a project based on a real world theme starting from requirements on through to design and implementation. We learn a lot about project management along the way as well. The course code is CSC408 for any interested in using Google. We even get to (collectively as a class) choose which language we want to use for implementation. We don't necessarily use CVS, but it is taught in earlier courses.
      • by grimsweep (578372)
        Aye. At UTDallas, we've got a Software Engineering degree plan. It was my Masters. Testing was probably the hardest (and most negligible) part of the whole curriculum, but I'd say it's about as close to real-world as I've gotten without an internship or a real job.
        • Re: (Score:4, Informative)

          by Progoth (98669) on Saturday November 11, 2006 @10:54PM (#16810444) Homepage
          I graduated from Georgia Tech last year after finishing the 4 year CS degree.

          We had multiple classes that had a whole "software development process," and I'd honestly look pretty skeptically at any CS program that doesn't. We had a Senior Design course that was required to graduate, and a required Software Engineering class that encompassed the whole "process." We had to go through the same type of process in a couple other CS electives. To be a bit more clear, the "process" was stuff like documentation and writing papers.

          Having said that...I always took on the "master coder" role in our groups and stuck other people with the other stuff. I don't regret it, I've certainly never had to do anything besides code and test my own code now that I'm a developer. Granted, I never WANT to do general project planning/document writing/etc, while some people may find that desirable. Managers probably make more money. Don't know, don't care. I speak and type English very well, if too succinctly, and that's about the extent of my non-coding required skills. I hope to never have to write a 50 page requirements document.

          Anyway, to the submitter, you're missing one huge aspect: teamwork. If you're going to try to teach The Real World, then students need to work with others.
    • by Tatarize (682683)
      I graduated a few years back and it was included.
    • Re:CVS (Score:4, Interesting)

      by dvice_null (981029) on Saturday November 11, 2006 @07:40PM (#16809178)
      Not only using a CVS, but also installing such. If you end up working in a company where there is no CVS in use and no-one knows how to install it, how usefull would your skills be there? Well I actually have been in this situation and it took less than a day for me to learn and install subversion there for us to work with.

      What I missed at school was courses about GUI designing. I think the GUI designing should be one large part of the programming education, because quite often you have to design the GUI for our own programs, unless you work in large companies, where there are separated people to do this task.

      On the other hand, we did have several courses where we designed, implemented and tested a whole program. Either by solo or in a group of 2-5 people. I'm surpriced to hear that they actually have schools where this isn't done.
      • Re:CVS (Score:4, Insightful)

        by sfled (231432) <.sfled. .at. .yahoo.com.> on Saturday November 11, 2006 @08:58PM (#16809756) Journal
        About those GUI thingies: Yeah, they probably matter. Form, function, all that neat stuff.

        My degree: BFA in Graphic Design. I've been designing sites for a few years, and just recently signed onto a company that decided that I should learn development as well.

        So, for the past three-and-a-half months I've been learning asp.net and C#(code behind) on the job. The upshot is that I lke Visual Studio (and no longer depend on ImageReady to create my rollover LOL), but have also (on my own) been learning PHP and Javacsript. The MS SQL server procs I've been using have given me insight into how to use MySQL on non-MS sites.

        As an artist I am grateful for the opportunity to learn programming. Although I understand that I will never be a Programmer (a gift and a talent), learning some of the basic precepts has helped me to better conceptualize my design.

        If you have the talent to program, you might also take it upon yourself to take a brief course in basic graphic design, or art appreciation and theory. If you're eyes aren't built for such a thing (color blind, etc.) then try music appreciation and composition. You may not be good at it, you may find yourself frustrated at learning something 'hard' (to you - just as coding is hard for me!), but I guarantee that if you follow through, your coding will be better for it.

        Peace,

        EdTheRed

        • Re: (Score:3, Insightful)

          by Metasquares (555685)
          A lot of programmers (a lot of the good ones, anyway) seem to have an affinity for music, so it may be worth taking a few music courses anyway - it might spark a latent interest and it will help students get a sense of aesthetics in general.

          Elements of graphic design should be taught in a web development course, but lacking that, I agree that taking a separate graphic design course will help with GUI/Web development.

          Nothing says it has to be hard, either. I found music appreciation (and piano I, piano II, c
        • Re: (Score:3, Insightful)

          by kakalaky (902350)
          Best way I have come across to make sure any gui I make is the way it should be, get lots of people that know nothing about computers to try it and see if they can use it. Unfortunately, these same people are not the ones doing beta testing for most software.
      • Re: (Score:3, Informative)

        by Tim Browse (9263)

        Not only using a CVS, but also installing such. If you end up working in a company where there is no CVS in use and no-one knows how to install it, how usefull would your skills be there?

        The point of education is to teach you how to fish, not to give you fish. Learning how to install a particular revision control system should definitely not be on the list of priorities. Learning what a revision control system is, what it does, how it can help you, etc. are all way more important. A CS degree should not

  • How it would go (Score:5, Interesting)

    by MyLongNickName (822545) on Saturday November 11, 2006 @07:05PM (#16808838) Journal
    From My work experience,. here is how it would go, assuming a fifteen week semester:

    Week 1: Agree in principle to what that user wants
    Weeks 2-12: Go through iterations of determining specifics. Submit statements of work. Get ignored. Call. Get put off. Managers argue about whether background should have corporate logo, or whether it should be a neutral color. Finally get signed documents at end of 12th week.
    Week 13-14: Work like mad to code the thing.
    Week 15: Users bitch because you aren't done yet.
    Week 17 (two weeks past deadline): Get work submitted that meets specs.
    Week 17 1/2: Managers complain that five items not on statement of work were not addressed. When you mention it was not on the specs, they reply "well, it is kinda obvious, you should have realized"
    Week 18-25: Repeat weeks 15-17 1/2 about five times.
    Week 26: Switch major to engineering.

    • by MyLongNickName (822545) on Saturday November 11, 2006 @07:09PM (#16808870) Journal
      Oh, BTW. If you mod this funny, then you are not a software developer. If you were a software developer, you'd be too busy having a post traumatic stress flashback to moderate.
    • Re: (Score:3, Insightful)

      by Jonny_eh (765306)
      Don't think that engineering's all that better.
      • Re: (Score:3, Interesting)

        by TapeCutter (624760)
        Yes it's the same in many other industries, a long time ago I drove a taxi for a living, taxi users quite often expect the driver to know exactly how to get to their street and get impatient if the driver has to look it up in the street directory. I used to tell them "I don't get paid enough to memorise 40,000 streets", nowadays I tell scope-creepers "We will have to estimate the impact" and let the PHB's argue about the costs.

        The best PM I ever worked for often said "if we don't find any problems we are
    • Re: (Score:3, Insightful)

      by flynt (248848)
      At my university, we had a class almost exactly like the one the OP talks about. It went almost exactly like you described. However, you're not forced to finish the project, you simply hand it off to the next group in the class the following semester, they pick up where you left off. Ultimately, the projects get done, having been through several group's hands. Some work out, some don't. I suppose this is perfect training for 'the real world'.
      • However, you're not forced to finish the project, you simply hand it off to the next group in the class the following semester, they pick up where you left off.

        You've just described my job.

    • Weeks 2-12: Go through iterations of determining specifics. Submit statements of work. Get ignored. Call. Get put off. Managers argue about whether background should have corporate logo, or whether it should be a neutral color. Finally get signed documents at end of 12th week.

      As a young engineer I thought such things were complete crap too. However, regardless of how brilliant your spec/design is if it does not get "sold" to the client it is useless. If color schemes and logos make the sale more likely
      • The point that I am trying to make is that we engineers are not the all knowing genius' we like to think we are. We are often quite ill-informed with respect to business.

        Alternately, this is a question of differing priorities and may point to a defficiency in your contracts. Add a clause allowing for correction of ommisions with a capped amount and a lighter process for approving them and you may do better by both your engineers and your customers.

      • Re: (Score:3, Insightful)

        by msobkow (48369)

        Even if what all of the "PHB's are idiots" ranters were 100% correct, that wouldn't help prepare a student to deal with the real world. It might scare them off, which could be a good thing, but it doesn't help.

        Pure programming as a job is pretty much dead.

        You must have some business analysis skills, sufficient interpersonal skills to discuss hot issues without upsetting everyone, and enough political savvy to get what you need to do your job. When you get tagged with incomplete or inaccurate specs, y

    • by nametaken (610866)
      Amen brother.
    • Re: (Score:2, Insightful)

      by kfg (145172)
      Switch major to engineering.

      Physics is not mechanical engineering. Computer Science is not Computer Engineering is not programming.

      If you feel the need for a practicum in your CS program to prepare you for a job in the IT industry, perhaps you have simply chosen the wrong course of study.

      KFG
  • by MeanMF (631837) on Saturday November 11, 2006 @07:05PM (#16808840) Homepage
    I think there should be one project that the whole class contributes to. That way the students can get used to working with a bunch of morons.
    • Re:Group project (Score:5, Insightful)

      by Salvance (1014001) * on Saturday November 11, 2006 @08:03PM (#16809360) Homepage Journal
      Hehehe ... when you're a student, this "working with a bunch of morons" statement feels like the truth even if you're teamed up with brain trusters at a top CS school.

      In college, the smart people are building their own businesses and doing other things on the side, and don't really want to deal with team projects that take insane amounts of time. The regular folks just want to party and get by with the least amount of work until they can get a real-world job. The true "morons" are the ones who love group projects, because they can do very little work and leach off the rest of the group. So a team-based software development project ends up catering to the folks who don't deserve it.

      When you graduate, a CS major is typically hired to program. After a few years they can move into different positions, but why dilute their programming experience with skills that they'll learn better on the job?

      My suggestion is that if you want business skills, take a few business classes. If you want project management classes, take a class or two dedicated to PM. Otherwise, code away.
    • by Aneurysm9 (723000)
      Yeah, that worked out real well for me in my Senior Software Project. I ended up stuck integrating the work of several other students, none of whom provided it to me on-time or on-spec, which meant that I was unable to finish my work by the deadline and got stuck with a D+ even though I did the entirety of the system design and most of the integration.
    • by siwelwerd (869956)
      Parent is modded funny, but I think it's really insightful. Face it, in any large project, a competent programmer will have to go back cleaning up after the morons who worked on it before and/or concurrently with him. What better way to learn how to do this than working with 20 students of varying competencies? It might even be beneficial to work off of the last semester's code as well, as you rarely start from scratch with a project.
    • by johnjaydk (584895)
      I think there should be one project that the whole class contributes to. That way the students can get used to working with a bunch of morons.

      For extra credit, have the biggest moron define requirements (mutually exclusive) and scope (for fixed resources and deadline).

  • Heartily, yes (Score:2, Interesting)

    by qw0ntum (831414)
    A class like that would be very beneficial to students, even if it does not completely mimic actually working (nothing really can). So much of CS focuses on the technical end of things, and I don't think enough emphasis is placed on the human side of things, be that interaction with the user or interaction with management.
    • Project management etc is more a software engineering skill than a computer science subject. Pure CS is really about theory rather than practice. However, the way most universities teach these, there is very little distinction between the two.

      It all depends on why you're attending the courses. If you want to be "marketplace ready", then project management, source management etc are all worthwhile.

  • Absolutely (Score:3, Informative)

    by Skreems (598317) on Saturday November 11, 2006 @07:08PM (#16808864) Homepage
    I'm a big fan of this. We had essentially what you describe at my college, in the form of a Game Development Class run by a teacher in the design college. At the beginning of the semester people pitched projects that they thought would be interesting, the group voted on 2 or 3 to move forward with, and students joined the one they were interested in. Design, development, coding, art, all were created from scratch. We had to go through and decide what external libraries to use, how to manage our codebase, etc. The end goal was to submit the project to the GDC student competition, as well as demo to the class.

    Not only was it the most fun I had in any class ever, but it was a great learning experience. Getting to work on the same codebase as 5 other programmers for a full semester is an experience that was very much missing in all the "core" classes. It really drives home the importance of APIs and modular design, as well as teaching you some interesting things about working with other people. I highly recommend the same type of approach to anyone in school who wants a taste of the real world.
  • YES! (Score:2, Insightful)

    by Shados (741919)

    Is there any need for such a course?

    Yes, there is. It is getting critical, in my opinion. Too many colleges/university totally omit teaching at least the basics of the development cycle and integration, thus, you end up with students that are skilled enough to code an operating system kernel, yet have no clue how to deal with a development flow.

    From my (albeit short) experience in human ressources for IT firms ( am a software developer, but I worked for several small companies, so I had to extend my

  • by Merc248 (1026032) on Saturday November 11, 2006 @07:11PM (#16808906) Homepage
    I'm thinking about dropping my CS major. Why? Although they do teach you languages that are used today in the marketplace and tend toward an education that trains you as an effective software engineer, they don't care about teaching things that make people think about how everything is laid on top of each other and other ivory tower-esque stuff. I was talking to another peer in the CS department (who is similarly disenchanted with the CS program as well) about the various classes he took. "Programming Languages" used to be about, you know, the structure of programming languages. Now it's simply a glorified scripting language survey course. "Operating Systems" used to be about the operating system as a concept. Now it's a glorified Linux Programming course. etc. etc. I'd say that I'd be ready to tackle a project if I graduate with a CS degree from my current university. However, I think I'd simply be another cog in the machine, so to speak. That to me is a less desirable preparation than learning all about theory and finding out how to implement them in the real world by myself.
    • Re: (Score:3, Insightful)

      by presidentbeef (779674)
      Agreed. I was lucky enough to catch some of the best professors at SU before they left. I feel sorry for the people coming in behind me, because they are getting a significantly lesser quality education.
      Sadly, the CS department is feeling a lot of pressure from the "industry" to make these changes. I'm sure many of the comments here will reflect that. Well, some people actually want to get a CS degree so they can become computer scientists, not code monkeys.

      Basically, I completely agree with the parent
    • Re: (Score:3, Insightful)

      by RAMMS+EIN (578166)
      Too true. On the other hand, I'm sure there are plenty of Real CS programmes still out there. On the other hand, if they take any other approach than the one your university takes, people will be complaining that the programme is completely disconnected from real-world needs. I think it's good to have both types of programme: the type that makes you a good programmer, ready to start working for the boss, and the programme that makes you a good theoretician. Or perhaps the programmes could be flexible enough
  • by selil (774924) on Saturday November 11, 2006 @07:13PM (#16808920)
    As a professor I see much of this has been solved as far as curriculum for Computer Science is concerned. CC2001 & CC2005 here (pdf) [acm.org] layout substantial information on what is required for the CS coursework. There is also the secondary volume for software engineering that lays out the requirements for that field and accreditation. These documents are about the requirements for the core to achieve ABET accreditation of the programs. Each school will implement as they see fit the standards.

    To answer your questions about languages my opinion is as follows.

    A student needs at least 4 semesters with C++. C++ is the mother language and if you learn it you can program in about any other language for the rest of your life.

    A student needs at least two semesters in software architecture and requirements gathering.

    A student needs at least 2 semesters of data structures.

    A student needs at least 2 semesters of networking.

    A student needs at least 2 semesters of operating systems.

    A student needs at least 2 semesters in secure software coding (and integral with every other class)

    A student needs at least 1 semester in structured scripting like bash, ksh, csh.

    A student needs at least 1 semester of compiler theory.

    A student needs at least 1 semester of language structure, grammars, syntax, etc...

    A student needs at least math theory through discrete mathematics, and better yet through calculus.

    These of course are just simple undergraduate courses and there is so much more that can be done beyond this.

    • Forgot a big one (Score:5, Insightful)

      by NineNine (235196) on Saturday November 11, 2006 @07:41PM (#16809188)
      You forgot a big one... a semester or two in database theory and design. Since most programming projects in the real world end up interacting with data in some way, this could be good. I can't count the number of times where I caught a programmer treating an RDBS like a flat file because they had no idea what a database was for or how they work.
    • Re: (Score:3, Interesting)

      by Coryoth (254751)

      A student needs at least math theory through discrete mathematics, and better yet through calculus.

      I have to admit I am a little unclear of the benefit of calculus to a CS or software engineering student - I think too many CS and SE students waste their time with calculus courses which, while of great value to other engineering disciplines, aren't anywhere near as applicable to CS and SE. What areas of CS or SE would you see a need for calculus? I can certainly see benefits to set theory, combinatorics, an

      • Re: (Score:3, Insightful)

        by hughk (248126)
        I hated differential equations and calculus. Unfortunately, some of the sharp end of financial engineering (quants) needs this. Sure the banks may have some mathematicians, but generally what they write is a long way from production code and you need someone who knows the maths and can convert it to good code.
        • Re: (Score:3, Informative)

          by Coryoth (254751)

          I hated differential equations and calculus. Unfortunately, some of the sharp end of financial engineering (quants) needs this. Sure the banks may have some mathematicians, but generally what they write is a long way from production code and you need someone who knows the maths and can convert it to good code.

          That sounds rather more like a specialist role then a reason to expect CS students to necessarily do any calculus - all the other subjects I mentioned would be much more valuable in general. What you n

      • What areas of CS or SE would you see a need for calculus?

        Any area that depends heavily on probability theory or statistics. Calculus is a prerequisite for the serious probability and stat courses. Fields like machine learning have one foot in CS and one foot in statistics.
      • Re: (Score:3, Interesting)

        by MindStalker (22827)
        I always thought Calculus courses were simply breaker courses for CS. If you can't cut the logic needed for Calculus you really don't believe in CS anyways. And it does help you refine your logic and problem solving skills as well.
    • by Llywelyn (531070) on Saturday November 11, 2006 @07:59PM (#16809332) Homepage
      >A student needs at least 4 semesters with C++. C++ is the mother language and if you learn it you can program in about any other
      >language for the rest of your life.

      I've seen experts in C++ break down totally when they encounter Prolog and LISP. I've seen people who are steeped in a C++ background who's code in Java looks like something out of a programmer's worst nightmare.

      There are also a lot of habits that one develops in C++ that not only do not apply in other languages, or which can be downright counterproductive. I agree everyone should know the language and that it has a lot to offer, saying that C++ is "the mother language" is a bit nonsensical.

      As to the class list...

      "To learn what?" is my question. Why take 2 semesters of networking, and 2 semesters of operating systems? What are you hoping that the individual will learn in these semesters? (the weights that you provide are also not in sync with the documented you cited). Is this more important than distributed computing, algorithm analysis, mathematics passed calculus (the more mathematics the better, my job involves statistics, noneuclidean geometry, differential equations, trig, etc on a daily basis), non-shell scripting languages (Python, Ruby), numerical analysis and scientific computing, technical writing, HCI, general engineering principles (or engineering specializations), databases, computer architecture, etc?

      In my mind, specifying the number of "semesters" of each is not a wortwhile exercise. More important are "what concepts do they need to know." Tables 3.1, 3.2, and 3.3 in the document you linked to are an excellent way of breaking this down, IMHO, and much more effective than a nebulous decree that only species the course titles.

    • Yes, because no one learned to program before there was C++. And certainly every language guy I know loves it like their own mother.
  • Disasters! (Score:3, Informative)

    by JumpingBull (551722) on Saturday November 11, 2006 @07:13PM (#16808928)

    My own view is that in any engineering discipline, developing a wary eye for risks and other horrors is essential. Experience has proved this "engineering paranoia" to be my friend.

    You can use, with good effect, the basics of project management, the rudiments of business planning, and the various models of development.
    I tend to favor the spiral model for complex developments, if I can approach the problem that way. The waterfall model works for well defined goals.

    I recently looked through portions of the Wikipedia on "project management" so that is a good place to start, if a course is not forthcoming. Recommended.

  • by $1uck (710826) on Saturday November 11, 2006 @07:14PM (#16808932)
    ...and I took a class that attempted to do something similar but it did not really do the concept justice. We weren't graded on the final project at so much as our design and collaboration (team project). What I think they need is some sort of "practical" class. My first/second real job (hah I graduated when the bubble burst) so these were "hired to tag/QA" and "oh you program and have a BS in CS too? you can help the software engineers" type jobs that paid about what I made managing a pizza restaurant. Let me tell you how frustrating it is working with people getting paid 3-4 times as much as you who are writing code in notepad and inable to configure/run a server (Tomcat) nor did they have any idea what version control was, but they had MS's in CS (same school as myself and mostly the same classes).

    I really think they also need a class to explain software licensing... as the same people wanted to use code licensed under an "academic" license in a commercial product. But a class to introduce version control, build tools, deploying/setting up web servers and even IDE's etc should be mandatory. Maybe a rundown of what's freely available too.

  • by mortonda (5175) on Saturday November 11, 2006 @07:14PM (#16808934)
    It was a class at both Universities I attended...

    What has been missing in all the classes I ever attended (which has been a while) was source management. I think subversion should be explained in the first class and used throughout the whole degree. Many can code; I want to hire someone who knows how to manage it.
  • Make sure you include a bunch of "customers", the people for whom the project is being developed, who really have no clue of what it is that they really want. Point is to develop the students' skills at mental telepathy and crystal ball gazing.

    (Oh, and make sure none of them are included in the group which ultimately has to evaluate the success of the project.)

  • Definitely (Score:2, Interesting)

    by Bob Gelumph (715872)
    There should definitely be such a course.

    At Monash University in Australia, the Bachelor of Software Engineering has at least a couple of separate group projects that go through parts of the SDLC other than just the development phase, with the final year having a full project for a real client that lasts the entire university year.

    You don't get to just fluff out some documentation with no consequences when you have to produce a product for someone who can get you failed if it turns out to be crap.

    That's one
  • I just finished a Bachelor of IT in an Australian uni. Majored in Software Engineering ... I had 2 project classes in the last year, one for each semester:

    - Core project initiation: choose a project, do the requirements analysis, design documents, maybe produce a project prototype.

    - Core project implementation: produce the actual project, test and document.

    This gets you used to a year long project (as opposed to the 8-10 weeks you usually get per semester). Projects consisted of things the UNI wanted done,
  • I had a class called "Database project" where we were formed in small groups. Each group was given a situation where "X" company needed a specific database that would fit their needs. From there, we started brainstorming on what information the database needs to hold, design different ER diagrams trying to find the best solution. We'd every few weeks show what we had to our teacher and he'd comment on it, whether we would or wouldn't have any problems continuing to the next step. We sort of stopped where th
  • This is a question which comes up from time to time on Slashdot. I think the best approach is to pick an existing Open Source project and add a feature to it. That way students have to deal with an existing structure, existing policies, coding standards, etc., none of which are likely to be perfect, much as they would in the real world. Additionally, by focusing on a (non-trivial) feature, there is greater likelihood of actually completing the job in the time allotted. It gives the students a public chunk o
  • I graduated in 3 years (UK) with a BSc(Hons) in Computer Science and here is how they taught us: In the 1st year we learnt algorithmics stuff, in the 2nd year we studied software engineering methodologies such as extreme programming and finished a class-wide group project, and in the 3rd year each student completed an individual project in any language and any area we liked, and it was counted as 3 courses in the transcript. So, we learnt to work in teams and also alone. Very good.
  • Problem is in one semester you really can't complete any projects are worthy of a real software development lifecycle. You can complete a quick thrown together application, but you already know how to do that. If a 'real world' project, was for six months, it would not be worth throwing time into. And applying the process of a year long project to a six month project just confuses students who don't understand "why all the extra work?"

    My experience is that most college grad CS students don't have a clue on
    • by Shados (741919)
      If the app is small enough, and the class has enough credits to it to give it some time, 3 months is plenty. Setting up, let say, a small E-Commerce web site, with an analysis, development, testing, deployement, and a bit of in between, should fit in a semester.

      Otherwise, split it in two, and have one semester just for the modelisation and approval part, and another for the actual development/testing/deployement.
      • As I thought about what I wrote, I realize there are a lot of pieces I didn't think of/say in the original. I guess it really boils down to where you draw the line between real lifecycle management and Rapid development.

        In real multi man-year projects there needs to be (in addition to what we've already covered) User focus groups on UI designs and profiling/optimization before deployment. You certainly can teach a small project without those, but I think you would be leaving out things that 'should' be done
        • Re: (Score:3, Insightful)

          by Shados (741919)
          Indeed. Well, obviously no amount of classes will make someone straight out of school a senior developer. The idea is that CS programs claim to give the students the "basics" of everything so they can go on their own, yet fail to give them the basics of the software development cycle... Just an analysis/development/testing/deployement cycle is enough. (I have work on multi-year/hundreds of users projects where profiling was kept at a bare minimum... we would analyse SQL queries and thats about it, because p
  • A class like that is absolutely essential. Any undergrad program which does not include at least one software engineering course is doing a disservice to its students. Such a course should include a study of development methodologies, requirements analysis, basic OO, user interface, and database schema design, source control system, basic project management, UML diagrams, etc.
    I had a second software engineering course that also covered design patterns, unit testing, software architecture, and refactorin
    • by Shados (741919)
      Thats true. When you try to look for a job in a serious company, they ask for basicaly exactly what you mentionned, so I'll quote instead of copy pasting:

      Such a course should include a study of development methodologies, requirements analysis, basic OO, user interface, and database schema design, source control system, basic project management, UML diagrams, etc.

      design patterns, unit testing, software architecture, and refactoring

      This 2 sets of elements are asked for just about any job worth taking.

  • I'm wondering if their CS program has ABET certification and what not. I find it odd that such a thing was not covered.

    Part of the curriculum at ASU is an Introduction to Software Engineering course (CSE360) where we do nothing but study the design process, and spend the whole semester on a big group project.

    Plus we revisit the concepts over and over in other classes like Software Analysis and Design (CSE460) and Databases (CSE412), which are, admittedly, electives... but the topic still comes up in almost
  • I have taken a course like the one you have described. It was a 400-level at SUNY Albany, called Software Engineering.

    The course was taught by an adjunct professor, whose day job was the CEO of a small (i.e. 7-people) local software house.

    As a class, we decided upon what we were going to build. We were then divided into three "companies" that were to compete with each other to produce a finished product. We were to use RCS (this was 15 years ago), and write the app in C, to run on a UNIX platform. S

  • Assignment: Pick up the undocumented, buggy, unfinished, unspec-ed project from the previous years senior class (i.e., none of the original developers are still around to ask questions), and add a difficult, meaningless feature that has to be done by the end of the quarter.

    Sigh. I guess I've been doing this too long.

    • The element of truth in that is that most software development is maintenance or adding features to a P.O.S. that is at least 5 years old.

  • Whatever steps you pick in /your/ real-world scenario, don't forget the bit about "running out of funding" the week before you ship. [Yay, no final?]

    And at least one sales type who goes out into the field and comes back with, "I promised the customer X. We can do X, can't we? Can we have X working by, um, Tuesday?" Where X is something like "a financial planner" and your company does real-time messaging software for PDAs.

    A-a-and the cross-dressing halfway-through-the-(ahem)-process wacko cow-orker who d
  • It's called software engineering. If you want to program and develop software for a living, you should get a degree in SE. Computer scientists are improperly put to work in the industry as code monkeys. A "true" CS degree would be having you touch very little code.
  • Different colleges have different goals and approaches; you need to pick your college to go with your goals. Many CS majors do not go on to become software developers, so it is perfectly legitimate for a college not to include project development experience in their courses. Even if you picked such a college, nothing prevents you from participating in one of the many open source projects or to start your own.
  • by Coryoth (254751) on Saturday November 11, 2006 @07:37PM (#16809154) Homepage Journal
    Learning about the software development cycle is something to do in a software engineering course, not a computer science course. Of course these days, with universities and colleges become increasingly career and job training focussed, the differences between computer science and software engineering are blurred. Perhaps the better way to view things is to consider an analogy to other fields where the difference is mmore traditionally clear. Consider someone doing a physics and mathematics degree - they will learn about a great many things such as differential equations and their applications to physical systems. What they are studying, however, is the theoretical underpinnings of such material. Contrast that with a civil engineer who also learn about differential equations and their applications to physical systems. The engineer, however, will be learning how to make use of these as tools. A course in the development cycle of how to build a bridge - design, specification, testing and verification, and construction and maintenance - that's something that is integral to the course of the civil engineer, but something the physics student is likely to encounter since the physics student is not as interested in engineering applications so much as the theory itself. Similarly the software development cycle is something for the field of software engineering.
  • My degree was in CIS, which is different from CS, but we did this at my university. The way it worked was basically that potential clients would contact the school, and the professors keep track of available projects. A few weeks before the term starts, students would talk to the professors, get the list of projects, start putting teams together, etc.
    Once a project was accepted, the students would go from a basic "we want a system to do X" statement all the way through developing a finished project for a
  • ... should be required.

    At the University of Oregon, we had CIS422 [uoregon.edu].

    This included sections on project management, software lifecycle, requirements analysis and engineering, and development models. While I did not go into development or software engineering, I work with developers all the time and it's certainly helpful to speak the language. Also, project management skills are necessary in any kind of work in IT (and most other fields, too).

    At UO the software methodology class was treated as a "capstone" ty
  • In the CS program I attended and completed 'Software Engineering' was a year long final course that everyone had to take and pass to exit the program. The first week of class teams were formed and projects were picked from a list of things that would be helpful for the school. Teams met with their project sponsor and then worked on a year long project which culminated with a team presentation at the end. Last time I checked many of the projects that get built are still in use. Of course not all teams fi
  • Many CS programs have a "capstone" course -- a popular concept in Engineering colleges. Many capstone courses involve projects sponsored by industry which go through a development cycle (as much as can be done in a semester). For example, at my school (a midwestern USA "Big Ten" state (public) school) local and national companies (names you'd recognize such as automobile and airplane manufacturers) provide projects for teams to complete. A contact person from the company is the customer who provides the
  • by alanwj (242317) on Saturday November 11, 2006 @07:51PM (#16809270)
    In one camp, you have the guys that see Computer Science as a branch of Mathematics, and find it unfortunate that "Computer" appears in the name. For them Computational Science would be a much better name. Asking whether the software development cycle should be taught as part of a Computer Science curriculum seems just as ridiculous to them as asking whether it should be taught as part of the Mathematics curriculum.

    In the other camp, you have the people who are more specifically interested in computers and software development. They see programming as an essential, but far from singular tool in their box, and generally only care about as much computational theory as what is pragmatic. These are the guys that get much more excited about new methodologies than they do about proofs that a language is Turing complete. This group would feel robbed of an essential part of their education were they not taught anything about the software development cycle.

    Currently the "real world" has a lot more demand for the second group than the first, but that doesn't make either view more valid than the other. I think the proper thing to do is for colleges to split their Computer Science departments into two entities that give separate degrees. The first, being more properly a science, would retain the name Computer Science, while the other, being more of an Engineering discipline, would be given the name Software Engineering. Then students can choose for themselves which group they belong to. If I'm not mistaken a number of colleges already do that.

    There would, of course, be some overlap, but it seems roughly equivalent to the split between Physics and Electrical Engineering, which seems to work out fine at most colleges.
    • by Shados (741919)
      I agree, definately. A huge problem right now, is that -schools- don't even agree on what CS is. So you have schools in camp 1, schools in camp 2, and some everywhere in between.

      Thus, employers have to resort to all sorts of tests and experience requirements while recruiting, and (especialy in the case of companies not specialised in IT) it just generaly cause a lot of confusion. Splitting the two would solve a lot of these issues.
    • by El Cubano (631386)

      The first, being more properly a science, would retain the name Computer Science, while the other, being more of an Engineering discipline, would be given the name Software Engineering. Then students can choose for themselves which group they belong to. If I'm not mistaken a number of colleges already do that.

      I earned my B.S. in Computer Engineering with a concentration in Software Engineering (the school did not have a separate Software Engineering degree). The main problem is that many people are put

  • We had a software engineering course in which we divided into groups to design a large software system. We didn't get into the development of it as the course's focus was on the design aspect of software engineering. There was a second course scheduled that would actually develop one of the systems that was designed, but it ended up being canceled due to a lack of enrollment (I would have taken it but I had another course I needed to take in that time slot). But it still ended up being one of the most us
  • I'm just in the last week of finishing my Computer Science degree at RMIT university, Melbourne Australia.

    I was generally quite surprised, but pretty much every subject we do, from the initial programming subjects, to the actual 'software engineering' intro subjects stress design processes. We end up doing UML diagrams, and planning, etc, as much as possible. We also get some introduction to development tools as well.

    For instance, in second year, there were sections on the marking guide referring to our use
  • Search for "Computer Science" + "Senior Project" and you find many MANY universities already do this, and you can get their general curriculum and project ideas from their pages.

    I went to the University of Colorado CS department and they solicit ideas from local companies who sponsor the projects/students. Less time for the professor, local companies like the projects even if they are only 1/2 usable, students get more 'real-world' experience than just a project, they actually get to work at a company,
  • TESTING software! (Score:2, Interesting)

    by Killer Eye (3711)
    Testing is a part of the software process that almost no one seems to teach (and thus almost no applicants seem to know). I really want to see universities make this a strong focus, even a primary focus, prior to implementation.

    I see too much software that is not only untested, but designed in a way that makes testing harder than it should be. This is irresponsible and makes it difficult not only to understand software, but to maintain it (or even replace it, since a test suite tells you what important th
  • I am a senior at a Liberal Arts institution that offers a Bachelor's of Science in Computer Information Systems -- I'm quite surprised you guys don't go through that in CS.

    I would suggest the following

    3 hours
    Software Testing and Verification
    Systems Analysis
    Systems Design
    Senior Project 1
    Senior Project 2

    (With SA SD, SP1, SP2 being taken as half semester courses (4 hours a week for 8 weeks - it equals a full semester) and taken in that order.
    http://crusader.bac.edu/courses/CS309N [bac.edu]
    http://crusader.bac.edu/courses [bac.edu]
  • What you are describing is offered at community colleges in Canada. I attended Seneca College's 3 Year Computer Programming and Analysis [senecac.on.ca] program. On the last year of the program, students are exposed to the creation of a real life project from start to finish. Teams of students must find a real life company that is willing to allow these students to launch this system within the company (companies willing to accept a free system that solves a business problem are not hard to find even if the system is built
  • Computer science and software engineering are two different things. What is now called CS really needs to be separated into software engineering and pure CS. The CS people really don't care about software dev cycles and databases, and the SE people don't care much about Turing machines and information theory. The problem is that the CS department is clogged with students who just want to get into the industry, and the professors want to teach a more theoretical approach to CS.
  • Head to a place like the University of Saskatchewan [usask.ca]. In terms of group-work classes, you get:

    CMPT 250 -- Introduction to software development.
    CMPT 332 -- Operating system concepts.
    CMPT 352 -- Computer security (can do an implementation project for your group project).
    CMPT 355 -- Theory and application of databases.
    CMPT 370 -- Intermediate software engineering.
    CMPT 371 -- Software managemeng.
    CMPT 432 -- Advanced operating systems concept.
    CMPT 470 -- Advanced software engineering.
    CMPT 481 -- Human-Computer i
  • When I was at university we had a couple of group projects in "software engineering" papers. They were the absolute suckiest thing ever -- like working in a company where no one had the authority to make an actual decision, there were no experienced people who knew what they were doing, and where you had no possibility of firing the guy who implemented his part totally wrong, let alone the guy who did nothing at all.

    From what I've heard, nothing much has changed. And how could it?

    As someone now involved i
  • This should be a mandatory requirement to graduate with a computing degree. Here's why (and I'll try to break this down in sequence of the things you would learn in a basic, real-world project):

    You become accustomed to engaging with a client.
    Prior to this kind of project, for most students, "client" could be substituted for "Mom & Dad" or equivalent. So when you actually start dealing with a client with real and strict(er) requirements, you begin to understand the importance of a) communicating eff
  • We already have it (Score:3, Interesting)

    by Espectr0 (577637) on Saturday November 11, 2006 @09:26PM (#16809908) Journal
    On my university in Maracaibo, Venezuela, we have such a course. It is called "software engineering".

    You get a small team (between 8 and 10 people) and have to start and finish a product.
    The team must be divided in: an administrator (in charge of the product, releases, etc), analists, designers, coders and testers.

    You have to meet deadlines and even dress up and have a presentation in order to "sell" the product.

    We did a small webapp that sold pizzas online :)
  • by dindi (78034) on Saturday November 11, 2006 @09:34PM (#16809978) Homepage
    You have programming class, you have unix class, you have database class (sql) ... so you know all these....

    But you most likely do not have MIDDLEWARE class -> apache administration, tomcat administration, Websphere, Sendmail, etc etc ... (hmm sendmail is not middleware technically) ....

    My point is: people come out of school, and they do not know what ports are, how your code is deployed on a server, and have no ITIL (or some kind of IT management training at all). In other words, they might see the big picture, but have no clue what the code is running on, and how middleware components are interacting with each other, and the application.

    I am new at a big company, and have a lot of experience, both dev, network, and admin. I see my colleagues, young kids with 1-2 years of experience, and it shows that even tough they are "software engineers" (just like me), they have no clue of these things, and they will need a few years to pick all that up....

    just my 2c....

    in short: yes, planning, developing, management, and MIDDLEWARE (admin stuff) + network is all useful and important. And yes, it is more important than an overload of math, or a bunch of other useless crap (no, math is important, but e.g. economy could have been less at my college.

  • Business Development (Score:4, Informative)

    by descil (119554) <teraten@hotm[ ].com ['ail' in gap]> on Saturday November 11, 2006 @09:40PM (#16810010)
    The software development cycle is important, but pretty easy to pick up. You've been learning to meet deadlines for how many years now? And deadlines in school are much more restrictive than deadlines at work (depending on your professor/employer of course!)...

    What I think most CS students would benefit from most, from my time spent in the industry, is a few business classes. It's important to know what the business people are thinking, if you want to work for them. You can't just ignore your manager, hope s/he will go away as soon as they start talking, etc. You have to learn how to interact and exploit your manager!

    Going into the real workforce after leaving school was quite a shock. It's the politics I was unprepared for. I'd focus on that if I was you. But I'm not, good luck!
  • Real Life (Score:3, Insightful)

    by MichaelKaiserProScri (691448) on Sunday November 12, 2006 @05:01PM (#16816166)
    In any Computer Science course, there are a handful of people who really know what they are doing. They do the majority of the work. They obtain the requirements, write the specs and finally implement the spec. The rest of the team really does not know what is going on and fakes it. Mostly they make a bunch of noise about how the project is not on time, not on spec, etc. They make noise about how they could have done it better.

    Fortunately (unfortunately?) this is GREAT education because it prepares the students for the way the real world works.....

You can observe a lot just by watching. -- Yogi Berra

Working...