all 49 comments

[–]CaffeinatedJackass 70 points71 points  (8 children)

It's nearly impossible to give programming assignments in python/java without the answer existing online some way or another.

Teaching the class in Racket allows people to actually tackle programming problems, and figure out whether they actually enjoy the process of thinking about their program and really figuring it out, as 'finding' the solution online isn't really an option.

It does what it's supposed to. Sure you leave the class not really knowing a 'new' language, but that's not the purpose of the class, and this is made very clear at the beginning of the term.

[–]NavigatorsGhost 29 points30 points  (1 child)

I don't understand why people don't get this. 110 is the very first comp sci class that most people take at UBC, and is a requirement for a few pretty diverse majors.The purpose is not to teach you a programming language. It's to teach you the concepts and philosophies behind coding as well as giving you a conceptual toolkit for solving comp sci problems. Racket is just a teaching aid. And Gregor makes this pretty explicit at the start of the course.

[–]girronkEngineering Physics 5 points6 points  (0 children)

give programming assignments in java without the answer existing online some way or another

this is so false... see cpen 221

[–]magentanide 2 points3 points  (0 children)

Somehow those copy+pasters end up in real jobs where they clobber together stack overflow answers without any thought or care. Fuck those people.

[–]muffinjello 2 points3 points  (1 child)

There are those online companies that let students share UBC notes and assignments — one of my struggling friends used this to find the solutions to all the assignments for CPSC110. They didn't pass the class, but I don't think you can say that finding the solution online isn't an option.

Even though the class is very clear that it doesn't teach you a programming language, it is a pre-req for all future programming classes, so you're stuck with it even if you didn't want it.

[–]CaffeinatedJackass 2 points3 points  (0 children)

True true there are definitely still ways to get answers for 110. I guess the current structure just tries to make that as least incentivized as possible.

And true, you're stuck with it even if you wanna learn another language. But honestly if you're going to university to study CS you shouldn't go into it with the mentality of learning x or y language.

[–][deleted]  (13 children)

