6 ms·
I don't see why they don't just teach C, x86, and Haskell everywhere. If you know the concepts behind these, you can quickly grok any other programming language
by jfaucett 12y ago
I don't see why they don't just teach C, x86, and Haskell everywhere. If you know the concepts behind these, you can quickly grok any other programming language. Also I never got the whole hype behind OOP. IMHO its self explanatory, nothing you need an entire course on to be effective and understand OOP programs. Memory layout and management, advanced pointer concepts and monads are a slightly different matter.
If I had to teach someone OOP I'd say, OOP is like the real world if it were made of puppets and every puppet could pull another puppets strings, pull a string and a dog barks and wags its tail causing a cat to meow, the key is just not tangling up your strings.
- johnloeber 12y agoThey actually do this at the University of Chicago. That's exactly the introductory sequence. The first class in the major is in Racket (Standard) or Haskell (Honors). The second class in the major is in C, and also covers basic UNIX tools. The third class is in x86 assembly and C, focused on understanding low-level systems.
- jagger27 12y agoI wish I was there. My curriculum at Carleton University is 1. Intro to CS in Python ending with a taste of Java 2. Java 3. C (intro to UNIX) 4. C++ (design first, implement after, waterfall, etc.) Along with 3 there is data structures taught in Java [0] and with 4 there is web dev taught in Node.js. 0: Following this text: http://opendatastructures.org/ http://opendatastructures.org/ Taught by its author, Dr. Pat Morin.
- cdelahousse 12y agoActually, the first class is now Java and C++. Morin isn't teaching Python any more. "Functional" programming is taught in third year (COMP 3007), but you don't get too deep into it. My issue with the listed classes isn't the chosen languages. A commenter mentioned that you can learn a lot of functional (and other) concepts in a procedural or object oriented language. My issue is that I basically learned the same concepts over and over again, just using different programming languages. You learn to iterate over a multidimensional array in Java, and then you do so again with C, but you have to deallocate and reallocate, and then you do it in C++, but you create an object for the array. It's all the same stuff.
- fakeanon 12y agoAha. Do you have an outline of a better way?
- fishnchips 12y agoI love the analogy. I'll use it with my freshman students.
- dkarapetyan 12y agoIn that sense imperative programming is equally hyped. It too is like the real world, first you do this then you do that. Similarly there is nothing fancy about functional programming since algebra and calculus already introduce the ideas of composing smaller things to get bigger things. What I'm getting at is that computation exists on several planes of abstraction and maybe covering C, x86, and Haskell might give you a good overview it will still leave things hidden because there is also Prolog and the branch of computation that Prolog leads to. Most schools settle for teaching their students the theory and some marketable skills by sticking to well-known languages like Java and Python.
- Arwill 12y agoThe problem is, people finish their CS study, and do not have such level of knowledge that they could start working right away. So Haskell might be nice, but is hardly a sought for skill. Sure if students would learn different stuff by themselves, they could learn useful skills too, but most of the students are lazy, and only learn what they have to.
- weeksie 12y agoThis is the worst attitude. University is not supposed to be vocational school.
- Arwill 12y agoNo, the worst is when you get to talk with people fresh out of college, and you can't give them a job, because they are useless. Sober up people.
- dkersten 12y agoNo, the worst is when you get to talk with people fresh out of college who "know" all the latest industry hype but still can't put basic programs together, lack basic problem solving skill and basic algorithmic thinking. Sure, teach them some practical get-a-job stuff, but also teach them how to learn, how to solve problems, the different tools (functional, OO, logic, low-level etc) available and make sure they can solve real problems on their own.
- wwweston 12y agoIt is de facto vocational school, though, since the demand for jobs generally outstrips the demand for labor and employers decided university credentials were indicative of what they were looking for.
- aidos 12y agoThe pursuit of knowledge shouldn't be dampened by silly things like getting a job. It's computer science after all. Aside from that, learning Haskell at university has eventually made me a better programmer. It gives you a whole other world outlook and that's useful once you finally start figuring out how to build reasonable software.
- pjmlp 12y ago> I don't see why they don't just teach C, x86, and Haskell everywhere On my university in Portugal back in the mid-90's, we had: Pascal, C, C++, Caml Light, Smalltalk, Prolog, Java, PL/SQL, x86 and MIPS Assembly Additionally we also got lots of CS stuff like lambda calculus, relational algebra, language semantics and so on. It always feels strange so to me that there are universities out there focusing on single languages, or paradigms.
- hnriot 12y agoI'm not sure pointer concepts are very difficult, pointers might confuse people that didn't grow up with assembly language, but they really aren't very hard to understand and they are also less and less relevant. Over the years the abstraction level increases, it's far better to teach people to continue computer science to the next 21st century level, not go over stuff from the 70's again that they will likely never use. The breakthroughs in CS coming very likely won't be written in C (or assembly for that matter).
- deleted 12y ago[deleted]
- sbov 12y agoI kind of feel like as long as we have imperative programming languages, pointer concepts will be useful. I mean, that's basically what references are.
- GeneralMayhem 12y agoYou cannot write effective code in Java, Python, or C++ without understanding the difference between references and values. You can certainly stick to higher levels of abstractions - most functional languages do a good job of that, especially ones like Haskell that emphasize immutability and value-only semantics - but pointer concepts are absolutely relevant to the industry-standard languages.
- dkersten 12y agoand monads I really don't understand why people have such issues with monads. I don't have a haskell background and originally built up most of my functional programming skill in Python (going somewhat against the grain) and I find monads to be a fancy scary term for an extremely simple concept. I think if they were named something friendlier perhaps people's eyes wouldn't immediately glaze over and they could realise that, actually, monads are just a simple strategy for controlling how things are executed/computed. Computational or execution strategies, if you will. Lets just call them strategies and see if they are less confusing and scary?
- arjie 12y agoHow about F#'s Computation Expressions? Not exactly the same, I'm told, but they're close, if so.
- louthy 12y agoThey're called computation expressions in F# and not monads because they're not exclusively used to implement monads. The term is more generalised to capture the much larger scope of the feature. Here's a breakdown of the difference: http://tomasp.net/blog/2013/computation-zoo-padl/index.html http://tomasp.net/blog/2013/computation-zoo-padl/index.html
- arjie 12y agoExcellent! Thank you!
- dkersten 12y agoI was kinda thinking of F#'s Computation Expressions when I posted my comment.
- nbouscal 12y agoI really don't understand why people think monad is a "fancy scary term". It's a five-letter easily-pronounceable word. What makes it fancy or scary? I think people assume that they're scary, and then confirmation bias themselves into making them hard to learn, despite them being a reasonably simple concept overall. As for calling them strategies… if we called them that it would make learning and understanding the intermediate and advanced concepts significantly less accessible and more difficult. We should call things what they are.
- pron 12y ago> If you know the concepts behind these, you can quickly grok any other programming language. "Grokking" a programming languages is just a means to an end, and far from being the most important means (well, for interesting problems, at least). Most (though not all) of important concepts in CS have absolutely nothing to do with the choice of language. At my university they taught Scheme (SICP) in Intro to Comp Sci, and C -- both in the first year -- and all the rest was just data structures, algorithms, computational complexity, operating systems, numerical algebra, compilation, and electives in vision/graphics/PLs/DSP/whatever. We could do the exercises in whatever language we chose (usually C). In short they taught us just theory and one practical PL (maybe Java, too, for concurrency problems) so that we could actually do the exercises, and boy did we have a lot of good programmers who came out of that school. I owe to my university the realization that the programming language is one of the least important things in CS and software engineering.
- pacala 12y ago> I never got the whole hype behind OOP. It's really not much to it. Get value records right. Get method records right. Sadly, none of C, x86 or Haskell does this.
- kyllo 12y agoAdd a Lisp or Scheme dialect to your list and I'm sold. Homoiconicity, macros, s-expressions and such are too powerful and novel not to cover in a college CS curriculum.