Archive

Archive for July, 2008

Please Pay For Your Copy of “Beautiful Code”…

July 30th, 2008

…rather than downloading it from a file-sharing site. Royalties go to Amnesty International, who help people like this:

A teacher who posted photos of collapsed schools on the internet after a devastating earthquake in China’s Sichuan province has been ordered to serve a year of “re-education through labour”.

Beautiful Code

Next Lecture?

July 28th, 2008

The Software Carpentry course currently contains the following lectures:

  1. Introduction
  2. The Unix Shell (2 lectures)
  3. Version Control
  4. Automated Builds
  5. Basic Scripting (bool/int/float, for/while/if)
  6. Strings, Lists, and Files
  7. Functions and Libraries
  8. Programming Style
  9. Quality Assurance (basic testing)
  10. Sets, Dictionaries, and Complexity
  11. Debugging
  12. Object-Oriented Programming (2 lectures)
  13. Unit Testing (unittest — should switch this to nose)
  14. Regular Expressions
  15. Binary Data
  16. XML
  17. Relational Databases
  18. Spreadsheets
  19. Numerical Programming (the basics of NumPy)
  20. Integration (subprocess+pipes and wrapping C functions)
  21. Web Client Programming (HTTP request/response, URL encoding)
  22. Web Server Programming (basic CGI processing)
  23. Security (the weakest lecture of the bunch)
  24. The Development Process (a mish-mash of sturdy and agile)
  25. Teamware (introduces portals like DrProject)
  26. Conclusion (various “where to look next” suggestions)

Between now and Christmas, I want to tidy them up, duplicate the examples in MATLAB, and add some of the content I wrote for “CSC301: Introduction to Software Engineering”. Since I won’t have time to do everything, I’d like your help prioritizing. Which of the following topics do you think is most important to add? And what have I forgotten entirely?

  • Lifecycle: should I split the existing “Development Process” lecture into two, and cover agile methods (focusing on Scrum) and sturdy methods (i.e., longer release cycles, more up-front planning, legacy code). Neither exactly fits scientists’ “exploratory programming” paradigm, but they’re all we’ve got…
  • Quality: this would expand the “Programming Style” lecture with material from Spinellis’s Code Reading and Code Quality to describe what makes good software good.
  • Deployment
    • Currently based on the patterns in Nygard’s Release It!, which focus on designing scalable fault-tolerant applications.
    • Should I instead cover the creation and distribution of packages (e.g., RPMs, Distutils, Ruby Gems, etc.)?
  • Refactoring: a combination of Fowler’s original Refactoring and Feathers’ Working Effectively with Legacy Code.
  • UML: I devote three lectures to this in CSC301; I don’t see any reason to inflict it on scientists.
  • Reproducible Research: it’s already important, and likely to become more so; it also ties in with “open science”, though I’m not sure what I could say about either that wouldn’t just be rah-rah and handwaving—tools like Sweave are interesting, but I don’t people would be willing to learn R just to use it, and there don’t seem to be equivalents (yet) in other languages. The same goes for data lineage: it’s an important idea, and there are plenty of research prototypes, but nothing has reached the “used by default” level of (for example) Subversion.
  • GUI Construction: people still use desktop GUIs, and it’s worth learning how to build them (if only because it forces you to come to grips with MVC and event-driven programming), but what everyone really wants these days is a rich browser-based interface, and I don’t think it’d be possible to fit that into this course.
  • High Performance Blah Blah Blah: this one keeps coming up, but (a) one of the motivations for Software Carpentry is the belief that there’s too much emphasis on this in scientific computing anyway, and (b) what would it include?  GPU programming?  MPI?  Grid computing? Some other flavor-of-the-week distraction from the hard grind of creating trustable code and reproducible results without heroic effort?  Oh, wait, are my biases showing?

Software Carpentry

Home Stretch for Students

July 28th, 2008
Comments Off

Coming down to the wire…

Uncategorized

This Week in Greg

July 28th, 2008
  1. Rewrite Professional Master’s proposal: 0
  2. Finalize Met Office article for CiSE: 1
  3. Transcribe interviews with portal developers: 0.5
  4. Interview more portal developers: 0.75
  5. Design REST API for DrProject: 0.5
  6. Proof-read survey of scientific computing: 1
  7. Submit proposal for CiSE special issue on software engineering and computational science.: 1
  8. Write and submit NSERC Discovery Grant Notice of Intent: 1
  9. More revisions to “CS-1 in Python” book: 0.25
  10. Sort out authentication for Software Carpentry portal.: 1
  11. Start translating Software Carpentry examples into MATLAB: 0
  12. Get kids to and from camp every morning: 1

Score: 8/12.

Uncategorized

Name This Book!

July 25th, 2008

Jennifer, Paul, Jason, and I have been working on a introductory Computer Science textbook using Python.  We’re in the last lap, but still haven’t chosen a name, so I’d like to ask for suggestions.  Python Programming: An Introduction to Computer Science is taken, as are Computer Science: The Python Programming Language, Problem Solving With Algorithms And Data Structures Using Python, and Python for Rookies; any other ideas?  If it helps, the distinctive features of our book include drawing examples from the sciences, and introducing GUI construction and databases as well as algorithm design and object-oriented programming.  Winner gets a free copy!

