Wednesday, July 16, 2025

A taste of software engineering

Earlier this year, I took advantage of one of the unique benefits at Harvard, and enrolled in "Introduction to Computer Science", aka CS50, through Harvard Extension School. I was hoping to understand more of the building blocks and fundamental concepts behind software. I've been largely avoiding this part of the tech ecosystem. I associated coding with the kind of solo technical work, just me and the computers, that I don't relish. Filling in some of the gaps with CS50 felt like a useful exercise, personally and professionally. 

Before registering, I asked an advisor at the Extension School how many classes people usually take while working full-time. She said, "One," with great confidence. For me, this was definitely the correct answer. 

 

VS Code featuring file explorer and some Python code for my GastroTracker web app

CS50 covered programming in Scratch, C, Python, SQL, HTML/CSS/JavaScript, and Flask. This was a lot of material to digest over 11 weeks. Since I've tinkered with SQL and HTML enough to be dangerous, the homework for those topics only took ~15 hours per week. For the other topics, homework time was closer to 20 hours per week, plus lectures via YouTube, and mandatory Zoom discussion sections with teaching fellows and other students. This was a fully virtual class, and the students came from all around the world, with a range of ages and backgrounds. I attended several different discussion sections to get a sense of the teaching fellows, and settled on one who I found extremely helpful, and also good at managing discussion time.

This course has been taught and revised for decades, and it shows. Each lecture starts with simple concepts, metaphors, and references to the previous lectures. David Malan is an enthusiastic teacher, and he's quite committed to physical manifestations of concepts, like assembling students on a stage to illustrate the mechanics of bubble sort.

The course has a comprehensive "Academic Honesty" policy, which includes a ban on AI coding tools. There was one exception, cs50.ai, the custom "duck debugger", based on the rubber duck debugging approach. This coding assistant is designed to answer questions and review student code without providing direct answers. So if your Python script crashes, your C program won't compile, or your SQL query won't return the expected results, it will give you hints. The duck debugger will gently point you to a topic, or a class of functionality, or a section of your code, and recommend further investigation. To discourage dependence on the duck debugger, there is a system of duck debugger credits, which refresh over time, limiting students to approximately 5 questions every 5 minutes.

I've worked closely with software developers for most of my career, and I know the pain of local-dev-environment setup. CS50 provides all of the necessary functionality in a dedicated learning/coding environment, using a mix of GitHub Codespaces, Microosft VS Code, and a set of predefined VS Code extensions. All of this was accessible through a VS Code web interface, complete with a discrete filesystem, and automated version control through GitHub. There's a fair amount of public documentation: see https://cs50.readthedocs.io/cs50.dev/. The downside of this system was that it was tough to operate offline. I tried to set up a fully offline development environment, on trains, planes and automobiles, and, despite my enthusiasm and sysadmin experience, this was quite challenging.

The AI coding tool restriction was lifted for the final project, and I experimented with a handful of options. I had high hopes for running Ollama and qwen2.5-coder on my local video card, but I found the most useful functionality with GitHub CoPilot. Making a website with Python, SQLite, JS, CSS, and HTML, wrapped in Flask, was challenging, but I had completed a few complex web application assignments before the project. CoPilot dramatically accelerated my coding process, but it came with limitations. Even with access to all of my code and data, CoPilot was happy to ignore best practices. It would copy and paste code, or create entirely new functions for problems I had solved elsewhere in the application.

For my final project, I assembled a food/medicine/symptom tracker for folks with stomach ailments. The final project prep materials require a detailed set of features, broken into Good, Better and Best categories, providing a little morsel of product management. My hope was to complete all of the Good and Better features, and only tackle the Best category if time permitted. With all of the project preparation and guidance from the teaching fellows, I was very pleased to complete all of the Good, Better and Best features.

While I have a much better understanding of core concepts, like functions, variables, and loops, I think the focus on pseudocode is the thing I'll use most often. I'm a fairly logical, verbal person, and an annoying advocate for documentation. Pseudocode appeals to my interest in writing about and explaining my work, and I found it was incredibly helpful in application development.

I've occasionally taken stabs at scripting and programming – and I've had a copy of Learn Powershell In A Month of Lunches sitting on a bookshelf for many years. For me, the accountability and community that came with taking a class were quite helpful in furthering my understanding and practice, more so than anything I’d tried before.

There's a no-cost, no-deadlines option at www.edx.org/cs50, and virtually all of the Harvard CS50 lectures and slides are accessible for free. If any of this sounds interesting to you, I'd very much recommend CS50, in any of its various forms.


Tuesday, July 22, 2014

World + Dog Embrace DevOps - here are some references on how to do it right

The guys who wrote The Visible Ops Handbook - an indispensable ops book - wrote a novel called The Phoenix Project, about DevOps.
I have a hard time taking a novel about DevOps seriously - I like my fiction and IT guides in their own formats. So I haven't read Phoenix Project.

However, Gene Kim was kind enough to put out resource-guide blog posts, so I can avoid the whole ops-case-study-novelization conundrum.  And you can too.
  1. http://itrevolution.com/learn-more-about-concepts-in-phoenix-project/
  2. http://itrevolution.com/resource-guide-for-the-phoenix-project-kanbans-part-2/
  3. http://itrevolution.com/audit-101-for-devops-resource-guide-for-the-phoenix-project-part-3-correctly-scoping-it-using-gait-and-gait-r/

Tuesday, March 18, 2014

An Interview about Living in Somerville

My friend Lauren Shuffleton interviewed me for her project, The Somerville Connection, about why I live in Somerville, and how it's changed since 1999.  Check it out.
http://thesomervilleconnection.org/2014/03/18/david-sloane/

Friday, February 21, 2014

