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?
CVS (Score:4, Insightful)
At UofT... (Score:3, Interesting)
Re: (Score:2)
Re: (Score:4, Informative)
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.
Re: (Score:2)
Re:CVS (Score:4, Interesting)
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)
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)
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)
Re: (Score:3, Informative)
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)
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.
Re:How it would go (Score:4, Funny)
Re: (Score:3, Insightful)
Re: (Score:3, Interesting)
The best PM I ever worked for often said "if we don't find any problems we are
Re: (Score:3, Insightful)
Re: (Score:2)
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.
Engineers overstate PHB decisions ... (Score:3, Interesting)
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
Re: (Score:2)
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)
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
Re: (Score:2)
Those "many markets" are the ones where Microsoft has a monopoly (desktop).
It is not a monopoly in the sense that people have no choice. People could choose Macintosh or Linux, but they choose to use Windows instead. My point stands.
"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 then please let managem
Re: (Score:3, Funny)
Well it is obvious that your understanding of the market exceeds even that of federal judges who have studied it for years. No one can doubt your logic.
Re: (Score:3, Insightful)
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
Re: (Score:2)
Re: (Score:2, Insightful)
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
Group project (Score:5, Funny)
Re:Group project (Score:5, Insightful)
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.
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
For extra credit, have the biggest moron define requirements (mutually exclusive) and scope (for fixed resources and deadline).
Heartily, yes (Score:2, Interesting)
Computer Scince vs Software Engineering (Score:3, Insightful)
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)
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.
Re: (Score:2)
YES! (Score:2, Insightful)
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
Experiences in Seattle University (Score:3, Interesting)
Re: (Score:3, Insightful)
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)
Some thoughts on the subject (Score:4, Informative)
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)
Re: (Score:3, Interesting)
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)
Re: (Score:3, Informative)
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
Re: (Score:2)
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)
Lots of misconceptions... (Score:5, Insightful)
>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.
Re: (Score:2)
4 semesters of C++? (Score:2)
Re: (Score:2)
Re: (Score:2)
You're a "professor" of "computer science" and you think all a "computer scientist" needs is "discrete mathematics" [whatever the hell that is]?
You consider yourself a computer professional and don't know what discrete math is? Good grief. It deals with math that involves discrete quantites, which is what you have to work with in CS. There are no real numbers in the computer, only approximations, and if you forget that, things will get weird when you can least afford it.
Or maybe they might need to kno
Disasters! (Score:3, Informative)
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.
It's a fan-freaking-tastic idea (Score:3, Insightful)
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.
Re: (Score:2)
How uncompetent of them!
CS 340 Software Development (Score:4, Insightful)
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.
Requirements Gathering (Score:2)
(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)
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
Just finished a Bachelor of IT (Score:2, Informative)
- 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,
Us, it would be our internship (Score:2)
Add something to an existing project (Score:2)
Group, then individual (Score:2)
Not enough time (Score:2)
My experience is that most college grad CS students don't have a clue on
Re: (Score:2)
Otherwise, split it in two, and have one semester just for the modelisation and approval part, and another for the actual development/testing/deployement.
Re: (Score:2)
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)
Software engineering courses (Score:2)
I had a second software engineering course that also covered design patterns, unit testing, software architecture, and refactorin
Re: (Score:2)
This 2 sets of elements are asked for just about any job worth taking.
What kind of CS program was this? (Score:2)
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 this course (Score:2)
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
Do a real project... (Score:2)
Sigh. I guess I've been doing this too long.
Re: (Score:2)
A taste of the real world (Score:2)
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
They already have a degree that includes that (Score:2, Informative)
pick your college correctly (Score:2)
Development Cycle is Engineering (Score:4, Insightful)
Did this at my University (Score:2)
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
A software engineering/methodology class... (Score:2)
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
How my CS Program worked (Score:2)
It's called a capstone course. (Score:2)
What is computer science? (Score:5, Insightful)
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.
Re: (Score:2)
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.
Re: (Score:2)
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 actually did have this (Score:2)
RMIT CS (Score:2)
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
It has been done for you (Score:2)
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)
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
Computer Information Systems (Score:2)
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]
My experience (Score:2)
CS needs to be divided into CS and SE (Score:2)
Is it really this bad? (Score:2)
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
Work on an open source project (Score:2)
From what I've heard, nothing much has changed. And how could it?
As someone now involved i
Absolutely! (Score:2)
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)
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
Yes, it is needed and it is missing. Middleware to (Score:3, Informative)
But you most likely do not have MIDDLEWARE class -> apache administration, tomcat administration, Websphere, Sendmail, etc etc
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)
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)
Fortunately (unfortunately?) this is GREAT education because it prepares the students for the way the real world works.....
Re:What would *I* want to see? (Score:5, Funny)
In Soviet Russia, software develops you. . .
Re: (Score:3, Insightful)
Re: (Score:2)
Indeed. Why should a student even consider bubble sort at all? Insertion sort is held in better regard for small sets than either quicksort or bubble sort.
But the more important question is, which organization teaches spelling?
Re: (Score:3, Insightful)
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 oth
Re: (Score:2)
Re: (Score:2)