10 Years of Programming

In the beginning

This marks my ten years of programming. I went from zero knowledge to where I am today, and I am excited about how much more there is to learn. I started out doing data visualizations in Tableau using their scripting language. When Tableau became limiting, I was guided to d3.js and I began making visualizations with it, not knowing anything about HTML, CSS, or JavaScript. It was really hard to understand anything about what I was doing, but I was able to make visualizations after a lot of trial and error.

When I was thinking about what career path I wanted to go into I settled on web design. I did not know HTML or CSS but I knew that web design was a career and it might be something that fit my lifestyle, so I took a leap and bought HTML & CSS: Design and Build Websites. Working along this book solidified my fundamentals for how to create semantic websites and style them with CSS. I landed some design jobs for small websites doing pure HTML; no database, nothing. I began learning more about the web and was introduced to PHP. The more I read about PHP the more I realized there was a lot that went into making a real deal website. At my previous position doing visualizations WordPress was mentioned to me and sat in the back of my mind. I signed up for it, but honestly had no idea how to use it at first.

PHP and WordPress

I created a PHP driven website and was beginning to familiarize myself with WAMP to spin up MySQL, Apache and PHP on Windows. It was grueling but at the same time fascinating. PHP was my first foray into what a computer could do if you knew how to program it. After building in raw PHP, no Composer, I found that it just took forever to get something up and running, which is when I turned to WordPress. With the knowledge of how to set up a server in Apache I was able to set up WordPress in WAMP and quickly moved to VirtualBox and Vagrant using VVV to manage my WordPress sites locally.

I quickly began to realize that I would not be a web designer, but a web developer. I was much more into coding than creating beautiful designs. I parlayed my WordPress skills into freelance gigs for various clientele mostly in the eLearning space. I began to contribute to WordPress to further advance my skills. I started by contributing to the WordPress REST API as it was the most important project at the time. Contributing to WordPress is one of my goals for the coming years as I am aligning my work to overlap with WordPress again.

Learn JavaScript Deeply

I had really only dabbled with JavaScript creating visualizations in d3.js and doing small UI interactions for my sites. When Matt Mullenweg proclaimed “Learn JavaScript Deeply” I listened and did exactly that. Today, JavaScript/TypeScript is my most proficient language. There is more depth to traverse but I have gone pretty deep with it creating a CAD tool entirely in TypeScript. Not too long after this proclamation came the advent of Gutenberg, and once again I felt the need to contribute to deepen my skills. Now at the agency I work at all of our site builds on WordPress are Gutenberg based and we hope to leverage Gutenberg in Drupal as well where it makes sense to.

JavaScript/TypeScript React became a great addition to my toolbelt and it helped further my knowledge. Around this time I found out about Leetcode and started doing code puzzles on Hackerrank then later Leetcode. This helped me understand Big O notation and what it meant for systems that scale and how to optimize and problem solve your code to get answers. I also got interested in Project Euler as well around this time. It was around this time that I stumbled across David Nolen and ClojureScript. Prior to this I only programmed in PHP and JavaScript but the story of why Clojure was great was very compelling to me.

Exploring other languages

By the midpoint of my 10 year arc, I was learning at a much higher rate than when I first started out. As you become more familiar with concepts they generalize and compound across whatever your domain is.

β€œThe first rule of compounding: Never interrupt it unnecessarily.”

– Charlie Munger

I could not agree with this more and learning has been the key to my success so far paying quite a lot in dividends, I finally feel like I am at the point now where I can start to make an impact in my industry. I have learned and programmed in Rust, Go, C, JS/TS, PHP, Clojure, Erlang, Elixir, Julia, Python, C#, and ARM Assembly. I would have never guessed that I would have learned to program with proficiency back from where I was 10 years ago, but here I am and I am still obsessed with it.

Understanding the Machine

I am thankful to have started when I did as the on ramp was a lot gentler than it would have been in previous decades, the web was full of instructional material on how to program and AI had not hit the scene yet. I am not sure if AI would have accelerated my learning or hinder it by confusing me with hallucinations. I heavily use AI today and all of the skills I have learned lead me to better prompts and agent use because I actually understand what I am trying to accomplish, back in the starter days I did not really know how to build or what I was building because I understood far far less about computers.

