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”.
The Software Carpentry course currently contains the following lectures:
- The Unix Shell (2 lectures)
- Version Control
- Automated Builds
- Basic Scripting (bool/int/float, for/while/if)
- Strings, Lists, and Files
- Functions and Libraries
- Programming Style
- Quality Assurance (basic testing)
- Sets, Dictionaries, and Complexity
- Object-Oriented Programming (2 lectures)
- Unit Testing (unittest — should switch this to nose)
- Regular Expressions
- Binary Data
- Relational Databases
- Numerical Programming (the basics of NumPy)
- Integration (subprocess+pipes and wrapping C functions)
- Web Client Programming (HTTP request/response, URL encoding)
- Web Server Programming (basic CGI processing)
- Security (the weakest lecture of the bunch)
- The Development Process (a mish-mash of sturdy and agile)
- Teamware (introduces portals like DrProject)
- 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.
- 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?
Coming down to the wire…
- Dan Servos has another Moodle visualization working. Anyone want to give me some money so I can hire this guy?
- Qiyu Zhu is producing useful error reports and new screens for creating users and projects. Shiny.
- Victoria Mui is laying out labels and making Gary Bader happy.
- Qi Yang is still struggling with Web-CAT, while Geofrey Flores is trying to shake the Java habit.
- Xuan Le is struggling with interrupts. Eva is having fun with concurrency too.
- Liz Blankenship (and the rest of the DrProject crew) is still working on the ‘All problem.
- Matthew Basset didn’t spend $20 (and has moved his project to Google Code).
- Geofrey Flores is paying attention to little things.
- Jeff Balogh is exporting forms.
- Kosta Zabashta is diving into Django.
- Ming Chow and Bing Li have gone silent. So have Eran Henig, Dmitri Vassiliev, and Joseph Yeung.
- Rewrite Professional Master’s proposal: 0
Finalize Met Office article for CiSE: 1 Transcribe interviewswith portal developers: 0.5 Interview more portaldevelopers: 0.75 Design REST APIfor DrProject: 0.5 Proof-read survey of scientific computing: 1 Submit proposal for CiSE special issue on software engineering and computational science.: 1 Write and submit NSERC Discovery Grant Notice of Intent: 1 More revisionsto “CS-1 in Python” book: 0.25 Sort out authentication for Software Carpentry portal.: 1 Starttranslating Software Carpentry examples into MATLAB: 0 Get kids to and from camp every morning: 1
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!
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:
- 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.
- 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 .
- 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.
- 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.
- Logged into Flickr to upload some pictures.
- The site tells me my premium account is going to expire in 6 days, and asks me if I want to buy another year.
- Go through the usual “confirm your card details” dance.
- 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.)
- Repeat steps 3 and 4 a few times.
- 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).
- 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:
- I made the call at about 8:55 pm on Wednesday, July 23, 2008, from a Toronto (area code 416) number.
- I now understand why the third link in a Google search for “yahoo! customer care” finds a complaint about your customer service.
- I now also understand why “Google” has become a verb, and “Yahoo!” has become an also-ran.
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…
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:
- I have tested this code and it works
- I have tested this code and it does not work (on my computer)
- I have tested this code and was able to reproduce the results from the paper
- I have tested this code and was unable to reproduce the results from the paper
It’s a good start…
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: