This post is part of the “Things you MUST do (if you haven’t yet)” series, covering technical talks1. If you want to read a bit more of my rambling on why I started doing this, feel free to read the original post, linked above.
Below, you will find a personal compilation of the best tech talks I’ve watched so far and I’d recommend to anyone looking to expand his field of knowledge. I made a conscious effort to keep this list as valuable as possible to readers by only including talks that were truly insightful for me, instead of putting here every video I just enjoyed. Some of the criteria I’ve used for the selection are the following:
- The ideas presented on the talks are timeless.
- The knowledge is as generic and technology-unaware as possible, so that people from all technical fields and backgrounds can benefit.
- The talks contained breakthrough ideas or made me see things from a new perspective. Of course, this can’t be done without bias, since the more talks I watch, the harder it is for a new talk to satisfy this condition.
- Last but not least (and this is a hard one!), ideally it should be a talk I’d be willing to invest some time in watching again.
Enough chit-chat, time for some action. Oh, and one last thing, this post is clearly a work in progress, so feel free to bookmark it and come back for more talks!
Deliberate Practice in Software Development
Have you ever heard of the 10-year rule ? Yes, this theory that a person must persevere with learning and practising a craft or discipline for about 10 years before he or she can make a breakthrough. In this talk, Mary Poppendieck makes an interesting analysis on that theory, talking about the process of deliberate practice and making a deep dive on what one can do to improve on his/her craft. She’s focusing mainly on the field of software development, but many of the ideas are also applicable in other fields.
Simple Made Easy
In this talk, Rich Hickey, the creator of the Clojure language, analyses the difference between simple and easy. He explains why easy solutions might give you the false impression of moving faster, but simplicity is what will help you move fast in the long term. He peppers his arguments with a generous dose of humor, irony and perhaps subjectivity, but this talk contains so much insight around the process of software development and software evolution, so I’d highly recommend it.
SOLID in the Wild: Life When Your Software is Actually Soft
If you are a software engineer, I bet you’ve already heard and read a lot about the SOLID principles. The reason I included this video in this list is because it’s one the of few videos that provide a pragmatic view of the principles. 3 engineers from Pivotal talk about one of their past projects, where they set out to build an online marketplace, giving concrete examples of where and how they used the principles and how they benefited from them.
Developing Expertise: Herding Racehorses, Racing Sheep
In this one, Dave Thomas, the author of the Agile Manifesto, expands on the Dreyfus model of skill acquisition, describing the various levels of competency, how one can transition between them and how you should treat people differently according to their level. He concludes by explaining how the model can be used to improve how companies operate and how individuals can shape their career trajectories.
A Brief, Opinionated History of the API
In this talk, Joshua Bloch - one of the minds behind Java - walks you through the history of APIs, also reflecting on the current legal status, specifically around the legal case between Google and Oracle. This is a great talk for software engineers that are curious and would like to get a glimpse of how it all started and how the concepts of a function or a library were invented. It’s all presented in a very insightful way. It also provides food for thought around what constitutes and API and what could the repercussions be if APIs were copyrighted.
How to make a sandwich
In this talk, Dan North is exploring various aspects of feedback. He starts by analysing what actually feedback is and what are the different types of impact feedback can have in a system and why feedback is important. He then proceeds with explaining how to deliver feedback in terms of structure and different approaches that can be used according to your relationship with the other person. Last (but definitely not least!), he explains how to receive feedback for optimal results.
A Case For Outside-In Design
Sandro Mancuso is the founder of the London Software Craftmanship Community. In this talk, he makes a comparison between 2 methodologies for software development: inside-out and outside-in development. He explains what are some of the reasons people prefer doing inside-out development, demonstrating why it can have adverse effects. Building on the concept of early feedback and minimum viable products, he explains why outside-in development can help us deliver value incrementally, faster and with less risk. Note that he has also written an article for this here, but the article is slightly more concise and focuses more on the software development aspect, while his talk captures the whole lifecycle, covering the business aspect too.
A New Way to look at Networking
Van Jacobson is renowned for his work on TCP/IP network performance and scaling. He is said to have saved the Internet from collapsing in the late 1980s and early 1990s. In this talk, he walks through the history of telecommunications re-visiting constraints and design decisions from the first telephones to ARPAnet and Internet. He eventually builds the case for a new network architecture, called Named Data Networking (NDN). This video is full of insights around how communications work and historical tidbits (for those of you that love them!).
The Functional Programmer’s Toolkit
Are you a software developer and not very familiar with functional programming? Do you feel mystified every time you hear the word monad? Then, this talk might be for you. Scott Wlaschin gives a very practical introduction to some concepts of functional programming, such as monoid, monad and functors. He explains what are the main properties of each one of these concepts and the associated benefits. He also provides some code examples in order to demonstrate how code can benefit from use of functional constructs.
Look at Your Data
In this presentation, John Rauser explains why aggregated metrics might lead you to lose part of the picture and why looking at the distribution or even raw data can provide extremely useful insight. He provides some real examples to drive the point home and a real example from his work at Amazon. What is interesting about this talk is that it’s only 10 minutes, but it’s informationally very dense. If you like it, I would also recomment watching this and this talk as well, which were also given by John and they are somewhat building on top of this one (I know that’s cheating, since I was supposed to only recommend one talk!).
How to avoid death by PowerPoint
The stereotypical software engineer is pictured as a human being stuck in front of a screen churning out code incessantly without any interraction with the surrounding environment. Unfortunately, there are many software engineers out there that embrace this under the belief that writing software is what provides value and anything else is a waste of time. This couldn’t be more misguided. Communication is crucial to the software development process, whether that is to distill requirements for what the software should do in the first place, educating users on how to use the software or convincing people about the value of a software project. Making an efficient presentation is crucial to achieving these goals. In this presentation that is only 20 minutes long, David Phillips describes very concisely why presentations can be very painful and gives some basic principles to make them as painless for the audience as possible.
3X Explore/Expand/Extract
This is a tech talk where Kent Beck introduces the model of 3X, which defines the 3 main phases of the evolution of a software product. This model can be useful to people in various disciplines and software engineering is one of those, since how you design, build and operate software can potentially differ depending on the phase you are on. I have written a blog post that summarises the concept, so instead of re-iterating everything here I will just refer you to it. However, apart from the 3X model this tech talk also contains those rare funny bits of Kent that I have to admit I enjoy very much.
Architecture All Access: Modern CPU Architecture
This is not a single talk, but a series. You can watch part 1 here and part 2 here. It is a set of videos created by Intel that present the inner workings of a CPU. Nowadays, software is typically developed using many different layers of abstractions, which means many developers rarely care about how the code is really executed by the underlying hardware. However, having a good understanding of how hardware works can be really useful when developing software. These videos do a great job of explaining this in very simple terms, which makes the subject accessible even to people without any Computer Science background. I recently watched these videos 10 years after my undergraduate degree, which contained many courses focused on the architecture of a computer, and I still learned a few things I didn’t know.
AWS re:Invent 2018: How AWS Minimizes the Blast Radius of Failures
Amazon is famous for its engineering philosophy of “you build it, you run it”, where software engineers are themselves responsible for the operations of the software systems they have developed. I find this a very interesting approach as it creates both the right incentives and feedback loops. In this talk, Peter Vosshal - a Distinguished Engineer at AWS - gives a great overview of the main techniques used by AWS to reduce the blast radius of failures that might happen. You will learn about things like Region isolation, Availability Zone independence, cell-based architectures, shuffle sharding and various software deployment strategies. It’s a lot of information packed in just 55 minutes worth watching by any engineer that is responsible for operating software systems in production.
-
You might be sitting there now wondering: “but, how do you really define a technical talk?”. As diplomatic as that might sound, I will not make an attempt to give a strict definition of the term here, but I will try to at least explain how I view it. In the context of this list, I consider a talk technical if it can help me in any way improve the process of developing software. Of course, this can potentially include many different things, like how I personally develop software, how I help other people develop software or even how I can help other people that help other people develop software (I know I am getting to meta now, so I’ll stop). ↩