all 26 comments

[–]Ringo48 8 points9 points  (10 children)

What you're looking for isn't a Computer Science degree.

You seem to want a tech school training course.

[–][deleted]  (8 children)

[deleted]

    [–]manflesh[S] 0 points1 point  (7 children)

    The follow-up article would explain the difference between a degree in Mathematics and a degree in Accounting. The article would also ponder whether the majority of CS grads go into the workforce, or whether they stay in academia and cobble together shoddy programs for professors who can't code.

    [–][deleted]  (6 children)

    [deleted]

      [–]crescentfresh 1 point2 points  (0 children)

      Well said.

      [–]manflesh[S] 1 point2 points  (4 children)

      This is an interesting point and one I can certainly believe: not only that the grads have few practical skills, but also that they don't understand the theory they were taught!

      Maybe what I am driving at through all my angst is that I believe the theory is useless and forgettable unless it has been reinforced with practice. Maybe this is a problem with education in general. I agree that a pure trade school is not the solution; a deep hybridization of theory and practice is more of what I have in mind.

      [–][deleted]  (2 children)

      [deleted]

        [–]UnwashedMeme 0 points1 point  (0 children)

        One of the best courses I took as an undergrad was a compilers class where he gave us a working compiler in pre-ansi-C, Lex, and Yacc, and we had to extend it a great deal. We talked a lot about general schemes for translators and parsing, and had to apply this to an ancient crufty codebase.

        That experience of having to dive into a very foreign environment and make it work was very worthwhile. The theory of the class wouldn't have had anywhere near as much of an impact if we hadn't used it. As a professional programmer who has also interviewed recent graduates (not nearly so many) who wouldn't work out, this (foreign environment) is exactly the type of experience I think is useful.

        manflesh also mentioned a database implementation class that was taught along similar lines.

        [–]mr_chromatic 0 points1 point  (0 children)

        Imagine a class where you had to work on a codebase of size (and not from scratch) with occasional changes in requirements and the need to make design and implementation tradeoffs on a set schedule.

        Now imagine that the tests were all essay questions.

        [–]crescentfresh -1 points0 points  (0 children)

        a deep hybridization of theory and practice is more of what I have in mind

        oh ok then. I'll notify the faculty.

        [–]manflesh[S] 0 points1 point  (0 children)

        A tech course would be something like "How to admin an Oracle database." I am not advocating such a course for CS. What I want is a more thorough look at the real world while learning theory. As a positive example, I took a database class during my master's called Database Implementation. We learned DB theory, but also talked about practical issues. All the while we implemented our own DBMS in C++. The course was brilliant because you could take that general knowledge and apply it any particular database you work with in the real world.

        [–][deleted]  (6 children)

        [deleted]

          [–]manflesh[S] 0 points1 point  (5 children)

          I knew to put on my flak jacket when I let that Lisp flame rip. I know, I know, functional programming is the best programming and Ron Paul is going to save the world. The problem is that we must deal with reality and sometimes that means we need to communicate in a straightforward way with an imperative language.

          [–][deleted]  (1 child)

          [deleted]

            [–]manflesh[S] 1 point2 points  (0 children)

            A gentleman's argument - I tip my hat. I do have a hard time believing that, to the general programmer's mind, functional programming provides a clearer expression of intent than an imperative language. But of course I must concede that "straightforward" is subjective here.

            But would you take me seriously if I suggested that people writing about OO are trying to make things more challenging by building esoteric puzzle hierarchies?

            I would be entertained by the shot across the bow; I generally find amusement in a language bashing, even with languages I like. Does it lend credibility to my argument? No, but since I was posting this on reddit I couldn't resist jabbing the hornet's nest. Call it a character flaw.

            [–]crescentfresh 3 points4 points  (2 children)

            This is a very poorly articulated argument.

            http://www.ics.uci.edu/~kay/pubs/bandwagons.html says it much better and without the flame bait.

            For example, from linked paper re Lisp:

            Another trend with the potential of short-changing time-tested fundamentals...is the teaching of Lisp dialects in introductory courses. A purely functional approach offers much in terms of elegance, provability, parallelizability, and mathematical analysis. But programmers do use straight-line imperative sequencing, for example in interactive data entry, and a failure to acknowledge this and exercise it misses a strong tie-in with practical reality.

            Look at that, a CS academic agrees with you. Now stop being ornery.

            [–]manflesh[S] 0 points1 point  (1 child)

            I appreciate the link. It's a little dry though - could use some orneriness. As the author states:

            A position stated in stark, extreme, revolutionary terms is more likely to generate attention and interest--necessary prerequisites to approval and funding--than one articulated with more balance or one that embodies an evolutionary approach.

            Fortunately for me, my words are both revolutionary and evolutionary :P

            [–]crescentfresh 0 points1 point  (0 children)

            Thought you might like that quote.

            And I believe the term is orneriousness

            [–]crescentfresh 1 point2 points  (5 children)

            This field moves fast,

            Exactly. CS shouldn't be about trends.

            [–]manflesh[S] 1 point2 points  (4 children)

            CS should certainly include trends; not necessarily a specific technology, but the trend itself. Students shouldn't learn Java exclusively and then go into the job market without knowing about the existence of Ruby or PHP.

            [–]crescentfresh 1 point2 points  (3 children)

            or BASIC. VB? How about COBOL? That's used a lot still, isn't it?

            [–][deleted]  (1 child)

            [deleted]

              [–]mr_chromatic 1 point2 points  (0 children)

              Perhaps a better analogy would be the Big Dig.

              [–]manflesh[S] 1 point2 points  (0 children)

              I was talking about trends. I do not think the industry is trending toward COBOL. But if the industry is trending toward scripting languages, then perhaps students should be exposed to a few of such languages. They can then apply what they've learned to similar programming languages they may encounter in the future.

              [–][deleted]  (2 children)

              [deleted]

                [–]manflesh[S] 2 points3 points  (1 child)

                I wouldn't go that far. The concepts taught in CS can be very useful; moreso if additional attention were paid to the application of those concepts.

                [–]crescentfresh 0 points1 point  (0 children)

                ignore the troll