Live data from Hacker News

If not SICP, then what? Maybe HTDP?

stevenrosenberg.net

91–100 of 227 posts

Re: If not SICP, then what? Maybe HTDP?

#91
post #86

Working through SICP my main issue was the almost unbounded time commitment- like it will take you between a month to two years. I remember there was a trivial problem that took 5 minutes then apropos nothing the next problem bascially required you to invent the concept of numbers as functions in lambda calculus and required a two day diversion just to understand the answer. Even the best programmers I’ve known who’v…

This last week I took an in-person class where we covered almost all of the book: https://dabeaz.com/SICP.html

The instructor David Beazley very skillfully weeded out all the non-essential parts and added one amazing exercise where we implemented the lambda calculus and, funny enough, the ycombinator.

Highly recommend it for anyone who desires to learn this material, can't find the time, and is willing to pay $2500 for the experience.

Re: If not SICP, then what? Maybe HTDP?

#92
post #4

People who worked through HtDP: what are your impressions?

The book is great, I've been working through HTDP and it's generous amount of programming exercises casually over the past year as a self learner. I had been dabbling in programming over the past several years (as a true dilettante) and have utilized several resources on my journey (CS50, Programming: Principles and Practice Using C++, a touch of SICP), but it wasn't until progressing through HTDP that I really felt confident I was learning HOW to program. The pedagogy the book uses instruct a beginner on how to program is sound and uses many of the concepts touched upon by the popular "Learning How to Learn" edX course. The natural progression of the exercises as well as the evolution of the language used throughout the book(BSL or Basic Student Language) pair nicely and you slowly feel yourself becoming "wizardly" as the training wheels are slowly being stripped away.

The authors do a good great job in promoting good software craftsmanship from the very beginning of the text. Like any good teachers they reinforce the importance of developing good habits that as a beginner you sometimes take for granted, such as writing unit tests for newly defined functions. Thinking through programming exercises is done methodically with HTDPs Design Recipe, which enforces the use a function signature, purpose statement (comments), a header, and functional examples - followed by a template to flesh out the basic structure of the code you will be using to define your function.

I've watched most of the SICP lectures by Sussman and Abelson and while brilliant, it becomes quite clear that even the professional programmers in the room have trouble keeping up with the pace of the lectures. As a beginner, I was acutely aware that I had bitten off more than I could chew and I will revisit them and SICP after completion of HTDP.

As a side note, I discovered small typo in one of the examples and emailed the lead author (Matthias Felleisen) and he responded to me same day very appreciative that I took the time to do so. If he or any of the other authors read this, thank you! I'm still diligently making my way through and enjoying your text!

Re: If not SICP, then what? Maybe HTDP?

#93

When I started my Bachelor in Italy (Bologna) I had actually not enrolled yet to the degree, and I was instead following both Computer Science and Philosphy. My plan was to continue both of them, or to choose one. We had this first year programming course taught by a fairly younger teacher (39), Ms Busi: I was expecting not much from it because I thought it would be an introductory course on programming OOP stuff wit…

Thank you for sharing this story. I’m sorry to hear about professor Busi.

My introduction to computer science was also HtDP and your experience mirrors mine exactly. The people who were the most upset about it were people with exposure to Java and C from high school. Now that I’m in industry, I find I have a better grasp on things like recursion compared to many of my colleagues.

Re: If not SICP, then what? Maybe HTDP?

#94
post #68
post #52

They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge THE HORROR ;) In all seriousness, IMO we'd have much better programs if developers spent more time thinking about domain knowledge and less time believing that "programming" in isolation is the important part.

Domain knowledge vs. programming "in isolation" is a false dichotomy. Indeed, the programmer's business is to think about the domain in terms of computer science in the programming language of choice. It is sometimes a very complicated translation process, and the complexities do not necessarily come from the domain per se but often from requirements concerning the target platform, efficiency, precision, user interfa…

The "important part" is that the code solves the end user's problem while creating the minimum possible amount of new problems for them. Everything else is an implementation detail. Everything else that we hold so dear about computer science is only important insofar as it solves someone's problem.

Re: If not SICP, then what? Maybe HTDP?

#95

Earlier quoted context omitted.

