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?

57 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 Tim+Browse · · Score: 2, Informative

      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.

    4. Re:CVS by Metasquares · · Score: 2, Insightful

      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.

    5. 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
    2. Re:How it would go by Jonny_eh · · Score: 2, Insightful

      Don't think that engineering's all that better.

    3. Re:How it would go by flynt · · Score: 2, Insightful

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

    4. Re:How it would go by kfg · · Score: 2, Insightful

      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

    5. Re:How it would go by Bill+Dog · · Score: 2, Insightful

      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.

      --
      Attention zealots and haters: 00100 00100
    6. Re:How it would go by TapeCutter · · Score: 2, Interesting

      Yes it's the same in many other industries, a long time ago I drove a taxi for a living, taxi users quite often expect the driver to know exactly how to get to their street and get impatient if the driver has to look it up in the street directory. I used to tell them "I don't get paid enough to memorise 40,000 streets", nowadays I tell scope-creepers "We will have to estimate the impact" and let the PHB's argue about the costs.

      The best PM I ever worked for often said "if we don't find any problems we are not doing our job". The moral is don't let shitty customers and PHB's turn you from a proffesional into a code monkey that simply follows orders, make it clear that you won't put up with their crap and if they are not going to be "part of the team" it will take longer, cost more and the end product will be a dissapointment.

      As far as business is concerned there are two problems in commercial software development, time and money. People hire (experienced) software engineers because they don't have the expertise themselves, they expect you to know what you are doing and to be able to point out project roadblocks before they become a big time and/or money problem. If you do this and the project fails it is the PHB's/customers fault, if you don't do it and it fails it's your fault.

      TFA: I graduated as a mature age student in 1991 (and quit driving cabs), our final year in the software engineering subject was spent on two projects, one semester working on a project with a group of fellow students and one semester working one day a week at an approved commercial/government project.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    7. Re:How it would go by Foryst · · Score: 2, Funny

      Well, we actually did have a required course for this at my school, so was a little more like this: Pre-semetser: Get various groups to pitch ideas for "free custom software" as produced by local college seniors. Week 1: Students group up in 5 man teams and decide to accept which ever seems the most real-world (i.e. least work) Week 2: Meet with customers to define what they want and get them to sign a contract. Week 3-4: Slack off, while team leader works at defining goals with customers. After sign-off. Week 5-6: Write stuff in notebooks pretending to "design" and wonder when the designated guy for the test phase (Week 10-14) will show up to class again. Week 7: Actual design begins, usually with the local LUG fanatic trying to pinpoint exactly how linux is the best solution to merge into the client's proprietary Windows database. Week 8-12: One guy codes most of it, with the LUG guy saying how much easier this would've been on Linux, while the team leader fends off creeping requirements, and the documentation/research and testing leads party. Week 13: It's realized that there's no possible way to give them exactly what they want, but the client gives your grade, so you cut corners, swear at the lazy (and missing) doc and testing people, and figure out how thick to lay on the B.S. to the client to convince them that this is their dream machine. Week 14: Spend all weekend installing stuff that non-techies will have to manage, while the team leader massages them into giving an 'A'. Week 15: Graduate, with knowledge that you'll never have to touch that duct-taped piece of hackwork again. Week 20: Field job offers from M$ajor corporations.

  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. Heartily, yes by qw0ntum · · Score: 2, Interesting

    A class like that would be very beneficial to students, even if it does not completely mimic actually working (nothing really can). So much of CS focuses on the technical end of things, and I don't think enough emphasis is placed on the human side of things, be that interaction with the user or interaction with management.

    --
    'Every story, if continued long enough, ends in death.' --Ernest Hemingway
  5. Absolutely by Skreems · · Score: 2, Informative

    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.

    --
    Slashdot needs a "-1, Wrong" moderation option.
    The Urban Hippie
  6. YES! by Shados · · Score: 2, Insightful
    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.
  7. 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.
    2. Re:Experiences in Seattle University by RAMMS+EIN · · Score: 2, Insightful

      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.

      --
      Please correct me if I got my facts wrong.
  8. 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
    1. Re:Some thoughts on the subject by Coryoth · · Score: 2, Interesting
      A student needs at least math theory through discrete mathematics, and better yet through calculus.

      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, and graph theory, which you are perhaps lumping into "discrete math" (though set theory done properly need not be discrete). I can also see a place for abstract algebra: groups, rings (for polynomial rings over finite fields), and fields, which can crop up in a variety of places including information theory. I can also see reasons why it might be worth doing some category theory - it is the language that a lot of advanced CS theory is now being couched in. These are all subjects that tend to get missed by CS and SE students that, perhaps, they really ought to get exposure to instead of more calculus.
    2. Re:Some thoughts on the subject by hughk · · Score: 2, Insightful

      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.

      --
      See my journal, I write things there
    3. Re:Some thoughts on the subject by Coryoth · · Score: 2, Informative
      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.
    4. Re:Some thoughts on the subject by MindStalker · · Score: 2, Interesting

      I always thought Calculus courses were simply breaker courses for CS. If you can't cut the logic needed for Calculus you really don't believe in CS anyways. And it does help you refine your logic and problem solving skills as well.

  9. Disasters! by JumpingBull · · Score: 2, 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.

    --
    This is progress?
  10. It's a fan-freaking-tastic idea by $1uck · · Score: 2, Insightful

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

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

  12. Definitely by Bob+Gelumph · · Score: 2, Interesting

    There should definitely be such a course.

    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 of the reasons why it was the first software engineering course in Australia to be accredited by IEAust (like the IEEE).

    --
    I'm gonna need a spec.
  13. Just finished a Bachelor of IT by ubrkl · · Score: 2, Informative

    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.

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

  15. At UofT... by ThomasFlip · · Score: 2, Interesting

    At UofT we have a software engineering course. We do a project based on a real world theme starting from requirements on through to design and implementation. We learn a lot about project management along the way as well. The course code is CSC408 for any interested in using Google. We even get to (collectively as a class) choose which language we want to use for implementation. We don't necessarily use CVS, but it is taught in earlier courses.

    --
    If the dollar is an "I owe you nothing", then the Euro is a "Who owes you nothing." - Doug Casey
    1. Re:At UofT... by FireHawk77028 · · Score: 2, Interesting

      I went to a small private college (St. Vincent College, Latrobe, PA). There we had a software engineer class and a senior project. The software engineer class varies a little from year to year, but the professor in charge has been working software internships, or volunteer IT/software work for the community. One of the volunteer projects was a rather complex access data base with front end for a nursing home to keep track of poeple, events, family, etc. The class work itself taught software engineer, process, requirements, etc, and the work was almost entirely out of class. The senior project was usually a self design sollution to a problem, similar to software engineering, but done with less guidance and more freedom (you didn't have to work in a group and you had designed your own project). Software engineering was more "real world" becuase you didnt' have much choice on what to do (there were 3 projects, but still). And you HAD to work with who ever ended up on the project with you.

  16. They already have a degree that includes that by olenikm · · Score: 2, Informative

    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.

  17. Computer Scince vs Software Engineering by EmbeddedJanitor · · Score: 2, Insightful
    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.

    --
    Engineering is the art of compromise.
  18. 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.

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

  20. Re:Not enough time by Shados · · Score: 2, Insightful

    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.

  21. Engineers overstate PHB decisions ... by AHumbleOpinion · · Score: 2, Interesting

    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.

    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 then please let management work on that. If you think they should not be telling you how to design or implement things then you should not presume to tell them how to "sell" something. Another way to look at it, business is a pretty Darwinian process. If color schemes, logos, slogans, etc. were complete crap they would not be used so heavily. Consider how packaging (Windows) triumphs over design (Linux) in many markets.

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

    I've had buddies who literally had this conversation, and management understood/agreed there would be a problem if the issue was not addressed. Management's rationale was that the omission would lead to follow-up contracts to make revisions, that the cost of this client error was coming out of the developer's pocket when it should come out of the client's pocket. I've also been told that in some defense related projects both parties understand and agree there is an omission/problem, but correcting the spec and redoing the approval process would cost more and take longer than revising/repairing/upgrading the initial delivery of equipment built to spec.

    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. While PHB decisions absolutely do exist, we engineers falsely label some rational decisions as PHB due to our ignorance of issues outside of engineering. Learn from the mistake of the people of the "A" Ark. ;-)

    1. Re:Engineers overstate PHB decisions ... by msobkow · · Score: 2, 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.

      --
      I do not fail; I succeed at finding out what does not work.
  22. 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.

  23. 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
    1. Re:Lots of misconceptions... by rubeus · · Score: 2, Insightful
      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.
  24. Re:What would *I* want to see? by DeadChobi · · Score: 2, Insightful

    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.

    --
    SRSLY.
  25. TESTING software! by Killer+Eye · · Score: 2, Interesting

    Testing is a part of the software process that almost no one seems to teach (and thus almost no applicants seem to know). I really want to see universities make this a strong focus, even a primary focus, prior to implementation.

    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 things the software was supposed to do).

    A professor doesn't have to immediately delve into the nuances of some complex C++ commercial testing tool, or the process of setting up a test framework. For instance, a class could start with a programming language that has testing built in really well, like Python. Then, the concepts of testing (like what makes a good testcase) can be taught easily and independent of other complexities of programming.

    --
    "Microsoft killed my company, I hold a personal grudge. I don't use Microsoft products and neither should you."-JWZ
  26. Re:What would *I* want to see? by Anonymous+Brave+Guy · · Score: 2, Insightful

    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.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  27. We already have it by Espectr0 · · Score: 2, Interesting

    On my university in Maracaibo, Venezuela, we have such a course. It is called "software engineering".

    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 :)

  28. Re:Not at all. by Fastolfe · · Score: 2, Insightful

    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.

  29. Re:Not at all. by khasim · · Score: 2, Funny
    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.

    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.
  30. Yes, it is needed and it is missing. Middleware to by dindi · · Score: 2, Informative

    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.

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

    1. Re:Business Development by adwarf · · Score: 2, Insightful

      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.

  32. Co-op placements give you the real world by jacksonic · · Score: 2, Insightful

    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.

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

  34. Real Life by MichaelKaiserProScri · · Score: 2, Insightful
    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.....