Cross-Platform SysAdmin Tools for Windows

I was leaving one job and taking another, and thought I'd share some tool suggestions for my multi-platform-admin friends.  So I wrote this up, to present on my last day.  But I didn't want to leave it behind, so I put it here, for posterity.

This also gave me a handy reference, when setting up a new workstation in a new office.

All are free, most are open-source, and all are recommended.
  1. 7zip - 7-zip.org
    1. Multi-format archiver for Windows -- gui and command-line.  As good or better than WinZip, but it's free and open-source
  2. CCleaner and Defraggler from Piriform  - www.piriform.com
    1. Great system maintenance/cleanup tools -- paid for professional use.
  3. Cygwin64 - cygwin.com
    1. bash, x-windows, and tons of other *nix tools for Windows
    2. The x64 version is much faster than the x86 version - get that one
  4. Filezilla FTP - filezilla-project.org
    1. This was much less useful in a Linux environment than I expected - virtually everything moved over SCP.
    2. April 2016 Update: Filezilla has had some problems with "optional" add-on "offers" - adware and borderline-malware. Bad enough that SourceForge won't host their software any more. Better to use WinSCP.
  5. FLux - justgetflux.com/
    1. Not strictly for SysAdmins, but automatic screen color adjustments are allegedly good for your eyes.
  6. Google Drive
    1. Duh
  7. LastPass lastpass.com
    1. Handles almost every kind of secure credential you need to remember
  8. Nmap - nmap.org
    1. GUI and command line - fantastically useful
  9. Notepad++ - notepad-plus-plus.org
    1. Fantastic text editor, tons of plugins, free, open-source, etc.
  10. Paint.net - getpaint.net
    1. Free, dot-Net based graphics editor with tons of features
    2. Not strictly for sysadmins, but still very useful for image manipulation
    3. Far easier to justify than Photoshop
  11. PsTools - sysinternals.com
    1. a great suite of command line tools for Windows from SysInternals, which was purchased by Microsoft in 2006 (the whole SysInternals suite is great)
  12. PuTTY - www.chiark.greenend.org.uk/~sgtatham/putty
    1. save yourself some headaches and set your default preferences, like tcp keepalives, username, etc.
    2. Move your settings around with registry exports/imports
  13. RVTools - www.robware.net
    1. Simple, alternative/complement to the VMWare vSphere client - great for finding problems with your VM's and hosts without navigating through a ton of screens
  14. Tera Term - en.sourceforge.jp/projects/ttssh2/
    1. Free, open source, terminal emulator - much better at serial operations than PuTTY
  15. Treesize - jam-software.de/treesize_free
    1. The paid version is super powerful, the free version is still very good.
  16. VirtViewer - spice-space.org/download.html
    1. KVM virtualization console client for Windows - tough to find, very useful
  17. WinSCP - winscp.net
    1. Just what it sounds like
  18. Wireshark - wireshark.org (fka Ethereal)
    1. Capture and analyze packets - especially useful for desktop visualization and filtering when you've got a complex tcpdump file from somewhere else
  19. April 2016 Addition: Babun zshell for Windows - https://babun.github.io/ 
    1. Slick package of Cygwin (x86) utilities, the Z shell, and a bunch of other interesting applications. 
    2. This is the first non-Cygwin package I've seen that includes Cygwin, and also lets you run Cygwin setup independently, to manage the mix of Cygwin tools.

Wednesday, December 19, 2012

How Many Admins?

In responding to a question about planning your IT staff requirements in LinkedIn Answers today, I realized two things: 

1. This could make a good blog post.
2. I love talking about the mechanics of IT.

One of my favorite answers to this quandary is Mark Verber's "How Many Administrators Are Enough?" article from a 1991 edition of Unix Review magazine.  It's a great discussion of how to plan and control your IT staffing needs, but it's mostly about principles.  And the 24x7-site staffing model, which concludes that you need fourteen people may cause unneeded consternation if you're starting with an IT staff of, for instance, two.


One of the great challenges in IT management is keeping IT and non-IT folks in sync, and my impression is that most IT managers resort to very simple formulae, like "1 helpdesk staff per 50 employees".  I've found that this kind of formula breaks down very quickly as organizations and technologies change, so I've tried to use something slightly more involved.

Tuesday, December 11, 2012

Campaign vs. Start-Up

After spending the past six months working in the Obama 2012 campaign's IT team, and returning to Boston, I've been thinking about the similarities between campaign IT and start-up IT.  Before moving to Chicago in April, most of my professional life has been in tech-focused, Boston-area start-ups.  And there are some real similarities.

An Incomplete List of Campaign/Start-Up Similarities:
  1. Your primary product has to be amazing.  Everything else has to be just-good-enough.  As a start-up or as a campaign, everyone knows you by their one window into the organization - like the OFA field campaign, or New Relic's performance monitoring service
  2. Everything that supports your operation - your systems and processes - should be just-good-enough-to-work.  In start-ups and campaigns, you don't have the time, money or staff to build a really beautiful process, or a really beautiful infrastructure.  That doesn't mean you can make something haphazard - you still have to contain your risks - but you can't spend too much time on evaluations, designs, redesigns, etc.
  3. Everyone contributes, everyone owns something (or many things).
  4. Your great idea is only great if you implement it.
  5. Your great critique is only useful if you provide a new solution.
  6. Tight budgets favor free software and services.
  7. Time is short - projects that aren't working get abandoned.

Tuesday, April 17, 2012

Facebook Albums and Consumer Fraud


Facebook's photo-tagging has become a tool for unscrupulous advertisers to reach social media networks.

Anecdotally, the biggest offender seems to be streetretro dot com.  Here's a sample title of a photo album: