Categories
Programming

Table-driven programming and the weather forecasting stone

Creative Commons photo by Tim Rogers. Click to see the source.

Whenever a picturesque small town located by a body of water gets popular with tourists, someone eventually sets up a “weather forecasting stone” like the one pictured above. It’s not all that different from a lot of what a lot of programs do: For a given input, provide corresponding output.

Prior to becoming a senior developer at Lilypad/Fintech, I took a consulting gig where my mission was to bring an application to a more workable condition. During that time. I saw a lot of “weather forecasting stone” code, and in this article, I’ll show you what I did with it.

The most common approach: if / else if

Most of the “weather forecasting stone” code took the form of good ol’ if / else if. Here’s the JavaScript implementation:

let forecast;
if (stoneCondition == 'wet') {
  forecast = 'Rain';
} else if (stoneCondition == 'dry') {
  forecast = 'Not raining';
} else if (stoneCondition == 'shadow') {
  forecast = 'Sunny';
} else if (stoneCondition == 'white') {
  forecast = 'Snowing';
} else if (stoneCondition == 'unseen') {
  forecast = 'Foggy';
} else if (stoneCondition == 'swinging') {
  forecast = 'Windy';
} else if (stoneCondition == 'jumping') {
  forecast = 'Earthquake';
} else if (stoneCondition == 'gone') {
  forecast = 'Tornado';
}

Aside from not handling the case where stoneCondition doesn’t match any of the expected values, this code works just fine. It’s reasonably readable, but it doesn’t have the conciseness of the the sign in the photo. It reads more like this:

  • Is the stone wet?
    • The forecast is “Rain”.
  • Otherwise, is the stone dry?
    • The forecast is “Not raining”.
  • Otherwise, is the stone casting a shadow?
    • The forecast is “Sunny”.
  • Otherwise, is the stone casting a shadow?
    • The forecast is “Sunny”.
  • Otherwise, is the stone white on top?
    • The forecast is “Snowing”.
  • Otherwise, is the stone unseen?
    • The forecast is “Foggy”.
  • Otherwise, is the stone swinging?
    • The forecast is “Windy”.
  • Otherwise, is the stone jumping?
    • The forecast is “Earthquake”.
  • Otherwise, is the stone gone?
    • The forecast is “Tornado”.

Another approach: switch

In the same application, I saw more “weather forecasting stone” code, and from all appearances, it appeared that it was written by another programmer. This one preferred to keep variable names as short as possible, often condensing them to remove as many vowels as possible. They also were deeply in love with the switch statement. Their code, as implemented in JavaScript, looked like this:

let frcst;
switch (stnCndtn) {
  case 'wet':
    frcst = 'Rain';
    break;
  case 'dry':
    frcst = 'Not raining';
    break;
  case 'shadow':
    frcst = 'Sunny';
    break;
  case 'white':
    frcst = 'Snowing';
    break;
  case 'unseen':
    frcst = 'Foggy';
    break;
  case 'swinging':
    frcst = 'Windy';
    break;
  case 'jumping':
    frcst = 'Earthquake';
    break;
  case 'gone':
    frcst = 'Tornado';
    break;
  default:
    frcst = 'Unknown';
}

The switch statement in JavaScript is modeled after the one in C. This means that a break statement has to be added to the end of each case to prevent fall-through. You should think of it as more of a goto statement in disguise rather than a structured branching statement.

Note that switch requires a default clause to handle the case when none of the other cases apply. In the code above, I’ve set it so that any case we haven’t accounted for causes the forecast to be “Unknown”. In the circumstance where the code should never have to deal with an unexpected case, I’d have the default throw an exception or similar red flag that we should catch during development.

