Live data from Hacker News

The Missing Semester of Your CS Education (2020)

missing.csail.mit.edu

331–340 of 347 posts

Re: The Missing Semester of Your CS Education (2020)

#331
post #327

Earlier quoted context omitted.

F# has two ways to invoke functions, ‘f a b’ and ‘f(a,b)’. You need to know when to use what. There is no way this is simpler to beginners compared to having one consistent way. C# is not a simple language, but F# has basically all the complexity of C# with OCaml on top. Either C# or OCaml would be simpler to learn, although the combination is powerful.

I don't know F# but the reference only mentions the `f a b` syntax.[1] `f(a, b)` looks like a call to a function that takes a single tuple as its argument. So I would expect `f` to have the type signature `A * B -> C` instead of `A -> B -> C`. Is my intuition wrong? If it is, then what does F# use the parenthetical syntax for? [1] https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...

Methods from the .net framework and other libraries are called with a tuple of argument, since they are not compatible with the native F# was of calling functions.

Re: The Missing Semester of Your CS Education (2020)

#333

Earlier quoted context omitted.

I sat with a talented developer whilst we wrestled with a threading issue this past week. I wanted to inspect the value of a variable within a method during execution and asked him to set a breakpoint. He didn't know how to do that in the IDE, which he'd been using for over a year. Debugging is indeed a skill which needs learning.

A talented developer who doesn't know how to set a breakpoint sounds contradictory to me.

Maybe rare but you may be very skilled at understanding structure and finding solution but knowing nothing about tools. As long as you're either one of them.

Re: The Missing Semester of Your CS Education (2020)

#334

Earlier quoted context omitted.

I think it's harder if you already know C# or some other OO language. I really think it would be easier, or about the same, to teach a raw beginner the basics of F# vs C#. The only reason F# winds up feeling harder isn't so much how F# works, but simply because the entire dotnet environment was built for C# first, so you do need to know how to handle the C# style. I do think that if you could just pick one and then s…

F# has two ways to invoke functions, ‘f a b’ and ‘f(a,b)’. You need to know when to use what. There is no way this is simpler to beginners compared to having one consistent way. C# is not a simple language, but F# has basically all the complexity of C# with OCaml on top. Either C# or OCaml would be simpler to learn, although the combination is powerful.

This to me is a pretty simple thing to explain and deal with.

F# enforcing a lot of good practice code style stuff (order matters for example pisses off long time devs who already have styles, but prevents SOOOO much stupid bs from beginners) and basically eliminates runtime/chasing variable state errors completely so long as you can stay within style. Yes it'd be nicer if there was only one way to invoke functions but if i had to take a tradeoff I think it's a pretty easy one.

It is an issue that yes, like your example, you're often stuck ALSO learning OO because "oh you want to use X library, well that's OO so...", and even then you can isolate your mutable/OO areas really well, but this is more of an issue with it being an second fiddle language. If F# got F# specific libraries for all the C# stuff out there tomorrow I think it'd take off and most people would never look back.

If we're talking basic business logic/beginner programmer stuff, yeah I think F# offers a lot of stuff that makes it flat out easier to use. And if you want to point out complex issues, I feel the biggest one is that something that's intuitively much easier to understand in OO (create a variable/object, populate it on each iteration of a loop depending on logic), can feel daunting as hell in F# (fold).

Re: The Missing Semester of Your CS Education (2020)

#335
post #327

Earlier quoted context omitted.

I don't know F# but the reference only mentions the `f a b` syntax.[1] `f(a, b)` looks like a call to a function that takes a single tuple as its argument. So I would expect `f` to have the type signature `A * B -> C` instead of `A -> B -> C`. Is my intuition wrong? If it is, then what does F# use the parenthetical syntax for? [1] https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...

Methods from the .net framework and other libraries are called with a tuple of argument, since they are not compatible with the native F# was of calling functions.

I mean to be completely bad faith pedantic, yeah that's still f a b, but obviously not the point being discussed here.

Re: The Missing Semester of Your CS Education (2020)

#336

Earlier quoted context omitted.

I don’t think that’s quite right. You’re not going to expect someone majoring in French to not have studied any French before college. It seems completely reasonable to expect someone to be comfortable finding their way around a computer if they’ve chosen to major in computer science. I’d also expect an entering electrical engineering major has studied more math than just “some secondary school algebra”. They’ve prob…

You have to put yourself back into your 18yo self, right? The kind of people who think a degree in management will make you a manager, and if they let you on to your course they must know what the requirements are and you must satisfy them. At that time in your life your entire world has been school, and everything you did in school led to another thing in school. Why wouldn't you assume you'd get taught programming…

everything they teach you in a CS degree is useful and broadens your knowledge of the space, and all of it might potentially come in handy as your career develops, though much of it might not.

Doesn't mean you'll be a great programmer or archtect or planner or teacher. Right? you might drop it and go into something else.

Same is actually true of a management degree, everything they teach has been well thought out and is applicable to managing a company. Doesn't mean you'll be any good at it or work in all those departments. It is not a useless degree, though many useless people might pursue it.

Re: The Missing Semester of Your CS Education (2020)

#337
post #39

We're teaching a course at ETH Zurich [1] where --besides the actual payload of solving partial differential equations (PDEs) on GPUs-- we put a lot of emphasis on "tools". Thus students learn how to use git and submit their homework via pushing to a repo of theirs on github, we teach testing and continuous integration, writing documentation, running code on a cluster, etc. In their final project, again submitted as…

Thank you very much for the GPU course. Even though my college taught shell usage to some extent, when I asked about GPU programming it was considered a nerd topic back in 2009.

Re: The Missing Semester of Your CS Education (2020)

#339
from reading the comments here, i get a sense that most people on hn assume that a cs degree is just for entering the software industry.

not to discount the initiative itself, but bachelors in cs is more about the core cs theory that will be valid decades from now, unless the entire paradigm changes.

Re: The Missing Semester of Your CS Education (2020)

#340

Earlier quoted context omitted.

Software development is a trade, if all you aspire to be is a WordPress or frontend developer then you don't need a fancy degree, you can just as easily go to a 6 to 8 week code camp for that. Computer science is a pathway for those that want to delve deeper, and that necessitates rigorous fundamentals in applied mathematics and information theory.

> Computer science is a pathway for those that want to delve deeper, and that necessitates rigorous fundamentals in applied mathematics and information theory. I dare say that one can go through a whole career as a software engineer without spending a single semester learning about algorithms, in the sense that you just start learning about them in a JIT fashion if/when they become an issue, which is rarely. Some of…

Computer science != algorithms. There's also the whole systems branch! If you ever find yourself thinking about TCP, virtual memory, system calls, frame buffers, shaders, signatures, interpreters, compilers, query planners, etc. these are also things you could have studied and practiced building in a CS program.
Post reply on HN