Pinned — 28 Oct 2025 #codingStreet-Smart Coding: 30 Ways to Get Better at Coding Without Losing Your Mind
I spent five years in college learning to code.
A stupid dissertation delayed my graduation. But that’s another story.
Most of my five-year program didn’t prepare me for real-world coding. My real coding journey began at my first job, with one Google search: “how to get good at coding.”
I found a lot of conflicting advice:
“Use comments”
“Don’t use comments”
“Do this”
“Don’t do that”
Arrggg!
It took years of trial and error to learn what worked.
I had to survive on-call shifts, talk to stakeholders, and say “no” politely. More importantly, I had to learn that coding takes more than just syntax.
That’s why I wrote Street-Smart Coding— a roadmap of 30 lessons I wish I had when I started. For every dev who’s ever typed “how to get better at coding” into Google or ChatGPT. (Back in my days, I didn’t have ChatGPT… Wait, I sound like a nostalgic grandpa…)
Preview of the first ~12 pages
Inside “Street-Smart Coding”
This isn’t a textbook. It’s a battle-tested guide for your journey from junior/mid-level to senior.
Some lessons are conventional.
Others were learned the hard way.
And a few are weird.
One lesson comes from a TV show. Nope, not Mr. Robot or Silicon Valley. That’s on Chapter #29. It will teach you about problem-solving.
You’ll learn how to:
Google like a pro
Debug without banging your head against a wall
Communicate clearly with non-tech folks
…and 27 more lessons I learned over ten years of mistakes.
For writers, the real challenge is to make readers finish books.
TikTok, Instagram, and endless feeds have turned us into skimmers. And as Smart Brevity says, our job as writers is to adapt to how readers consume content. Give them something fast.
Short non-fiction books, or mini books, are the answer for impatient readers.
And to my surprise, after going down a rabbit hole, today I found a one-page book, This Book is One Page Long by Hassan Osman. Well, the book has 5 pages. I guess that’s the front matter, back matter, and one page of actual content.
If that doesn’t kill every excuse for writing a book, nothing will.
In another episode of Adventures with Entity Framework…
I expected Include() to always translate to an INNER JOIN. But with nullable “joining” properties, EF Core uses a LEFT JOIN.
Here’s my replicated scenario with movies and directors.
#1. Let’s create a Movies and Directors table with no foreign keys between them.
USEMovies;GOCREATETABLEMovies(IdINTPRIMARYKEYIDENTITY(1,1),NameNVARCHAR(100)NOTNULL);GOCREATETABLEDirectors(IdINTPRIMARYKEYIDENTITY(1,1),NameNVARCHAR(100)NOTNULL,MovieIdINTNULL,/* <- A nullable column here *//* And no constraint here. I'm a legacy app */);GO
#2. Let’s store (and retrieve) one movie and its director and an orphan director.
usingMicrosoft.EntityFrameworkCore;namespaceNullableForeignKeys;publicclassMovie{publicintId{get;set;}publicstringName{get;set;}publicList<Director>Directors{get;set;}}publicclassDirector{publicintId{get;set;}publicstringName{get;set;}publicint?MovieId{get;set;}// ^^^^// A nullable property herepublicMovieMovie{get;set;}}publicclassMovieContext:DbContext{publicMovieContext(DbContextOptions<MovieContext>options):base(options){}publicDbSet<Movie>Movies{get;set;}publicDbSet<Director>Directors{get;set;}}[TestClass]publicclassMovieTests{[TestMethod]publicasyncTaskNullableForeignKey(){conststringconnectionString=$"Server=(localdb)\\MSSQLLocalDB;Database=Movies;Trusted_Connection=True;";varoptions=newDbContextOptionsBuilder<MovieContext>().UseSqlServer(connectionString).Options;using(varcontext=newMovieContext(options)){// An orphan directorcontext.Directors.Add(newDirector{Name="Quentin Tarantino"});// A movie and its directorcontext.Movies.Add(newMovie{Name="Titanic",Directors=[newDirector{Name="James Cameron",}]});context.SaveChanges();}using(varcontext=newMovieContext(options)){// Imagine a query with filters on director and movievardirectors=awaitcontext.Directors.Include(d=>d.Movie)// I thought this would retrieve// directors with movies.ToListAsync();foreach(vardindirectors){Assert.IsNotNull(d);Assert.IsNotNull(d.Movie);// ^^^^^// This one breaks...}}}}
In this legacy app, child entities could exist without parents. The real query also applied filters on both entities.
I offered it as “pay what you want” and promoted it on LinkedIn. A few readers left a tip. It gave me momentum to keep promoting it.
But when I sent emails, almost nobody clicked my offers. After more than 30 emails, my products made just $1. OK, maybe my copywriting wasn’t strong or I was selling the wrong products.
The math doesn’t add up.
The change that brought the sales
Every step between your reader and your offer makes a sale harder.
It’s like walking people into your store, then sending them away for a course before selling what’s already on your shelves. By the time you follow up, they already bought somewhere else and forgot about you.
For my content strategy, I removed the intermediate steps. Social media and long-form posts -> products. Now I plug my book sales pages inside or at the end of posts.
With that simple fix, sales came in and I passed the $1 test. My first book, Street-Smart Coding, got two pre-sales within weeks of announcing it.
It wasn’t emails or “nurturing.” It was removing friction. A confused reader takes no action.
One day, a man approached a Zen master with a question.
“Master, what can a simple man like me do to become wiser like you?”
The Zen master said, “Well, I just sleep, eat, and talk.”
“Hmm, I already do that. But I’m not a wise man like you,” the man said.
“You may do that. But when I sleep, I’m simply sleeping. When I eat, I’m simply eating. And when I talk, I’m simply talking. When you sleep, you remember problems. When you eat, you use your phone. And when you talk, you think about what to ask next or how to answer.”
I first heard that story in a Sunday sermon, and it stayed with me.
It reminds me of a lesson from Eckhart Tolle’s The Power of Now. Our mind is like a time machine, taking us to the past (where guilt and resentment live) and into the future (where anxiety lives). But wisdom begins when we step off that machine and live in the present.
#2. Medium: This is my main driver of traffic and book sales. Last year, I saw a big bump in views and followers. So far: 1,197 followers and 643 subscribers.
#3. LinkedIn: This is my only social media channel, where I reshare bite-sized posts. So far: 832 followers and 364 connections.
#4. dev.to: I use dev.to only for coding content.
I have a “funny” follower count: 28,552. Mostly inactive accounts. When you create a new account, the welcome wizard asks you to choose tags and follow people.
More accurate stats: 236 posts, 1,921 reactions, and 549 comments.