StackSort connects to StackOverflow, searches for 'sort a list', and downloads and runs code snippets until the list is sorted.
Internet nerdom being fairly OCD, someone (Gregory Koberger) of course went and implemented this, and it works!
As Gregory says, this is potentially a security nightmare waiting to happen, so it’s not clear that you should actually run his code. Being a brave and foolish (and somewhat careful) soul, however, I’ve fallen on this sword so that you don’t have to, and I can confirm that it works. After trying several dozen StackOverflow pages (most of which yielded either “Could not extract a function to run” or “Contained potentially bad code”), it stumbled across a working version of Quicksort in JavaScript.
Ta Da!
The success of this approach, however, does suggest interesting things about how people approach certain kinds of problem solving these days. Where “old people” like me would have bought a book to learn something new, my students are much more prone to assemble a patchwork understanding from tons of Googling. While I think this often leads to a quite fragile and incomplete understanding of the topic at hand, it is often sufficient to get them through what is assigned. In other words, they’re very skilled at answering the question that was posed, which was itself often somewhat shallow because that’s what we all have time for. So while faculty would like to think that we’re creating experts (whatever that means) in certain topics, we rarely have the time to give them assignments and tasks that require a deep level of expertise.
In the land and time of books, we might have believed that everyone read and understood the 8 assigned chapters, but the assignments almost certainly didn’t strictly require that. In fact I’m willing to bet a whole lot skimming actually went on that was not so different from the Googling that happens now. The difference is that when I skimmed a book, there was a reasonably coherent thread connecting the dots that were touched on. “Skimming” the Internet, however, is a much less coherent experience. The authors, examples, and assumptions aren’t the same from search result to search result. Worse (in computing) the versions aren’t necessarily the same, so we often end up with inconsistent and downright contradictory results! A few years ago I taught a class that used Python 3, and it turned out that almost all Googling pointed us at Python 2 examples and answers, which lead to all manner of confusion amongst my students.
So call me old-fashioned, but I still like a book, even if it’s an e-book, when I’m learning something conceptually new, as I do really appreciate a coherent voice and structure. If I need to remind myself of a library function or piece of syntax, it’s to the Googles. If I’m learning something that’s very similar to something I already know, then I’m happy with on-line docs if they’re well written. If, however, I’m expanding my horizons in more significant ways, a book is still the thing.
]]>It’s a true joy, and I’m really looking forward to being able to read the “finished” work. It’s a project oriented book, though, which means that to really learn from it we’re going to have to play along at home, programming, and experimenting, and analyzing. We’re all going to have to set aside some time for this when it does come out. But it’ll be worth it. And while the claim is that we’ll be learning about Generative Projects or Genetic Programming or whatever Bill decides to have GP stand for when he wraps this thing, we’re also going to learn a lot about software development and problem solving along the way, from someone who’s got a lot of great things to say on those important subjects. So we’d best buckle our seatbelts!
I do, however, have to take issue with a claim Bill makes in the introductory “About this book” section:
This is not a textbook. If your instructors try to use it as one, complain. If they argue, send them to me.
To be honest, it’s turning out a lot more like an anti-textbook. It will not improve your performance on tests. We’ll use “advanced” techniques before we discuss “basic” ones, ignore common practices to focus on more appropriate contingent solutions for specific problems, and may not even touch on techniques your instructors think you ought to know.
Remember, my goal is to support and extend your existing skills so you can productively explore further. Seek comprehensive knowledge and historical grounding in other books. They are full of it.
I can’t help but think he had me in mind when he wrote these lines, and I doubt he’ll be surprised to learn that I’m certainly seriously considering using it in my Evolutionary Computation and Artificial Intelligence course in the Spring. <snigger>
The issue, I suspect, is what one considers a “textbook” and what the point of such a thing is. Traditionally textbooks are big, fat things that provide a “coherent” overview of “everything you need to know about subject X”. I’ve got a bunch of these on my shelves with nice overviews of things like calculus and physics and chemistry. Old things, with a clear sense of what matters and what order it should be presented in.
In teaching computer science, however, things are typically much less clear. What’s “vital” in our field? What’s the “natural” or most pedagogically sensible order to present that material? There are lots of ideas out there, but hardly consensus. And that’s on the introductory material; my upper division electives usually focus on material where there’s even less agreement.
Starting in the late 90’s I started moving away from “traditional” textbooks when I could. I found that the most important part of most of my courses was process rather then content. Most computing textbooks I’ve seen are, unfortunately, much stronger on content than process. There are piles of books full of catalogues of algorithms, but they’re mostly presented like magic tricks, things Very Smart People dreamt up in some strange opium vision, inaccessible to the rest of us. The challenge in my experience is coming up with these visions, the process and the problem solving. So a book like Fowler’s wondrous Refactoring is far more educational in the long run, giving us skills for life instead of a box full of baubles.
The contrast between process and content has been made far more pronounced by the web and its many tools and collections. Young folks (and even this old guy) almost never reach for a book when they want to look something up; that’s what Google is for. The reference value of big encyclopedias of “facts” is greatly diminished when we can so easily find things on-line, but a well-written description of an important process is still a treasure.
Which brings us back to Bill’s book.
He claims it’s not a textbook because he doesn’t plan to cover “every” technique or concept or approach. He’s going to doing things in the “wrong” order. Foolishly, he’s not going to help improve our performance on tests, choosing to instead helping us develop skills that will help us for years to come.
Silly, silly man.
So, yeah, I do want to use Bill’s book in my class, and my students are more than welcome to complain to me or take it up with Bill. I doubt, however, that they will. The writing is opinionated and ornery and humble in all the right ways, and the emphasis on projects and problem solving are the sort of thing our students just eat up. I’m guessing that they’d happily line up behind something like this vs. a more traditional text.
As will I.
P.S. You should check out the book’s LeanPub site (https://leanpub.com/pragmaticGP) and sign up for notification. It’s a great way for people to help delude Bill into thinking that he’s not actually wasting his time.
Or something like that.
]]>The overwhelming flood of content that we are now drowning in clearly puts paid to those assumptions. The content is out there, free, waiting for us to find it and stuff it in our heads, with more on the way. “Free on-line class shakes up photo education” from Wired is a nice example of how the content space is changing dramatically, as well as implying that traditional face-to-face education is perhaps a doomed beast:
“I think we’re heading towards a place where we’ll no longer be able to charge for content,” says Worth. “And that scares the shit out of academic institutions.”
This does indeed scare academics and administrators, and excites lots of entrepreneurs who (often rightly) feel that they compete with traditional institutions in the content space. Those, both in and out of the academy, who worry are ultimately missing the point. Content was never what we should have been charging for, and if that’s all we were doing we were frankly doing it wrong. Our real value is in the life changing experiences. When I talk to our alumni, they rarely reminisce about specific courses, and even less often about particular content. What they remember are the things they built and the experiences they shared. They remember the love Margaret Edson talks about so eloquently in this 2008 graduation speech at Smith College:
2008 Smith College Commencement Margaret Edson from Smith College on Vimeo.
So those of us in the Academy need to get over our fascination with content and focus on the business of trying to make a difference in the lives of our students. And students and parents need to become smarter shoppers and look for schools that will give them the experiences that will make a difference in their lives. Any school can give you names and dates, facts and figures, drills and exercises. And so can the Internet. A good school challenges you to discuss, write, build, experience, and understand, which is something that people are a hell of a lot better at than books or web pages.
P.S. The Academy isn’t the only place where we’re struggling to figure out The Point. This excellent post by Vaguery on what coworking is and isn’t is extremely relevant and comes to many of the same conclusions: Experience and community matter. Hop on and stoke the engines, peeps; we’ve got places to go and things to do.
]]>
Actually, I helped a piece of Jess Larson’s wonderful art become the central component of a book cover, but let us not quibble.
As patient, long-time readers might know/remember, Jess Larson makes very cool art, including a fantastic series of girdles from several years back. There was a showing of her girdles at the PRCA back in 2006, and I had the chance to carefully photograph the show, posting many of the results on Flickr.
Zip ahead several years, and one of these photos caught the eye of the folks at Caketrain as they were looking for ideas for the cover of a new book they were publishing: Tongue party by Sarah Rose Etter. Some e-mails were traded, etc., etc., and Jess and I both happily agreed to have our work (her girdle, my photo of it) used for their cover.

