Slashdot Mirror


Software Dev Cycle As Part of CS Curriculum?

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?

19 of 431 comments (clear)

  1. CVS by JoshJ · · Score: 4, Insightful

    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.

    1. Re:CVS by dvice_null · · Score: 3, Interesting

      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.

    2. Re:CVS by sfled · · Score: 3, Insightful

      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

      --
      I'm not really a web designer, I just play one on the Internet.
    3. Re:CVS by kakalaky · · Score: 3, Insightful

      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.

  2. How it would go by MyLongNickName · · Score: 5, Interesting

    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.

    --
    See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
    1. Re:How it would go by MyLongNickName · · Score: 3, Funny

      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.

      --
      See my journal for slashdot ID's by year. Mine created in 2005. http://slashdot.org/journal/289875/slashdot-ids-by-year
  3. Group project by MeanMF · · Score: 5, Funny

    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.

    1. Re:Group project by Salvance · · Score: 4, Insightful

      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.

      --
      Crack - Free with every butt and set of boobs
  4. Experiences in Seattle University by Merc248 · · Score: 3, Interesting

    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.

    --
    "Hegelians, who love a synthesis, will probably conclude that he wears a wig." - Bertrand Russell
    1. Re:Experiences in Seattle University by presidentbeef · · Score: 3, Insightful

      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.

      --
      Everything I need to know about copyrights I learned from Slashdot.
  5. Some thoughts on the subject by selil · · Score: 4, Informative
    As a professor I see much of this has been solved as far as curriculum for Computer Science is concerned. CC2001 & CC2005 here (pdf) 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.

    --
    --- Location Unknown
  6. CS 340 Software Development by mortonda · · Score: 3, Insightful

    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.

  7. Re:What would *I* want to see? by Who235 · · Score: 4, Funny
    (I went to school 25 years ago, but for Soviet Studies, not CS)


    In Soviet Russia, software develops you. . .

  8. Development Cycle is Engineering by Coryoth · · Score: 3, Insightful

    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.

  9. Forgot a big one by NineNine · · Score: 5, Insightful

    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.

  10. What is computer science? by alanwj · · Score: 5, Insightful

    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.

  11. Lots of misconceptions... by Llywelyn · · Score: 4, Insightful

    >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.

    --
    Integrate Keynote and LaTeX
  12. Business Development by descil · · Score: 3, Informative

    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!

  13. Re: by Progoth · · Score: 3, Informative

    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.