Software engineering analogies Feb 22, 2023 Software is hard because it is extremely highly dimensional. There is all of the state in your program, all of the dependencies and their intricacies, all the footguns in the language you are using, and then finally the complexity of the real-world problem your are trying to solve. Communicating this, and the implications it has on the development of software to non-engineers can be a frustrating experience. Here are a few analogies I’ve found work in the real world to explain why things are so hard. ... ➦
C++, Memory Corruption and Crashes! Oh my! Apr 5, 2022 A story travelling through the wild lands of embedded C++, following mystery crashes, memory leaks, uninitialized pointers and compiler bugs Once upon a time, I graduated from university with not a trace of C++ knowledge under my belt, and promptly got a job writing C++. The codebase was running piggy-backed on a Sierra Wireless SL6087 modem, which gave us roughly 0.5 second time slices where we could run our code before we needed to hand back control to the modem and wait for it to call our code’s entry point again. This, naturally, gave rise to a lot of state machines. We had about 2MB of RAM to play with, a 2G modem which we could send AT commands to, various I2C, UART and SPI interfaces, and a few GPIOs we could wiggle. The UART was connected to a little printer, and the SPI to another microcontroller (a venerable Motorola MCS08GT32) which handled a keypad, some buttons, power etc. ... ➦
Do you really understand what your software does? Apr 3, 2022 A motivation for declarative state machines - centralize your state transition logic! I’d like to think I’ve been incredibly lucky the first place I worked. For a small startup they had a lot of stuff done ‘right’. Unit tests, CI, fast release cycles. KANBAN with retros and planning as necessary. A focus on quality and testing ideas in the market. But from an algorithmic perspective, I think the biggest thing I learned there was to make explicit state machines. ... ➦
Product design for organic growth May 21, 2020 Remember this quote from Alan Kay - “Simple things should be simple, and complex things should be possible”. If your product is complicated for people who need simple things, the learning curve will be too steep and people won’t begin to use it. If you don’t allow the flexibility for expert users, they will move elsewhere when they run into the limits of what you offer, and expert users are what drive organic adoption because people listen to them. ... ➦
Understanding DrussGT May 21, 2020 Note: this was originally posted on the RoboWiki Understanding DrussGT (3.1.4) This is an attempt to explain the internal mechanics of DrussGT. As far as possible, no references to actual code will be made. Instead, I will attempt to explain everything in terms of concepts and ideas, so that this turns into a learning exercise instead of one of copy-pasting code. The following expects some understanding of Visit Count Stats , KNN , Guess Factors, Wave Surfing and Robocode Game Physics, so if you aren’t up to scratch with those, this might be a bit confusing. ... ➦