Today I can say that I have a solid understanding of how the various programs get turned into Assembly code to become the actual executable machine code, which in turn works with the operating system to do all of the magical things a computer can do. I understand the basics of memory, disk, protocols, logic gates and how they are combined together to perform the blazingly fast calculations that we somewhat take for granted. I have a rudimentary understanding of the all layers in the OSI model. I also can operate as a full stack engineer from administrating Linux to configuring/creating a web server, to the backend application code all the way to very interactive front end experiences. I have worked with a number of databases and other services and learned how to architect systems. I have trained various special purpose AI models.

Even though I have learned quite a bit about the world of computers, there is still an even greater amount out there to learn. The next decade is going to be where I really hit my stride as I finally feel like I have the fundamentals down to actually start building useful projects that I hope will bring joy and value to those who use them.

What’s Next

For the new year I now have my 10 year plan. I am going to be focusing on a few areas, using WordPress in novel ways, digging deep into AI agents, starting to blog, and continuing my learning and advancing my skills. I plan to write a 20 year recap and we will see if any of my goals were met. Hopefully this post can serve as a lesson to show that compounding learning leads to success in life.

WordPress, the power of Community, and a vision of a new connected WordPress

I was inspired to blog from @photomatt’s birthday blog post. WordPress has reached a huge market share of the web. If you want to build a website, WordPress is a great option, if not the best option. We have also seen the web at large become dominated by a few platforms namely Meta’s Facebook and Instagram, Twitter now X, and the new comer TikTok. There is a rising interest in decentralizing social media as many feel the web has been lost to these major gated platforms. These platforms reaching massive scale has brought up many thought provoking questions and has impacted society tremendously. I was a kid when Facebook first came about and at the start it seemed like a nice way of connecting with people I knew. Unbeknownst to me at the time these platforms were harvesting our personal information and using it for various purposes like targeted advertising. Privacy and control over our personal data were compromised. What platform out in the world is open, independent, at scale and free? WordPress! WordPress can become the bedrock for an open social web liberating us from the control of the major platforms of today.

Moving forward with WordPress as a deeper connective tissue of the web

Inspired by Gary Pendergast’s talk on Connected WordPress I think now is the time to see this venture move forward. I will be dedicating my free time to working on making this a reality and would love help from fellow people who are interested in moving WordPress as a platform forward. We see efforts from Jetpack for reblogging and following and liking, but it does not really seem to have gained a lot of traction and I think misses the needs of people today as a social network. There is also BuddyPress which has many of the features of a social network, but is essentially centralized to your site and does not inter operate out of the box with other sites running Buddy Press, so not really a social network for web scale.

We see platforms like Slack being used to host communities, like Post Status, but this is yet another centralized closed service. Imagine if we could turn WordPress into a hub for communication, publication, and data ownership. Instead of Post Status using Slack it would natively host the same functionalities using WordPress. Now you might be thinking I am suggesting we somehow use native WordPress APIs and build this the WordPress way. No. I am proposing that a new decentralized/federated network is built on top of the massive scale that WP has reached.

The decentralized social network

There are a number of projects in the decentralized and federated social network space. It is a hot topic among developer circles but has not really caught on with general population. I think it will be very hard for mass adoption of these platforms as the onboarding and UX is not better than any of the major players. We are simply in a different landscape and I am not sure if the promise of decentralization is enough to attract people to these platforms. This is where WordPress could be a great platform to piggy back off of. WordPress is already federated and decentralized as this is how the open web works.

There are projects like Mastodon, Nostr, Gun.js, Matrix, SSB, and the AT Protocol, to name a few. I am sure there are many more that I am missing, but these are definitely players in the decentralized social network space. Most of these are protocols, and what I am thinking is we could get WordPress to speak one of these protocols. Then we would develop a client that operates on these protocols. The client could be run via Web Assembly to bootstrap it in a browser session or run on a native application. Spinning up a pub/relay would be as simple on WordPress as installing a plugin and configuring a few settings. If done well this would mean that the network could scale up very rapidly and go from unconnected nodes to a more rich mesh.

Which Protocol?

