changelog shortlog graph tags branches files raw help

Mercurial > org > blog / changeset: update

changeset 17: b6380832df99
parent 16: 61204f8b2ff8
child 18: d77884ec2b44
author: ellis <ellis@rwest.io>
date: Tue, 12 Dec 2023 21:50:58 -0500
files: hello-world.org
description: update
     1.1--- a/hello-world.org	Wed Dec 06 23:27:43 2023 -0500
     1.2+++ b/hello-world.org	Tue Dec 12 21:50:58 2023 -0500
     1.3@@ -1,127 +1,90 @@
     1.4 {{{header(hello world,
     1.5 Richard Westhaver,
     1.6 ellis@rwest.io)}}}
     1.7-#+options: toc:t
     1.8+#+options: toc:t h:1
     1.9 * Introduction
    1.10-Hello World.
    1.11-
    1.12-Today I would like to share something I've been working on for the
    1.13-past few months, but has been on my mind for a few years.
    1.14-
    1.15-** On Computers
    1.16-First, let's talk about computers. (beep boop)
    1.17-
    1.18-If you've met me in the past decade, you probably know that I am
    1.19-extremely passionate about computers. Let me first explain why.
    1.20-
    1.21-On the most basic level computers are little (or big) machines that
    1.22-can be programmed to do things, or /compute/ if we're being
    1.23-technical.[fn:1]
    1.24+Hello World,
    1.25 
    1.26-They host and provide access to the Internet, which is a pretty big
    1.27-thing, but they do little things too like unlock your car door and
    1.28-tell your microwave to beep at you. They solve problems. Big or small.
    1.29-
    1.30-They're also /everywhere/ - which can be scary to think about, but
    1.31-ultimately helps propel us into the future.
    1.32+I've worked in and around software systems for many years. Throughout
    1.33+my journey I've worked with some incredibly capable programmers,
    1.34+leaders, sales professionals, and curious minds from all walks of
    1.35+life. I've been fortunate to witness some highly effective teams on
    1.36+complex projects deliver under impossible constraints. I've also seen
    1.37+the other side - where a team isn't effective for one reason or
    1.38+another, even on simple problems.
    1.39 
    1.40-There's something pretty cool about that - when you look at the
    1.41-essence of computation. There are endless quantities of these machines
    1.42-which follow the same basic rules and can be used to solve /real/
    1.43-problems.
    1.44-
    1.45-*** The Programmer
    1.46-Now, let us consider the /programmer/. They have power. /real/
    1.47-power. They understand the language of computers, can whisper to them
    1.48-in various dialects. It can be intimidating to witness until you
    1.49-realize how often the programmer says the wrong thing - a bug.
    1.50-
    1.51-In reality, the programmer has a symbiotic relationship with
    1.52-computers. Good programmers understand this relationship well.
    1.53+My work as of late is stemmed from the simple premise that there
    1.54+exists an /environment/ in which a team can be highly effective. My
    1.55+goal is to find those local optimums in my areas of interest where
    1.56+such an environment can be built and /great work/ can be done.
    1.57 
    1.58-#+begin_annecdote
    1.59-One day after I got my first job at a software company, I remember
    1.60-being on an all-hands meeting due to a client service outage. We had
    1.61-some management, our lead devs, product team, and one curious looking
    1.62-man who happened to be our lead IT consultant who had just joined. He
    1.63-was sitting up on a hotel bed, shirtless, vaping an e-cig, typing
    1.64-away in what I can only imagine was a shell prompt.
    1.65-
    1.66-After several minutes he took a swig from a bottle of Coke and said
    1.67-"Node 6 is sick." then a few seconds later our services were
    1.68-restored. For the next hour on the call he explained what happened and
    1.69-why, but that particular phrase always stuck with me. He didn't say
    1.70-Node 6 was down, or had an expired cert - his diagnosis was that /it/
    1.71-was /sick/. 
    1.72-#+end_annecdote
    1.73+In my professional experience, it is becoming much more difficult to
    1.74+build an /environment/ where people can be effective. There are
    1.75+several contributing factors which muddy the waters but it all boils
    1.76+down to capabilities and politics.
    1.77 
    1.78-The more you work closely with computers, the more you start to think
    1.79-of them this way. You don't start screaming when the computer does the
    1.80-wrong thing, you figure out what's wrong and learn from it. With
    1.81-experience, you start to understand the different behaviors of the
    1.82-machines you work with. I like to call this /Machine Empathy/.
    1.83-
    1.84-*** Programs
    1.85-I already mentioned bugs - I write plenty of those, but usually I try
    1.86-to write /programs/. Programs to me are like poetry. I like to think
    1.87-they are for the computer too.
    1.88+Your environment must be capable. It must provide everything your team
    1.89+needs now and /may/ need in the future. If the environment doesn't
    1.90+provide something, you need to provide all building materials for it -
    1.91+/even if you don't know what you're building yet/.
    1.92 
    1.93-Just like computers, /computer programs/ come in different shapes and
    1.94-sizes but in basic terms they are sets of instructions used to control
    1.95-a computer.
    1.96-
    1.97-You can write programs to do anything - when I first started, my
    1.98-programs made music. The program was a means to an end. Over time, I
    1.99-started to see the program as something much more. I saw it as the
   1.100-music itself.
   1.101-
   1.102-[fn:1] ... perform computations
   1.103+To build a capable environment you need to discard politics from your
   1.104+decision-making process. In other words, drop the ego. This requires a
   1.105+high degree of introspection. It's hard enough for individuals, let
   1.106+alone an entire team or company. In the world of software we tend to
   1.107+have two camps - the pro-dev who prefers ergonomic but proprietary
   1.108+tools and the foss-dev who prefers clunky but open-source
   1.109+alternatives. You can't limit your environment based on the camp you
   1.110+align with.
   1.111 
   1.112 * The Compiler Company
   1.113 Without further ado, I'd like to announce /The Compiler Company,
   1.114-LLC/. It is my first venture into the encorporated world but won't be
   1.115-my last, because what I'm really building is a company incubator. The
   1.116-purpose of /The Compiler Company/ is to /compile/ /companies/.
   1.117+LLC/. The purpose of /The Compiler Company/ is to /compile/
   1.118+/companies/.
   1.119 
   1.120 More specifically, I'm writing a software suite which specializes in
   1.121-building, operating, and automating companies.
   1.122+building environments.
   1.123 
   1.124 The software isn't for everyone - modules will be rewritten
   1.125-frequently, code may be terse in places, we use specialized and highly
   1.126-customized tools, custom compilers, and rely on advanced CPU and
   1.127-storage hardware features. It's for a specific type of person - an
   1.128-/operator/ if you will, who uses the library and programs for
   1.129-rapid-development of their own programs (or companies).
   1.130+frequently, code may be terse in places, with specialized tools,
   1.131+custom compilers, and advanced hardware features. It's for a specific
   1.132+type of programmer - an /operator/ if you will, who may use it for
   1.133+rapid-development of their own programs (or companies). The barrier to
   1.134+entry is high.
   1.135 
   1.136-In addition to software, I'm build a robust infrastructure to host our
   1.137-services, support our projects, and most importantly - consume
   1.138-information.
   1.139+At this stage, I'm interested in *systems*, *processes*, and
   1.140+*protocols* - not *products* and *services*. /The Compiler Company/'s
   1.141+most valuable assett its ideas. A /demo/ system is being written which
   1.142+serves as a reference implementation but this is currently designed
   1.143+for internal benchmarking.
   1.144 
   1.145-Something that is missing from many organizations big or large, is an
   1.146-effective way to store and access information, even about their own
   1.147-org.
   1.148+** [[https://compiler.company/docs/core][core]]
   1.149+The =core= is a collection of applications and libraries built from
   1.150+the bottom-up with modularity in mind. It's primarily written in
   1.151+Common Lisp and Rust with minimal external dependencies.
   1.152 
   1.153-It can be difficult problem to solve - usually there's the official
   1.154-one, say Microsoft Sharepoint and then the list of unofficial sources
   1.155-which becomes tribal corporate hacker knowledge. Maybe the unofficial
   1.156-ones are more current, or are annotated nicely, but their very
   1.157-existence breaks the system. There's no longer a single source of
   1.158-truth.
   1.159-
   1.160-My priority in this department is writing services which process and
   1.161-store information from a variety of sources in a distributed knowledge
   1.162-graph. The graph can later be queried to access information on-demand.
   1.163+*Lisp* is a first-class citizen of our internal environment. We
   1.164+currently rely on the Steel Bank Common Lisp compiler but even if we
   1.165+switch to a different implementation there will always be Lisp. It's
   1.166+our dedicated high-level programming language (and much more, as we'll
   1.167+explain later).
   1.168 
   1.169-My idea of infrastructure is in fact to build my own Cloud. Needless
   1.170-to say I don't have an O365 subscription, and wherever possible I'll
   1.171-be relying on hardware I have physical access to. I'm not opposed to
   1.172-cloud services at large but based on principle I like to think we
   1.173-shouldn't be built on them.
   1.174+*Rust* is second-class. It meets an arbitrary criteria for what I
   1.175+would consider /good enough/ but there are many contenders including
   1.176+C, C++, and Zig. It helps fill the gaps in our Lisp environment which
   1.177+would be extremely difficult to implement from scratch like
   1.178+eliminating GC, compile-time type safety, cross-compilation features,
   1.179+and advanced networking protocols. The community support and my
   1.180+personal experience with the language are also contributing
   1.181+factors. The trade-off is that we need to support another language
   1.182+environment in parallel to Lisp.
   1.183 
   1.184-* Next Steps
   1.185-We have a long way to go. The important thing is to keep up the
   1.186-momentum. Before the start of 2024 you can expect another update on
   1.187-the projects below.
   1.188-** [[https://compiler.company/docs/core][core]]
   1.189 ** [[https://compiler.company/docs/infra][infra]]
   1.190-** [[https://compiler.company/docs/nas-t][nas-t]]
   1.191+Unfortunately, ideas can't host themselves. We need a robust
   1.192+infrastructure to compensate for this. The project =infra= contains
   1.193+scripts for building and maintaing the entire corporate
   1.194+infrastructure.
   1.195+
   1.196+We typically host services on Arch Linux. Podman and QEMU are used for
   1.197+virtualization. Modules can be built and deployed separately to make
   1.198+host-migration easier as we expand.