Tuesday, May 31, 2022

Tool roundup

http://carnackeys.com/ is great utility for presenting on Windows. It shows your keystrokes so you don't have to talk through your shortcuts.


https://ko-fi.com/ is a site to monetize your site or blog.

https://github.com/NVlabs/ffhq-dataset is a dataset of high quality faces to be used for AI training.

https://www.youtube.com/watch?v=6Rxqk3Lcvrw is one of my favorite movie clips to use when explaining scope creep.

https://jamstack.org/ is an architectural style I am interested in learning more about.

https://hyper.is/ is an open source terminal.

https://umbraco.com/products/umbraco-cms/ is an open source CMS system built on .Net.

Learn how to branch using Git on this site https://learngitbranching.js.org/.

https://anuket.io/ is trying to build standards for cloud native networking through reference infrastructures and test suites.

https://www.joelonsoftware.com/2008/03/17/martian-headsets/ is from a while ago, but the best article I have found to explain technical debt and the complexity of compatibility.

Monday, January 31, 2022

Writing a technical blog post

I recently told a colleague that “writing a 1000+ word article wasn’t hard, getting started was hard” and that he should “write about what he knows, or what he wants to learn about” so now I feel obligated to write about writing.  Writing a blog post is a lot like writing an essay. It has been years since my college English classes, but a quick Bing search about essays gives me the refresher I need.  I need to start with an introduction (this paragraph), follow it with a couple of main points (for me that is what you know and what you want to learn), and end with a conclusion.

Writing about something you know is something that you should do for a couple of different reasons.  The first reason is to help solidify the knowledge by forcing yourself to express it in a form that is accessible by an audience other than your peers. Providing an understandable context of how and why programmers approach problems in the way that we do has value.  The more the customers for our software know about what goes into creating it, the better able they are to provide meaningful feedback.  Writing about how and why you approach problems the way that you do forces you to examine your process so that you can replicate the successes and mitigate the failures.

Another reason to write about something you know is to provide insights that you have gained through the work that you have done for the various clients that you have worked for.  When siting down to write about software architecture, you are not writing it for others at your current or past projects, you are writing for those about to start similar projects.  You are writing about the lessons learned the hard way so that your peers can avoid making the same mistakes.  Software development is both an art and a science, and within either discipline there are forums for publishing successes and failures.  It is often more important to be honest about what didn’t work than it is to promote yourself by only reporting what succeeded.

One way that writing a short form article about something that you want to learn about helps is by forcing you to start with a SMART (Specific, Measurable, Attainable, Realistic, Time-bound) goal.  Unless you are planning on writing a book, the learning goal for an article needs to be specific and limited.  Writing an article on how to use a new language feature to implement a solution to an existing problem is a well sized example.  You can also write an article comparing the performance of various popular solutions to a simple problem.

Even though you define a goal/problem in your introduction, you shouldn’t measure your success by how close you come to solving it.  Measure your success by the existence of an article.  When you finish writing the article, you have either achieved your desired result or you have documented a method that does not work.  This allows success even if you don’t solve your problem, which is a great motivator to write more articles. 

You are a consultant or a developer and not a college professor, so your research needs to focus on attainable types goals.  How to solve a problem that you don’t know how to solve using a technology that you are already familiar with or solving a problem that you are very familiar with utilizing a new technology.  College professors and other researchers are charged with pushing the boundaries of human knowledge while you should be focused on expanding your own boundaries.

It is unrealistic for anyone to define the whole breadth and depth of a subject within 1000 words.  A short form article constrains you to focus on either a shallow depth and limited breadth or a deep dive into a specific portion.  A good example of limiting the breadth and depth of a subject would be a survey of the different networking options available when setting up a Kubernetes cluster.  

Limit myself to one week when writing about a subject you want to learn about.  This is long enough for you to do a couple of hour-long experimentation sessions and then replicate them.  If you work for a company that has an active developer community and you have not made any progress by day two you should ask for some guidance or a push in the right direction.  If you don’t have something available to you at work then join a local user’s group or find a similar community on one of the tech forums (StackOverflow or Reddit are great places to start).  Any topic that takes you longer than a week to research is something that you should probably invest in a course or book to learn.  Adjust your time limit as you write more and more articles because your optimum time might be different than mine.  

Finally, writing about a subject that you are learning about also helps you anchor the material in your mind.  Having to put the concepts into your own words in a way that will allow someone else to replicate your experience forces you to slow down and think about each step of the process.  When writing a learning article, think about building a VM with a vanilla OS to force yourself to consider each tool and step you take along the way.  You can use snapshots to allow you to roll the VM back to the starting state several times as you attempt to follow along with your written steps.  Assume nothing, and test each step with malicious ignorance.

Those are the types of blog posts that I write and the reasons behind them.  I have attempted to force different types of articles for different audiences in the past, but when I am doing something that isn’t natural for me then I tend to lack motivation.  My job is not to write articles, my job is to help write software to solve problems.  Writing blog posts like this one and the ones described above help me be a better communicator which helps me ensure that the solution we are implementing is solving the right problem.

Afterword: Ok, that is over my 1000-word goal, but that is not the entire writing process.  There are two important steps that I have not covered.  Editing and peer review.  It has taken me around 2 hours to write out my first draft of this article.  After I complete an article, I let it sit for a day or two and then come back and re-read it for content and clarity.  If it is an article that I am publishing on my own blog then I will upload it and schedule it to publish.  If it is an article that I am intending to publish in a different forum then after I have made my edits, I will send it out to a couple of peers to proof before publishing.

(Originally published elsewhere, at another time.  But since the original location no longer exists...)