He/Him · Dual citizen of 🇺🇸 USA & Croatia 🇭🇷
A man · Independent voter
Cutting expenses · For equitable management
+1 (615) 768-9920
andrew@andrewwerner.com

Software Engineering

The programming language I use varies depending on the software I develop, I write polyglot software. It's a lot easier now with AI. I use Go for platform engineering (Ken Thompson and Rob Pike helped create it at Google as "C for the cloud era" [they made C and Unix (the operating system that inspired the monolithic Linux kernel) at Bell Labs] and it works great for Kubernetes and Operators), Python for data science (I prefer modeling data in Julia, but I found it was limited to CUDA and also lacks the joy of using Fortran's incredibly efficient linear algebra solvers through FTorch), I prefer Elixir for writing APIs, Haskell for pure lazy evaluation (I agree with the impureim sandwich, functional critiques of von Neumann [ideal code fits in our heads with heuristics], and that having a blend of lazy and strict evaluation is good when designing systems), Coalton looks cool for pure strict evaluation (I love that it's based on Common Lisp). TypeScript is a must for user interfaces. I like TokenScript for building design systems and Penpot for application prototypes. Penpot's output is convenient to convert to Mitosis inputs and generate Qwik components. I like Qwik for its phenomenal Google Lighthouse scores. Flutter sounded great for native applications, but I've found its functionality lacking for my projects. Tauri provides native mobile and desktop support to Qwik apps by linking native APIs to webviews (I like the looks of Servo as a browser engine, but its compatibility and stability needs to improve before I can use it). Inspired by Spotify, I'm also interested in using Vite's module federation for micro-frontend development.

Sometimes I think too hard and believe I need to design application specific integrated circuits (ASICs) and write memory safe applications in Ada. Rust isn’t as safe by default, but can seemingly approach Ada with high assurance tooling. Bjarne Stroustrup’s introduction of concepts to C++ is cool, but C++ is like bowling with the gutters down. I really only love it for SYCL where manually managing memory is actually necessary for kernel development.

I get that feeling that NVIDIA’s CUDA programming language is more featureful than AMD’s ROCm and OneAPI (CUDA had accelerated vector search when I needed it whereas AMD and Intel did not). I personally prefer AdaptiveCpp for its heterogenous hardware support, though it still has work to do in order to catch up to CUDA. I switch hardware around and I don’t like to rewrite code. I like what I see out of the Berkeley Architecture Research Lab — specifically Chisel (based on Scala) which compiles down to Verilog.

DJ Dave showcases the power of strudel.