What’s this all about, anyway?

Well, fundamentally: information. On the spectrum from theoretic to applied, this is about the nature of information, its relationship to physical reality; to more applied things; viewing software as the creation and manipulation of information. A software engineer applies the principles of engineering to software. Some of these principles are inherited from engineering in the broader sense; some are specific to software.

From a mathematical perspective, I seek to build an intellectual framework of all the above by formulating precise definitions and relationships, and sets and subsets.

* Information is the only resource that grows as it is used.

Who do I write for?

Myself, to be honest.

Life Pillars

Do you take life seriously?

Do you think about the future? Perhaps even both your own, your family’s, your community’s… and so on?

I’ve found that I like developing systems and mental frameworks that I can rely on to give context and meaning to how I spend my time, and what I focus on, on a day to day and week to week basis.

The first one of these I’ve come up with is my Four+ Life Pillars.

Pillar 1: Health

Without your health, you have nothing.

And: health is at the root of all else in life. Improved health, both mental and physical, improves all other aspects of life.

Pillar 2: Relationships

Pillar 3: Education

Pillar 4: Financial Security

Chronic stress kills happiness. Financial worries causes such stress like few other things in life (health likely being one of them!).

It doesn’t take millions of dollars to be financially “secure”. (Side note: financial “independence” is a topic for another day.)

Key action items:

  • Spend less than you earn. Have a personal income and expense statement.
  • Always look to increase your earnings.

(Pillar 5: Creativity / Artistic expression)

The plus “+” signifies both that “Creativity/Artistic” is not absolutely essential, but still very valuable and fulfilling. It also signifies a wildcard, to be filled in by anyone with an extra factor that they consider critical to their future.

The Economics of Software

I’m a software engineer, and actively think about the nature of my profession and passion.

It’s interesting to ask the question: what are the distinguishing economic aspects of software?

  1. Extremely low marginal cost of production
    1. – copy paste

2. Don’t need permission

No guilds, no professional accreditation
– very low cost of input: start from a document!
– substrate (computation) is ubiquitous
– build your own tools: both the product and the tools are code!
– open source

Focus On What You Can Control

The important things in life.

Some things in life you can control, some things you cannot.

Don’t try to change what you cannot control, since by definition it won’t affect your life in any positive way, and will only detract from your resources spent on what you CAN control.

You can control:

You cannot control:
– your genetics (unless you’re reading this in the mid-late 2020s)
– the conditions of your birth, e.g. parents, location, socio-economic station, etc.

What you should do with $100MM

$100,000,000.00

What you should do with $100,000,000.00 (100 Million US Dollars).

1. Focus on Life Fundamentals

This first part is inspired by my Four+ Life Pillars, described elsewhere on this blog.

Health
Join a top-tier gym, and get a personal trainer. Benefits:

  • you’ll mingle with the rich and successful
  • you’ll get professional help assessing, improving and maintaining your physical health, which is your most important asset along with your mental health

You could even consider (occasionally) hiring a personal chef, though even at $100MM that seems like it might be a stretch.

Mental health: even without being wealthy, you could get far by simply analyzing what is causing you chronic stress, and reducing those sources in your life. Increased wealth helps here by:

  • allowing you to delegate tasks you find stressful, and that don’t require your personal attention.
  • freeing up your time, and giving you mental space to reflect on your inner world.

Education

Barring a catastrophe, your mind is:

  • the one thing you’ll always have, even if your body is damaged,
  • the tool with which you can guide your efforts, inform your actions, and increase your value in most ways relevant in life — at least insofar as your actually capable of.

Developing your mind is perhaps the single most powerful thing you can do. This is a topic for an entire separate category of posts, but here’s a single random idea:

  • book a week-long around the world trip, or as Ross Beaty describes it here, book the “ai” trip (“eye” trip?) — Dubai, Mumbai, Shanghai — link: https://youtu.be/7509Rry2ptQ?t=521
  • or, if you have the time, book a long-term around the world, visit many cities, meet as many people as you can.

Relationships

2. Leverage your time

Hire a small and effective staff of accountants, lawyers,

Why? One of the biggest advantages of wealth, is that it gives you more control over parts of reality. That includes paying people to work for you.

