Exercises in Programming Style–Monolith

Yan Cui

I help clients go faster for less using serverless technologies.

NOTE : read the rest of the series, or check out the source code.

If you enjoy read­ing these exer­cises then please buy Crista’s book to sup­port her work.

exercises-prog-styles-cover

Fol­low­ing on from the last post, we will look at the Monolith style today.

 

Style 3 – Monolith

As the name suggests, this style is typified by the use of one big blob of code that contains all our application logic!

Constraints

  • No named abstractions (i.e. no methods/functions)
  • No, or little, use of libraries

 

The first constraint meant that we can’t break up the logic into smaller functions, hence why everything is inside one big for loop.

I took the second constraint to mean that we should limit the number of namespaces we open (as is the case in Crista’s version). Which means a Dictionary is out of the question. I could still use a Map but that feels too much of a cheat so I decided to stick with an array of string * int tuple to keep track of the word frequencies.

 

First we need to load the list of stop words:

image

Then we read the text line by line and process it in one giant for loop…

image

One caveat I ran into whilst working on this, is with the behaviour of File.ReadAllLines. It removes the line ending character for each line, which means whilst looking for words in a line we have two cases:

  1. words in the middle of a line, e.g. “I spoke to Elizabeth today…”
  2. words at the end of a line, e.g. “…turned around to Elizabeth

so to make the logic consistent, and remove the special case (case 2) I decide to just add the newline character at the end of the string we need to process.

 

Other than the above caveat, this code is pretty simple. I decided to deviate from Crista’s implementation in another place – her solution reorders the word_freqs array whenever an existing word count is updated. But I figure it’s likely more efficient to just do it once after the main loop.

image

 

sidebar: I have used higher-order functions in a few places, which I’m not sure if they constitute as cheating. However, I don’t consider them violations to the constraints we have set ourselves for this particular exercise.

 

Conclusions

Code written in this style is generally hard to follow as you need to keep the entire application logic (i.e. the big for loop) in your head whilst trying to understand its behaviour, and we know our brains are not great at holding many items in the active memory (the famous 7 +/- 2 rule).

 

One thing to note is that, whilst this style was commonplace with low-level languages (and goto was popular back then too), it’s possible to program in this style with high-level languages too (as we’ve done with F# here).

I also find Node.js style callbacks tend to lend themselves to this style of coding too.

 

You can find all the source code for this exer­cise here.


Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game.
  2. Consulting: If you want to improve feature velocity, reduce costs, and make your systems more scalable, secure, and resilient, then let’s work together and make it happen.
  3. Join my FREE Community on Skool, where you can ask for help, share your success stories and hang out with me and other like-minded people without all the negativity from social media.

 

1 thought on “Exercises in Programming Style–Monolith”

  1. Pingback: Exercises in Programming Style–Cookbook | theburningmonk.com

Leave a Comment

Your email address will not be published. Required fields are marked *