Similarly, a lot of James Clerk Maxwell's writing can be found on Archive.org, and it's amazing: https://archive.org/search.php?query=maxwell%2C+james+clerk&...

It's not unusual that original scientific works are more clear than the later works of people trying to explain them. The original author has to persuade people, and convince people who aren't familiar with them. The "pedagogical" author later is in a more clear position of authority and doesn't need to work as hard.

> The original author has to persuade people, and convince people who aren't familiar with them. The "pedagogical" author later is in a more clear position of authority and doesn't need to work as hard.

Or perhaps: The "pedagogical" author can assume that by the time of his writing, we live in a society where it is accepted that there is nothing mysterious about the material (e.g. imaginary numbers are nothing mysterious) and can concentrate on explaining the material in the best possible way.

The problem is that many students come from a background where they were taught a deeply anti-scientific attitude.

EDIT: To put it more concisely: It is a different job to convince someone of a scientific result (here the other side is distrusting) than to teach it (here the other side gives you credit of trust (but a lack of understanding) and you have to teach them so that they understand it). Unluckily many students who attend lectures have an attitude where they need to be convinced instead of taught.

Re: If not SICP, then what? Maybe HTDP?

#96
post #61

Earlier quoted context omitted.

Which among these teach me functional paradigm through LISP the best? Or would you recommend some other book that uses a small language to gain a good grip over FP? Haskell, Scala and Clojure are intimidatingly big.

HtDP or none of them. Functional paradigm has two flavors: 1. Functions as first class objects in the language and enabling the functional style programming. 2. Pure functional programming. Not a style, its functional programming. IMHO learning the first kind helps relatively little when you want to learn second kind and vice versa. Lisp is multi-paradigm language or "Lisp paradigm" language family. Because functions…

So for second flavor, what would you recommend with focus on smallness of language?

Re: If not SICP, then what? Maybe HTDP?

#97
post #52

They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge THE HORROR ;) In all seriousness, IMO we'd have much better programs if developers spent more time thinking about domain knowledge and less time believing that "programming" in isolation is the important part.

A central principle in HtDP is how to represent information (the domain) as data in a systematic way. The whole point of it's approach, as I understand it, is in fact to teach a domain-neutral approach, where what dictates data and function structure is the information's structure.

Re: If not SICP, then what? Maybe HTDP?

#98
post #94
post #68

Earlier quoted context omitted.

Domain knowledge vs. programming "in isolation" is a false dichotomy. Indeed, the programmer's business is to think about the domain in terms of computer science in the programming language of choice. It is sometimes a very complicated translation process, and the complexities do not necessarily come from the domain per se but often from requirements concerning the target platform, efficiency, precision, user interfa…

The "important part" is that the code solves the end user's problem while creating the minimum possible amount of new problems for them. Everything else is an implementation detail. Everything else that we hold so dear about computer science is only important insofar as it solves someone's problem.

It's an old and long tired adage that the "pure" knowledge, especially mathematics, is only "important insofar as it solves someone's problem." This is wrong on at least two accounts. First, the pure mathematics, for example, like art, is interesting, valuable, and perfectly happy to exist for its own reasons and does not need any permission from anyone to do so; second, it has not been a secret that the pure knowledge routinely turns out to be tremendously useful at some point - even if centuries later.

Re: If not SICP, then what? Maybe HTDP?

#100
post #52

They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge THE HORROR ;) In all seriousness, IMO we'd have much better programs if developers spent more time thinking about domain knowledge and less time believing that "programming" in isolation is the important part.

We need both. Not enough domain knowledge and you end up with software that isn’t a great fit for what it’s trying to do, but without enough computer science and software engineering knowledge and we end up with all of these stupidly memory-and-cpu-hungry applications that are all the rage these days.

Clearly. If people want code written by people with a lot of domain knowledge but not a lot of software engineering experience, look at the code written by electronic engineers who just need to write a little software (typically for microcontrollers) to interact with the hardware, the true focus of their craft.

Some of the most horrendous, fragile, unmaintainable spaghetti code I've seen in my life was written by electronic engineers. And some of them were true masters of their crafts, it's not like they lacked the cognitive abilities to write good code, it's just that they didn't care at all, it just had to accomplish the function they needed. Meanwhile I'd see them spending a lot of time making sure things were routed nicely and PCBs looked nice.

Post reply on HN