What software engineers bring to AI-assisted software development LLMs don’t mean the end of software engineering as a profession.
Why tech companies encourage their software engineers to use LLMs It's not news that many tech companies are encouraging or even requiring use of LLM coding tools like Claude Code. While reading Sean Goedecke's post about bad code at big companies, it occurred to me that tech companies are happy to have their software engineers use …
Streamlining my user-level CLAUDE.md This post follows up on my post about getting good results from Claude Code. I've recently streamlined my ~/.claude/CLAUDE.md based on: * Informal observations about what Claude does and doesn't do well * A desire to avoid conflicting with principles that seem to be built into …
Getting Good Results from Claude Code: Writing Good Prompts Key to getting good results from Claude Code (and similar LLM programming tools) is writing good prompts. This is one area where your own programming expertise comes into play; you need to use it to provide guidance to the LLM and nudge it in the right direction. Good prompts are …
Give your LLM Coding Tools Their Own Tools Model Context Protocol (MCP) allows LLMs to call "tools" that can do anything: interact with your filesystem, search the Web, hit an external API, or even help guide the LLM through a structured problem-solving process. A single MCP server provides one or more tools; for example, a research …
Getting Good Results from Claude Code An updated version of my user-level CLAUDE.md is featured in this post from December 2, 2025. I've been experimenting with LLM programming agents over the past few months. Claude Code has become my favorite. It is not without issues, but it's allowed me to write …
iOS 8 Extensions Roundup I’m excited to start using iOS 8 extensions, but it’s looking like it’ll be a rough ride for a little while.
Let’s talk about Optionals There has been much complaining that Swift's Optional type forces you to think about whether something may be nil at every use, but aren’t we thinking about that already, just maybe implicitly? Swift’s optionals simply formally enforce the thinking we already must consider when writing (or …
Benefits of Cocoa: Still here in Swift Until now we all agreed these were benefits of Cocoa: * C compatibility * Dynamic dispatch * Nil safety * Duck typing Now they're all bad? — Nick Lockwood (@nicklockwood) August 6, 2014 Sigh. Okay, let’s take this one item at a time: C compatibility Still there. Nil safety Was never there …
It’s Not Exploitable This article showed an excellent point: taken alone, a memory leak or other “low-impact” bug may not appear to be much of a problem. But taken together, a set of these bugs can turn into an exploitable security hole. A few classes of bugs used in that exploit: * off-by-one * memory …
Code Optional Part of the Project Announcements series. I realized today I didn’t post anything here announcing Code Optional. I launched this podcast in July with my friends Andrew and Kevin, two of the sharpest developers I know. We aim to discuss all sorts of topics around development, design, and shipping …
Tech Debt and Refactoring Refactor as necessary to avoid adding tech debt during day-to-day. Add tests and rearchitect during the normal development cycle when adding to a preexisting codebase. Taking the time to do things right makes everything take a little longer than it strictly needs to, but it allows you to avoid unpredictable …
Explicit Programming Concretely, this post is about a guideline for object-oriented and imperative programming, but the underlying principles and conclusions should be equally applicable to some other paradigms. One example here uses Cocoa Touch and Objective-C pseudocode, but again the principles described apply equally to any framework. It’s very easy to …
↗ Avoiding Singleton Abuse Avoiding Singleton Abuse · objc.ioobjc.io publishes books, videos, and articles on advanced techniques for iOS and macOS development.Stephen Poletto
Follow me on Pinboard Update, April 2023: I’m no longer using Pinboard. I’ve been pretty excited about Pinboard lately. I realized a while ago that its network feature (including RSS), in conjunction with support for tags and notes (including the <blockquote> tag) make it basically a microlinkblogging service. I always …
Quick followup on singletons Part of the Singletons series. This is a quick followup to my post about singletons in Cocoa apps. Read it first for context. Another developer asked me a few questions about the points I made in my previous post on singletons. I’d like to post my (lightly edited) comments …
Including your Pods directory in source control On my current project, we made the decision a month or so ago to add our Pods directory to git. The team has seen a number of benefits from this decision. There are certainly some negatives, but in our experience the positives have been huge, immediately tangible, and well worth …
Singletons in Cocoa applications Part of the Singletons series. The Singleton pattern is a powerful tool in every programmer’s toolbox. But singletons today are widely overused in most codebases. The consequences of misusing such a powerful tool are too far-reaching and long-lived to take lightly. And overuse or misuse of this tool leads …
The Value of ReactiveCocoa This post is largely in response to Soroush Khanlou, via Jason Brennan. Edited to add, 2014-02-17: Soroush has posted a response, which you shoud also read after this post. It’s undeniably true that ReactiveCocoa can be difficult to wrap your head around. Really understanding it — really making it click …
Objective-C Context: Soroush Khanlou, via Jason Brennan. And I’m drafting a less-snarky response now. I was reading an article on Objective-C, and I still don’t quite get it. Lifting a simple example from the post, are we really down to say that {% highlight objc %} import <Foundation/Foundation.h& …