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.