Learning, Practical Programming

Fall Courses

July 24th, 2008

I am teaching two courses this fall, and would like you to help me decide what my students should work on.  The first course, “CSC301: Introduction to Software Engineering”, is aimed at third-year students (juniors in American parlance), and covers agile software development processes, design patterns, and other introductory material.  Students work in four-person teams on a course-long project broken into four or five assignments; peer evaluation is part of their grade, and there’s a written exam at the end. This past winter, the project was a to-do list plugin for Facebook; thanks to some technical support from Refresh Partners, all of the teams managed to build something usable.

The second course is “CSC491: Computer Science Capstone”, which has taken the place of the CSC494/495 directed studies projects I used to run (although I still sometimes take students into CSC494/495 if they can’t fit CSC491 into their timetable).  In the past, I’ve matched students up with clients—faculty in other departments, local non-profits, startups, open source organizations—who want something built.  Over the course of the term, the students go through the entire development cycle: requirements gathering, design, construction,  testing, deployment, and post-mortem evaluation.  The range of projects last winter was pretty broad, but all the clients seemed happy with what they got.

So, what should I do with these courses this fall?  Here’s just a few of my options:

  1. Get the Capstone students to move (most of) DrProject to Django. The aim would be to create the “Trac 2.0″ that DrProject was meant to be; I think it’s ambitious, but doable, and would be a great introduction to open source/agile development. The downside is that students wouldn’t be working directly with real clients, which they have enjoyed and valued in the past.
  2. Have the Capstone students do external consulting projects as before. Upside: making real people’s lives better, and strengthening ties between this department and the community. Downside: they don’t get the experience of working in a larger group on a larger code base, and it’s a lot more work for me :-) .
  3. Have the CSC301 students build another Facebook app. Upside: Facebook is still hot (well, lukewarm), and I know how to avoid some of last term’s potholes.  Downside: a lot of third-year students haven’t done web programming before, so it’s a far-from-level playing field.
  4. Have the CSC301 students build a desktop GUI application using Swing, wxPython, or something like that. Upside: level playing field. Downside: finding something that’s worth build.

There are lots of other possibilities; if you’d like to add one to the pile, or cast a vote for one of the ones above, I’m easy to reach.

Uncategorized

Customer (Non)Support with Yahoo!

July 23rd, 2008
  1. Logged into Flickr to upload some pictures.
  2. The site tells me my premium account is going to expire in 6 days, and asks me if I want to buy another year.
  3. Go through the usual “confirm your card details” dance.
  4. After clicking the final submit, am told “Sorry, there is a temporary problem. Please try again later. If the problem persists, please contact Yahoo! Customer Care. (15)” (Their red, not mine.)
  5. Repeat steps 3 and 4 a few times.
  6. Call Yahoo! customer support to find out when Flickr’s going to be up (and whether I’ve bought a dozen one-year accounts—I’ve had that happen before).
  7. Give the customer care associate (no, really, that’s what they’re called) my Yahoo! user ID, tell her what the problem is. Explain what Flickr is. Explain that Yahoo! runs it. Am asked for the last four digits of my credit card. Am then asked for the whole number. And my zip code. Explain that I’m in Canada. Provide my postal code. Am asked if I have any other postal codes. Am asked for my entire credit card number. Tell the customer care associate [tm] that I’m unwilling to hand that over just to find out when the site will be up (at this point, I’ve given up on finding out anything more). Am told that I can’t be given that information until I hand over my credit card number. Go around that loop a couple of times before asking to be put through to a supervisor. Am told that I can’t be put through to a supervisor until I hand over my credit card number. Go around that loop a couple of times, and then the customer care associate [tm] hangs up on me.

If anyone from Yahoo! find this:

  1. I made the call at about 8:55 pm on Wednesday, July 23, 2008, from a Toronto (area code 416) number.
  2. I now understand why the third link in a Google search for “yahoo! customer care” finds a complaint about your customer service.
  3. I now also understand why “Google” has become a verb, and “Yahoo!” has become an also-ran.

*sigh*

Update: got a reply to my email query overnight (approx. 12 hours after submission). It suggested making sure I have cookies turned on, clearing my cookie cache, and turning my modem off and on again.  Unsurprisingly, the problem persists…

Uncategorized

Badge of Reproducibility

July 23rd, 2008

Coming back to the badge meme from earlier this week, John Cook’s new Reproducible Research blog pointed me at this page on the EPFL site advertising a paper called “What, Why and How of Reproducible Research in Signal Processing”. Notice the “Reproducible Research” badge? The “add your evaluation” link takes you to a formlet that lets you choose between:

  1. I have tested this code and it works
  2. I have tested this code and it does not work (on my computer)
  3. I have tested this code and was able to reproduce the results from the paper
  4. I have tested this code and was unable to reproduce the results from the paper

It’s a good start…

Software Carpentry

What My Students Have Learned This Summer

July 23rd, 2008

This post from John Cook, summarizing this post from Thomas Guest, is a pretty good description of what our students have spent the summer finding out…

Learning

“The Computer Was Threatening to Explode”

July 23rd, 2008

But the result was worthwhile: you can now view a super-tree showing the evolution of the dinosaurs, or read about its creation.  I think it’s beautiful:

Dinosaur Family Super-Tree

Uncategorized