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.

Reply via email to