It works, but it’s even wordier than the if / else if example, thanks to the required break statement on every clause except the default one. Once again, it’s not as concise as the sign, because it reads like this:

  • Is the stone wet?
    • The forecast is “Rain”.
    • Stop here.
  • Is the stone dry?
    • The forecast is “Not raining”.
    • Stop here.
  • Is the stone casting a shadow?
    • The forecast is “Sunny”.
    • Stop here.
  • Is the stone casting a shadow?
    • The forecast is “Sunny”.
    • Stop here.
  • Is the stone white on top?
    • The forecast is “Snowing”.
    • Stop here.
  • Is the stone unseen?
    • The forecast is “Foggy”.
    • Stop here.
  • Is the stone swinging?
    • The forecast is “Windy”.
    • Stop here.
  • Is the stone jumping?
    • The forecast is “Earthquake”.
    • Stop here.
  • Is the stone gone?
    • The forecast is “Tornado”.
    • Stop here.
  • And if you’ve made it this far:
    • The forecast is “Unknown”.

My preferred approach: Lookup tables

While both approaches work, I was still looking to make the code as simple to read as the sign (and in the process, also make it simple to maintain and modify). I wanted code that looked like this table:

If the stone’s condition is… …then the forecast is:
Wet Rain
Dry Not raining
Casting a shadow Sunny
White on top Snowing
Unseen Foggy
Swinging Windy
Jumping Earthquake
Gone Tornado
None of the above Unknown

Here’s my lookup-table based implementation of the “weather forecasting stone” sign, in JavaScript

const FORECAST_LOOKUP_TABLE = {
  'wet'      : 'Rain',
  'dry'      : 'Not raining',
  'shadow'   : 'Sunny',
  'white'    : 'Snowing',
  'unseen'   : 'Foggy',
  'swinging' : 'Windy',
  'jumping'  : 'Earthquake',
  'gone'     : 'Tornado',
  'default'  : 'Unknown'
}
const forecastLookup = (stoneCondition) =>
  FORECAST_LOOKUP_TABLE[stoneCondition] || FORECAST_LOOKUP_TABLE['default']

This code gives you a couple of things:

  1. FORECAST_LOOKUP_TABLE, an object that acts as a lookup table. Its property keys are the set of strings for all the possible stone conditions, and its values are the forecasts that correspond to each condition.
  2. forecastLookup, a function that makes it easier to use the lookup table.

With this code, you can get the forecast using the lookup table…

let forecast = FORECAST_LOOKUP_TABLE['wet'];

…or to handle unexpected stone conditions, get it using the forecastLookup() function:

let forecast1 = forecastLookup('wet'); // results in "Rain"
let forecast2 = forecastLookup('covered in gravy'); // results in "Unknown"

The table-based solution is easier to read and maintain than the if / else and switch methods. It also requires fewer lines, which is important if you follow Corbató’s Law:

Simply put, what Corbató is saying is that every day, you only have so many lines of code in you on any given day. The corollary to Corbató’s Law is that for maximum productivity, you should code in such a way that uses as few lines as possible while maintaining readability and maintainability. I think my solution does just that!

Categories
Current Events Security The Street Finds Its Own Uses For Things

The 2020 presidential campaigns aren’t ready to fight disinformation. It might be up to us.

In today’s New York Times, there’s a frightening article titled 2020 Campaigns Throw Their Hands Up on Disinformation, which Techmeme succinctly summarizes like so: Campaign staff and researchers say almost no political campaigns, including presidential ones, have teams for spotting and pushing back on disinformation.

Welcome to the downside of the old internet promise that anyone can be a publisher or a journalist: It’s that everyone also has to be an editor, a fact-checker, a media critic, and yes, an investor too.

Start with these basics:

Also worth reading: The Internet Broke the News Industry—and Can Fix It, Too, by Jimmy Wales and Orit Kopel:

The people-powered solution

In the end, what may end up making a big difference is the rise of contributors who care enough to give up some of their time to act as independent fact-checkers and watchdogs. That’s how the Urban Legends Reference Pages got its start, and it eventually became Snopes. Just as social media accounts can be used to spread disinformation, they can also be used to spread the truth. Algorithms have been weaponized against people, but they can also be harnessed to protect them.

