Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×

Software Dev Cycle As Part of CS Curriculum? 431

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.
  • YES! (Score:2, Insightful)

    by Shados ( 741919 ) on Saturday November 11, 2006 @07:10PM (#16808892)
    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 reach a bit) is that this is the biggest reason why, when you're looking for a job, most places tend to require significant real world experience to even consider someone: They are used to the fact that, in general, a student fresh out of school is not very useful in a software development environment (where, unless the company deals a lot with R&D, most of the code is trivial, it is just a matter of integrating the ideas right).

    1 or two classes dealing with it could give an incredible jump start for graduates on the job market, once the employers catch on on it.
  • 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.
  • Re:How it would go (Score:3, Insightful)

    by Jonny_eh ( 765306 ) on Saturday November 11, 2006 @07:32PM (#16809114)
    Don't think that engineering's all that better.
  • by EmbeddedJanitor ( 597831 ) on Saturday November 11, 2006 @07:33PM (#16809122)
    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.

  • 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.
  • Re:How it would go (Score:3, Insightful)

    by flynt ( 248848 ) on Saturday November 11, 2006 @07:38PM (#16809158)
    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'.
  • 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:Not enough time (Score:3, Insightful)

    by Shados ( 741919 ) on Saturday November 11, 2006 @07:46PM (#16809234)
    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 performance wasn't an issue, AND CS programs tend to -overdo- the whole optimisation thing, students don't need more, but thats just a side thing).

    More likely than not, someone out of school probably won't even touch more than the code given to them bya project manager, at first. The goal of these classes would only be to introduce them to what -OTHERS-around them do, so that they can understand better how to plug their code in the cycle, and be able to pick up the rest of the "real world" faster.

    In other words, anything so that students aren't surprised when they realise the actual coding is an insignificant part of software development, is good enough in my book.
  • 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 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.

  • by hughk ( 248126 ) on Saturday November 11, 2006 @08:01PM (#16809344) Journal
    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: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 DeadChobi ( 740395 ) <DeadChobi@gmIIIail.com minus threevowels> on Saturday November 11, 2006 @08:24PM (#16809534)
    It's my understanding that a good CS graduate should be able to pick up whatever language you want in a couple of weeks provided you let him/her know ahead of time what areas you develop in. The purpose of a computer science degree is to give the graduate a diverse background in the constructs and procedures underlying programming. The CS graduate who can't figure out how to solve a simple problem is deficient in critical thinking. It's a failing of the program he went through, and sometimes of his work ethic, but certainly not of the degree as a whole.

    Essentially, you're right that CS teaches algorithms, but what you should be looking for isn't dependant on degree. You should be looking for a portfolio of projects that the student has completed throughout his schooling, possibly even before he got into college. You should be looking for competence, and proof that the student is interested in solving problems and not just in the CS degree as a certificate of employability.

    The degree is usually just the icing on the cake for a good computer scientist. For the crappy ones, the degree is everything.
  • Re:How it would go (Score:2, Insightful)

    by kfg ( 145172 ) on Saturday November 11, 2006 @08:48PM (#16809680)
    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
  • Re:CVS (Score:4, Insightful)

    by sfled ( 231432 ) <sfled@@@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:How it would go (Score:2, Insightful)

    by Bill Dog ( 726542 ) on Saturday November 11, 2006 @09:15PM (#16809840) Journal
    You're either a consultant, or you work at a place like my first employer. I remember speaking with a programmer in another group who mentioned that they didn't have time to test. They had to crank code, release it, and then poor Level 2 Support folk who hadn't even been involved in the project had to fix it.
  • by Anonymous Brave Guy ( 457657 ) on Saturday November 11, 2006 @09:24PM (#16809902)

    If I hd to hand-hold one more CS graduate who spends 2 days agonizing over whether to use a quicksort of a bubblesort when faced with an unordered list of 10 items, I'm gonna kill somebody.

    My experience is the complete opposite. Any reasonably competent CS degree holder would immediately be able to identify an appropriate sorting algorithm for most problems. I can't imagine anyone with that background agonizing for 2 seconds over the problem you mentioned.

    The college programming course guy, on the other hand, would probably look for the nearest library, and grab the routine that was called sort. He would then use it without either knowing what "introsort" actually does, or realising that (for example) if you're starting with nearly-sorted data it isn't the best choice, or if you're working with data sets that might contain duplicate keys the algorithm isn't stable.

  • Re:Not at all. (Score:3, Insightful)

    by Fastolfe ( 1470 ) on Saturday November 11, 2006 @09:26PM (#16809910)

    We are often quite ill-informed with respect to business.

    At times that is correct. But it is the exception, not the rule.

    While PHB decisions absolutely do exist, we engineers falsely label some rational decisions as PHB due to our ignorance of issues outside of engineering.

    Again, at times that is correct. But it is the exception, not the rule.

    In my experience, this is the norm, not the exception, at least for large-scale work. I work at a major telecommunications company and am smack in the center of our software development process. Large companies are notorious for being run like a military: the grunts know very little about overall strategy, and are only told what they need to do to do their jobs effectively. Sometimes this means we need to see the company's goals and strategies, but sometimes those goals and strategies are things the company wants to keep out of sight, because they know it's going to be unpopular. We routinely see decisions made by management that appear to be sheer idiocy, clearly run counter to technical recommendations, with no apparent plausible benefit to the business.

    In reality, many of these decisions actually are made with business interests in mind. The technical side of the house just isn't aware of it. All they see is a bad decision that nobody wants to explain. This is still a problem, but it's one of communication and trust, not necessarily competency.

    Of course, just because I'm considering this to be the "norm" doesn't mean exceptions aren't insignificant or uncommon. In my experience, these issues are less common in smaller businesses as well.

  • by jacksonic ( 914470 ) on Saturday November 11, 2006 @09:56PM (#16810118)
    The easiest way to simulate the real world is to put students directly into it. By the time I graduated I had accumulated two years of work experience, getting me over the initial "fresh out of school" hump. Interspersing work terms relieves debt load, gives employers a guaranteed screening method for new entry-level hires, and teaches things that students may not have been taught (like the details of languages beyond just what is required for assignments).

    A competent co-op program is probably the best way of learning both how projects really work and why a good grasp of the development cycle and its hurdles is necessary.
  • by presidentbeef ( 779674 ) on Saturday November 11, 2006 @11:23PM (#16810590) Homepage Journal
    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 post and confirm its validity.
  • Re:CVS (Score:3, Insightful)

    by Metasquares ( 555685 ) <{moc.derauqsatem} {ta} {todhsals}> on Saturday November 11, 2006 @11:35PM (#16810654) Homepage
    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, composition, ... - see what I mean?) not only easy but very enjoyable. It was a nice complement to a schedule otherwise filled with CS and Math courses.
  • by adwarf ( 1002867 ) on Saturday November 11, 2006 @11:51PM (#16810730)
    Get an Internship. At my University we learned C++ and a dozen other languages that few people actually use in the real world (prolog, sml, scheme, assembly, etc..). The only time I ever programmed on Windows was when I was using SSH to get into a linux box. I got an Internship and told them I would work for free just to get the experience (they ended up paying me 1.5x more than I was making doing computer repair on the side). There I learned all the real world tools. Programming in windows with Visual Studio, C#, Java, SQL, PHP, etc. Computer Science is not software engineering, but I wouldn't trade that knowledge for anything. If my company needs something developed in a language no one know they come to me rather that one of the dozen 40/50 year olds who know Cobolo, Pascal, C, or C++ and majored in Mathematics or Physics. Anyone can learn to program, but what is really valuable is the ability to adapt to changing requirements. I think Computer Science lays that foundation. However, nothing beats experience. Universities should partner up with software engineering firms to offer a Software Engineering class that is half internship half class (get a combination of credit hours and some money). Teaching software engineering is a joke. How many companies grab 5 computer scientist, and let them define the requirements, structure and then go out and write it? Some customer defines all the requirements, some manager that hasn't programmed for a dozed years (if at all) tells you how to make it, and you will probably jump into a project where thousands of thousands of lines of code have already been written because you are modifying an existing program to save some time.
  • by rubeus ( 837500 ) on Sunday November 12, 2006 @12:17AM (#16810870)
    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.

    I agree. I read an article about how most CS students today were just coming into the world as trained JAVA programmers. And it's sad when they are exposed to anything other than that mindset. I mean, why would 4 semesters of the same language be a good thing? Does it teach a student how to think abstractly or to adapt to a changing world? I'm glad my curriculum has been relatively flexible with a variety of languages to choose from. Some of my classes featured: Squeak (Smalltalk), Scheme (Lisp), Python, Lisp, C, Java. But yea, so now I'm learning C++ on my own, and it's not some difficult thing to do, just silly IMO when I compare it to concepts from other language that I prefer, namely ObjC. Anyways, a red flag is raised in my head when anyone claiming to be a professor also purports that 4 semesters of any language is the way to go.
  • Re:CVS (Score:3, Insightful)

    by kakalaky ( 902350 ) on Sunday November 12, 2006 @12:51AM (#16811054)
    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.
  • by msobkow ( 48369 ) on Sunday November 12, 2006 @01:35AM (#16811278) Homepage Journal

    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, you have to be able to get clarification early.

    That is perhaps the toughest part for a new grad. They're graduates. They know their stuff. Or at least they think so, and make bad assumptions instead of asking.

    For those who gripe about it taking "forever" to get answers:

    Did you just fire an email to get lost among the hundred or so a manager gets each day? Did you check with senior team members who might have the answers? Co-workers? Users?

    Did you call every once in a while to ask how the spec clarifications were coming along? Did you flag the late clarifications as impacting design, development, testing, and deployment? Did you explain how much overtime would be required to compensate for the late specs, and that OT is more expensive, pushing up the project costs?

    There are far more constructive ways to deal with stereotype PHBs and technology-illiterate business people than complaining they're not as "smart" as you. Odds are they think you're a complete idiot because you don't understand what is obvious to them.

  • by RAMMS+EIN ( 578166 ) on Sunday November 12, 2006 @09:07AM (#16813068) Homepage Journal
    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 that students could choose for themselves.
  • 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.....

8 Catfish = 1 Octo-puss

Working...