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)
YES! (Score:2, Insightful)
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.
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.
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.
Re:How it would go (Score:3, Insightful)
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.
Development Cycle is Engineering (Score:4, Insightful)
Re:How it would go (Score:3, Insightful)
Forgot a big one (Score:5, Insightful)
Re:Not enough time (Score:3, Insightful)
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.
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.
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:Some thoughts on the subject (Score:3, Insightful)
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:What would *I* want to see? (Score:3, Insightful)
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)
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)
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)
Re:What would *I* want to see? (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 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)
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.
Co-op placements give you the real world (Score:2, Insightful)
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.
Re:Experiences in Seattle University (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 post and confirm its validity.
Re:CVS (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, composition,
Re:Business Development (Score:2, Insightful)
Re:Lots of misconceptions... (Score:2, Insightful)
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)
Re:Engineers overstate PHB decisions ... (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, 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.
Re:Experiences in Seattle University (Score:3, Insightful)
Real Life (Score:3, Insightful)
Fortunately (unfortunately?) this is GREAT education because it prepares the students for the way the real world works.....