Someone’s going to have to take on the challenges that the campaigns and social media networks can’t or won’t do, and as the drivers of the information age, that responsibility will fall to us. Are we up to it?

Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, December 16, 2019 through New Year’s Eve)

It’s the last “Tampa Bay tech events” list of 2019…and of the decade!

The time around Christmas always sees a sharp decline in tech, entrepreneur, and nerd events, which is why this edition is listing the events for the last two weeks on the year. I hope you had a great 2019, and I’ll see you in 2020!

This weekly list, which I started in 2017, has been around for about three years. and I hope you’ve found it useful. The mailing list version is a relatively new thing — thanks to Justin Davis for the suggestions — and will continue into the new year and the new decade.

Monday, December 16

Tuesday, December 17

Wednesday, December 18

Thursday, December 19

Friday, December 20

Saturday, December 21

Sunday, December 22

Monday, December 23

Tuesday, December 24

Wednesday, December 25

(No events)

Thursday, December 26

Friday, December 27

Saturday, December 28

Sunday, December 29

Monday, December 30

Tuesday, December 31

Do you have an upcoming event that you’d like to see on this list?

If you know of an upcoming event that you think should appear on this list, please let me know!

Join the mailing list!

If you’d like to get this list in your email inbox every week, enter your email address below. You’ll only be emailed once a week, and the email will contain this list, plus links to any interesting news, upcoming events, and tech articles.

Join the Tampa Bay Tech Events list and always be informed of what’s coming up in Tampa Bay!


Categories
Current Events Tampa Bay

Scenes from the Computer Coach / High Tech Connect holiday party

Photo by Hubert Sacasa. Tap the photo to see it at full size. Tap here to see the source [LinkedIn].

From a short-term point of view, the overflowing parking lot, the place packed so full that it was difficult to get around, and the all-too-quickly disappearing food may seem like a bad sign.

But from a long-term point of view, this is a great sign for the Tampa Bay tech scene: It means that even in the middle of the week in the holiday season with so many competing events and activities, Tampa Bay techies are so active in the community that they’ll fill up a large patio.

The Computer Coach / High Tech Connect holiday party took place at the Brick House last night. It wasn’t just well-attended, but attended by more than just the “usual suspects” whom you’d normally expect to see. There were a lot of new faces — or at least new to me — and this was great news.

Photo by Joey deVilla. Tap the photo to see it at full size.

One of the nice things about attending a party full of techies is that when you wear a meme, people get it:

Photo by Hubert Sacasa. Tap the photo to see it at full size. Tap here to see the source [LinkedIn].

Later on in the evening, Computer Coach’s Chief Success Officer Suzanne Ricci addressed the crowd. She talked about Tampa Bay’s debut on CompTIA’s list of top 20 metros for technology, and how a lot of the credit goes to the strong community that’s been forming here over the past decade. She also mentioned the recent good news: the opening of a new Drift office in Tampa Bay, which the company selected based on “a budding tech scene and a diverse talent pool.”

Photo by Joey deVilla. Tap the photo to see it at full size.

The past few gatherings in Tampa Bay have given me a sense of deja vu. It has a lot of similarities to Toronto in the early 2000s, when its tech scene was forming, putting together the key elements that would eventually transform it into one of North America’s top technology powerhouses. I see a lot of the same things happening here, and it’s thanks to Tampa Bay techies. Let’s keep it up!

Photo by Hubert Sacasa. Tap the photo to see it at full size. Tap here to see the source [LinkedIn].

More parties next week!

If you were looking for big Tampa Bay techie gatherings next week, you’re in luck. The Tampa Bay UX Group is celebrating both the holidays and their hitting 1,000 members on Tuesday…

