21 Sep 2025 #coding #books
I’m celebrating a small victory today: I finished the 1st draft of my next coding book.
Street-Smart Coding: 30 Ways to Get Better at Coding.
Its promise? 30 proven tips to get good at coding. Some are conventional. Some learned the hard way. And a few… weird ones. But all battle-tested.
Why I wrote it?
I went to a 5-year program to learn coding. Actually a bit longer because I had to write a stupid dissertation. But anyway…
My real coding journey started with one Google search: “how to get good at coding.” I found lot of contradicting advice. That Google search put blogging under my radar. And that’s why I started my own blog.
It took me years and trial and error to find out what really works from all that free Internet advice.
That’s why I wrote this book. Well, I’m still editing it. So you don’t have to go down the same rabbit hole.
I wrote it for the younger me, sitting back at my first job reading any tutorial he could find. Full of passion and no direction.
These are the lessons I wish I had when I was starting out. The lessons I learned over 10 years of coding in tech companies and software agencies, making plenty of mistakes.
Preorder your copy here to read a preview featuring 5 of the 30 tips, just to get you started.
20 Sep 2025 #misc
I just had lunch. I’m standing in front of the counter to pay. But my bank app keeps loading.
I toggle airplane mode to make my phone reconnect. That’s how a coder fixes anything, right? Restarting everything… No luck. I had no choice but to pay with the last bucks I had.
With only two bars, I try to find the address of the closest Government office I need to visit. That’s why I had crossed the city. My browser shows a painfully slow progress bar. I only have two hours left before the office closes. It’s a Friday. This year the President passed an order to reduce the working schedule of all Government offices. I ask for directions. You know, anyone can get to Rome asking for directions, as we said in my hometown.
***
I make it to the office. Turns out, I wasn’t that far. It’s the first time I’ve done that errand. I need a copy of an official document. I explain what I need to the guy behind a protective glass. There are cameras on every corner. He tells me I need the document ID and the expedition date. I have them on my email. Oh, I can’t log in. Another loading animation. The guy tells me the major phone operator has had network issues all day long. He can’t use his phone either.
With less than one hour left, I start to walk around. I remember an old Internet room from my college days nearby. After walking around three blocks, I find the place. It’s a small shop with four old PCs to access the Internet. It felt like the early 2000s, accessing my Messenger account to chat with my friends using funny animations. I could access my email account to get the ID and the issuance date of the document I wanted copied.
***
I rush back to the Government office. I know I have to accept what Life sends me. But I’m not enjoying what I have in front of me. I slip a paper with the document ID and date under the protective glass. “These are the right numbers, but this wasn’t registered in this office.” Arrggg!
All that chaos just because I didn’t have reception. All I needed was a yellow-page phone book, pocket money, and a notebook instead of a smartphone connected to the Internet. Maybe analog wasn’t that bad after all.
19 Sep 2025 #mondaylinks
Hey there.
Here are 4 links I thought were worth sharing this week:
#1. With the raise of AI, we’re in a programming deflation (5min). “We’re watching the basic economics of software development transform in real time.”
#2. Typing isn’t (and hasn’t been) the bottleneck of coding. AI is making us thinkers instead of typers (4min).
#3. One of the things I hate about software engineering is estimation and story points. And guess what? Story points answer nothing (4min).
#4. And here’s how someone hosted a website on a disposable vaper (6min). Cool!
And in case you missed it, I wrote on my blog about the hardest lesson I learned migrating legacy code (again) (2min) and the one rule junior coders should follow to adopt AI (1min).
(Bzzz…Radio voice) This email was brought to you by… Check my Gumroad store to access free and premium books and courses to level up your coding skills and grow your software engineering career.
See you next time,
Cesar
Want to receive an email with curated links like these? Get 4 more delivered straight to your inbox every Friday. Don’t miss out on next week’s links. Subscribe to my Friday Links here.
18 Sep 2025 #career #coding
I definitely can’t escape from legacy code.
This time, it’s an old WebForms application written in VB. Yes, that old. It’s a family business. Dad started it. And years later, his two sons got involved. It’s funny when during the standup meetings I hear, “Hey Dad…”
The problem
The code is a mess. Sorry, I mean it needs a lot of care.
I don’t blame them. It was the easy route with WebForms. Just drag and drop, double-click, and dump all your logic. It’s just like that framework encouraged people to copy and paste.
I’ve worked with at least 3 legacy apps with WebForms. All of them were pure spaghetti code. Zero best practices. “Coincidence? I don’t think so.” (Insert Toy Story character wearing a chicken suit)
The code needs care, but the database needs even more attention.
It doesn’t have foreign keys, and queries don’t use JOINs. If you want to join two tables, one of them has a string column with a list of IDs separated by a pipe (12|34|56). You fetch records separately and then loop through them to join them. Arrggg!
And please, let’s not talk about stored procedures…
The lesson
But from this project I’ve learned that if we don’t pay close attention to the initial database design, the backend side gets wildly crazy. A lot of hacks and patches to make up for a poor DB design.
There’s no need to go crazy with database normalization. Just:
- Every table should have an auto-incremented ID.
- Use a separate table instead of a column with a list of IDs.
- Keep data types consistent across tables. All “Status” columns should be either
BIT or an INT. Otherwise, conversions could go wild.
- Add audit fields (“createdAt” and “updatedAt”) to every table.
I wish they had followed those simple guidelines 10 years ago.
But more surprisingly, I learned that you don’t need a perfectly clean codebase to have a successful business. You will suffer? Sure. But running a business and writing good code are two completely separate skill sets.
The freshly graduated me thought I was only going to always create systems from scratch following all principles and practices to the tee. But working with legacy code taught me more than any coding course.
That’s why I made it one of the 30 proven strategies in my book, Street-Smart Coding: 30 Ways to Get Better at Coding. That’s the roadmap I wish I had when I was starting out.
Grab your copy of Street-Smart Coding here
17 Sep 2025 #misc
A long time ago, a friend asked me for a quote on a custom piece of software.
She and her friend wanted to start a marketing agency. And they wanted to build custom software to run it.
The problem? They didn’t have any savings or capital. And even worse, they didn’t have anyone to sell their service to. It was too early to build software.
I’ve been there too, on a different scale, coming up with value propositions and website copy for a freelance business I didn’t have yet. Later, it died with a single phone call.
After immersing myself in business podcasts and books, I’ve learned to:
- Come up with simple and cheap experiments to test a business idea
- Slap a price tag on whatever we’re building to see who buys
And simple experiments can validate big ideas.
The other day I watched a Diary of a CEO episode featuring a Netflix cofounder. How they validated their idea? He mailed a CD to his business partner to see if they could run a Blockbuster alternative by email. It was a cheap experiment. It worked.
Run experiments to learn, to grow, and to build something people really want.