# ☕ What tech job is the easiest?

### A funny discussion on Hacker News about what tech job will let you get away with the least amount of work. Plus, the architecture and tech stack behind a one person tech startup!

2 |

Hey Guys,

Hope you’re all having a fantastic friday!

# Tech Snippets

The Architecture Behind A One-Person Tech Startup

An awesome post on the tech stack used to run a SaaS company (Software as a Service). The company is micro-SaaS and the only employee is the founder!

The blog post covers things from load balancing to subscription/payments to managing data!

A hilarious discussion on Hacker News about which tech job will let you get away with the least amount of work possible.

The funniest answer was from

*koheripbal*Look for a smaller antiquated company or department that doesn't understand IT, and has few if any in-house IT professionals. Make sure the role doesn't include user support. Look for "Operations" jobs.

Look for positions that have a TON of manual work. Search for "prepare daily/weekly/etc... reports." and similar job functions.

Automate as much of it as possible.

DO NOT TELL ANYONE that you have automated those functions.

Insist on working from home so you can work for multiple companies simultaneously.

**Quastor Daily takes no responsibility for any unemployment that may result from following said advice.**

# Interview Question

You are given a math equation that consists of positive integers and +, -, * and / operators (addition, subtraction, multiplication and division).

Write a function that computes the result.

Be sure to follow order of operations (you will not be given parentheses).

`Input - “2 * 3 + 5 / 6 * 3 + 15”`

`Output - 23.5`

*We’ll send a detailed solution tomorrow, so make sure you move our emails to primary, so you don’t miss them!*

**Gmail users**—move us to your primary inbox

**On your phone?**Hit the 3 dots at the top right corner, click "Move to" then "Primary"**On desktop?**Back out of this email then drag and drop this email into the "Primary" tab near the top left of your screen

**Apple mail users**—tap on our email address at the top of this email (next to "From:" on mobile) and click “Add to VIPs”

# Previous Solution

**As a refresher, here’s the last question**

You are given a function `rand5()`

, which generates a random number between 0 and 4 inclusive (each number is equally likely to be generated).

Use that function to write a `rand7()`

function, that generates a random number between 0 and 6.

Each of the numbers must have an equal probability of being generated.

*credit - XKCD 221*

**Solution**

This question requires a bit of basic probability theory.

The way we can solve this is by calling the `rand5()`

function *twice*.

We multiply the result from the first function call by 5 and then add that to the result from the second function call.

So it’s `5 * rand5() + rand5()`

.

This function will generate a number between 0 and 24 (inclusive) with each number having an equally likely chance of being generated.

Now, we can convert this to a number between 0 and 6 by using the modulus operator by 7 ( `% 7`

).

So we use the equation (`5 * rand5() + rand5() % 7`

).

However, this will overweight numbers between 0 and 3 because our equation will map to numbers between 0 - 3 **four** times while it maps to numbers 4 - 6 **three** times.

Therefore, if (`5 * rand5() + rand5()`

) generates a number greater than 20, then we’ll ignore it and just generate a number again.

This will cause all of the numbers from 0 - 6 to have an equal probability of being selected.

```
def rand7():
root = 5 * rand5() + rand5()
if root < 21:
return root % 7
else:
return rand7()
```

You might be wondering what happens if we keep getting a number above 20 for our root.

Could that lead to infinite recursion?

Well, it’s *incredibly* unlikely.

Python’s default recursion limit is 1000 and the probability of getting 1000 consecutive numbers above 20 is astronomically low.

I tried to calculate it with Google, but it was too low.

Here’s the probability of getting 100 consecutive numbers above 20.

Some of this is a bit subtle. The key is this observation "This function will generate a number between 0 and 24 (inclusive) with each number having an equally likely chance of being generated." You couldn't use a similar procedure with multiplier 1 (i.e. `1 * rand5() + rand5()`), in the same way that rolling two dice does not yield a uniform distribution over 1-12. The key is the choice of 5 as the multiplier. The way I think about it is if you wrote numbers in base 5, i.e. `0 1 2 3 4 10 11 12 13 14 20 ...` Then this procedure is equivalent to randomly picking the number in the ones place and then randomly picking the number in the 5s place. Thus all numbers between 0 and 100 (base 5, exclusive) are equally likely.