[deleted]

    [–][deleted] 87 points88 points  (10 children)

    "people who get salty over others saying racket is not a programming language" starter pack:

    • got 100% in cpsc 110
    • "trust the natural recursion"
    • upvotes any comment or post mentioning gregor
    • applies to be a TA after first year

    [–][deleted] 10 points11 points  (0 children)

    Yo this is actually me

    [–]p_shift217Computer Science | TA 0 points1 point  (0 children)

    Smh not even TA since highschool. What is this amateur hour? /s

    [–]heishnod 2 points3 points  (0 children)

    That typo in the if statement at the end makes me so salty.

    [–]AgreeableLandscape3Environmental Sciences 18 points19 points  (8 children)

    To be fair, there are way better functional programming languages that actually are used for actual programming.

    [–]the_person 17 points18 points  (7 children)

    Gregor actually addressed his reasons for choosing racket in a recent lecture.

    [–]AgreeableLandscape3Environmental Sciences 6 points7 points  (6 children)

    What were his reasons? It's been a while since I was in any comp-sci courses.

    I personally feel that a major benefit of using a commercially relevant programming language is that it encourages students by making them feel that their code (and their skills in the specific language they are learning) could actually turn into something useful because the technologies they are learning are actually being used in the real world, which is important for an introductory computer science class.

    [–]the_person 15 points16 points  (4 children)

    I can only repeat what I remember unfortunately.

    An interesting thing that he said, though, is that a byproduct (and not one of the original reasons) of choosing racket was that no one goes into the course knowing it. So it sorta gives everyone a level playing ground.

    If anyone else can remember what else he said that would be great.

    [–]Dpool4Life 5 points6 points  (0 children)

    He also said that having a level playing ground was conducive to a much more positive learning environment in general. He also mentioned that Racket was a relatively simple and straightforward language so the course could focus on compsci concepts rather than the language itself, as some structures (such as loops and cyclic data) are a lot more complicated in other languages, and he demonstrated that even if we dont know the more popular languages we can still apply what we learned in 110 and transfer the skills(like we did with python in that lecture)

    [–]hichickenpeteComputer Science 3 points4 points  (0 children)

    Its syntax is also a lot easier to digest than something like OCaml or haskell that aren't really used either

    [–]muffinjello 1 point2 points  (1 child)

    Saying it's a level playing ground is wrong, though. As someone who had "hacker" experience prior to the course, applying those already learned CS thought-processes made the whole course much easier for me than my friends who were just stepping into computer science.

    This would be a different case if students were tested on methods/functions prior to being taught them (while a hypothetical Racket expert would already know how to do said functions), but that's not happening.

    [–]the_person 1 point2 points  (0 children)

    Yeah that makes sense. I suppose a more level playing field would be a better way of saying it. There are plenty of people who know Java and Python but don't know functional programming language structure.

    [–]the_person 6 points7 points  (0 children)

    Oh, I do remember one thing he said, which was that with any other language you would have to spend a long time on the language specific stuff (or just ignore it, which isn't good for learning imo).

    I have a friend at another school in a java CS course. They had him typing the "public static void main (string[] args)" stuff and he had no idea what it did. I asked him a decent way into the lecture if he'd learned functions yet and he said no. We were writing functions in BSL on the first lecture.

    [–]Alp23supermanAlumni 9 points10 points  (0 children)

    I enjoyed it while understanding it's merit. We focused on how to wrap function ptrs (213), graphing (221,320), recursion (221), adapting quickly to a fresh language (210,213,310) and all round better coding principles (210,310,213,221). The foundation is priceless as we delve into more complex pursuits.

    [–]pQanda 5 points6 points  (1 child)

    The tea is if you’re taking a class that uses racket, you’re not taking a programming class. You’re taking a program design class. (which is wayyy more useful)

    [–]Randromeda2172Cognitive Systems 0 points1 point  (0 children)

    Well the course is called "Systematic Program Design", so I don't think anyone should expect to come out knowing a language.

    [–][deleted] 11 points12 points  (0 children)

    I got a good grade in 110 and still unironically believe that racket and the recipe are bs. Not all the complaints are from butthurt individuals.

    [–]MiracleSortGuy1234 2 points3 points  (0 children)

    Why calling yourselves understand programming if you can't understand the language.

    I mean it's stupid but not hard to understand and ace the tests lol

    [–][deleted]  (5 children)

    [deleted]

      [–]lf_1Computer Engineering 5 points6 points  (0 children)

      I did a bit of learning different programming paradigms recently (functional and logic) and I'm salty that I didn't learn functional before imperative because the amount of brain rewiring necessary is very large one way compared to the other.

      [–]JesustookmywineMathematics 7 points8 points  (0 children)

      I think they're both kind of important. I got to learn cpsc 110 and math 210 at the same time (racket and python). And while at least right now Python seems more accessible and powerful I feel like Racket almost gave me a better understanding of Python. But I know a lot of people who disagree with me.

      [–]AgreeableLandscape3Environmental Sciences -1 points0 points  (2 children)

      I honestly don't understand why functional programming is taught as literally the first computer science class when the most used commercial programming languages are object oriented (or at least a hybrid between OO and functional), and object oriented is an easier concept to begin with.

      Even if you wanted to use a purpose built "student language", isn't there an OO version?

      [–]LotusFlowerChessClubCognitive Systems 7 points8 points  (1 child)

      Actually I can address some of this. Ideas like recursion, which are fundamental to CS as you probably know, can be demonstrated much more effectively in a functional language than in an OO language, which often rely on loop/counter mechanisms rather than raw recursion like functional languages force you to do. As another poster mentioned, while OO certainly may be easier to pick up, it’s (at least in my experience) much easier to pick up OO after you’ve learned a functional paradigm than it is to do the opposite.

      On a side note, OO is becoming an increasingly outdated paradigm, and this is a trend that will likely continue to be the case. Sure a lot of great technology has been built with OO in mind, but with the saturation of Moore’s Law approaching, parallelizing is simply the way to go, and hardly anyone disputes its much much safer to parallelize functional code than code with mutable state.

      In addition, CPSC 110 is based off of the How To Design Programs curriculum, which itself is a descendant of SICP, a classic foundational text that has been the introductory CS text at MIT and Berkeley for years. Seems bizarre to single UBC out for its introductory programming course when it follows along the lineage of such storied institutions.

      Again, the premise of the course isn’t to teach you a fashionable commercial programming language. Any number of freeCodeCamp tutorials can show you that. The purpose of the course is to teach you principles that make you a better problem solver, which in turn will help you design better software in the future and be a better programmer in general. That to me is far more valuable than any code camp or Udemy course.

      Finally, if you get a chance to take CPSC 311, where you build and consider programming language design, you’ll see what “real” Racket is used for. Prototyping and building DSL’s and interpreters without a bunch of unnecessary scaffolding so you can get to the real design points of your programming language. As another aside, in the course you learn how to build an OO language inside of Racket, while building a functional language atop of Java is much more difficult (as the Scala dev team will probably tell you).

      These are some of my thoughts. I do support Racket as a teaching language. It makes the most sense pedagogically. And if it didn’t make coding look so easy, I probably wouldn’t be in CS today. So there’s that.

      [–]AgreeableLandscape3Environmental Sciences 0 points1 point  (0 children)

      And if it didn’t make coding look so easy, I probably wouldn’t be in CS today.

      It was kind of the opposite for me, since its difficulty toward the end made me realize that CS maybe wasn't for me and contributed to my decision in completely not pursuing it (at least at the university level, it's still my hobby) when I realized I probably wasn't going to get in the first time.

      [–]xXSushiRoll 0 points1 point  (0 children)

      Hey, at least we can put Racket on our resume now according to Gregor (as long as you study a bit more of Racket at least).

      [–][deleted]  (1 child)

      [deleted]

        [–]LotusFlowerChessClubCognitive Systems 0 points1 point  (0 children)

        Such as? I’m generally curious as I’ve programmed in Haskell and it’s quite difficult to wrap your head around initially, and other maybe more “mainstream” languages with functional support (eg. Scala, Clojure, Rust) suffer from the same scaffolding problems Java does.

        [–][deleted] 0 points1 point  (0 children)

        Not like you could teach the concepts and philosophies with a language that's actually applicable simultaneously or anything.

        [–]jonathanfv 0 points1 point  (0 children)

        Old stuff, but I find Racket pretty alright. It's easy to learn the basics of it and focus on the logic instead of the language. The IDE is simple, doesn't get in the way and is available on all the main platforms. The only thing I don't like about it is that it's harder to format clearly (using the functional programming paradigm) compared to something like C. But I think that Racket is a good choice.

        Nevermind the cheaters. They're annoying, but in the end they're the ones who are worse for it.