Get a travel agent

Get a back office

2. Increase your wealth

Now that you’re wealthy, it’s time to become _more_ wealthy!

3. Reflect

It took me a while to distill this part, and fully crystallize what I mean.

You’ve likely heard the stories about people who are given a large amount of wealth, e.g. by winning the lottery, and fritter it all away through various kinds of imprudence or lack of discipline.

Perhaps the essence is this: creating, maintaining and growing wealth, requires a particular mindset, a set of psychological traits and attitudes.
Given the premise of this post, you’ll need that mindset to avoid frittering away all of it, and/or being psychologically corrupted by losing your sense of discipline and prudence.

If you’re new to wealth, you’ve likely put only limited, if any, thought into what you actually want out of life. Even if you have, acquiring wealth might change your mindset.

Morality:

It can be viewed as a test of character: will you sink into lethargy, or rise to discover and fulfill your potential?

Software Engineer: Downsides

Software engineering as a trade and/or career can have upsides for many (should everyone learn to code?). A few downsides came to mind, as I realized we're vulnerable to power outages, for example.

[ note: [*] fellow engineers will have noticed I used some software terms as categories titles.. illustrating that the software mindset changes how you think and communicate. Which is obvious since thought and language are intimitaly related. ]

Health:
  • Sedentary lifestyle: you don’t necessarily get around. takes effort to get exercise, apart from walking to get coffee.
  • Increased risk of injuries, due to repetitive movements, to fingers, wrists, eyes, etc.
  • Work-life blending: certainly if you work on a laptop, your work might creep into your life.
Dependencies[*]:
  • Vulnerable: to infra breakdown, e.g. power or Internet
Impact/scope [*]:
  • Whatever you produce, will be limited to the digital world. Obviously you can have an impact in the physical world, since your products and services will (generally) be used by people.
Social:
  • Insulating: you can become tied to the screen, and a little insulated from the physical and social world.
  • Diversity: your fellow engineers might tend to be less diverse, and many might be males in their 20s or early 30s.

Math and Code: Poisson Heart Beat

For the code, see this GitHub link:
github.com/pieteradejong/joie-de-code/blob/master/PoissonHeartbeat.py

This code models a Poisson process. As you can see at the above link, we have a PoissonHeartbeat class that prints a “ping”-type statement on every event generated by the process. Let’s look at some of the more interesting lines of code.

self.events = events 
self.lambd = lambd

Explanation: events and lambd are instance variables, since every instance will have its own specific values for these variables. Note that lambd cannot be named lambda, since that is a reserved name in Python.

intervals = [random.expovariate(self.lambd) for i in range(self.numberOfEvents)]

We’re using a list expression to generate random time intervals drawn from the exponential distribution. We sample from that distribution using random.expovariate, which takes a lambda parameter and returns a random real-valued sample from the exponential distribution fully determined by lambda.

for v in intervals:
      time.sleep(v)
      print "ping! after interval ", v

We use Python’s time.sleep to actually simulate the Poisson process based on the previously generated random time intervals.

Origin of the Term: “Software Engineering”

1 minute
One term I use to describe myself is “software engineer.” Today I learned (TIL) about the origin of this phrase:

“I began to use the term ‘software engineering’ to distinguish it from hardware and other kinds of engineering,” Hamilton told Verne’s Jaime Rubio Hancock in an interview. “When I first started using this phrase, it was considered to be quite amusing. It was an ongoing joke for a long time. They liked to kid me about my radical ideas. Software eventually and necessarily gained the same respect as any other discipline.”

Source: Vox.com: Meet Margaret Hamilton, the badass ’60s programmer who saved the moon landing

The Semantics of Depth-First Tree Traversal

Reading time: 1 minute

I learn most effectively by either visualization, verbal explanation (e.g. to the proverbial duck) or by understanding where the semantics or even etymology of how a concept, idea or theory is described. The following is example of the latter.

A week or so ago, the obvious way to semantically distinguish between different types of depth-first tree traversals suddenly (and finally!) crystallized in my mind: pre-order, in-order and post-order. The parts in bold, i.e. the prefix that semantically differentiates the approaches, refers to the relative position of the root node. Doh! Note that here the left child node comes before the right child node.