Mailing List Archive
tlug.jp Mailing List tlug archive tlug Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]Re: [tlug] Making programming easier... or something like that
- Date: Fri, 19 Oct 2012 16:06:01 +0900
- From: Curt Sampson <cjs@example.com>
- Subject: Re: [tlug] Making programming easier... or something like that
- User-agent: Mutt/1.5.21 (2010-09-15)
On 2012-10-18 23:16 +0200 (Thu), Attila Kinali wrote: > ...[I] was thinking about how to make programming > as a craft easier for Joe Average. And if possible at the same > time give Joe a better understanding of what he is actually doing. > ... > Would someone lend me a hand and give me some pointers to stuff > i could read about programming as a mental work and how people > learn it? And how does the structure of programming languages > simplify the task of programming and learning of programming? > > Also, i wouldn't mind to read about your thoughts on this topic. The heart of programming is, when it comes down to it, simply manipulation of symbols according to strict rules of a logic that you (or someone else) has made up. In other words, mathematics. This discipline is in turn used (or, more frequently, misused, or not infrequently hardly used at all) when practicing software engineering, which is what most people in "the industry" do. If you want to look at how people learn about programming and deal with it as mental work when they're being or have been taught well, chasing down the various uses of Racket[1], such as Bootstrap[2] and Matthias Felleisen's TeachScheme![3] may be of help. Racket (previously DrScheme) is a langauge that seems particularly associated with serious research into the pedagogy of computing science. [1]: http://racket-lang.org/ [2]: http://www.bootstrapworld.org/ [3]: https://en.wikipedia.org/wiki/TeachScheme! If you're interested in what really gets practiced, The Daily WTF[4] is as good a source as any of examples of how many (probably most) developers don't really have a mental process, or possibly a brain at all. [4]: http://thedailywtf.com/ That's not particularly helpful for improving one's skills, of course. For that sort of thing, whether you're working seriously on making software or just playing around, I can recommend nothing more highly than learning functional programming. Functional programming researchers and language designers are, in general, far more concerned than anybody else with the logical coherence and power of their languages, and that comes out in making the languages both easier to learn and use and more powerful than more popular languages, even if you exclude the messes such as Perl and Ruby that were thrown together on an ad-hoc basis. (It should be noted that many people damaged by extensive exposure to ill-designed languages will vehemently dispute the "easier to learn" portion of this statement, but these are people so far gone that they don't even realise that the statement "f(); g();" includes a flow-of-control structure, much less have any ability to recognise what it is.) As to specific references, I can only throw out a few random ones. One of the classic texts in the area is _Structure and Interpretation of Computer Programs_[5] (usually referred to as just "SICP"). However, one thing you miss out on with that is the interesting and extremely helpful stuff a good type system (such as that of ML and related langauges) can give you. For that, Haskell may be the best route to go, using something such as Graham Hutton's _Programming in Haskell_[6] or Paul Hudak's _The Haskell School of Expression_[7] (though I would certainly do the former before the latter). That said, I've just been looking into Scala and it appears to be to be about as decent as Haskell in this area, and has what looks like a good on-line course taught by Martin Odersky: Functional Programming Principles in Scala.[9] [5]: https://secure.wikimedia.org/wikipedia/en/wiki/Structure_and_Interpretation_of_Computer_Programs [6]: http://www.cs.nott.ac.uk/~gmh/book.html [7]: http://www.cs.yale.edu/homes/hudak/SOE/ [8]: https://class.coursera.org/progfun-2012-001/class/index [9]: https://class.coursera.org/progfun-2012-001/ Regarding a few things others have posted: On 2012-10-18 19:01 -0400 (Thu), jep200404@example.com wrote: > http://www.nand2tetris.org/ This is the first time I've come across this, but it looks absolutely brilliant. It addresses at least part of a massive problem that I and my other not-so-young friends have noted and discussed amongst ourselves from time to time. That said, I don't think it directly addresses your problem, since it's not so much about how one thinks about programming per se, but simply understanding what's really going on under the hood. That's somewhat esoteric knowledge you will probably need from time to time if you're a professional programmer, but is only used occasionally, as opposed to something like knowledge of algorithms, and many people can get by just fine without knowing it at all. I've ordered a copy of the book, though, and if anybody happens to be interested in putting together a group to basically do the course, I'd be in for that. I've been thinking for some time I wanted to start spending some time at Tokyo Hackerspace building up my own CPU from TTL 7400 NAND gates, but I reckon I might be able to live without the frustration of debugging timing issues and whatnot in actual physical components. On 2012-10-19 12:26 +0900 (Fri), Stephen J. Turnbull wrote: > Start with The Mythical Man-Month, of course.... That seems to me not really related to programming but to the other parts of software engineering, particularly project management. The same mostly goes for the agile stuff you mention. > There's a recent literature on "design patterns" in programming > (sprouted from design patterns for architecture AIUI) which I admit I > haven't read. You're not really missing all that much. The design patterns literature seems to have grown out of an undefinable ache for better abstraction in languages with poor support for high levels of it. This led to somewhat incoherent and hand-wavy little articles about things such as "the visitor pattern," which upon being presented to you will lead you to say, "all that because you didn't know about a function called 'fold'?" (Well, actually the proper generalizations of map, fold, etc.[10] Perhaps that's really where the language fell down.) It's as if someone came up to you and started babbling on about this new "composition pattern," where you could take several different variables and treat them as a group, always passing them around together, and be able to have a set of functions that operated on this group. Even a C programmer would immediately think, "Err, you mean a struct?" [10]: http://www.haskell.org/haskellwiki/Foldable_and_Traversable cjs -- Curt Sampson <cjs@example.com> +81 90 7737 2974 It is easier to write an incorrect program than understand a correct one. --Alan Perlis, Epigrams on Programming (#7)
- Follow-Ups:
- Re: [tlug] Making programming easier... or something like that
- From: Stephen J. Turnbull
- Re: [tlug] Making programming easier... or something like that
- From: Attila Kinali
- References:
- Re: [tlug] Making programming easier... or something like that
- From: jep200404
Home | Main Index | Thread Index
- Prev by Date: Re: [tlug] Making programming easier... or something like that
- Next by Date: Re: [tlug] Dying Monitor?
- Previous by thread: Re: [tlug] Making programming easier... or something like that
- Next by thread: Re: [tlug] Making programming easier... or something like that
- Index(es):
Home Page Mailing List Linux and Japan TLUG Members Links