Skip to content

Commit 7af49dc

Browse files
committed
create new blog post
1 parent eedfa49 commit 7af49dc

4 files changed

Lines changed: 152 additions & 29 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,8 @@ Gemfile.lock
1111
.jekyll-metadata
1212
vendor
1313

14+
# Images - to be added via github
15+
assets/img/posts
16+
1417
# Backup files
1518
*.backup

_posts/2025-12-15-backend-dev-course-update.md

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
---
2+
title: "Why Boot.dev Works and What I'm Building Next"
3+
date: 2025-12-15 16:00:00
4+
categories: [Backend, Learning]
5+
tags: [golang, bootdev, plc, industrial-automation]
6+
description: "I hit Archmage on Boot.dev. Here's why the platform works and what I'm building for my capstone project."
7+
toc: true
8+
image:
9+
path: /assets/img/posts/go-plc/bootdev-achievements.jpg
10+
alt: Boot.dev Archmage Achievement
11+
---
12+
13+
Most coding platforms promise to teach you programming but leave you stuck in tutorial hell. Boot.dev actually got me building real projects. Now I'm taking everything I learned and applying it to a capstone that solves a real problem I've faced in my career.
14+
15+
This post covers three things: why Boot.dev's approach to teaching code works, where I am in the program, and what I'm building for my capstone project.
16+
17+
## The Problem with Learning to Code Online
18+
19+
I've tried multiple platforms over the years. The pattern is always the same: watch videos, follow along, get a certificate, and then realize you can't actually build anything on your own. The gap between tutorial code and production code is massive.
20+
21+
Boot.dev does something different. Their [philosophy](https://blog.boot.dev/about/#our-beliefs) centers on a few key ideas that resonated with me:
22+
23+
- **Coding is fun, don't ruin it** - Learning should feel like a game, not a chore
24+
- **You need to build** - Reading code is not the same as writing code
25+
- **You need to deploy** - Real projects that run on real systems
26+
- **It's a marathon, not a sprint** - Depth over breadth
27+
28+
These aren't just marketing statements. The entire platform is designed around them.
29+
30+
## What Makes Boot.dev Different
31+
32+
Three things set Boot.dev apart from other platforms.
33+
34+
### Learn by Doing
35+
36+
Every course includes hands-on projects. Not toy examples, but actual applications you build from scratch. The CLI projects were my favorites. Building a Pokedex CLI and a Blog Aggregator forced me to understand how command-line tools actually work under the hood.
37+
38+
The pattern is always the same: learn a concept, immediately apply it, struggle a bit, figure it out. That struggle is where the learning happens. At the end of the program, you complete a capstone project that goes into your portfolio. I'll cover mine below.
39+
40+
### Great Community
41+
42+
The Discord server is genuinely useful. When I got stuck on a project, I could search for others who had the same problem. The community is active and helpful without being condescending. It's one of the better technical Discord communities I've been part of.
43+
44+
### Gamification That Works
45+
46+
Boot.dev treats the learning experience like an RPG. You earn XP for completing lessons, maintain streaks for daily practice, unlock roles every 10 levels, and get bonuses for various achievements. At level 100, you reach Archmage status and Boot.dev sends you a physical coin.
47+
48+
Sounds gimmicky, but it works. The gamification creates genuine motivation to keep learning. I found myself coming back daily just to maintain my streak, and that consistency compounded into real skill development.
49+
50+
## Current Progress
51+
52+
I hit Archmage this week. Here's where I stand:
53+
54+
![Boot.dev Archmage Achievement](/assets/img/posts/go-plc/bootdev-achievements.jpg)
55+
_Level 100 Archmage - 1,464 lessons completed across 20 courses_
56+
57+
I have three more courses and the capstone project remaining. My estimate is completion by end of January.
58+
59+
**Profile:** [boot.dev/u/aott33](https://www.boot.dev/u/aott33)
60+
61+
## Capstone Project: GoPLC
62+
63+
For my capstone, I wanted to build something that solves a real problem, demonstrates the skills I learned, and is something I would actually use.
64+
65+
I work in industrial automation. The tools we use for programming PLCs (Programmable Logic Controllers) are decades behind modern software development. Proprietary IDEs, vendor lock-in, slow iteration cycles, no version control. It's painful.
66+
67+
GoPLC is a soft PLC written in Go. Instead of using proprietary languages like Ladder Logic or Structured Text, you write control logic in Go and use modern development tools: VS Code, Git, CI/CD pipelines.
68+
69+
### What is a Soft PLC?
70+
71+
A traditional PLC is a specialized industrial computer that runs control logic for manufacturing equipment. A soft PLC does the same thing but runs on standard hardware. Think of it as the control software without the proprietary box.
72+
73+
### Why Build This?
74+
75+
The inspiration comes from [Tentacle PLC](https://joyautomation.com/software/packages/tentacle), which proved that modern programming languages can replace IEC 61131-3 standards. GoPLC takes that philosophy and implements it in Go to test a different language.
76+
77+
The core idea: if you have to learn vendor-specific languages anyway, you might as well learn a real programming language that transfers to other domains.
78+
79+
### Project Architecture Plan
80+
81+
GoPLC communicates with industrial devices via standard protocols and exposes data through multiple interfaces:
82+
83+
**Input/Output:**
84+
- Modbus TCP/RTU for connecting to sensors, actuators, and I/O modules
85+
- Automatic reconnection with exponential backoff
86+
87+
**SCADA Integration:**
88+
- OPC UA server for traditional industrial SCADA systems
89+
- Sparkplug B over MQTT for modern IIoT architectures
90+
- GraphQL API for custom integrations
91+
92+
**Monitoring:**
93+
- Built-in WebUI for real-time monitoring and control
94+
- System health, connection status, variable values, task execution
95+
96+
### Early UX Designs
97+
98+
Here are the initial mockups for the monitoring interface:
99+
100+
![GoPLC Overview Dashboard](/assets/img/posts/go-plc/ux-overview.png)
101+
_Main dashboard showing sources, tasks, system health, and variable values_
102+
103+
The interface is designed for operators who need to quickly assess system status. The alert bar at the top shows active errors and warnings. Sources and tasks display real-time connection and execution status.
104+
105+
![GoPLC Alerts Expanded](/assets/img/posts/go-plc/ux-alerts-expanded.png)
106+
_Alert system showing connection errors and value warnings with timestamps_
107+
108+
Error messages are human-readable. No cryptic codes or hex values. When something fails, you can see exactly what happened and when.
109+
110+
### Technical Implementation
111+
112+
The project uses several Go libraries that handle the heavy lifting:
113+
114+
- `simonvetter/modbus` for Modbus TCP/RTU communication
115+
- `gopcua/opcua` for OPC UA server
116+
- `eclipse/paho.mqtt.golang` for MQTT (Will need to develop Sparkplug B portion)
117+
- `99designs/gqlgen` for GraphQL
118+
119+
Variables are defined once in YAML and automatically exposed to all protocols. Write your control logic in native Go, and the runtime handles scheduling, scaling, and protocol translation.
120+
121+
### Reference Implementation
122+
123+
The validation case is a real tank battery control system I previously built on Allen-Bradley CompactLogix. If GoPLC can handle tank level monitoring, pump sequencing, and alarm logic with faster iteration cycles and cleaner code, the project succeeds.
124+
125+
### Current Status
126+
127+
GoPLC is currently in the planning stage. I've completed the PRD, UX design specifications, and architecture documentation. Development starts next week. I'll be posting updates as the project progresses.
128+
129+
**GitHub:** [github.com/aott33/go-plc](https://github.com/aott33/go-plc)
130+
131+
---
132+
133+
## Resources
134+
135+
**Boot.dev**
136+
- [Get Started for Free](https://www.boot.dev/)
137+
- [About Section](https://blog.boot.dev/about/)
138+
- [GitHub - Curriculum](https://github.com/bootdotdev/curriculum)
139+
140+
**GoPLC**
141+
- [GitHub Repository](https://github.com/aott33/go-plc)
142+
143+
**Tentacle PLC**
144+
- [Tentacle PLC Docs](https://joyautomation.com/software/packages/tentacle)
145+
- [Tentacle PLC GitHub Repo](https://github.com/joyautomation/tentacle)
146+
147+
**Writing Framework**
148+
- [The Algorithmic Framework for Writing Good Technical Articles](https://www.theocharis.dev/blog/algorithmic-framework-for-writing-technical-articles/)

_posts/2025-12-22-week-05-kubernetes-deployment.md renamed to _posts/2026-01-12-week-04-kubernetes-deployment.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: "Kubernetes: A new frontier for me!"
3-
date: 2025-12-22 16:00:00
3+
date: 2026-01-12 16:00:00
44
categories: [Homelab, Linux]
55
tags: [arch-linux, linux, homelab, kubernetes]
66
description: "Week 4 of 16: Learning Kubernetes and deploying a K3s control plane and worker"

0 commit comments

Comments
 (0)