I think out of all of them Secure Scalable Scuttlebutt would be the ideal. It is a protocol that supports End-to-End Encryption a flexible schema for supporting applications, and is truly peer to peer and offline. The p2p and offline capabilities I think would be great in developing countries where internet is not always there but devices like cell phones are relatively common. With SSB over Wi-Fi you could connect directly with others on the network. WordPress again is the platform to build the network on top of as a bootstrapping point.

Task at hand

With PHP 8.1 Fibers were introduced as a low level way of starting to support asynchronous code in PHP. By default they will run synchronously but with a scheduler PHP can be made to operate asynchronously. So if someone has PHP 8.1 and WordPress, the goal would be to install the plugin and configure some settings and you are up and running. The first step would be to replicate ssb-server in PHP and then have a WordPress plugin that would be a thin wrapper around running that process. Then each WordPress in the world could quickly be turned into what is known as a pub in the SSB ecosystem. If you are running a community like Post Status, you could then send out invite links to users and/or make a public open invite to your community.

The second hurdle is to develop a truly first class client app to read and interact with the SSB network. This is where the magic happens. Imagine a new app that anyone can load up into their browser or run natively that will connect them to this new network. This will put the power for people to own their own data, have privacy over their data, and interact with people the way they choose. A four freedoms might include:

  1. Freedom to Create and Manage Your Data and Feed
  2. Freedom to Create and Moderate a Community for any Purpose
  3. Freedom to Extend and Redistribute
  4. Freedom to Communicate Privately

If the project is successful, a future would support any open source client, which could be paid or free. It would also support a plugin ecosystem like WordPress where different applications could be run over the network, for instance in SSB people have implemented Git, and chess as applications that can be run on the SSB protocol. The vision is to create a global network that would be vivacious and put all of the power into the consumer’s hands rather than have the power be held by giant tech corporations.

Leveraging WordPress

WordPress also serves as a great public way to distribute content on the internet. There are potential synergies by choosing WordPress as a piggy backing jump off point. WordPress could be leveraged to have a public facing site that could also publish to the SSB network certain content. This also means that via the WordPress REST API, there could be integrations where certain posts you make to SSB would also could end up on your public WordPress site, creating a loop of possibilities between the public web and a private network running on SSB.

WordPress also has Gutenberg a great editor that could be used to post rich content to SSB or be directly embedded into clients.

Democratizing Publishing

If we really want to democratize publishing and commerce, I think WordPress needs to become a platform for how everyday people are using the web. A protocol like SSB would open up future possibilities and a client could be your homepage for the web; your portal to a new kind of web free of control of any one company more in line with the vision of the open web. I will be posting my progress on this blog and if you are interested in this project feel free to reach out to me in comments or on WordPress slack; username chopinbach.

On optimization

In the realm of computing we are often plagued by the many aspects of optimization; both positive and negative. Often we can find ourselves spending lots of time not really getting anywhere as we “optimize”. We can also find ourselves in the situation of being wildly successful, only to find that what we have optimized for is not what we really wanted in the first place. I can’t help but feel these outcomes are suboptimal πŸ˜‰. I came across a tweet that really hits the mark:

https://twitter.com/creachadair/status/1039602865831010305

I would change the wording a little bit. The three options are: Do less, do it less often, do it more efficiently. I find myself optimizing around “efficiency” in my work, or at least perceived efficiency. Much of the work in the systems we build is targeted around our ideas of efficiency. Achieving a goal more effectively, yet the blinders come on quick and we lose site of whether the goal is really what we need. Keeping tabs on the greater picture is no easy task. One can fall easily to analysis paralysis, but I also feel that sentiment can be a cop out to really thinking things through, or shifting our perspectives. I believe there is equally an activity immobility trap we all fall into; the hustle and grind mentality. The illusion of moving the goal post; and seeing things only as they are not as they could be.

One of the great masters of optimization is Masanobu Fukuoka, author of The One Straw Revolution. He created his own method of farming based on the principle of doing less. While his neighbors toiled, and performed hard labor, Fukuoka focused on setting the conditions for success of a fertile landscape; with the goal of doing no to little work.

Image result for masanobu fukuoka cherry blossoms
Masanobu Fukuoka

In the computing world, there is a lot to learn from Fukuoka. What conditions can we set for our programs for them to do the work for us? Is the labor intensive process of coding, that we cherish so, really that important to what we are trying to do?