3 of the Best Things I Learned in the Last Year


I love exploring and learning new things. While fun, sharing what I've learned is even more rewarding.

I spent the majority of my free time over the last year finishing off The Imposter's Roadmap, which I just wrapped up final last weekend. Everything I'm about to share is detailed in the book, and if you're interested, I have a discount for you!

1: The GitHub Project

I was talking with Burke Holland a few months ago about using GitHub to run a technical project (using GitHub projects) and he shared with me that the VS Code Team (who we work with) uses a simple repository with issues instead.

I found that confusing. GitHub has the notion of actual projects with Kanban boards, roadmaps, and customizable tasks... how could you use a repo to do this? Moreover: why?

Then he showed me their iteration plan:

Long story short: the VS Code team uses a "parent" issue called an iteration plan (from Agile), which covers a month's worth of work. On that issue, they create a set of tasks and notes, and tag the people responsible for each one. They also tag child issues, which they track from the plan. When the work is done, the task is checked.

All of the checklist tasks in an issue come with a "Create Issue" hover button, that you can see on the right side of the editor. If you click that, an issue is created and linked back to the parent. Crazy stuff.

The iteration plans are done in monthly milestones, so it's easy to go back and see the work performed in a given month. It's also easy to customize, which I love.

Burke and I liked this so much, we plugged it in for our group (which Burke leads) and it's been working wonderfully.

2: Bullet Journaling with Obsidian

I love the Bullet Journal process. It has made a massive impact on me personally, and helped me see clearly where I waste effort, and what I really should be focusing on (like finishing the Roadmap book!).

The only downside is that it's hard to search and relate information. I find myself referencing collections 2 journals back sometimes, which breaks my mental flow when I have to go dig up the old journal and find what I was trying to remember.

I tried a few digital methods, including Notion, Apple Notes, and a few other writing apps - but none did what I needed. Then I decided to give Obsidian a try. Everything is stored locally in Markdown files, which you can sync using a cloud solution of choice (I use iCloud).

Over a weekend, I created a set of templates and a process to mirror the Bullet Journal method:

  • My daily, monthly, and yearly logs sit in the root, tagged with the date.
  • Each month has its own directory, with all the daily logs moved into it at the end of the month.
  • A collection lives in the month it was created.
  • People and Processes are tags, so I can always find them when I need.

The terminology here (daily logs, collections, etc.) is very Bullet Journal-y, but you pick it up fast.

Here's what it looks like:

Obsidian supports GitHub style Markdown, so you can add all kinds of flourishes to your notes, like special checkboxes and callouts. Everything is templated, so it's super easy to create your daily log and not forget something.

I'm thinking I'll do a YouTube video about it. Reply if you'd like to see that!

3: Code Generation with Careful Prompting

It's fair to say that most people I know are pretty tired of reading about AI, and I completely understand. That said, Burke (him again!) asked me to review a video he put out on prompting, and it blew my mind. I just didn't know you could do these things!

It got me thinking: every demo I see that uses ChatGPT or Copilot uses a prompt to do a thing; but what if we thought of it more as a conversation, rather than a command?

I started playing around with a simple idea:

  • Create a README that has the scope of what I'm trying to do. Maybe I'm building an e-commerce application, or something. I have a summary paragraph and then a bulleted list of services and functionality.
  • Create a SQL file that could be my dumped database schema, or what I hope to use at some point. The more detailed, the better.
  • Load these files up to ChatGPT (or whatever model you're using), starting with the README.

The conversation, at that point, starts with something like:

What is the simplest file structure and project architecture I can use to build the application described in the README file?

I'm using Copilot for this, and this response is pretty grand:

I like what I see here, but I could do without controller and the config stuff. That's where the conversation part comes in - just tell the LLM what you want to have added or removed. Once you see one you like, you can actually tell ChatGPT to "remember this", and it will!

Next you load up the SQL file, and prompt:

Here is my database schema. Use this to create the models using Sequelize.

It's insane how accurate the code is! The data types are correct, as are the null checks. Copilot (the LLM I'm using here) was able to guess the relationships too. I'm using the Chinook test database, by the way.

It's not perfect, but that's fine, we're still way ahead. Sequelize, by the way, is a popular ORM for Node. Replace with whatever you use and, yes, it will generate a repository for you if you want! Even Command and Query objects if that's your thing!

Here's the fun part, however:

Create a bash script that generates the code for the Sequelize models.

This freaked me out the first time I saw it. Here's the response I got (yours might be different):

I didn't know Sequelize has a CLI! I opened the terminal in VS Code and clicked the "Run in Terminal" button in the chat for each of the responses. The CLI generated the database migrations and model files I needed... and everything worked.

We live in wild times.

I do feel that it's a roll of the dice when you do things like this, and this time I got lucky and snapped a screenshot. Other times I've had to go in and tweak a few things - but I'm still far ahead, and honestly don't mind.

There's More...

I've learned so much in the last year, which is what I love about the work I do. I hope you found a little inspiration here, and if you want to know more, go get the book!

Thanks again!

Rob

🥷🏽 Notes From an Imposter Programmer

I taught myself to code in 1998 and within 7 years had a client list that included Google, Microsoft, Starbucks, Ameritech, KLA-Tencor, PayPal, and Visa. In 2014 I decided that I really needed to understand core Computer Science concepts, so I dove in, using the free resources from MIT and Stanford. In 2016 I shared what I learned with The Imposter's Handbook.

Read more from 🥷🏽 Notes From an Imposter Programmer

I was talking with a coworker the other day about one of the new AI offerings and how well it simulated human interaction. I was asking it to summarize some notes I had taken on a book, and it did a fantastic job - but I then mentioned something I truly believe: AI is mediocre, at best It has to be, by definition. It's just repeating back to us the most common and probable things that we have said to it. Or, as Scott Hanselman describes it: "AI is a sock puppet on your own hand":...

I was at a local clothing store with my youngest, looking at clothes over the summer. She was trying to find a good pair of jeans, so we ended up at the Levis store, which isn't cheap. She found a very nice pair that were $95, which seemed a bit high but she's in college now and I suppose that's when you start thinking about buying nicer things. She's extremely thrifty, unlike me, so she suggested: Dad we should drive up to Nordstrom and look there. They have a great selection and it's...

We invest a lot of our time learning programming languages and frameworks, but I think it's just as important to learn the "foundational" skills of our industry, including: Patterns and Principles Architectural Styles Object-oriented as well as Functional Your editor SQL I think most people absorb the first two as their career progresses, and some might dabble in the third. But how many of us take the time to learn SQL or an editing skill like Vim? SQL: The Gift That Keeps Giving Whenever I...