TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

If not SICP, then what? Maybe HTDP?

336 点作者 philonoist超过 6 年前

37 条评论

craigsmansion超过 6 年前
&quot;that make me jump through intellectual hoops made of mathematics&quot;<p>There is actually surprisingly little mathematics in SICP. What is does have are mechanisms that are then analysed and modelled, after which the mental model is adapted so it can be turned into computational model that is a faithful representation.<p>Some of the presented mechanisms are mathematical in nature, but you don&#x27;t need a mathematical background any more than you need an economics background to write, say, a banking application.<p>&quot;make it hard for me to learn the actual programming.&quot;<p>Depends on if you see &quot;actual programming&quot; as the mental discipline of correctly representing a part of the real world into a computational model.<p>If you see &quot;actual programming&quot; as typing in characters on a screen until they compile, then ship them and get absurd amounts of money for it, then sure, SICP might not be for you.<p>&quot;without going too deep into the quirks of a single programming language&quot;<p>SICP is not about scheme, has never been about scheme, will never be about scheme.<p>You will not emerge a &quot;God of the Lisps&quot; from SICP. It might, however, clue you in about what&#x27;s actually happening when programming, in <i>any</i> language of choice.
评论 #18892327 未加载
评论 #18890938 未加载
评论 #18891163 未加载
评论 #18892132 未加载
评论 #18891924 未加载
评论 #18892357 未加载
评论 #18891549 未加载
earthicus超过 6 年前
I think programmers reaction to the mathematics in SICP is completely hysterical - in the sense of hysteria, not comedy. For example, the author-professors who wrote HTDP, quoted at length in this article complain about using &#x27;complex domain knowledge&#x27; and the author of the blog post does as well, but the running example used is <i>literally arithmetic</i>. In particular:<p>Section 2.1 starts by building a data type of rational numbers, then extends it to interval arithmetic In section 2.4 this is extended to Complex numbers, which also adds the complication of multiple representations of a data type (rectangular vs polar). In section 2.5 these are unified with a generic arithmetic package. Which is finally extended to operate on symbolic polynomials, creating a symbolic algebra system.<p>So you can see, the authors complain about &#x27;domain knowledge&#x27;, but the example was surely chosen precisely because everyone <i>already</i> understands these relationships so well! It&#x27;s a relatively nontrivial example, technically simple but structurally complex, that everyone already understands intuitively, so that you can get right to work thinking about data abstraction techniques - and in this example we go all the way from introducing the notion of an &#x27;abstraction barrier&#x27; for the first time, to data-directed programming &amp; message passing!<p>-----<p>The other mathematical section is 2.3, which is the infamous calculus section. Again the reaction is completely over the top - there&#x27;s no &#x27;deep dive&#x27;, you don&#x27;t need a &#x27;solid foundation&#x27; in calculus, etc. The appearance of calculus is no more than implementing a couple of <i>symbolic transformations of data</i>, and all 4 of the rules are provided for you. You don&#x27;t actually <i>use</i> calculus to do anything, so that if you don&#x27;t know calculus, you can still write the program, it&#x27;ll just be a bit more boring not knowing what it means. This section of the book is like 5 pages long, out of a 500 page book, but it&#x27;s all we hear about...
评论 #18894157 未加载
评论 #18893150 未加载
评论 #18893995 未加载
评论 #18892980 未加载
acbart超过 6 年前
Everyone on here is very excited about HTDP. You are mostly very smart people, and not representative of the typical CS student starting off. Many of you are driven and have rich STEM backgrounds that you draw upon. Therefore, I want to point out that there is no substantial evidence to prove most of the claims of &quot;success&quot; that the HTDP community claims, with regards to novice learners. There are certainly people who HTDP works amazingly for - I have met many brilliant folks who it resonates with. But I have met far more students who it does not work well for (I would describe them as having almost low-key PTSD from their CS1). The curriculum is too artificial and disjoint from the rest of their CS degree. I have met instructors who make it work fabulously, and their students apparently really buy into it. But overall, the claims that HTDP leads to better students is not proven by any literature I can find.<p>The closest thing I can find for good evidence is Fisler &#x27;14 [1], which did indeed suggest that HTDP teaches Functional Decomposition in such a way that CS1 students are better able to tackle short-but-complex problems by the end of their CS1. I find this work compelling, and I look forward to applying the ideas inherent to my own courses. However, in the decade-plus that HTDP has been around, I have not been able to find any long term studies that back up the slew of claims made about how we &quot;should&quot; teach CS1. Language and paradigm arguments in general have not really born out any evidence[2].<p>I&#x27;m not saying HTDP is bad or Python is good or C++ is ideal. I&#x27;m saying we don&#x27;t know much about any of this stuff. Relying on theoretical arguments is dangerous when it comes to pedagogy. For every positive experience you can share about HTDP, I can share a negative experience. It&#x27;s great if you found a curriculum that works for you. But be very, very careful about whether you believe that curriculum should work for everyone.<p>[1] <a href="https:&#x2F;&#x2F;dl.acm.org&#x2F;citation.cfm?id=2632346" rel="nofollow">https:&#x2F;&#x2F;dl.acm.org&#x2F;citation.cfm?id=2632346</a><p>[2] <a href="https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;329544316_Introductory_Programming_A_Systematic_Literature_Review" rel="nofollow">https:&#x2F;&#x2F;www.researchgate.net&#x2F;publication&#x2F;329544316_Introduct...</a>
评论 #18893234 未加载
评论 #18892293 未加载
评论 #18892247 未加载
评论 #18891931 未加载
veddox超过 6 年前
Hm. Not entirely sure what to think.<p>I find SICP to be a mind-blowing book - a truly enlightening experience. But not, perhaps, entirely suited for beginners. I first started reading it four years ago, just over two years after I had started to teach myself programming in high school. Although I already found it interesting and its functional programming approach did have a lasting impact on my programming style, I recall finding it somewhat too challenging on the whole and didn&#x27;t get very far. Half a year ago I started it again and have been blown away by the elegance and fundamental importance of the concepts it presents (although I&#x27;m still not done yet). For one thing, I understand the foundation of OOP a lot better now than I ever did from reading Java books...<p>So if the author is saying that SICP is a bad programming textbook because it doesn&#x27;t include a &quot;How to build a webapp in 12 easy steps&quot;, well, he rather missed the point. But if he is arguing that it perhaps isn&#x27;t the most suitable textbook for a first year CS student fresh out of high school - that is a fair criticism.
评论 #18891438 未加载
评论 #18892305 未加载
评论 #18893037 未加载
al2o3cr超过 6 年前
<p><pre><code> They may even come to the conclusion that programming is a shallow activity and that what truly matters is an understanding of domain knowledge </code></pre> THE HORROR ;)<p>In all seriousness, IMO we&#x27;d have much better programs if developers spent more time thinking about domain knowledge and less time believing that &quot;programming&quot; in isolation is the important part.
评论 #18891602 未加载
评论 #18891548 未加载
评论 #18891446 未加载
评论 #18891792 未加载
评论 #18892291 未加载
jedberg超过 6 年前
There are two models for CS education. One model is for students who want to learn the theories of computer science and be computer <i>scientists</i>, and the other is for students who want to be programmers.<p>SICP is the foundation for people who want to be computer scientists. That’s not everyone.<p>But from what I’ve found, all the top CS schools create computer scientists, and the other CS schools create programmers. While it’s easy for a computer scientist to make the jump to programmer with just a little guidance, it’s much harder to go the other way.<p>The world mostly needs programmers though, with just a reletively few computer scientists to come up with the new innovations. So it seems like everything is working out ok.<p>Although I’m really glad I got to learn the fundamentals of computer science with a SICP based intro class.
评论 #18894301 未加载
评论 #18893095 未加载
hardwaregeek超过 6 年前
It&#x27;s always interesting seeing the textbooks that are renowned by professors&#x2F;people with prior knowledge, yet disliked by actual students. The Feynman Lectures on Physics is a pretty famous example (iirc, the actual course was received pretty negatively by students).<p>I wonder how many people have actually sat down with a bunch of students and done a real experiment with textbooks. It&#x27;s quite easy to think that a textbook is good when you already understand the material. Only by getting feedback from real students can you truly figure out whether a textbook is good. It&#x27;d be interesting to do a course with two different textbooks and the exact same professor and compare feedback&#x2F;results. Perhaps they could even take the same final exam. Preferably at an average university. One problem with using textbooks written by MIT professors (such as Artin, Strang, etc.) is that MIT students are far stronger than average and can generally skip certain elided steps that other students cannot.
评论 #18891595 未加载
评论 #18891682 未加载
评论 #18890883 未加载
评论 #18890941 未加载
评论 #18891109 未加载
评论 #18891592 未加载
评论 #18891222 未加载
评论 #18891661 未加载
评论 #18890879 未加载
tshanmu超过 6 年前
I can fully recommend HtDP for beginning programming - tried various options for my 11 year old. I needed it to involve very little help from me - tried some scratch, mit50x, both which helped but did not spark and sustain interest.<p>Then we came across <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-simple-data-ubcx-htc1x" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-simple-data-ubcx-htc1x</a> - love it and does not need any help from me :) planning to move on to <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-complex-data-ubcx-htc2x" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-complex-data-ubcx-htc2x</a> after that!<p>edit: corrected typos
评论 #18893183 未加载
评论 #18890889 未加载
leoc超过 6 年前
The audience that SICP was written for seems to be basically a younger, roughly freshman-year Gerry Sussman, with all the advantages and disadvantages that entails.<p>I haven&#x27;t done HtDP yet. I love <i>The Little Schemer</i> <a href="http:&#x2F;&#x2F;www.ccs.neu.edu&#x2F;home&#x2F;matthias&#x2F;BTLS&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.ccs.neu.edu&#x2F;home&#x2F;matthias&#x2F;BTLS&#x2F;</a> , but I can&#x27;t recommend it unequivocally, mainly because I&#x27;ve found (somewhat to my surprise) that it&#x27;s not accessible to all programming beginners without quite a lot of extra in-person tuition. (And I&#x27;m talking about the early chapters here, not chs. 7-10 or chs. 8-10.)
评论 #18891400 未加载
yyrrll超过 6 年前
I think anyone reading the book with a determination to drop their intuitions in favor of the book&#x27;s concepts will find it much easier going, and tremendously worthwhile.<p>I get why readers don&#x27;t do that. There is very little written so well that it deserves that trust. Generally we have to step back from something and ask &quot;what does that mean? how do I reframe that into something I can understand?&quot; Because the material&#x27;s models are too poorly thought out to be useful or too poorly communicated to be discovered. Trying to adopt such models is futile.<p>But for me, SICP is one of those rare books where I am better off trying to absorb its frameworks, rather than constantly trying to reframe the material into something I understand.<p>When I step back and _think_ the way the book suggests, the problems solve very quickly. When I try to get a solution from some combination of my intuitions and known tricks, I thrash about endlessly.<p>It is a very carefully written presentation of profound and important ideas, and deserves to be approached differently than the vast majority of books.
nabla9超过 6 年前
Both SICP and HTDP are very good books. SICP has little more &#x27;attitude&#x27; in it, but I think its neutral feature. If you want to learn programming as something between algorithms and programming languages, I suggest these four &#x27;Lisp&#x27; books:<p>1. SICP (Structure and Interpretation of Computer Programs)<p>2. HTDP (How to Design Programs) <a href="https:&#x2F;&#x2F;htdp.org" rel="nofollow">https:&#x2F;&#x2F;htdp.org</a><p>3. LiSP (Lisp in Small Pieces),<p>4. PAIP (Paradigms of Artificial Intelligence Programming) <a href="https:&#x2F;&#x2F;github.com&#x2F;norvig&#x2F;paip-lisp" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;norvig&#x2F;paip-lisp</a><p>SICP and HTDP are different but serve the same purpose. LiSP is about interpretation, semantics, and compilation. PAIP by Peter Norvig can seen as elementary programming book that uses classical AI as a subject. You learn both.<p>I don&#x27;t know what to think about this, I haven&#x27;t read it: SICM (Structure and Interpretation of Classical Mechanics)
评论 #18891694 未加载
评论 #18891237 未加载
charlysl超过 6 年前
I have found that the best way of learning the HtDP approach to program design, at least for me (I find the book itself a bit dry), are the EdX &quot;How to Code&quot; free moocs [1] [2]. The instructor is fantastic. It completely changed the way I program and design.<p>If you like the approach and want to learn more, like, for instance, how to extend it to OO design, I list below links to several courses (most, except for the last one, offer enough material to complete them on your own, but I couldn&#x27;t find any videos) at the university where HtDP&#x27;s main author, Matthias Felleisen, is tenured (North Eastern). The courses are listed in the order in which they should be taken, and the rationale is explained by the professor in the paper &quot;Developing Developers&quot; [3]:<p>* CS 2500 - Fundamentals I [<a href="https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2500&#x2F;" rel="nofollow">https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2500&#x2F;</a>]<p>* CS 2510 - Fundamentals II - Introduction to Class-based Program Design [<a href="https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2510&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2510&#x2F;index.html</a>]<p>* CS 2800 - Logic and Computation [<a href="https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2800&#x2F;index.html" rel="nofollow">https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs2800&#x2F;index.html</a>]<p>* CS 3500 - Object Oriented Design - Spring 2018 (scaling up the 3 previous courses) [<a href="https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs3500&#x2F;" rel="nofollow">https:&#x2F;&#x2F;course.ccs.neu.edu&#x2F;cs3500&#x2F;</a>]<p>* CS 4500 - Software Development [<a href="http:&#x2F;&#x2F;www.ccs.neu.edu&#x2F;home&#x2F;matthias&#x2F;4500-f18&#x2F;index.html" rel="nofollow">http:&#x2F;&#x2F;www.ccs.neu.edu&#x2F;home&#x2F;matthias&#x2F;4500-f18&#x2F;index.html</a>]<p>[1] <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-simple-data-ubcx-htc1x" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-simple-data-ubcx-htc1x</a><p>[2] <a href="https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-complex-data-ubcx-htc2x" rel="nofollow">https:&#x2F;&#x2F;www.edx.org&#x2F;course&#x2F;how-code-complex-data-ubcx-htc2x</a><p>[3] <a href="http:&#x2F;&#x2F;felleisen.org&#x2F;matthias&#x2F;Thoughts&#x2F;Developing_Developers.html" rel="nofollow">http:&#x2F;&#x2F;felleisen.org&#x2F;matthias&#x2F;Thoughts&#x2F;Developing_Developers...</a>
评论 #18892263 未加载
azaviruha超过 6 年前
&gt; If not SICP, then what? Maybe HTDP?<p>I can recommend &quot;Concepts, Techniques, and Models of Computer Programming&quot; (CTM or CTMCP).<p>Book&#x27;s page: <a href="https:&#x2F;&#x2F;www.info.ucl.ac.be&#x2F;~pvr&#x2F;book.html" rel="nofollow">https:&#x2F;&#x2F;www.info.ucl.ac.be&#x2F;~pvr&#x2F;book.html</a><p>Quote from www.c2.com:<p>&quot;Like SiCp, CTMCP is first and foremost a book on programming, not on Oz or Scheme or anything else. And if SiCp is the reigning king of such books, CTM is a worthy challenger to that particular throne.&quot;
评论 #18891557 未加载
评论 #18895276 未加载
评论 #18891639 未加载
评论 #18891585 未加载
评论 #18893107 未加载
fivre超过 6 年前
I haven&#x27;t read HTDP and can&#x27;t authoritatively comment on it &#x2F;have no idea how it compares to SICP, but I found this statement pretty ridiculous:<p>&gt; While SICP (yes, everybody uses the acronym) is considered a holy grail for serious computer scientists, it&#x27;s hella hard to figure out. For me, programming &quot;methods&quot; that make me jump through intellectual hoops made of mathematics make it hard for me to learn the actual &#x2F;programming&#x2F;.<p>I started learning how to program in high school using whatever resources I could find (my school didn&#x27;t have any programming courses beyond an introduction to 1980s BASIC, so independent study was the only option), initially following the very nuts and bolts-oriented instruction in C++ Primer Plus (I arbitrarily chose this as a good intro textbook based on my limited understanding of what constituted &#x27;real&#x27; programming versus BASIC). I spent the better part of of 2 years making unremarkable C++ programs that were little more than basic math and control flow mashed together with the C++ standard input&#x2F;output libraries.<p>At some point, I happened upon SICP, and learned more about computer science and programming in six weeks than I had in all of my previous self-study. I hold that it was, and still is, a remarkably succinct and understandable introduction to the fundamental concepts that underlie computer science. Yes, math was involved, but I didn&#x27;t need to learn anything beyond my basic high school algebra education to understand how that math translated into programs: SICP did an excellent job of explaining how programming related to that math. Most importantly, it was &#x2F;fun&#x2F;: working through SICP made me feel like I was learning a new way of thinking, not just learning how to translate something I already knew into computer language.<p>Other descriptions of HTDP suggest that it combines my painful slog through the nuts and bolts of programming (albeit more succinctly and less painfully) with SICP&#x27;s math&#x2F;CS elements, so it&#x27;s probably a better textbook for tackling both at once. However, it&#x27;s crucial that it does both: to focus only on &quot;actual programming&quot; as the author suggests is probably a surefire recipe to convince students that computer science is a dull field consisting solely of writing instructions for computers, with no thought whatsoever into what instructions make sense or why.
评论 #18891053 未加载
评论 #18895366 未加载
gumby超过 6 年前
A couple of historical clarifications to Sedgewick Wayne&#x27;s points:<p>&gt; [SICP] set the curriculum for &quot;beginning&quot; computer science<p>&gt; All [examples and exercises] use complex domain knowledge. ... Some early sections and the last two chapters cover topics from computer science ...<p>Why the square quotes around &quot;beginning&quot;? At the time the course, 6.001, was launched it was quite reasonable to assume that an MIT undergrad might arrive at the Institute never having previously used a computer, much less programmed one. This was truly an introductory class and while required for all EE and CS students, was intended for any undergraduate. The material in the examples all covered core subjects every student needs in oder to graduate, or else were computer science topics that should hardly shock someone taking a <i>computer science</i> class.<p>Some of the other criticism is reasonable in light of the authors&#x27; desire for a slightly different approach. 6.001 was and is the basic introductory class and a CS student will take other classes which will address different aspects of program design and application. Choosing a different time of introduction for different objectives is hardly unreasonable.<p>(And I don&#x27;t know why object-oriented programming is somehow thought to be in opposition to the principles of SCIP; the latter&#x27;s heart is abstraction and composition which are the whole point of object-oriented thinking, right?)
评论 #18895774 未加载
billfruit超过 6 年前
I recommend &quot;Concepts, Techniques and Models of Computer Programming&quot; Van Roy and Haridi. While SICP is an enlightening read, much of what it discussed, looked to be methods that do not all mesh together into one overarching discipline or &quot;science&quot; of programming, which is what CTM aims to do(But admittedly it is a much harder book, and I am still only in the very early chapters). Important questions like how programming in the large is different from programming in the small, how some methods scale and how some do not, topics like these aren&#x27;t perhaps handled by either of the books, if my memory serves right.
davidgrenier超过 6 年前
I think it&#x27;s worth pointing out why the author&#x27;s of SICP themselves acknowledge why it was phased out.<p>Praphrasing, it essentially boils down to the kind of applications developpers of today are writing. People are now mostly slinging libraries they have a superficial understanding of together in a black-box style. So for most proprammers there&#x27;s a lot of prodding and tinkering and this isn&#x27;t a skill that SICP teaches.<p>disclaimer: I don&#x27;t think I&#x27;ve imagined reading this however didn&#x27;t bother looking for the reference.
评论 #18891081 未加载
评论 #18892143 未加载
评论 #18894905 未加载
mberning超过 6 年前
During my time as a student I felt that the computer science department should have been split into two disticnt programs. The first program should have existed in the math department dealing with the theory and mathematics of computation. The other should have been in the engineering school and focused more on actual computers. Hardware, software, operating systems, working in a team, designing large systems, etc. I think I would have gotten much more out of that. Instead it seems many universities created “CS lite” programs in their business schools.
评论 #18894405 未加载
zengid超过 6 年前
Warning, anecdotes ahead:<p>I tried to read SICP after about 6 months to a year after learning my first language, and I couldn&#x27;t get past the part where they turn a recursive function into a tail-call eliminated &#x27;iterator&#x27; style recursive function. I understood what was going on, but I just couldn&#x27;t grasp how to generalize it. Of course, I get it now; you just pass an extra variable in and use it like you would the `i` var in a for loop, but at the time I just couldn&#x27;t grasp it.<p>I also had similar struggles with the early use of math problems as examples and other vaguely described algorithms.<p>Granted, my background is in Music, so I didn&#x27;t have the domain knowledge that the author mentions, but programming is more about strategic and logical thinking, so I was perfectly able to do that even at an early stage.<p>I think MIT is right to think SICP is too much for a freshman. Hell, I was already graduated and applying for grad-school when I tried to read SICP and I still struggled.
pixelmonkey超过 6 年前
Brown University has a textbook and course called Programming and Programming Languages (PAPL) which is based on Pyret, their teaching language that combines concepts from Python and Scheme&#x2F;SICP for teaching code and data abstraction.<p>Freely available here: <a href="https:&#x2F;&#x2F;papl.cs.brown.edu&#x2F;2018&#x2F;" rel="nofollow">https:&#x2F;&#x2F;papl.cs.brown.edu&#x2F;2018&#x2F;</a><p>More on the Pyret language here: <a href="https:&#x2F;&#x2F;www.pyret.org" rel="nofollow">https:&#x2F;&#x2F;www.pyret.org</a>
nickpsecurity超过 6 年前
I&#x27;ll add that some people from HTDP went onto create Pyret as a new experiment in education:<p><a href="https:&#x2F;&#x2F;www.pyret.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.pyret.org&#x2F;</a><p>It&#x27;s used in the Bootstrap program that teaches it to middle schoolers. Probably pretty easy to learn.
vesak超过 6 年前
I didn&#x27;t find SICP good or bad, but utterly boring. In fact, so boring that I couldn&#x27;t bring myself to finish even half of it in 3 separate tries.<p>Perhaps I should&#x27;ve read it as my first programming book, but that time&#x27;s long past.<p>Anyone else had this problem? I&#x27;d gladly take tips on how to get over it, since I do honor classics and don&#x27;t think I&#x27;m above them.
评论 #18892224 未加载
OldHand2018超过 6 年前
People are completely missing the point, even though this article includes the important quote.<p>In a 4-year Computer Science curriculum, SICP is not a perfect fit for the role it was being asked to play. HTDP was written with the goal of being a better fit in that specific role.<p>If you are self-taught or otherwise learning in a non-4-year CS program, this distinction is not applicable to you. SICP is great. HTDP is great. They are both great.
winterismute超过 6 年前
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 with Java, things that I had done fairly extensively during the high school program. Hower, on the first day, she explained us that we were going to use a language called &quot;Scheme&quot; and that our reference book was going to be freeily available (in general, courses in Italy often require expensive books - sometimes ones that you won&#x27;t find on the internet since they are written by exactly your little-known professor and will be available in selected book shops of the city), the book was &quot;How to Design Programs&quot;. She said that one of the goals of this choice was also to decrease the difference in levels between students: we would use a language nobody knew, and approach a paradigm that nobody knew, and this would have made her (interactive) lessons and the lab practice more interesting. I also remember how she said &quot;the organization of this course is going to be simple: every day, you will come and I will write down a problem on the whiteboard, and we will find a solution. Then, we will find a better, more beautiful solution, and that&#x27;s it&quot;. I could see she knew that this choice was going to upset people, so much that she tried to sweeten the pill by saying &quot;this is how they teach programming at MIT&quot;.<p>Indeed, the course did upset people. I remember how people constantly complained how shitty this decision was, how &quot;people in the 1st year engineering classes are doing real Java programming while we do this shit no employer asks for&quot;, some noted how the language was stupid, or in the best case just a toy, useless in &quot;the real world&quot;. Thing got worse when some people realized that, contrary to their expectations, they did not know how to program, since they could not do eg. graph traversals once that was stripped of its OOP or Java-like envelope - &quot;I will fail the year because of the bloody scheme!&quot;, they would say.<p>To me, instead, it was revelatory. We did indeed solve one problem per week, and although the problems were less sexy than the ones I was expecting (finding the max of a list is not the coolest thing in the world), promises were kept, and little by little I started appreciating how much you could express with so few lines or predefined functions, leveraging only on very few concepts (eg. recursion), it was different from the programming we had done in high school. It was also a big difference with the university classes of philosphy, where &quot;assistant professors&quot; (underpaid PhD [students]) will come to read you a book AND a comment to it, with very little intellectual work needed from either them or students. I quickly decided to follow only Computer Science. I became no black belt lisper or anything, but that style of programming, of looking at problems, software and the whole field certainly influenced me. I am currently enjoying my role at a FAANG company, and thinking about all of this made me want to write her an email to thank her, but the saddest thing is that I can&#x27;t do it because right at the end of that academic year, Ms Busi actually died, unexpectedly, at the age of only 39. First year student of CS in Bologna now learn Python programming.<p>(this is her uni page if you are curious: <a href="http:&#x2F;&#x2F;www.cs.unibo.it&#x2F;~busi&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.cs.unibo.it&#x2F;~busi&#x2F;</a>)
评论 #18891726 未加载
评论 #18891233 未加载
评论 #18891627 未加载
Syzygies超过 6 年前
This edition is an amazing improvement on the original ebook: <a href="https:&#x2F;&#x2F;sicpebook.wordpress.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;sicpebook.wordpress.com&#x2F;</a><p>What mathematics? Now that many states have legalized cannabis, SICP should be read while high in the middle of the night. Its nonstop commentary is profoundly amusing. I love for example the passage that presents tail-recursion as the natural form of iteration, and notes about other languages:<p>&quot;As a consequence, these languages can describe iterative processes only by resorting to special-purpose “looping constructs” such as do, repeat, until, for, and while.&quot;<p>Of course they&#x27;re right, and yes that&#x27;s a mathematical view, but they put it so well. All replacement texts are unreadably dry.
jwr超过 6 年前
This quote makes my head hurt:<p>&gt; &quot;Instead of teaching some currently fashionable programming language&quot; [...] &gt; &quot;The approach emphasizes the systematic design of programs. Experience shows that it works extremely well as a preparation for a course on object-oriented programming.&quot;<p>As someone who gradually transitioned from &quot;object-oriented programming&quot; (or &quot;place-oriented programming in general&quot;) with mutable data into largely functional systems with immutable data structures, I find this quote mind-boggling, especially coming from educators.<p>Moving to functional programming and immutable data structures is what allowed me to build and maintain systems at least an order of magnitude larger than before.
hevi_jos超过 6 年前
SICP is not just a book. They are lectures you can freely watch on the Internet.<p>For me is one of the most interesting lectures I ever watched. Requires effort because it makes you think, and this is one of the great things about it.<p>Not for beginners? Yeah, like structural engineering, physics, biology,chemistry, writing, or anything worth something in life you need to work on it, have interest and abilities doing that if you want to become a professional.<p>Some people want to make University so easy that the title becomes worthless, like happened with University titles inflation in the UK.
nubbins超过 6 年前
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’ve done it have said its been a multi month process and without a teacher its so easy to get bogged down.
评论 #18891698 未加载
wa1987超过 6 年前
People who worked through HtDP: what are your impressions?
评论 #18891412 未加载
评论 #18890858 未加载
评论 #18890790 未加载
评论 #18891717 未加载
评论 #18890864 未加载
评论 #18891207 未加载
评论 #18890973 未加载
morenoh149超过 6 年前
I&#x27;ll just mention <a href="https:&#x2F;&#x2F;composingprograms.com" rel="nofollow">https:&#x2F;&#x2F;composingprograms.com</a> a take on sicp mostly in python. A bit of scheme is used in the latter half for doing meta circular evaluator.
undecidabot超过 6 年前
Another great but lesser known CS book is &quot;The Functional Approach to Programming&quot;. It uses Caml (a predecessor of OCaml). Like SICP, it covers a wide range of CS topics, although it&#x27;s probably not as accessible as HtDP.
wikibob超过 6 年前
While this topic is being discussed, what books do folks like for Data Structures and Algorithms?<p>And importantly, can you contrast why you chose the one you like over others you’ve worked through?
enriquto超过 6 年前
&gt; If not SICP, then what? Maybe HTDP?<p>TAoCP should be enough for anybody
评论 #18891173 未加载
评论 #18891029 未加载
EliRivers超过 6 年前
I suppose it depends on what people are trying to learn. Programming and computer science are very different things.
guest34567890超过 6 年前
If I try to access this site I get:<p>&quot;Access denied. Your IP address is blacklisted. If you feel this is in error please contact your hosting provider&#x27;s abuse department.&quot;<p>It could be my VPN, but still, not nice.
passthejoe超过 6 年前
I&#x27;m the author of the original blog post, and I wanted to say that SICP, as well as HtDP, and even a book like Robert Sedgewick&#x27;s Computer Science (<a href="https:&#x2F;&#x2F;www.amazon.com&#x2F;Computer-Science-Interdisciplinary-Robert-Sedgewick&#x2F;dp&#x2F;0134076427&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.amazon.com&#x2F;Computer-Science-Interdisciplinary-Ro...</a>) are in a completely different category than more mainstream how-to-program books (like anything from O&#x27;Reilly, Manning, No Starch, Pragmatic Programmers) and even the other popular college texts like Y. Daniel Liang&#x27;s Introduction to Java Programming and Data Structures (<a href="https:&#x2F;&#x2F;www.amazon.com&#x2F;Introduction-Programming-Structures-Comprehensive-Version&#x2F;dp&#x2F;0134670949&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.amazon.com&#x2F;Introduction-Programming-Structures-C...</a>) or the book in my intro class, Tony Gaddis&#x27; Starting Out with C++: Early Objects (<a href="https:&#x2F;&#x2F;www.amazon.com&#x2F;Starting-Out-Early-Objects-9th&#x2F;dp&#x2F;0134400240&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.amazon.com&#x2F;Starting-Out-Early-Objects-9th&#x2F;dp&#x2F;013...</a>).<p>Supposedly all of these books assume (or at least allow for) no background in programming, but I think the reality is that taking SICP or even HtDP into the intro class at a non-elite university or a community college would be a complete non-starter and&#x2F;or abject failure.<p>What I&#x27;m trying to say is that there is a place for both of these approaches: A deep look into computer science, and the nuts and bolts of basic &quot;get it done&quot; programming.<p>Should both of these things happen in a single class, or series of classes? I think the answer is yes. But how to do that and not leave non-elite students back on the road is another matter.<p>I believe that the HtDP authors think that the &quot;domain-specific knowledge&quot; required of SICP was a barrier.<p>And I also understand how advanced CS students think that a class focused on how to manipulate strings, use loops, deal with variables of various types, and work with basic logic in the context of a specific computer language is NOT computer science.<p>But in my view, most students -- and all average students -- need to crawl quite a way, then walk, before they can run.<p>Even Sedgewick&#x27;s Computer Science, which focuses on Java and has a wealth of great questions&#x2F;assignments all along the way, could really be a barrier to students who aren&#x27;t steeped in math and science. I learned some math while going through the book, but I didn&#x27;t learn so much programming. Liang&#x27;s approach might be too basic for someone who has already done years and years of programming but is way more approachable for those who have not.<p>My guess is that many professors tried SICP and had a very poor rate of success. I fully support a selective class that says, &quot;this is very hard, but you will learn a lot and look at the world in a different way, and if you really want to understand computer science, this is the class for you.&quot;<p>But there also needs to be more of a gateway class for future programmers (not necessarily graduate-school-bound CS majors) that eases them into the world of writing code. Offering the basics and sneaking in some CS seems better than doing it the other way around.<p>In a way, it&#x27;s like the difference between carpentry and architecture. You can teach people who want to build houses how to design them, but at some point they&#x27;re going to have to get out a saw, hammer and nails and make something happen.
评论 #18893773 未加载
The_suffocated超过 6 年前
On htdp.org: <a href="https:&#x2F;&#x2F;htdp.org&#x2F;2018-01-06&#x2F;Book&#x2F;part_prologue.html" rel="nofollow">https:&#x2F;&#x2F;htdp.org&#x2F;2018-01-06&#x2F;Book&#x2F;part_prologue.html</a><p>&quot;If programming were just about numbers and arithmetic, it would be as boring as mathematics.&quot;<p>What&#x27;s wrong with this author?
评论 #18890729 未加载
评论 #18891523 未加载