I'm Launching Street-Smart Coding: 30 Lessons to Help You Code Like a Pro (the Roadmap I Wish I Had Starting Out)

Street-Smart Coding cover
Street-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…)

Scrolling through the first pages of Street-Smart Coding
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.

Now they’re yours.

Get your copy of Street-Smart Coding here and skip the years of trial and error. For launch week only: Pay what you want—even $1 or $2.

The Fastest Salary Negotiation I've Had (You Might Have One Too)

I made a list of contributions and achievements in the past year.
I did a quick market research. OK, by research, I mean I asked Gemini.
I came up with a range and an anchor point.
I reached out to an ex-coworker to ask how he asked for a raise.
I reread the chapters on negotiation from Choose Yourself Guide to Wealth.
I wrote a script and had a “what would you do in my shoes?” line ready as fallback.

I texted my “boss” asking for a time slot to discuss a raise.
I was expecting to jump into a call to present my case and “negotiate.”
Instead he asked if we could do it via direct messages.

I texted something like, “It’s been a while, blah, blah, blah… My current rate is $X and I have in mind something between $Y and $Z.”

He replied, “let me check and get back to you.”

Radio silence!

In a 1-on-1 negotiation, you get an immediate answer.
Either “sorry, we can’t do that” or “here’s what I can do for you.”
But this time, a loop was opened in my mind.

The next day, about the same time, I got a text, “Good news! Blah, blah, blah… We are supporting your request to increase your rate to $Y, effective $insertDate. Blah, blah, blah…“

The fastest, easiest, and most awkward salary or rate negotiation I ever had.

Lesson: Always go prepared. Always have a salary range and anchor point in mind. “Ask and you shall receive,” Jesus said. And maybe that could be as fast and easy as some messages via Discord or Slack.

If you’re starting out or already ahead in your coding journey, check out Career Lessons From the Trenches, my free 7-day email course where I distill 10+ years of career lessons into 7 short emails–to help you navigate your coding career.

TIL: The new Keyword Doesn't Hide Data Annotations

In another episode of I thought I knew enough about C#…

Today I wanted to “overwrite” the validations of a property from a parent DTO on its child DTO. Let’s say I had a Movie and Clip and needed shorter names for clips.

Just take a look at the attributes on Movie and ShortClip.

using System.ComponentModel.DataAnnotations;

namespace TestProject1;

[TestClass]
public class NewKeywordTests
{
    public abstract class Movie
    {
        [Required]
        [MinLength(52)]  // <--
        public string? Name { get; set; }
    }

    public class ShortClip : Movie
    {
        [MaxLength(20)]  // <-- Different annotations
        public new string? Name { get; set; }
        //     ^^^
    }

    [TestMethod]
    public void NewDoesNotHideValidationAttributes()
    {
        var myClip = new ShortClip
        {
            Name = "AShortName"
            //     ^^^^^
            // It has less than 20 chars,
            // so it must be valid, right?
        };

        var context = new ValidationContext(myClip);
        var validationResults = new List<ValidationResult>();

        bool isValid = Validator.TryValidateObject(
            myClip,
            context,
            validationResults,
            validateAllProperties: true
        );

        Assert.IsTrue(isValid);
        //     ^^^^^
        // Booom!!!
    }
}

Whaaat?! It didn’t work. The new keyword in the child class hides the property, but not the attributes. Sad trombone!

Sneaking into TryValidateObject() source code, it uses TypeDescriptor.GetProperties() to list the properties to validate, which returns a “merged” list of attributes. [Source].

var descriptor = TypeDescriptor.GetProperties(myClip.GetType());
var attributes = x[0].Attributes;
//  ^^^^^
// Among other attributes:
// RequiredAttribute
// MinAttribute
// MaxAttribute

When I asked Gemini for help, it suggested using virtual and override. And guess what? That doesn’t work either.

On my original code, I ended pulling down the property I wanted to have different annotations to the child classes on the hierarchy.

That’s why you shouldn’t blindly trust AI and build code reading and troubleshooting skills. I cover those skills and more in Street-Smart Coding—A roadmap with 30 lessons to help you code like a pro.

A Parenting and Book Writing Lesson Learned At a Bookstore

Do you have a book for parents raising two teenager girls?, a guy said.

He was in the next aisle at a bookstore. I was looking for some Christmas presents. I had on my hands Clear Thinking and The Cat Who Saved Books. I was looking for a third book to take advantage of the month’s promotion. The cheapest of the three was free.

The guy kept walking the aisles. An employee started to recommend titles: Think and Grow Rich, The 5:00 Club… Then his daughter said, “I’ve seen this book…I don’t know the title, but its cover is a little brain made of 1-dollar bills…“

“The Psychology of Money,” I said laughing. That moment I knew she was my kind of reading mate. And I knew his after was doing something good: surrounding them with books.

Then I saw it: sometimes a good book covers does all the heavy work for your book. Design your cover so a 13-year-old girl, probably not interested in your subject, could remember your book.

Like it or not, a book is judged by its cover. Just like you and me are judged by the way we look.

The Subtle Difference Between Success and Fame

Fame isn’t the same as success.

Fame is public spotlight.

Success is quiet.

It’s feeling good with what you do,
Feeling you’ve found a purpose,
Finding out what you’re here for and doing it every day.

It’s working every day,
Putting bread in your table,
Having a family,
Liking what you do, getting paid for some money for it, and feeling at ease with it.

That’s a true successful person.

A lesson I heard in a Sunday sermon that made me nod in agreement and realize I’m not that far to being successful.

Four Posts To Scare The Coder Inside You (You Will Pee In Your Pants)

#1. A huge table, a bad query, and no indexes. Those are the characters of the scariest lines of code I’ve ever written.

#2. What’s worse than spending all day in meetings? Well, here are 12 nightmares every coder faces. Be careful it any of them makes you wake up.

#3. You spent two days preparing for your next interview, just to find out your interviewer, who never asks your name, wants to test your IQ and have your brain scanned to see if you’re smart to work with him.

#4. Do you have a minute? When your boss texts you that, you don’t know if it’s going to be a new priority or your turn to leave.

Booo! Happy Halloween.

Don’t worry Street-Smart Coding won’t scare you at all. That’s the roadmap I wish I had on my journey to become senior