This fall I gave talks at PyBeach and PyBay after presenting at PyCon US earlier this year. These regional Python conferences are really fun: smaller crowd, more things in common due to physical proximity, fewer tracks so it's easier to attend the talks you want to see, more hallway conversations because the stakes somehow feel lower, etc. Don't get me wrong, I love the big PyCon US conference.…
This week I gave a keynote presentation at the first official PyCon Netherlands in Utrecht. My talk was called "The Zen of Polymorphism" and I've embedded the presentation below. Be sure to read the speaker notes! You can also view the slides here . The corresponding code is here on GitHub . The talk was not recorded, which actually was nice for a change. It made the whole experience feel a lot…
I started a new YouTube channel called Worst Practices in Software Development . The premise: We're all exhausted of hearing everyone's "best" practices in software development. What are your worst practices? The goal is to learn about how people actually write code. I have a theory that nearly all of the horrible things that everyone tells you to avoid in programming are precisely the best way to…
I recently received this question and thought it might be useful to publish my reply: "I'm a CS student... I've been losing faith in any kind of bright future for me and my peers consistently over the past few months... Please, tell me what your honest take on this ChatGPT situation is." It seems to me that the judgement of software engineers has become more valuable over the past 20 years because…
I once asked Guido van Rossum (the creator of Python, and my former teammate working on Google App Engine) what he thought of functional programming languages. I had told him about my recent frustration in trying to learn Haskell, and my skepticism from using Lisp. His reply was eye-opening: He spoke of the potential for functional languages to provide a significant, intrinsic advantage when it…
This question has been answered many times before, but it bears repeating: Why do people like using dynamic languages? One common compelling reason is that dynamic languages like Python only require you to learn a single tool in order to use them well. In contrast, to use modern C++ you need to understand five separate languages: The preprocessor The C++ type system The C++ template language The…
(Via Vint Cerf) 1st programmer : Back in my day we didn't have fancy high-level languages, we had to use assembly. 2nd programmer : Pssh — assembly? What a cakewalk. In my day we could only write programs with zeros and ones! 3rd programmer : You had ones?!
This week I announced that Effective Python: Second Edition is now available for preorder. It ships in mid-November this year (mere weeks away!). The new edition is nearly twice the length of the previous one, and substantially revises all of the items of advice in addition to providing 30+ more. I hope you like it! This second edition was easier to write in some ways and much harder in others. It…
After many years of using only frequentist methods for survey statistics , I've also been spending a lot of time lately learning about and applying Bayesian methods (specifically for A/B testing ). It's a bit of a culture shock for me, given that the Frequentists and the Bayesians don't see reality the same way . But I'm having a lot of fun looking at the world through a new lens. For example,…
The most valuable skill you can have as a junior developer is the ability to worry. Advice I've often heard from senior developers is to "delegate responsibilities, not tasks". The idea is that you ask a junior teammate to take ownership of delivering an outcome without being specific about how to do it. This gives them autonomy and flexibility, providing enough room for them to come up with a…
A dataset I've been playing around with recently is the list of names from the US Social Security Administration , which goes from the year 1880 through 2016. I loaded the data into BigQuery and then made this visualization using Data Studio . It's been interesting looking up the names of my friends and family to see just how popular their names are now versus the time they were born. Here are…
Another big backlog of links from the past few months. I need to get better at sending these in smaller digests. Reverse engineering the 76477 "Space Invaders" sound effect chip from die photos Getting Started with Headless Chrome Host Identity Protocol (HIP) Domain Name System (DNS) Extension Software Developers After 40, 50 and 60 Who Hate Being A Manager Coding for SSDs – Part 1 What We…
Quick refresher: I'm a life-long Mac user, but I was disappointed by Apple's latest MacBook Pro release . I researched a set of alternative computers to consider. And, as a surprise even to myself, I decided to leave the Mac platform. I chose the HP Spectre x360 13" laptop that was released after CES 2017, the new version with a 4K display. I bought the machine from BestBuy (not an affiliate link)…
Here's a big backlog of links I've enjoyed recently. A Trip Down The League of Legends Graphics Pipelines Introducing Riptide: WebKit’s Retreating Wavefront Concurrent Garbage Collector Rust vs. Go My Go Resolutions for 2017 (by Russ Cox) OK Log is a distributed and coördination-free log management system RethinkDB: why we failed Webmention: W3C Recommendation Add a const here, delete a const…
A realization I had this week: Software that costs money often has terrible UX, despite the developers having the revenue and resources to improve it. In contrast, free/unpaid software often has great UX, even though users are unwilling to pay for it. Why? Paid software is worth buying because it solves an immediate need for the user. Developers of paid software are incentivized to put all of…
Quite a backlog of good links this time! Practical advice for analysis of large, complex data sets Go in [Jupyter] Notebooks History of Actors Proposal: Eliminate STW stack re-scanning [Golang] Static typing will not save us from broken software Measurement of Impulsive Thrust from a Closed Radio-Frequency Cavity in Vacuum New Support for Alternative Quantum View [pilot-wave theory] Coverage Error…
My work is centered around building software. In the past, I've been the primary designer and implementor of large software systems, collaborating with many engineers to launch programs into production. Lately, I've been spending much more of my time guiding others in their software design efforts. Why design software at all? Why not just start writing code and see where it leads? For many…
I'm disappointed with the new MacBook Pros and I wrote my thoughts about them here . Since the announcement, I've been researching all of my options and weighing the pros and cons. What follows comes from my own assessment of 16 laptops, their features, and reviews I've read about them. I'll highlight the ones which I think are the top five alternatives to Apple's computers. At the end there is a…
The new MacBook Pros were released. Many people I respect have already expressed what I'm feeling. Here's a small sample: "I waited so long for new macbooks and now I feel like I don't want one :(" — Armin Ronacher "<sigh> I guess I will keep the duct tape on my 2013 MBP a bit longer. The bag of dongles was not what this road warrior was looking for." — Werner Vogels "Hi, @microsoft? Listen, I…
I received a nice email last week from a professor at a major university, who asked: I'm wondering if you can share with me some advice on how to train inexperienced graduate students to be productive in writing quality code in a short period of time. First: I'm flattered that this person thought I have any advice worth giving! My second thought was: It's impossible! But after thinking it over, I…
Zero-cost futures in Rust : Standardizing how futures / deferreds work in a language is a good idea. Python did something similar (and beyond) with asyncio and PEP 3156 . JavaScript / ECMAScript 6 also defined Promises . I'm happy to see Rust do this early. I think there are some details that will make this tricky in practice since Rust doesn't have GC, so we'll see. Google’s QUIC protocol: moving…