Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-02 Thread Matthias Felleisen



> On Aug 2, 2018, at 11:25 AM, Scott  wrote:
> 
> My message does not contain the word “recursion.”
> No it doesn't. However, Structure and Interpretation of the Computer Science 
> Curriculum does, as it does your criticism of SICP's use of (generative) 
> recursion.


Sure, but please don’t put words in my email mouth :-) And there are many other 
words in SiCP and HtDP that you could mention. 

;; - - - 

I am sensitive about “recursion” because many people completely fail to 
understand the role of recursion in these books, especially in HtDP. The idea 
is important because it is the only way to describe arbitrarily large data and 
data descriptions have implications for code organization. Since arbitrarily 
large data is more interesting than #true and “hello world”, it shows up in 
every programming book. What HtDP/2e shows in Intermezzo 3-4 is how “recursion 
as induced by data descriptions” disappears under other constructs. 

The same is true about the word “functional”. Sure, I distilled the design 
recipe idea from the world of functional languages. But that’s only because the 
world of dysfunctional languages never produced any ideas concerning systematic 
design. What HtDP/1e showed was that the design recipe idea applies perfectly 
well to imperative and OO programming. 

— Matthias

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-02 Thread Scott

>
> My message does not contain the word “recursion.”

No it doesn't. However, *Structure and Interpretation of the Computer 
Science Curriculum* does, as it does your criticism of SICP's use of 
(generative) recursion.


On Thursday, August 2, 2018 at 10:16:26 AM UTC-4, Matthias Felleisen wrote:
>
>
> > On Aug 2, 2018, at 9:27 AM, Scott > 
> wrote: 
> > 
> > Thank you. I am not technically sufficient to add much to your response. 
> Will the core curriculum become available online? 
>
>
> I am not sure what you mean by “online” here, but the course numbers are 
> spelled out in Northeastern’s online catalogue, and the essay (linked to my 
> last email) spells out the rationale. If you mean the materials, yes, we 
> work with on-line materials (see my home page for a starting point). 
>
>
> > Your criticism of SICP's use of recursion seems to extend to the method 
> for teaching recursion principles in The Little Schemer series, in that it 
> does just that - teaches principles of (a form of) recursion as an 
> intellectual exercise without translating it into actual program design 
> methods. 
>
>
> My message does not contain the word “recursion.”  This would be the least 
> of my criticisms of SiCP. Please do read the article that I pointed you to, 
> I don’t want to type it into an email. (The Little Lisper contains the 
> seeds of HtDP, which is why I became a co-author, but it took another 10 
> years for me to figure out how to turns this into a design recipe, i.e., a 
> matrix of process and data/problem complexity.) 
>
>
> > My own experience with The Little Schemer began to falter in Chapter 5. 
> I felt I understood how recursion worked and how to create simple recursive 
> functions and wondered if, by stalling in Chapter 5, I demonstrated a lack 
> of drive or intellectual ability necessary to learn how to program well. 
> After reading some of your articles I am discovering that perhaps neither 
> of my tentative conclusions were necessarily accurate. 
>
>
> TLL/TLS is definitely an exercise in “train yourself to think thoroughly” 
> and with a method that is good for some people and, well, not so good for 
> others. Just like any text book. I’d consider it “intellectual pleasure” 
> more than anything else. And intellectual pleasure isn’t for everyone. I 
> read Politics and Republic for pleasure and someone else may read romance 
> and crime stories. 
>
>
> > Your other criticisms mirror my (no doubt common) experiences: on one 
> hand there are the massive online courses and endless textbooks which tend 
> to amount to nothing more than intros to syntax how-tos and seem to be just 
> a form of data entry. (and now I think perhaps I understand why: syntax 
> without API is just keyboarding and hitting enter. But that is what these 
> courses are about so I completely get the point of the prologue!) Then on 
> the other hand are the curriculum which, like MIT, have me thinking that 
> programming well requires an engineering degree, at least, or is just a 
> subset of engineering. Such has been my experience. 
>
>
> Programming comes in many flavors, just like construction jobs: 
>
> — build a shed in the backyard (you don’t need to be an engineer, though 
> you should know some basics; and most people buy pre-fabs that are planned 
> and made by people with tons of experience ~= degree) 
> — build a house (you can do so if you have build many of them) 
> — build a skyscraper (try to do so without an engineering degree) 
> — build an airport 
> . . . 
>
> You may think of analogues such as throw-away script, “web site”,  single 
> application, POS system, etc. 
>
> Now here comes the kicker. Unlike a shed, a web site or a script can grow 
> into a valuable piece of software. And all of a sudden, this software 
> becomes not just valuable but also extremely expensive to maintain because 
> you never paid attention to its construction. It falls over every so often, 
> and you need to stabilize it. It has cracks in the foundation, and you need 
> to rip out the living room floor to pour new foundation pillars so it 
> doesn’t sink into the swamp. And so on. 
>
> Depending on what you wish to accomplish, your milage of studying may vary 
> — Matthias 
>
>
> p.s. And then there is the pure joy of acquiring a skill properly .. just 
> to have fun. Guy Steele, for example, works on wood for his hobby. My uncle 
> was a wood carver, too, and I bet that Guy over the years has acquired the 
> same set of skills and better ones. See Little Lisper. 
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-02 Thread Matthias Felleisen


> On Aug 2, 2018, at 9:27 AM, Scott  wrote:
> 
> Thank you. I am not technically sufficient to add much to your response. Will 
> the core curriculum become available online?


I am not sure what you mean by “online” here, but the course numbers are 
spelled out in Northeastern’s online catalogue, and the essay (linked to my 
last email) spells out the rationale. If you mean the materials, yes, we work 
with on-line materials (see my home page for a starting point). 


> Your criticism of SICP's use of recursion seems to extend to the method for 
> teaching recursion principles in The Little Schemer series, in that it does 
> just that - teaches principles of (a form of) recursion as an intellectual 
> exercise without translating it into actual program design methods.


My message does not contain the word “recursion.”  This would be the least of 
my criticisms of SiCP. Please do read the article that I pointed you to, I 
don’t want to type it into an email. (The Little Lisper contains the seeds of 
HtDP, which is why I became a co-author, but it took another 10 years for me to 
figure out how to turns this into a design recipe, i.e., a matrix of process 
and data/problem complexity.) 


> My own experience with The Little Schemer began to falter in Chapter 5. I 
> felt I understood how recursion worked and how to create simple recursive 
> functions and wondered if, by stalling in Chapter 5, I demonstrated a lack of 
> drive or intellectual ability necessary to learn how to program well. After 
> reading some of your articles I am discovering that perhaps neither of my 
> tentative conclusions were necessarily accurate.


TLL/TLS is definitely an exercise in “train yourself to think thoroughly” and 
with a method that is good for some people and, well, not so good for others. 
Just like any text book. I’d consider it “intellectual pleasure” more than 
anything else. And intellectual pleasure isn’t for everyone. I read Politics 
and Republic for pleasure and someone else may read romance and crime stories. 


> Your other criticisms mirror my (no doubt common) experiences: on one hand 
> there are the massive online courses and endless textbooks which tend to 
> amount to nothing more than intros to syntax how-tos and seem to be just a 
> form of data entry. (and now I think perhaps I understand why: syntax without 
> API is just keyboarding and hitting enter. But that is what these courses are 
> about so I completely get the point of the prologue!) Then on the other hand 
> are the curriculum which, like MIT, have me thinking that programming well 
> requires an engineering degree, at least, or is just a subset of engineering. 
> Such has been my experience.


Programming comes in many flavors, just like construction jobs: 

— build a shed in the backyard (you don’t need to be an engineer, though you 
should know some basics; and most people buy pre-fabs that are planned and made 
by people with tons of experience ~= degree) 
— build a house (you can do so if you have build many of them) 
— build a skyscraper (try to do so without an engineering degree) 
— build an airport 
. . . 

You may think of analogues such as throw-away script, “web site”,  single 
application, POS system, etc. 

Now here comes the kicker. Unlike a shed, a web site or a script can grow into 
a valuable piece of software. And all of a sudden, this software becomes not 
just valuable but also extremely expensive to maintain because you never paid 
attention to its construction. It falls over every so often, and you need to 
stabilize it. It has cracks in the foundation, and you need to rip out the 
living room floor to pour new foundation pillars so it doesn’t sink into the 
swamp. And so on. 

Depending on what you wish to accomplish, your milage of studying may vary — 
Matthias


p.s. And then there is the pure joy of acquiring a skill properly .. just to 
have fun. Guy Steele, for example, works on wood for his hobby. My uncle was a 
wood carver, too, and I bet that Guy over the years has acquired the same set 
of skills and better ones. See Little Lisper. 



-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-02 Thread Scott
Thank you. I am not technically sufficient to add much to your response. 
Will the core curriculum become available online?

Your criticism of SICP's use of recursion seems to extend to the method for 
teaching recursion principles in The Little Schemer series, in that it does 
just that - teaches principles of (a form of) recursion as an intellectual 
exercise without translating it into actual program design methods.

My own experience with The Little Schemer began to falter in Chapter 5. I 
felt I understood how recursion worked and how to create simple recursive 
functions and wondered if, by stalling in Chapter 5, I demonstrated a lack 
of drive or intellectual ability necessary to learn how to program well. 
After reading some of your articles I am discovering that perhaps neither 
of my tentative conclusions were necessarily accurate.

Your other criticisms mirror my (no doubt common) experiences: on one hand 
there are the massive online courses and endless textbooks which tend to 
amount to nothing more than intros to syntax how-tos and seem to be just a 
form of data entry. (and now I think perhaps I understand why: syntax 
without API is just keyboarding and hitting enter. But that is what these 
courses are about so I completely get the point of the prologue!) Then on 
the other hand are the curriculum which, like MIT, have me thinking that 
programming well requires an engineering degree, at least, or is just a 
subset of engineering. Such has been my experience.


On Wednesday, August 1, 2018 at 2:52:55 PM UTC-4, Scott wrote:
>
> The end of the Prologue to HtDP2e ends with a section titled You Are a 
> Programmer Now. If you have read it you know what it contains (if you 
> haven't read it then you are not likely able to respond intelligently to 
> this question).
>
> My question is: in that section are the authors describing "programming by 
> poking"? 
>

On Wednesday, August 1, 2018 at 5:54:14 PM UTC-4, Matthias Felleisen wrote:
>
>
> The idea that we need to deal with software systems as if we were natural 
> scientists shows up time and again. Gerry is correct about this but this 
> does not mean we should not teach good attitudes about code and coding etc. 
>
> ;; - - - 
>
> As far as I am concerned, SiCP never served the purpose that Gerry 
> advertises in his quote. Let me start out by praising SiCP first: 
>
> it is one of those introductory texts that does not belong to the 
> 99.99% of the syntax-focused pile of XXX. 
>
> Having said that, I also don’t think that SiCP teaches (or 6.001 taught) 
> programming or sw dev. SiCP presents important ideas in computer science, 
> sketched out in Scheme, the way you sketch out your dream house to an 
> architect on a napkin. (Well perhaps more than a napkin.) As such, it was 
> doomed to fail as a “programming text”. 
>
> HtDP explicitly teaches systematic program design. This means two things: 
>
> — its goal is to teach systematic program design 
> — and it does so by explicitly spelling out how to go about 
> program design. 
>
> All of this is spelled out in some detail in 
> https://www2.ccs.neu.edu/racket/pubs/#jfp2004-fffk 
>
> ;; - - - 
>
> One semester does not make good coders and does not generate good 
> attitudes about code. I have therefore created a core curriculum of five 
> courses at Northeastern that reinforce this lesson again and again. The 
> goal is to get students to see that, if code survives, the cost of code is 
> distributed over a long period of time. They will rotate into positions 
> where they take on someone else’s code — possibly their own from N months 
> or years ago — and that when they create code, they owe the future 
> developers “well designed code.” How to go from a blank page and a bunch of 
> APIs to well-designed code isn’t a solved problem, so creating this 
> curriculum was and remains research — it’s just that nobody recognizes that 
> this is a central open problem for CS. So I dress up my research results as 
> text books. 
>
> The details of this curriculum development are spelled out in 
> http://felleisen.org/matthias/Thoughts/Developing_Developers.html 
>
> From what I can tell, the curriculum is a success story — though possibly 
> I am a victim of confirmation bias here, like many scientists. So let me 
> say what I see: 
>
> — our co-op department routinely reports that our students are 
> considered some of the best student-developers by (large) sw companies 
> (our co-op department isn’t all that good about tracking 
> our co-op students in small or midsize companies) 
>
> — students routinely tell me that they get through co-op 
> interviews by falling back on the design recipe when they encounter hard 
> questions 
>  
> — they also tell me that they get credit when they work with the 
> design recipe during co-op (even if things don’t work out) 
>
> — they report praise for developing good code. 
>
> 

Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-01 Thread Matthias Felleisen


The idea that we need to deal with software systems as if we were natural 
scientists shows up time and again. Gerry is correct about this but this does 
not mean we should not teach good attitudes about code and coding etc. 

;; - - - 

As far as I am concerned, SiCP never served the purpose that Gerry advertises 
in his quote. Let me start out by praising SiCP first: 

it is one of those introductory texts that does not belong to the 
99.99% of the syntax-focused pile of XXX. 

Having said that, I also don’t think that SiCP teaches (or 6.001 taught) 
programming or sw dev. SiCP presents important ideas in computer science, 
sketched out in Scheme, the way you sketch out your dream house to an architect 
on a napkin. (Well perhaps more than a napkin.) As such, it was doomed to fail 
as a “programming text”. 

HtDP explicitly teaches systematic program design. This means two things: 

— its goal is to teach systematic program design 
— and it does so by explicitly spelling out how to go about program 
design. 

All of this is spelled out in some detail in 
https://www2.ccs.neu.edu/racket/pubs/#jfp2004-fffk 

;; - - - 

One semester does not make good coders and does not generate good attitudes 
about code. I have therefore created a core curriculum of five courses at 
Northeastern that reinforce this lesson again and again. The goal is to get 
students to see that, if code survives, the cost of code is distributed over a 
long period of time. They will rotate into positions where they take on someone 
else’s code — possibly their own from N months or years ago — and that when 
they create code, they owe the future developers “well designed code.” How to 
go from a blank page and a bunch of APIs to well-designed code isn’t a solved 
problem, so creating this curriculum was and remains research — it’s just that 
nobody recognizes that this is a central open problem for CS. So I dress up my 
research results as text books. 

The details of this curriculum development are spelled out in 
http://felleisen.org/matthias/Thoughts/Developing_Developers.html

>From what I can tell, the curriculum is a success story — though possibly I am 
>a victim of confirmation bias here, like many scientists. So let me say what I 
>see: 

— our co-op department routinely reports that our students are 
considered some of the best student-developers by (large) sw companies 
(our co-op department isn’t all that good about tracking our 
co-op students in small or midsize companies)

— students routinely tell me that they get through co-op interviews by 
falling back on the design recipe when they encounter hard questions 

— they also tell me that they get credit when they work with the design 
recipe during co-op (even if things don’t work out) 

— they report praise for developing good code. 

For all I know though, all those who don’t report to me (or aren’t covered by 
our co-op reports) produce the same kind of bad code that all other devs 
develop :-) 

;; - - - 

Here is what’s missing. In a world where APIs are like hardware (proprietary, 
opaque) we need to teach students how to study such APIs and how to extract 
useful knowledge from these APIs. Again, most schools who switch to this new 
MIT approach don’t teach this explicitly. They do not provide students with the 
intellectual tools that help them discover the meaning of an API. I will also 
admit that I am _not_ tackling this question. As far as I know Shriram 
Krishnamurthi is the only one who is aware of and working on this question for 
API = PL. (See his PLAI v2.0 course at Brown.) 

;; - - - 

So in the meantime, I am happy to teach our students systematic design and 
instill a message of “code quality matters”. I think it helps them get started 
in many cases. 

When someone figures out how to deliver the tools of “programming/sw dev is 
partly a natural science” to students, then I* will be able to combine 
“systematic design” with “API modeling” approaches and we will produce the best 
devs ever. 

Your milage will vary, but I won’t give up on teaching good programming well — 
Matthias



-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] You Are a Programmer Now HtDP2e

2018-08-01 Thread Scott
(Actually, I bought the book and was just working through the Prologue 
today. And didn't turn the page, it appears. )

Thank you for your response. More specifically, what I was referring to was 
a response that has gotten a fair bit of circulation given by Gerry Sussman 
when asked why SICP was no longer taught by him at MIT. You can read more 
about this here:

http://lambda-the-ultimate.org/node/5335

Personally, I have tried to learn programming (self-teaching) via how, as 
you state, 99.9% of texts teach it - syntax and hacking first, and I have 
just about given up. I find it pure torture (and I found working through 
the Prologue torture, but was expecting that since I believe that was your 
point). Hence, I purchased your book (2e) and also SICP.

However, since finding that quote by Sussman I feel more lost than ever. He 
seems to be stating that what made SICP so relevant 20 to 30 years ago has 
gone. So it is great I have an author of HtDP in this thread!

I understand programming by poking as the process of researching APIs and 
hacking together libraries until something works, similar in essence I 
think to the Prologue of HtDP. And perhaps this hacking and sewing together 
and ensuing code bloat is aided by ever expanding hardware capacities in 
storage and speed, I don't know.

So, Matthias, if you are still there, how do you understand Sussman's 
reasoning for quitting SICP (other than he was bored with it)? Is he right? 
How does HtDP stand up in the face of Sussman's perspective?  Does one need 
the lessons of HtDP if all one is doing is stitching together libraries and 
APIs?


On Wednesday, August 1, 2018 at 3:43:59 PM UTC-4, Matthias Felleisen wrote:
>
>
> > On Aug 1, 2018, at 2:52 PM, Scott > 
> wrote: 
> > 
> > The end of the Prologue to HtDP2e ends with a section titled You Are a 
> Programmer Now. If you have read it you know what it contains (if you 
> haven't read it then you are not likely able to respond intelligently to 
> this question). 
>
>
> This is incorrect. The Prologue ends with “Not!”. See 
>
>  https://htdp.org/2018-01-06/Book/part_prologue.html 
>
>
> > My question is: in that section are the authors describing "programming 
> by poking”? 
>
>
> Yes. The Prologue describes how 99.99% of the text books teach programming 
> to contrast it with “good programming” as taught by HtDP. 
>
> — Matthias 
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.