David Inman

Recent Articles

Object-Oriented and Functional Programming

Object-Oriented programming has the perception as being the traditional and industry standard paradigm of programming for software engineering projects. Meanwhile, Functional programming has the perception as being either the new hotness, the non-traditional, or the academic standard paradigm of programming (depending of course on the blog post, person, or book that you’re encountering). But what […]
Read Full Post

On using non-traditional programming languages

One of the more rewarding aspects to programming as an intellectual hobby is discovering new programming languages. The more exotic or novel or opinionated the language the greater the opportunity to learn something new that can be leveraged for more efficient and capable problem solving in the future. However, the down side is that once […]
Read Full Post

Best Reasons for Learning F#

Unit Measurement Types The Mars Climate Orbiter met an unfortunate fate in 1999 when it unintentionally crashed into the surface of Mars. The cause? Misinterpreting the unit of measurement. This is hardly an isolated incident. Many software projects of non-trivial size struggle with a good solution for dealing with the cognitive overhead of keeping track […]
Read Full Post

Code Analysis: Methods

We’ve already gone through a lot of different programming language constructs, however we haven’t really talked about a very highly used feature.  How do we think about methods using these diagrams. So there’s a lot we could talk about methods in general, but I want to avoid any specific digression into what object oriented and […]
Read Full Post

Code Analysis: Exceptions

void Function() { try { RunOtherFunction(); } catch { Log.Error( "Problem" ); } } void RunOtherFunction() { if ( a_okay() ) { OtherFunction(); } else { throw new Exception( "Error" ); } } Exceptions are a thing that we tend to use for signaling error conditions such that the error will be dealt with in […]
Read Full Post

Code Analysis: Global State

Global mutable state by itself can make a program harder to work with because instead of  having a call tree that’s simply a tree structure, you end up with more of a graph structure.  Any given point in the program that interacts with the global state can be effected by any other point in the […]
Read Full Post

Code Analysis: Abstract Data Type

Abstract data types are a pretty well known concept in computer science and software engineering.  The concept is pretty simple.  If you have something that is complicated, then you can make it easier to deal with by only exposing an API that allows you to safely interact with the complicated component.  Of course also known […]
Read Full Post

Code Analysis: Fluid Call Tree

Let’s elaborate on the nature of these call tree diagrams.  Consider the following code: void doStuff() { doOtherStuff(); } void doOtherStuff() { init(); final(); } void blah( int x ) { if ( x == 2 ) { function(); otherFunction(); } else { doStuff(); } } Depending on the input for the blah function, we […]
Read Full Post

Code Analysis: Shared Mutable State

My previous post asserts that mutable state can cause a software engineer issues in understanding the program because it becomes arbitrarily hard to understand when two different parts of a program are actually connected.  This is also why some sort of run time debugging facility is needed in order to understand some types of code. […]
Read Full Post