It turns out I announced Tech Tuesday just over two years ago and wrote the first actual post on Tuesday, October 11, 2011, titled “Computing’s Building Blocks.” Today I am recapping some of the major themes that I have covered so far as preparation for thinking about what to write about next.
The Building Blocks sequence started with the Binary System. It then took a look at the Central Processing Unit (CPU) and contrasted Main Memory with other Storage. Next up was Networking for connecting computers with each other and Input/Output for getting data in and out. Of course to make all of these things work together we needed an Operating System which provides the basis for letting us Program the computer.
From there Tech Tuesday embarked on a much more thorough examination of Programming. First up was a look at Programming Languages. Then an explanation of the difference between Syntax and Semantics followed by an introduction to Literals, Constants and Variables. From there we took an in depth look at Data Types, which wound up having a part 2 and 3. We then examined Reserved Words as the basic elements of expression which let us form such things as Control Structures.
Programming would be pretty boring if we couldn’t define our own Functions which establish their own Scope and can have Arguments passed to them. This was followed by a mini series on Data Structures, including Records and Structs, Maps and Dictionaries, JSON, Objects, Arrays and finally Lists, Trees and Graphs. Once we have all of these goodies we need to understand the different ways of manipulating them using Algorithms. I first showed Algorithm in English and then Implementations in multiple programming languages. A Wrap Up of algorithms was then followed by an Interim Review of programming.
From there we dove into some of the engineering practices that come along with programming, such as Bugs and Debugging. One way to find and even avoid these is through extensive Testing which tends to be harder for systems involving Concurrency. One way to deal with that is through Atomic Actions and another are Locks and Mutexes. The Conclusion to Concurrency explains why this is still a hard problem today.
Based on reader input I then shifted Tech Tuesday to examining the specific problems of Technology in Startups starting with advice on Choosing Technology and Evolving it As You Grow. That requires Growing Your Engineering Team for which I presented some Best Practices. Key of course is that you are good at Hiring Engineers and Retaining them including Remote ones.
From there we went on to look at a medley of problems such as Security. Sadly there is no Silver Bullet and everyone finds themselves with some amount of Technical Debt. It helps to have a Heuristic for Prioritization and for good measure here is another Heuristic. With everything else going on make sure not to neglect your Backup and more generally your Disaster Recovery Planning along with your Documentation. Coming back briefly to examine how you should think about Prioritization and Competition.
After covering some miscellaneous topics that are near and dear to me, such as the Role of Experience, the importance of Team Diversity. You should always Beware the Bleeding Edge and understand the issues of Reliability in the Cloud. The three most recent posts then covered the most common issues faced by Engineering Founders, Business Founders and Designer Founders.
So today I wish a Happy Anniversary to all the longtime readers of Tech Tuesdays! Also a big thank you to everyone who has helped make posts better through their comments. I am enjoying writing this and definitely want to continue — expect me to ask for input on future direction next Tuesday.