One of the unexpected little treasures that was waiting for us when we got home from Arkansas this week was my copy of the book, and the cover (pictured above) is really wonderful. I love the texture they added as the background and the way they’ve incorporated the text. I haven’t actually read the thing yet, but the pre-press blurbs certainly sound wonderful and I look forward to adding it to my summer reading list!
Thanks to Jess for making such cool art, giving me such nifty things to take pictures of, and being generous about the use of her art in this new context. Thanks also to the kind folks at Caketrain for seeing the work and getting in touch, and for making such a cool cover out of it all. This is another neat example of the value of sharing work on-line with tools such as Flickr; without that none of this would have been possible. I’m not getting paid anything beyond my free copy of the book, but now a whole new set of people will see Jess’s art and my photography, and that’s quite fine in my humble opinion.
]]>We then spent most of the day hanging around Portland together, including a visit to the mighty and wonderful Powell’s City of Books (one of the last, great independent book stores) and checking in at GECCO to get my registration stuff. Tom totally loved Powell’s (“I could get lost in here!”), and has in fact spent large amounts of my money and his time there this week while I was at the conference. We also went out and saw Toy Story 3 that night, which turned out to be every bit as good as everyone’s said it is – lots of fun and very well written.
Day 8 was our last college visit in this part of the world, as we headed up to Olympia, Washington (2 hours north of Portland) to visit Evergreen State College. This was a real eye opener for both of us. I knew Evergreen was cool (and another of the small number of public liberal arts colleges in the U.S.), but didn’t know a lot of the details, and I think we both found the unusual curriculum and environment really interesting and thought provoking.
I had arranged beforehand to meet some of the computing faculty at Evergreen so we could learn a little more about their program as part of a program review we’re doing at Morris, so after the information session and tour we met up with Sherri Shulman and then headed over to meet her husband and fellow CS faculty, Neal Nelson. When Neal walked in, there was this very weird moment where we both those we knew each other but weren’t sure why. Duh, duh, and double duh – Neal was my undergraduate thesis advisor at Reed! I’d lost track of him when he left Reed in 1988, and I somehow thought he’d gone into industry so I wasn’t even looking to find him anywhere in our travels. Given all that and the the fact that his name doesn’t particularly stand out (and that I’m really crap with names), I totally didn’t consider the possibility that I knew this Neal guy we were going to see. After recovering from that somewhat awkward start, Sherri, Neal, and I had a really excellent conversation that ran a couple of hours easy. Lots of catching up on old times, as well as discussing undergraduate computing curriculum with limited resources in a public school – many thanks to both of them for all their time!
After returning to Portland, we went to Papa Haydn’s, possibly the best source of wonderfully scrumptious and rich desserts that I know of in the U.S. I had a wonderful Autumn Meringue and it was just like being a college student again (without the metabolism of a 20 year old). We used to walk out to Papa Haydn’s from Reed (maybe a 30 minute walk) several times a year and indulge, and was so cool to go back and find that it really hadn’t changed much in all those years.
That night was the opening reception at GECCO, so Tom and I hung around for a few hours eating little snacky things and chatting with various folks. Tom had never met most of my EC friends and colleagues, and he was very cool at meeting a bunch of strangers that are, even worse, all science nerds to a very high degree. Luckily it’s a really cool group of people, and I think he actually enjoyed himself.
By Day 9 I’d actually skipped out on the bulk of the first two days at GECCO, so at this point I essentially abandoned my son to the wilds of downtown Portland and started pretending to be a scientist for a bit. He spent most of his time hanging at Powell’s and reading books, while I listened to people talk about their cool evolutionary computation research.
That night I did actually skip out on the last session, though, and went back to Reed to join a bunch of faculty that have a regular Friday beer and food gathering at Woodstock Wine and Deli up the hill from campus. Jim had invited me to join them, and it was a great chance to meet some people I knew that I’d missed before (like Ray Mayer) and a bunch of other faculty that are new to the college since I was a student there in the dim past.
I wasn’t the only one meeting up with old friends, as Tom met up with Perry Webster from Morris (currently attending the University of Portland) and hung with her and a family friend pretty much the whole evening, which was a neat chance for him to spend a little time with people more his age :-).
Day 10 was much the same, although I stayed at the conference pretty late because the poster session and associated reception was that evening.
Day 11 (today) was the end of the conference, including eating lunch in the hotel sports bar with a bunch of very enthusiastic Europeans watching the World Cup final! Eli Mayfield (UMM ’09, now a grad student at Carnegie Mellon studying natural language processing) gave a talk today, and did a really excellent job. Tom and I went out to Jake’s Famous Crawfish with Eli and Bill Tozier. Jake’s was a great seafood house back in the day, and they didn’t disappoint, providing us with excellent food to go with the fine conversation. That was a great way to end our time in Portland!
Now we’re off to bed, and tomorrow we drive south to Tule Lake and Lava Beds National Monument. With a little luck we may hook up with Wayne Manselle in Eugen on the way!
]]>
I’ve taught Refactoring several times and have a pretty good handle on that. Fuzzy Logic I’ve taught once before and am pretty comfortable with. The Systems course, however, is one I’ve never taught before and am still struggling with on a number of levels, including the textbook.
Any suggestions and ideas on any of these would most certainly be appreciated. I’ll say a little more about each course below the fold for those who want all the gory details.
Models of Computing Systems This is one of our three core courses (the others being Algorithms and Computability, and Software Design and Development), is a 5 credit course (4 hours of lecture and a 2 hour lab each week), and is intended to expose students to computing systems using a layer model that includes as major topics
I’m planning to use x86 assembly for the first item, and the sysadmin work will happen on Linux boxes. I’m planning (still in a vague way at the moment) to try to use computer security issues to motivate/illustrate a number of key concepts in this course. Things like file system and disk structure can be pretty abstract, for example, but I’m thinking that doing a lab where we see how those decisions lead to lots of “erased” data being recoverable might make it seem more “real” and significant.
I realize that no book is going to cover all these things, and on-line resources plus lecture can provide the necessary background for several of these. This course has typically using a “standard” OS book like Silberschatz, et al, but this is large and expensive and really only addresses one of the four topics. If anyone knows of a good book that would touch meaningfully on more than one of these areas, though, that would be really helpful.
Fuzzy logic This is a 2 credit elective course, and should provide a reasonable background in the theoretical definitions and concepts in fuzzy logic, as well as giving the students a chance to apply those ideas. (My current plan is to write robot race car drivers using fuzzy notions of concepts like fast, slow, near, and straight.)
I’m probably more interested in solid coverage of the theoretical material than the applications side. The students will benefit from a good introduction and reference on the mathematical material, and I can probably handle the motivation and application side in class pretty well.
When I last taught this (Spring, 2006) I used An Introduction to Fuzzy Logic for Practical Applications by Kazuo Tanaka, translated by T. Niimura. That book actually worked quite decently. There were some predictable translation issues, but nothing that we couldn’t manage.
Refactoring This is also a 2 credit elective course. I’ve taught this course several times, and I’m likely to again use a combination of Fowler’s Refactoring and Kerievsky’s Refactoring to Patterns. Fowler is the “standard” in the field; the first five chapters of his book are absolutely classic material on the realities of software development and should be read by pretty much anyone who aspires to write good software. Kerievsky’s book builds on Fowler and does a really nice job of demystifying design patterns, converting them from magical insights codified by geniuses into things you could discover on your own through careful refactoring. When I last taught it I think I had Kerievsky as the required text and Fowler as the optional book. Given that together they still add up to less than $100, I’m tempted to require them both. We have lots of copies of Fowler in the lab, though, so I might just require Kerievsky again. Ideas/thoughts on this would definitely be appreciated.
One of the problems we’ve run into in this course in the past has been attempting refactorings on code with limited automated testing. Without good tests you lose your courage to refactor mercilessly, or you have false courage and end up breaking things without realizing it until (sometimes much) later. With only 2 credits to work with, however, you don’t want to spend two weeks writing unit tests for a system before you can start refactoring it, especially when you don’t really understand what the units are and what they’re supposed to be doing. This time I’m planning to use BDD tools like Cucumber, RSpec, and JBehave this time to more cheaply write high level acceptance/functional tests that exercise the key parts of the system in meaningful ways without getting bogged down in a bunch of poorly understood unit tests. We’ll see how that goes.
Wrap-up
So, there they be. Any thoughts, ideas, or suggestions would be greatly appreciated, especially on the Models of Computing Systems course.
]]>
I got a lot of very cool gifts at Xmas, but a clear stand out is the above, a wonderful, hand made art book created by my lovely wife just for me!
The text is a set of Fibonacci poems written by our good friend Athena Kildegaard. The cover paper (which you can’t really see here) is a really cool paper made from bark that another friend (Peter Whelan) got years ago in Bali (or someplace close).
I took a bunch of photos of it at Xmas, and then some more here, in part because it’s really cool and makes neat photographs, and in part because she needed a collage like this to submit to the Annual Juried Student Art Exhibit.
It’s a really wonderful book, and a really wonderful gift! Love you dear!
]]>
Not all of these are equally successful (I thought the idea of “The 21 steps” was better than the execution). My favorite of these is probably “Hard times”, by Matt Mason and Nicholas Felton. It’s a short, but (for me) very effective collection of data points making it clear how much things have changed and are changing, and hinting about what it might all mean down the road. Most of the info was at least somewhat familiar to me, but I love the way the details are brought together into a compact compelling argument — a sort of data poetry.
From Part VII: “Ideas are travelling faster” (crediting the data to Seth Goodin’s Unleashing the idea virus):
The time required to achieve Ten Million Users:
- Radio: 40 years
- Television: 15 years
- Netscape: 3 years
- Hotmail and Napster: < 1 year
Part IX-A has a tremendous title — “Our parents killed bad ideas with music. We kill bad ideas with new buiness models” — and delivers excellently on that promise.
Thanks to jakebouma for the cool photo.
]]>
If you’re never been over to BibliOdyssey I highly recommend a visit. The sub-title for the blog is “Books~~Illustrations~~Science~~History~~Visual Materia Obscura~~Eclectic Bookart” which, well, sums it all up rather nicely. Lots of neat old illustrations, often (but not always) on scientific themes. The themes are interesting, the background info excellent, and the images are frequently just too cool.
The image above is from some of the earliest high quality mapping of Mars in the late 1800’s by Giovanni Schiaparelli, and is part of a really neat set of early modern maps of the red planet. Peacay (BibliOdyssey’s curator) has once again pulled together some great images that are really wonderful to look at in and of themselves, as well as being really cool historic and scientific documents.
Schiaparelli’s (in)famous ‘canali’ turned out to be a kind of optical illusion caused by interactions between light, dust clouds that form in the martian atmosphere, the orbital location and background interference from the planet’s surface itself. If a sketch is made of something that wasn’t really there but you believed it to be there at the time, can you call the result abstract art I wonder? I guess so.
I concur.
]]>Today, however, I returned to this tab as part of my post-Naples electronic housekeeping. This was mostly dominated by really exciting activities, such as the disposal of hundreds of e-mails promoting conferences and workshops in areas I know almost nothing about; telling me of events back at UMM that I can happily ignore; advertising baby cribs, pick-ups, and houses for sale; and promising to make me an irresistible sexual dynamo that can finally, truly satisfy the woman in my life. (I forwarded the latter to WeatherGirl for review.)
After all that fun, I finally got to the Sedaris tab, and I laughed so hard I nearly wet myself. Then, because my to-do list hasn’t quite gone into triple digits, I wandered around YouTube listening to other “videos” of him reading is stories. (Few of these are actually videos in the sense of “moving pictures”; they’re mostly just audio recordings with a still plopped on top so YouTube will swallow it.) The better part of an hour was spent giggling my way through random stories, and now my stomache muscles are slightly sore, so I thought I’d type for a bit as a form of rest.
There appears to be quite a lot of Sedaris material on YouTube, and everything I listened to was enormously fun. I love his deadpan voice, and suspect the experience of listening to him is actually funnier than reading him on the printed page. I would love to have him on my iPod when going to work, but suspect it would be hard to avoid embarrassing myself by laughing out loud in response to things that the people around me can’t hear.
Some of the bits that I enjoyed in my little distract-o-fest included
All definitely recommended.
But don’t blame me if that important project falls behind…
]]>