RSS still works and is pretty awesome

Despite it being the age of social media, I get a lot of my content via RSS. I have the mac Reeder app which lets me subscribe to blogs. It is nice because without RSS I will see a blogger on Hacker News or reddit, enjoy their post and then their next post won’t be on the front page so I won’t see it. RSS fixes that because I can read their post and if I enjoy it, subscribe to their RSS feed. 

Most blogging software supports RSS natively. WordPress comes with RSS by default and so does Ghost. I find it pretty easy to use and really enjoy how it lets me control my ‘feed’ without influence from any algorithms or anything. 

Why not just subscribe to the email list? Well, I’ve found that I use my email inbox for different things than my RSS feed. When I’m going through emails, reading a long form email breaks my flow. Whereas when I’m going through my RSS feed I’m planning on reading longer form content. 

Blockchains are the first mega scale software daemons

A software daemon is some bit of software that runs independently of human control. We have been creating them for most of computing history. But the majority are not that important. Nobody knows their names. Nobody really cares that much if they have bugs. If one stops working you restart it and move on with your life. 

Cryptocurrency blockchains are also daemons. Each blockchain is just software that performs whatever tasks it is programmed to do. The interesting differences are the scale and the distributed nature of the blockchain. Millions of people contribute hardware to run blockchain software as opposed to a cronjob running only on my laptop. 

The Ethereum blockchain is a billion dollar distributed computing platform powering things like DNS names (ENS) and art NFTs. Anyone can submit a ‘contract’ to Ethereum as it is essentially a daemon that runs other daemons. Compared to the log daemon that collects logs on your computer, Ethereum is immensely larger. Restarting your log daemon is essentially a free operation. Restarting Ethereum from zero would cause billions of dollars of losses. 

Due to their decentralized nature it is also impossible to ‘stop’ a blockchain software daemon. Ethereum exists on millions of computers and as long as even one of those copies continues to operate Ethereum will continue to exist. 

People also care enough about these blockchains that they have names. You have the ‘Ethereum Classic’ and ‘Eth2’ daemons which run very similar software, yet their identity is actually important to humans. Millions of copies of Linux and Windows are running right now, but none of them are important enough to have names. 

Why don’t people use functional languages more.

“There are only two kinds of languages: the ones people complain about and the ones nobody uses” — common quote

This is a fun statement if you think about it. Because the languages everyone complains about are obviously better than the ones nobody uses. It seems controversial but a simple thought example shows why it has to be this way.

Imagine a world where the mainstream languages were worse than the niche languages like Haskell or Crystal. In this world Haskell has a clear 2x productivity advantage over Java. Since Haskell is clearly better than Java most projects that use Haskell will execute roughly twice as fast. Double productivity is enough that companies using Haskell will be able to achieve the same results with less money spent on developers and thus achieve higher profits. We should see companies that don’t use Haskell going out of business. Eventually we would expect all greenfield development to happen in Haskell. 

You might say well, “Haskell isn’t really twice as good as Java, it is only 20% more productive overall”. Well, 20% averaged out over hundreds of thousands of software engineers is a huge amount of money. My employer would very happily take a 20% increase in productivity if it were on the table. 

However, in the real world we don’t see all greenfield development happening in Haskell. Instead lots of greenfield development happens in Java, Javascript or the .Net ecosystem. 

There has never been a consensus moment in the industry around niche functional languages. Instead people say they wish they could use them while making actual money writing Java code. 

Personally, I would really like to use a better language than Java. Unfortunately, we don’t seem to live in that world. 

Expecting people to become ‘Senior’ Engineers in 3 years is ridiculous.

Becoming a ‘Senior’ engineer in three years is a ridiculous concept. Programming is a complex enough endeavor that you can’t learn the basics of most areas in 3 years of work experience. By the 3 year mark great programmers will have achieved a high level of expertise in one programming domain. For example 3 years might be enough time to master web development with Django. But web development with Django is just one of many domains within computer programming. Mastering Django does not require a software engineer to learn anything about operating systems, low latency computing or graphics computing. In some environments web developers might not have any involvement with DNS or how their software is made available to users as deployment is handled by a infrastructure as code team. 

 In my case I was promoted to ‘Technical Architect’ and team lead in under three years at my first job. I was really good at my job and worked well in the consulting business. At that point in my career I knew a lot of stuff application development, frontend development, automated testing, devops, etc. But I felt under qualified and wanted more money so I ended up taking a demotion to move to FAANG. 

Why can people get promoted to ‘Senior’ Engineer so quickly in the software industry? The main reason is the expansion of the workforce. With double digit employment growth each year, there are a lot of inexperienced programmers in the workforce. Having three years of experience is a big deal in an environment where a large portion of working programmers have under three years experience. 

The issue is that three years is not really enough time to master software development. Honestly, in three years you are more of a ‘journeyman’ programmer than a senior one. You wouldn’t expect a three year senior to be able to bootstrap a new engineering team or to set the engineering culture at a new company or division. There is simply too much to learn about how software works. 

In my particular case, I felt that my ability to deliver projects was great. But when it came to designing software abstractions or building software architecture, I felt like I didn’t know enough to do a good job. I had read books like ‘Domain Driven Design’ on software design patterns, but knowing patterns and actually designing software are not the same thing. In my opinion software agency work is not the best place to learn software architecture design. You simply don’t stay embedded on projects long enough to see the longterm costs and evolution of your designs.