Slashdot Mirror


Constructing a New College IT Curriculum?

slonkak asks: "For extra credit in my Management & Information Systems we were asked to redevelop the IT curriculum. Interning at a government organization for the past 5 years, I have a good idea of what I'd like to know graduating from college. Here are the two tracks I came up with. Does anyone have any suggestions on how to improve this curriculum? I would like more experience members of the Slashdot community to give their input on what they would like to see new hires have a good understanding of." Yes, this one may sound like Slashdot-Do-My-Homework, but the underlying question is still worthwhile. For you IT Managers out there, what do you expect someone with a college degree to know? For you prospective CS Students who might be reading, what would you like to learn while obtaining that degree?

16 of 127 comments (clear)

  1. Tech training vs. education by dsci · · Score: 5, Insightful

    In looking at the two programs outlined, I noticed that they somewhat focus on training for specific products (VC .NET, 2003 Server, Cisco Routers, etc.) rather than underlying theory and principles.

    As the owner of a small business who sometimes looks to hire developers for specific projects, I would probably not hire someone coming from this type of curriculum. In contrast, a programmer with education in principles could likely learn VC, gcc, VectorC or whatever compiler tool best suits the project. To this end, I would not put on my job search documents "experienced in VC .NET" but rather "experience programming C++."

    --
    Computational Chemistry products and services.
    1. Re:Tech training vs. education by llefler · · Score: 4, Informative

      It looks more like a catalog for an IT training company than a serious CIS curriculum. To consider it a CS curriculum, it's too sad to even laugh. Just the course title "Real World Programming".... None of the colleges/universities I have attended have had the staff to teach the course. That's why they have Internship courses. And excuse me, two Exchange classes in a Development curriculum?

      Having recently returned to college to get the degree I would need to get the job I already have, I've given some thought to this topic.

      First, what's with the 'washout' courses being in the 3rd year? One university I attended required Advanced Cobol as a senior level cource. Cobol, JCL, etc. And it was designed around the premise that it would be the hardest course in the curriculum. (which was basically an instructor saying, I'm going to give vague assignments and then mark off when you can't read my mind) Rather than wasting people's time, frontload the curriculum. Make the intro course tough. For instance:

      Computing Concepts 5-6 hrs - number systems, functions/procedures, basic computer architecture (IE registers, etc), structured programming, BASIC, Pascal, ASM.

      Two C language classes

      Database concepts - introduction to SQL, simple database design, normalization

      Advanced databases - advanced designs, stored procedures, triggers, management techniques

      Operating systems concepts - file systems, memory management, threading

      Networking technologies - sockets, RPC, DCOM, corba, etc.

      Systems Design I - Requirements, documentation, analysis techiques. Design tools. (UML, DFDs, process flow, business rules)

      Systems Design II - project scheduling, JAD, meet with one of the other Depts of the college to design a system to meet some business need.

      Senior project - team project to develop one of the systems designed in Systems Design II.

      And judging from some of the professionals I've dealt with; a reintroduction to spelling and grammar.

      Of course this is a CIS development track. It doesn't pretend to address CS or systems.

      --
      It is amazing what you can accomplish if you do not care who gets the credit. -- Harry Truman
  2. Sounds like a training curricula by speedy1161 · · Score: 5, Insightful

    The curriculum that you have posted sounds like something out of DeVry or Chubb and not something that you'd find at a college. Instead of having particular courses in .NET/Java/C++, have generalized data structures and algorithm classes that teach the basics of low-level software design and hammer the importance of efficiency home.

    Having theoretical coursework may seem lame and not usefull post-graduation, but they often teach the concepts that are the most used in a CS position. These concepts can be enforced with projects, homeworks, and, most importantly, through internships or co-operative education experiences.

    I am a computer scientist in the defense industry and I have seen other 'computer scientists' with degrees from schools whose curriculum approaches what you are proposing. They have a lot harder time thinking in terms of the problem and are 'hard-wired' to use certain technologies to solve every problem. They rely on the SKILLS they were taught in college rather then on the KNOWLEDGE they learned through theory and the application of the theory through constructive coursework.

    Here's a link to the current CS curriculum of the school I attended, it has changed a lot since I went there but the focus on theory and knowledge is still present.

    1. Re:Sounds like a training curricula by Zapman · · Score: 4, Insightful

      I completely agree. There's a huge difference between a degree coming out of your 'technical schools' and a true 'computer science' degree. Most of the jobs that are being outsourced are the ones your curriculum would train someone for. The jobs that are staying are the architecture, the system design, etc.

      I believe it was Dijkstra who said something like "Show me the code, and I will not understand. Show me the data structures, and I will." Data structures and interfaces are the heart of programing, and the difference between being a code monkey and a great programer.

      Finally, there's a point about aptitude. I am a great sysadmin. I am not a great programer. I understand a lot of what goes into being a great programer, and I know I don't have it. Your curriculum does not allow specializations, and I really think it should.

      The heart of all programing does not change. Only languages and methods change. If you can change languages and methods easily, you'll be a much greater programer.

      --
      Zapman
  3. One idea.. by hookedup · · Score: 4, Insightful


    When I was in college, seems all we did was install things, set things up, put things togeather. Now here's a crazy idea.. break a system/network/router/etc.. real good, then give it to the students to figure out why it's broken. This could be improperly installed hardware, missing system files, broken network cable, the possibilities are endless.

    Since I graduated, I do a lot more 'fixing' than I do setting up things.

  4. You mean IT? by Tom7 · · Score: 5, Insightful

    For you prospective CS Students who might be reading

    Ho ho ho now, Computer Science is very different from Information Systems/Information Technology.

  5. It's pathetic by aurelianito · · Score: 3, Insightful

    The things that one should learn at college should be more permanent. Learning a technology or other is irrelevant. And technology changes (a lot). Today is Windows and Linux, but in ten years, who knows?. Formal education should go to the basics. If you learn about networking, you should learn the difference between state-full and state-less protocols, and the two army dilemma. If you are learning about programming, you should learn about paradigms (several of them, imperative, functional, objects, etc) and, maybe, concurrency issues and stuff. If you are learning databases, the best thing is the relational model. Focusing on tools instead of concepts it's bread for today and hunger for tomorrow. Hope it helps, Aureliano

  6. Too Specific by Gudlyf · · Score: 4, Insightful
    It seems you're tying people down to specifics (Microsoft, Cisco, Oracle, etc.) when really there are no "fundamentals" courses.

    For Network Engineering, I'd expect to see courses on network topology principles (regardless of whether it's Cisco or not you're applying it to). OSI, TCP, IP, broadband networking principles, wireless technologies, security, cryptography, oh and security.

    I'd also expect to see classes on the foundations of operating systems and the core aspects of them, how they work, why they work the way they do, etc. Also fundamentals of computer systems themselves -- how they are designed, where they are headed and how, etc.

    How about the design and use of compilers in principle? How they work, why they work, why you use the syntax of C/Java/C# vs. something else.

    In short, you're way too specific. These seem like courses I'd take to get a certificate in each, not a degree. You can have a C++ programming course with Microsoft Visual, but that should be up to the professor or the curriculum on top of it. I've been in C++ programming classes that allowed the students to use whatever C++ compiler they wanted, since it was the underlying programming priciples that were important, not that we knew how to navigate Microsoft's expensive interface.

    --
    Trolls lurk everywhere. Mod them down.
  7. Re:WTH? by kzadot · · Score: 5, Funny

    Your right that the original poster wrote up a lame ass product training course, and while yours is a reasonable looking computer science course, CS aint IT.

    An IT curriculum would look like this:

    * Bullshit buzzwords like Paradigm, Convergence, Competitive Advantage, Quality Assurance. Note, only the buzzwords not necessary, save the actual meanings for the nerds.
    * Helpdesk techniques like Blaming other companies, Pretending to be too clever for the caller, Being a general arsehole.
    * Powerpoint
    * Clicking on the OK button
    * Defragmentation
    * Plugging cables in (in general terms anyway, save actual distinctions between different types of cables for the specialists)
    * Pencil chewing
    * Tieing a tie
    * 1 Day of web design
    * Solataire or Minesweeper
    * Pretending your a programmer when the hot secretary comes around.
    * Pretending to be the janitor when a programmer comes around.
    * The kissing of bosses asses.

    Oh, and in preperation of future industry developments:

    * Flipping burgers.

    etc

  8. Theory by Ouroboro · · Score: 3, Interesting

    I can't speak to your network engineering curriculum, but the curriculum for developer is woefully lacking in any theory. What you have designed here is a curriculum that will produce individuals that are capable of producing software that conforms to a specification, but have not been prepared to create a specification.

    There needs to be courses in data structures, algorithm analysis and operating system theory. I would concern myself less with teaching someone how to be a Java programmer, or a .net programmer, and more with what skills are required to be a good X programmer, where X is whatever language/technology that he or she is presented with. This means that the curriculum and your student aren't obsolete when there is a technology du jour.

    I will say that the one thing that the CS curriculum that I was involved in didn't prepare me effectively for was, documentation. I think that it would have been nice to have been required to produce more in the way documentation for the projects that I was involved in.

    --
    When I want your opinion I will beat it out of you.
  9. Stack overflow!! by frenchgates · · Score: 4, Funny

    CS205 has CS205 as a prerequisite! I think recursive courses should be reserved for higher levels.

    --
    Syntax error: loose != lose, affect != effect, then!=than
  10. Oh dear Lord... by (trb001) · · Score: 3, Insightful

    This isn't a CS curriculum, it's a trade school curriculum. Here's why:

    First off, don't have speicifics! College should make you learn to think, not make you learn what to think. It's trite, but it's true...the best curriculums expose you to new thought processes, new types of systems and new algorithms.

    Why are you taking three semesters of 3 different databases? Have one course: Relational Databases, and take a week to explain the difference between the three. You aren't trying to get someone their certification before graduation.

    Where's your fundamental coursework? Data objects? Operating systems? Comparitive languages? Learning how to write hello world? You need these courses as the backbone. Anyone on /. can tell you that once you pick up the fundamentals of programming (which, fyi, takes years to come to grips with and more years to master), switching languages is as easy as learning syntax and a little about the internals of the language. C -> C++ -> Java -> Pascal -> Perl -> VB...all have the same fundamentals.

    Two semesters of Exchange? Why? Very few people actually need to know the inner workings, and buying a book for $50 is tons cheaper than two semesters. Teach this through network theory and protocols.

    Historical courses...a history of software, hardware changes/design, the 'family tree' of langagues...these help students to flesh out why the smartest people in our field made the choices (some good, some bad) that they did. There were good reasons for creating what seem like God awful languages ((((Lisp/Scheme?)))) as well as needs that lead to developments like Perl and relational databases. Having a professor over the age of 50 who remembers the days before relational databases is a must...someone who worked on a team to write their own would be even better.

    I liked the network theory portions of your curriculum, but there's way too much. A semester (maybe two) on the history of networking, TCP/IP and other protocols (why doesn't anyone use Token Ring anymore?), along with basic, cross platform client/server networking in C (if you can write it in C, you can do it in any other language IMHO). Don't have an entire semester of routers, it's just not worth it.

    In general, the best curriculums require overviews and offer electives in specifics, typically available starting your junior year (after you've gotten your feet wet). As much as possible, stay away from specific, commercial technologies. Even though Cisco is the leader in routing, teach what routing is without using the name 'Cisco'. If the student is smart, they'll be able to recognize what Cisco did well and why becaues they have the theory to back it up.

    --trb

  11. Re:CS, or IT? by Austin+Milbarge · · Score: 3, Interesting

    I totally agree with you. I taught at two colleges in New York and let me tell you, who ever makes up these curriculums are really doing the students a disservice. I found it very frustrating because these students were pushed along with high level concepts and buzz words. Dont get me wrong. Technologies like COM, ActiveX, .NET, JNI, J2EE, XML, JavaScript, ASP, Applets, CGI, VRML, etc, etc, etc... are all useful and great. But they come and go almost everyday! Whereas basic concepts like pointers, stack frames, dynamic memory allocation, linked lists, hash tables, trees, file mapping and virtual memory are the foundation of all computing and are ingnored or barely mentioned in schools anymore.

    Why? Because learning this stuff is downright difficult. But this is where the science is. Most colleges and certification courses who promise big $$$ to it's students who graudate, don't have the time and resources to teach students the basic building blocks, which is why I feel we (America) are losing our grip in IT on a global scale.

    Another piece of the spoiled pie is that these students are taught about technology mostly through Microsoft products and Microsoft's marketing and never understand how makefiles or compiler switches work. I can't begin to tell you how many companies I've worked for that hire button clickers and mouse draggers only to find out they are paying BIG $$$ for a guy who can barely solve a problem without looking through his Microsoft technet CD or worse yet, re-installing Windows! We really need to get back to the basics and teach computer science and NOT some company's marketing campaign.

  12. Reading & Writing by duffbeer703 · · Score: 3, Insightful

    IT people need to be able to read and write coherently.

    I don't care if you're the best Java/.NET/C/whatever programmer on earth. If you cannot effectively communicate, you are not a very useful employee.

    --
    Conformity is the jailer of freedom and enemy of growth. -JFK
  13. Suggested CS curriculum [LONG] by Slipped_Disk · · Score: 3, Insightful

    OK, I'm not qualified to give an IT/IS curriculum outline -- What I DO feel qualified to do is suggest a generic CS outline.
    As many other posters have pointed out, the outline presented reads like a trade school/training course outline: Learn Cisco IOS. Learn MS Win2K+3. Learn Linux (presumably redhat). Learn MS SQL Server, MySQL, Whatever. Learn VB. Lern Visual C++. etc.
    Rather than tying students to a particular product, teach them genericly useful skills.

    For example:

    • CSC-101 : Introcuction to programming
    • CSC-101A : Lab for CSC-101 (people learn by DOING not by having Dr. Fuzzyeyebrows lecture for days on end)
    • CSC-102 : Discrete Mathematics 1
    • CSC-103 : Discrete Mathematics 2 (prereq: 102)
    • CSC-201 : Algorithms and Data Structures (Prereq. 101 & 101a) -- This is where they learn the algorithms...
    • CSC-202 : Analisys of Algorithms (prereq. 201) -- This is where they learn about efficency, complexity, etc.


    Now that they are well-versed in the basics you can start feeding them more advanced topics:
    • Database design (How and why Relational databases work the way they do. Relational algebra, Query optimization & planning, the Hows and Whys of indexes, crash recovery)
    • Database implementation (seperate course where students go hands on and build a database as a semester-long project)
    • Artificial Intelligence (NLP, Neural networks, game-playing algorithms like minimax)
    • Programming Languages -- Not "in this course we are going to teach you lisp, prolog, C, Pascal and Ada", but "Learn lambda calculus, type theory, etc. and how it all ties together to make a programming language like C"
    • Networking and Data Communications - From the hardware level up: explain the basics of how ethernet signalling works, the REASONS behind those annoying "maximum length of a segment" rules, how TCP/IP works, culminating in the students building a network (with whatever software/hardware is available - They shouldn't NEED to use linux or windows or OS/2, they should be able to adapt)
      This course would include a BASIC discussion of security.
    • System Security - How to build secure networks, good policies for security of local machines, encryption and its benefits/drawbacks/weaknesses.
    • Software Engineering - Theory (teach the students the basics of gathering requirements, designing solutions, etc. Get them accustomed to thinking like they will almost invariably have to in the Real World.
    • Software engineering - Practice (semester-long project in which the students use everything they learned in the Theory course to tackle a project, either one assigned to them by the professor or (preferably) one assigned to them by an outside concern. At my school the software engineering class was approached by another section of the university to design outreach software.

    One of the most important things that any student - IS, IT, CS, Trade School, WHATEVER - needs to learn is HOW TO READ THE F***ING MANUAL -- The great failing of my school is that there are people at my level (seniors) who have been "using" the CS department's UNIX machines (Solaris) for almost four years now who do NOT know about "man" and "apropos".
    The things employers (my employers anyway) look for are the ability to THINK and solve problems, and the skills to know where to look to find the answer -- Man pages, news groups, google, etc. are all resources that seem to be wasted on many of my peers. Not knowing where to look is a huge resource sink in the Real World, and will not be helpful to your chances of future employment.
    --
    /~mikeg
  14. What I would like to see by Brandybuck · · Score: 3, Insightful

    Back when I was in University computers were still a relatively new thing. There weren't any entrenched ideas about how it should be taught. And Microsoft was a decade away from a monopoly.

    Consequently, we were taught computer science. No programming, not server administration, and most definitely not Windows. Very first class was Pascal, just to teach use the basics of programming. The next was assembler to learn the low level stuff about how computers worked.

    Then the very next class was Algorithms and Data Structures I. We were to use C on BSD UNIX, neither of which we had been exposed to before. The first assignment was due in a week. This sink-or-swim method taught us two important lessons. First, language wasn't important. Second, it taught us the real-world skill of learning new stuff on our own.

    After that the core classes were more data structures and algorithms, programming language concepts (where we learned lisp, prologue, ada and smalltalk, among others), and compiler design and construction. Others outside of the core included networking, operating system principles, etc.

    I felt it was a well rounded curricula. But when I talk to recent University graduates, they're learning tech-school stuff like Windows, CISCO routers and Linux administration. While these are important skills, they're not computer science. If you want to learn a trade, go to a tech-school. Real colleges and universities are for education. Knowing the technical details of Windows might serve you for the next five or ten years, but learning the underlying principles of operating system design will serve you for a lifetime.

    Aeronautic engineers don't go to school to learn about Beechcraft and Lear, so why are software engineers being taught CISCO routers?

    Old Fart signing off...

    --
    Don't blame me, I didn't vote for either of them!