Skip to content

Commit 19013ee

Browse files
committed
wip drafts, some style changes
1 parent 2fb43ba commit 19013ee

File tree

6 files changed

+124
-111
lines changed

6 files changed

+124
-111
lines changed

content/elixir/_index.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
type: post
3+
title: Elixir
4+
# publishDate: 2025-xx-xx
5+
description: The Elixir programming language
6+
hide_image: true
7+
resources:
8+
- src: pdq.png
9+
params:
10+
alt: two people standing in front of construction of a business office
11+
comments: true
12+
draft: true
13+
---
14+
15+
A few years ago I happened to find myself at predominantly C# shop that decidedly pivoted to take on a new stack with Elixir, LiveView, TypeScript and React. For a greenfield project, this was exciting, fast, and uninhibited. I was grateful to work with a technology that ranks as highly desired in every StackOverflow Developer Survey. However, as our codebase scaled, some of the realities of a dynamically typed language began to set in.
16+
17+
### What Works
18+
19+
Elixir excels in specific contexts such as personal projects and small teams with stable membership, concurrent systems leveraging BEAM's actor model, fault-tolerant applications using OTP patterns, and high development velocity on well-understood codebases. So much is available out of the box with Elixir and Phoenix. Websockets, pubsub, caching, memory store, concurrency, and clustering are huge wins in the language that small teams can spin up without much effort. I believe Ecto is the best database library with a SQL DSL and Query Result Mapping available in the open source world.
20+
21+
### The Core Problems
22+
23+
Code comprehension and issue tracing become difficult at scale with dynamic typing. For most code changes in large codebases, it's difficult to ascertain which code paths are affected. Refactors require excessive caution and testing. Dialyzer helps but it doesn't solve the fundamental typing gap.
24+
25+
There is also organizational friction with adopting Elixir. There can be a learning curve for functional programming concepts and there's a limited hiring pool compared to mainstream languages.
26+
27+
Other minor issues include slower compile times, especially without strict avoidance of circular dependencies, and a weak language eecosystem.
28+
29+
### Emerging Solutions
30+
31+
At my org, we're iterating on certain [design patterns that improve readability and organization](/boundary).
32+
33+
Gleam offers static typing while maintaining Erlang ecosystem compatibility. Elixir itself will soon become a [gradually typed language](https://hexdocs.pm/elixir/main/gradual-set-theoretic-types.html). Gleam looks very promising, but it isn't a practical decision for the enterprise world until the language matures.
34+
35+
## The Bottom Line
36+
37+
Elixir provides genuine technical advantages for concurrent, fault-tolerant systems. It's an excellent solution to reach for with many features such as concurrency, clustering, pubsub, websocket messaging, memory storage, and other enterprise features out of the box with Phoenix. However, these benefits come with significant organizational costs: harder hiring, steeper onboarding, and maintenance challenges from dynamic typing.
38+
39+
Elixir is an excellent choice for purpose-built microservices for specific concurrent jobs such as [handling websocket message](/multiplayer).
40+
41+
Success with Elixir could depend on:
42+
43+
- Team stability and functional programming expertise
44+
- Specific technical requirements that justify the adoption overhead
45+
- Organizational commitment to the learning curve
46+
47+
For most teams, businesses should evaluate whether Elixir's features outweigh its dynamic typing drawbacks and niche ecosystem.

content/elixir/pdq.png

1.19 MB
Loading

content/go/_index.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
type: post
3+
title: Go
4+
# publishDate: 2025-xx-xx
5+
description: The Go programming language
6+
resources:
7+
- src: discussion.png
8+
params:
9+
alt: three people talking in group, one man pointing back with a thumb
10+
comments: true
11+
draft: true
12+
---
13+
14+
I encountered a [Hacker News comment](https://news.ycombinator.com/item?id=44392307) that summarizes my perception of Go:
15+
16+
> I guess Google's years of experience led to the conclusion that, for software development to scale, a simple type system, GC, and wicked fast compilation speed are more important than raw runtime throughput and semantic correctness. Given the amount of networking and large - scale infrastructure software written in Go, I think they absolutely nailed it.
17+
18+
Go has become the "practical pragmatist" of modern languages. It's beloved for its simplicity but limited by deliberate design choices.
19+
20+
### What Works
21+
22+
Go excels as the reliable workhorse:
23+
24+
- Fast compilation prioritized over optimization
25+
- Low barrier to entry with quick learning curve
26+
- Networking and server development where it truly shines
27+
- Simple type system that "just works"
28+
- Comprehensive tooling for profiling and testing
29+
- Strong concurrency with goroutines and channels
30+
31+
### The Core Limitations
32+
33+
Garbage Collection Reality
34+
35+
- "GC causes performance issues with large in-memory caches"
36+
- Not optimized for large, long-lived object heaps
37+
- Works best with short-lived objects
38+
- Forces architectural compromises for performance-critical systems
39+
40+
Expressiveness Ceiling
41+
42+
- "Go has a very low barrier to entry, but also a relatively low ceiling"
43+
- "The proliferation of codegen tools for Go is a testament of its limited expressive power"
44+
- Limited type-level features compared to modern languages
45+
- Repetitive error handling patterns
46+
47+
Design Philosophy Constraints
48+
49+
- "Go is the product of like 3 Googlers' tastes"
50+
- Deliberately simple but sometimes oversimplified
51+
- Lacks advanced type safety features
52+
- Channel complexity despite being a core feature
53+
54+
### The Google Problem
55+
56+
Go optimizes for Google's specific use cases:
57+
58+
- Infrastructure and glue code
59+
- Large teams with high turnover
60+
- Prioritizes readability over expressiveness
61+
- Fast compilation over runtime optimization
62+
63+
This creates friction for teams with different priorities or performance requirements.
64+
65+
### The Bottom Line
66+
67+
Go succeeds as a "good enough" language for many server-side tasks. Its compilation speed and simplicity make it excellent for rapid development and large teams. However, its deliberate limitations create frustration when projects outgrow its design constraints.
68+
69+
Go works best when:
70+
71+
- Building servers, networking, or glue code
72+
- Fast iteration matters more than peak performance
73+
- Team composition favors simplicity over expressiveness
74+
- GC limitations align with your data access patterns
75+
76+
The language's greatest strength of extreme simplicity is also its primary limitation when requirements demand more sophisticated solutions.

content/go/discussion.png

827 KB
Loading

content/languages/_index.md

Lines changed: 0 additions & 110 deletions
This file was deleted.

layouts/post/single.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{{ define "main" }}
22
<article class="w-full mx-auto mb-8 px-4 md:px-0{{with .Params.article_class}} {{.}}{{end}}">
3-
{{ if not (or .Params.hide_title .Params.hide_date .Params.hide_image) }}
3+
{{ if not (and .Params.hide_title .Params.hide_date .Params.hide_image) }}
44
<div class="mb-8 space-y-4">
55
{{ $hasImage := and (not .Params.hide_image) (gt (len (.Resources.ByType "image")) 0) }}
66
<div class="{{if $hasImage}}text-center {{end}}max-w-prose mx-auto w-full">

0 commit comments

Comments
 (0)