…and if you’re looking for a similar event on the St. Pete side of the bay, the big holiday party jointly held by Suncoast Developers Guild, the Tampa Ruby Brigade, GDG Suncoast, and Women Who Code Tampa happens on Thursday at Suncoast Developers Guild:

Categories
Humor Programming

I had the same reaction

As its own creator says: “In C++ it’s harder to shoot yourself in the foot, but when you do, you blow off your whole leg.”

Thanks to Jennifer Newsome for the find!

Categories
Programming Video

Worth watching: Videos on programming paradigms and object-oriented vs. functional programming

Watching programmers debate can sometimes be like watching a monkey knife fight.

Even in this day and age, when programming languages freely mix object-oriented and functional features, there are still arguments over which approach is “better”, or at least which one should be used in a given situation. Here are some videos that cover these paradigms; they might event give you some insight on how you can use them in your day-to-day coding.

4 Programming Paradigms In 40 Minutes – Aja Hammerly

Here’s a nice overview of four programming paradigms: object-oriented, functional, procedural, and logical, including the strengths of each. Start with this one.

Why Isn’t Functional Programming the Norm? – Richard Feldman

Functional programming is actually the earliest programming paradigm, but it’s not the primary paradigm of any of the top ten programming languages that programmers are using in 2019.

Object-Oriented Programming is Embarrassing: 4 Short Examples — Brian Will

In this video, Brian Will — an OO skeptic — takes four examples of “proper” object-oriented code and rewrites them using a procedural approach, resulting in what he considers to be “better” code. He’s not a big fan of the philosophy where data and code grouped together — he says “Let data just be data; let actions just be actions.” I leave it to the viewer to make their own call as to whether he’s right or wrong. (Hey, I figured I should throw in at least one curmudgeon into the list!)

FP vs. OO: Choose Two — Brian Goetz

When it comes to FP vs. OO, I’m of the “Why not both?” school of thought, and so in Brian Goetz.

Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, December 9, 2019)

We’re in the top 20!

Why did Tampa Bay make the top 20 in CompTIA’s 2019 list of U.S. metros for technology jobs? One of the biggest reasons is the Tampa Bay tech community, who not only do their day jobs, but make outstanding contributions to the tech scene. They get involved in events where they share their knowledge, make connections and friends, and gather together to build strong tech, entrepreneur, and nerd communities. That’s why I do this every week: I put together a list of tech, entrepreneur, and nerd events to make sure that they can be found and you can attend them!

This weekly list is posted as a voluntary service to the Tampa tech community. With the notable exceptions of Tampa iOS Meetup and Coders, Creatives and Craft Beer — both of which I run — most of this information comes from Meetup.com, EventBrite, and other local event announcement sites. I can’t guarantee the accuracy of the dates and times listed here; if you want to be absolutely sure that the event you’re interested in is actually taking place, please contact the organizers!

Find out more about Tampa Bay’s status in the top 20 tech metros

You can find out more about Tampa Bay’s being one of the top 20 tech metros in the following places:

Over the next couple of weeks, I’ll be writing about ideas to help ensure that Tampa Bay stays in the top 20 on Global Nerdy. Be sure to check them out!

Monday, December 9

Tuesday, December 10

Wednesday, December 11

On Wednesday, Computer Coach and High Tech Connect will host their holiday party at Brick House (where Dale Mabry meets the 275) from 5:30 to 8:30 p.m.. Join them for one of the big tech community get-togethers, and help them out with their Toys for Tots campaign! They’re taking donations of new, unwrapped toys.

Thursday, December 12

Friday, December 13

Saturday, December 14

Sunday, December 15

Do you have an upcoming event that you’d like to see on this list?

If you know of an upcoming event that you think should appear on this list, please let me know!

Join the mailing list!

If you’d like to get this list in your email inbox every week, enter your email address below. You’ll only be emailed once a week, and the email will contain this list, plus links to any interesting news, upcoming events, and tech articles.

Join the Tampa Bay Tech Events list and always be informed of what’s coming up in Tampa Bay!