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

  • 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 ubrkl ( 310861 ) on Saturday November 11, 2006 @07:15PM (#16808956)
    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, professor projects, and real world projects where people come to the uni wanting cheap work done. I know of some project teams that got paid for their semester of uni work.

    There was a subject dedicated to the principles of software engineering, which was one of the most valuable subjects, it didn't include any programming, just the preliminary investigation of requirements, UML, etc. I would highly recommend a software development class that doesn't include programming, you will get enough of that in other subjects.
  • by olenikm ( 974109 ) on Saturday November 11, 2006 @07:29PM (#16809084)
    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.
  • by Coryoth ( 254751 ) on Saturday November 11, 2006 @08:16PM (#16809472) Homepage 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.

    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 need for tht problem is someone who has studied enough software engineering and done a few calculus courses that can squeeze in between the mathematicians and the developers. You could equally well make the case that you need someone skilled in cryptology to fit in between theoretical explanations of the strenghts and weaknesses of various cryptographic schemes, and people implementing and using various crypto schemes in their product, or someone skilled in fourier analysis, linear algebra, and wavelets to fit in between the mathematicians designing compression and signal analysis schemes, and the developers implementing them, or...

    I think a solid grounding in foundations (set theory etc.), graph theory, and abstract algebra and basic category theory is going to serve most students the best.
  • by Anonymous Coward on Saturday November 11, 2006 @08:17PM (#16809482)
    You make some good points, but I think you do not address at least one of the points that the OP was trying to make:

    Management may very well be taking into account legitmate concerns that the engineers do not address (and may not even be competent to address.)

    The OP however, seems to me to be talking about something else :
    (original post:)
    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"

    Part b. Management complains that five items not on the statement were addressed. When you mention that once the project got underway the need became obvious, they reply "it is not in the spec"


    In the first part of quote above, the notional PHB complains that the engineers 'should' have addressed 'obvious' -but unspecified- issues.
    In the second part of the quote the PHB complains that the engineer has on charter to address unspecified issues.

    Either of these alone might be legitimate complaints.

    Taken together they are inconsistent demands, and the engineer "loses" no matter what s/he does!
    I have 'been-dere-done-dat' and it is quite frustrating ...it is oddly apropos that my CAPCHA code for this post is "futile"!

  • by dindi ( 78034 ) on Saturday November 11, 2006 @09:34PM (#16809978)
    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.hotmail@com> 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!
  • Re:CVS (Score:3, Informative)

    by Tim Browse ( 9263 ) on Saturday November 11, 2006 @10:53PM (#16810438)

    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 be system admin.

    After all:

    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.

    Looks like you can fish.

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

The one day you'd sell your soul for something, souls are a glut.

Working...