Ever wanted to have a world-class instructor on your property, talking to your team about topics that matter to you, overseeing exercises that relate to your projects, making sure your people are keeping up to speed on what you need them to do? Consider having Ted come into your workplace and run a workshop. Or, perhaps, you're an educational institution that's looking for an instructor who's taught at one of the finest higher-learning institutions in the land--he's done that, too!
Workshops are designed for groups of up to 25 people; additional attendees beyond that number will require additional workshop instructors/facilitators, to ensure that the "hands-on" ratio between instructors and attendees remains high. All workshops are designed to have a strong "exercise" component, generally made up of ~3 lecture/lab topics per day, and can run from 1 day to a full week.
Contact Ted about doing one of the workshops listed below, or have a glance at the list of topics he can cover and ask him to put together a workshop geared specifically for your team.
Fred Brooks said, "How do we get great designers? Great designers design, of course." So how do we get great architects? Great architects architect. But architecting a software system is a rare opportunity for the non-architect, and without practice, how can anyone get good at anything?
The kata is an ancient tradition, born of the martial arts, designed to give the student the opportunity to practice more than basics in a semi-realistic way. The coding kata, created by Dave Thomas, is an opportunity for the developer to try a language or tool to solve a problem slightly more complex than "Hello world". The architectural kata, like the coding kata, is an opportunity for the student-architect to practice architecting a software system.
In this workshop, attendees will be split into small groups and given a "real world" business problem (the kata). Attendees will be expected to formulate an architectural vision for the project, asking questions (of the instructor) as necessary to better understand the requirements, then defend questions (posed by both the instructor and their fellow attendees) about their choice in technology and approach, and then evaluate others' efforts in a similar fashion. No equipment is necessary to participate--the great architect has no need of tools, just their mind and the customers' participation and feedback.
Building an enterprise system (whether on-prem or in the cloud) is a tricky thing. A number of pitfalls await the unwary, but fortunately, help is available; all we have to do is keep in mind a number of key aspects, many of which we've known for years but have simply lost sight of in the rush to embrace new tools and technology. In this workshop, based on Ted's book "Effective Enterprise Java" (which is startlingly technology-agnostic), we'll go over a number of the things architects and developers need to keep in mind when working with enterprise systems, whether building them in 2005, 2015 or 2025.
The Java Virtual Machine (JVM) is an incredibly powerful and elegant creature that has patiently executed millions of Java applets, applications, application servers, and demos for close to two decades. In this workshop, we will explore the Java Virtual Machine in depth, looking at some of the "arcana" of the JVM that separates the Java developer from the Java guru.
The Common Language Runtime (CLR) is an incredibly powerful and elegant creature that has patiently executed millions of .NET applications, application servers, and demos for almost two decades. In this workshop, we will explore the CLR in depth, looking at some of the "arcana" of the CLR that separates the C# developer from the CLR guru.
Ever wanted to build mobile apps using just one codebase, preferably one that utilizes the same skills that are already in use across the Web? Using Flutter, that's entirely an option. In this full-day workshop, we'll go over how Flutter works, get a primer on the Dart language (the language that Flutter uses to build applications), how to build a simple application using it, and then deploy it to Android or iOS devices, depending on what we have in the room (and who's willing to risk their mobile device enough to install a foreign app on it!).
C++ was widely denigrated as a "hopelessly complex" language with "way too many moving parts", and in truth, it was a language made up of three dominant paradigms: procedural, object-oriented, and meta-programmatic. C# and Java, by contrast, have five dominant paradigms: procedural, object-oriented, meta-programmatic, functional and now dynamic. (Other languages on each platform don't get much simpler, and in many cases, openly embrace these multiple paradigms.) If we're to use these new multi-paradigm languages successfully, we'd better have a good idea of what the paradigms are, what a language paradigm is, and what the different paradigms are in the languages we know and love. In this workshop, we will do exactly that, complete with hands-on exercises designed to explore each paradigm, and get more comfortable with each approach. (Note that this workshop can be given to either a CLR/.NET-based audience or a JVM-based audience, though it is not recommended to mix the two; the workshop can also be given to other language-based audiences, including Swift or Python, depending on lead time.)
"I invented the term 'object-oriented', and I can tell you for a fact that C++ was not what I had in mind." --Alan Kay, inventor of Smalltalk. But what, exactly, did Mr. Kay have in mind? If not the kind of object-oriented that C++ (and later Java and C#) developers became accustomed to, then what did he really imagine O-O development would be like? In this presentation, we'll examine a concept more recently popularized as "naked objects"--the idea that objects should not be used to present a user interface, but that the user interface should be based around the domain objects themselves. We'll look at naked objects libraries, how they work, and what development using naked objects looks and feels like. We'll spend some time building a naked objects application, leveraging the RestfulObjects standard (for those who would prefer to still build their own user interface without losing the benefits of library-driven infrastructure), and work to find where the edges to this idea--later popularized as "Domain-Driven Design"--rest and operate. But be careful, though: once you start working with this stuff, you may never want to go back to "traditional" means of writing code ever again. (The Java version of this workshop uses Apache Isis; the .NET version uses the Naked Objects Framework.)
With the introduction of CouchDB to the world, the world suddenly seemed to be alive with a whole slew of "alternative" approaches to data persistence, collectively called "NoSQL" and offering a "slightly different" to "radically different" view of data storage and retrieval. It’s left a few developers scratching their heads, trying to figure out when to use a NoSQL database instead of a regular database, much less which NoSQL database to use. In this session, we’ll examine the NoSQL ecosystem, look at the major players, how the compare and contrast, and what sort of architectural implications they have for software systems in general.
Ever wanted to truly explore what it would be like to be a James Gosling, or a Bjarne Stroustrup, or Anders Hejlsberg? Want to see what it's really like, building a language from soup to nuts? This workshop will take you through that process exactly, from deciding whether your language will be compiled or interpreted, or static- or dynamically-typed, through defining a simple grammar, building the parser, constructing the AST, and generating code out the back end. We'll look at tools that can simplify this process, and discover that building a custom language for a particular task isn't quite as hard as it might seem at first. It's domain-specific languages, without the MDA.
Ever wanted to understand how a virtual machine--like the Java VM, .NET CLR, or V8 Javascript engine--actually works, but were too afraid to ask? One of the best ways to get that knowledge is to sit down and build one, from scratch. In this workshop, we'll do exactly that: starting from "File|New", we'll build a working interpreter for a relatively simplistic virtual machine, and along the way, learn a great deal about how VMs work in general. But be warned! Learning this material could have the unexpected side effects, like great appreciation for other virtual machines and the start of a lifelong obsession.
Want to get your developers to learn how to give great technical presentations? Want to give your developer advocates a leg up on winning over conference crowds? In this workshop, we'll spend time crafting abstracts, building out talks, and practicing delivery, and transform a developer into a technical presenter that can command the attention of a room with a presentation that is equally informative as it is engaging.
In the world of the Single-Page Application (SPA), one name that appears over and over again is that of Angular, a JavaScript web framework that does things a little differently--and with great effect. But getting started with Angular is a higher bar than some other JavaScript frameworks, because if you don't do things the "Angular Way", it gets really tricky really quickly. In this workshop, we'll start from zero, with a little TypeScript, then start working with Angular 2: its core constructs and how it works with components, modules, and of course the ubiquitous model/view/controller approach. Bring your laptop, a buddy, and a caffeinated beverage of your choice, because once you strap in, it's going to be a hands-on lecture/lab ride.
Ever wanted to build mobile apps using just one codebase, preferably one that utilizes the same skills that are already in use across the Web? Using Apache Cordova, that's entirely an option. In this full-day workshop, we'll go over how Cordova works, how to build a simple application using it, and then deploy it to Android or iOS devices, depending on what we have in the room (and who's willing to risk their mobile device enough to install a foreign app on it!).
Ted teaches as a guest lecturer for the University of Washington Informatics School ("iSchool"). In particular, he's taught the following courses:
Many of the homework assignments he's given out to those classes are available on GitHub. Students are expected to fork the repository and implement the solutions in their personal copy of the repo, which in turn helps build out the student's own portfolio of work that they can then show to interviewers. The assignments on GitHub are listed below, in the rough order they would appear in the class:
INFO314: Networking and Distributed Systems
INFO330: Data and Databases
INFO448: Android (with Kotlin)
INFO449: iOS (with Swift)
Published on 01 February 2022