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 […]
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 […]
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 […]
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 […]
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 […]
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 […]
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 […]
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 […]
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. […]