The title of this article is full of a bunch of words, some of which may be unclear to programmers who only write low-level code, and some of which may be unclear to programmers who only write web and mobile GUI applications.

I will try to hopefully bridge the gap for people from either background, but understand that this is not an article meant for a quick skim with divided attention. I have arranged these concepts in a logical progression, so please buckle up and set aside a few minutes of your day to possibly change the way you think about programs and software architectures forever. …


Concurrency is widely regarded as one of the most difficult challenges among all fields of computation. I was first introduced to concurrent programming in high level languages, and the magic did not disappear until I studied it in C/C++.

If you are still wondering how it works under the hood then I suggest that as a learning goal, but we will not be going that low level today. Instead we will look at a practical way to write concurrent code which gives us more control than AsyncTask, but requires orders of magnitude less configuration (barely any at all) than a very expansive library like RxJava. …


The technical content in this article is intended for software developers who have written at least one significant application. It does not need to be in the realm of GUI programming, but that is my own expertise and this article will reflect that.

In this article, we will:

  • Briefly summarize the difference between principles and rules

Principles And Rules

Before we proceed, let me briefly define these two words for the purposes of this article:

  • A principle is an instruction (or set of instructions) which when followed, almost always leads to a better outcome than if one does not follow said instruction(s) most of the…


A question which has been popping up repeatedly in my Q&A sessions since the Navigation Library from Android Architecture Components was released, is whether or not a Single Activity Architecture is:

  • Detrimental (bad)

In this short article, I will attempt to reduce the net sum of confusion which I see from junior and intermediate developers on whether or not this practice is necessary; along with how you might make this value judgement for yourself.

Image for post
Image for post
Generic Stock Image for SEO

Do Not Just Parrot Authority Figures

Any senior developer ought to know that these sorts of things (frameworks) usually sit somewhere between neutral and good depending on project requirements and personal preference.


I am asked very frequently about which OS, language, platform, framework, library, IDE, and or whatever other kind of tech, is the best choice for new developers. Some more frequent questions lately have taken the form of:

  • Should I write native, web, or hybrid applications?

Ultimately, we are asking the same question regardless of what we are talking about: What is the best choice to make?

An expert in their field, or someone who simply pretends to be one, may give you a specific answer. Hopefully, they also give you their rationale for the…


Most people either do not start, or quit learning to code for two reasons:

  • Learning one’s first programming language can be a very difficult task

In this article, I will:

  • Talk about dealing with these problems in practical terms
Image for post
Image for post
Generic Stock Photo for SEO

The First Programming Language

Some people are naturally good at memorizing the commands and syntax of a programming language, and some are not. However, this is only one aspect of what it takes to be a good programmer. We must also consider other qualities which I have observed over nearly a decade in this…


For roughly the first 24 years of my life (I am turning 27 in less than a month as of writing this), I did not know how to find a balance between taking a break versus wasting time. One of these things is a critical component of working hard, being productive, and still living a happy and blameless life (though nobody is perfect). The other at best presents a temporary distraction and at worst, sadness and depression.

First I will discuss my experience at both extremes and then we will go into finding the path towards balance. The principles I discuss here are not new, but the fact that I have lived this as opposed to just learned from the wise (and I do try to do that as well), will hopefully make this more impactful and useful to you. …


My name is Ryan, and I hate jargon. I hate jargon because I am ill-equipped to remember it, but the reason why I still write decent code is that I am well equipped to understand the concepts which these jargon words point to.

In this article, I will talk about three things that go together (testing, architecture, and legibility), and when you should start to care about them. While this is partly a subjective question, there actually exists a fairly concrete answer to this question and I need not use big scary words to explain it.

This article covers:

  • Why some people do not bother with tests, architecture, and writing legible code, and when this is a reasonable thing to…


This article is a continuation of a previous one on modelling UI Interactions with events. If you are interested in applying Event Driven Programming to your code, please read that article first for a more complete picture: Simplify Your UI Interactions With Events | Java, Kotlin, Any Language

Image for post
Image for post

The picture above is from my early notes (circa 2017) on software architecture, asynchronous data streams, and event driven programming. …


I thought I would take a break from technical content to speak about something which is critically important for job prosepcts; whichever side of that interaction you find yourself on.

Note: This article emphasizes North American English in the context of the Information Technology (IT) Industry; which tends to be very informal and personal in speech (as opposed to formal and impersonal). I have included more formal phrases here and there, for usage in other contexts.

About

Ryan Michael Kay

Self-taught software developer & student of computer science.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store