<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Millicodhiambo </title>
    <description>The latest articles on DEV Community by Millicodhiambo  (@mmicbee).</description>
    <link>https://dev.to/mmicbee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3980285%2F1f212a16-8e67-4ea9-9568-884cc084c70e.png</url>
      <title>DEV Community: Millicodhiambo </title>
      <link>https://dev.to/mmicbee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mmicbee"/>
    <language>en</language>
    <item>
      <title>Compilation 1.0</title>
      <dc:creator>Millicodhiambo </dc:creator>
      <pubDate>Mon, 17 Aug 2026 14:09:58 +0000</pubDate>
      <link>https://dev.to/mmicbee/compilation-10-4de8</link>
      <guid>https://dev.to/mmicbee/compilation-10-4de8</guid>
      <description>&lt;p&gt;You write some C++ code, hit compile, and—poof—an executable appears. Or maybe it doesn’t, and you’re drowning in errors you don’t understand. Here’s the thing: compilation isn’t magic. It’s a multi-step pipeline that transforms your human-readable code into binary your computer can run. Understanding this pipeline is like getting X-ray vision for debugging. You’ll know exactly where things go wrong—whether it’s a preprocessor hiccup, a compiler syntax error, or a linker meltdown.&lt;/p&gt;

&lt;p&gt;In this series, we’re going to pull back the curtain. We’ll walk through every stage: preprocessing, compiling, assembling, and linking. We’ll write actual code, run real commands, and see what happens at each step. No hand-waving, no “it just works.” By the end, you’ll compile with confidence and debug like a pro, or try to.&lt;/p&gt;

&lt;p&gt;Next up, we’ll try to build a simple project to see the pipeline in action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Big Picture: From Text to Binary&lt;/strong&gt;&lt;br&gt;
Let’s sketch out the journey your code takes. You start with a .cpp file—just text. That file goes through four main stages before becoming an executable:&lt;/p&gt;

&lt;p&gt;Preprocessor: Handles directives like #include and #define. It’s basically a fancy copy-paste engine that runs before the real compiler kicks in.&lt;/p&gt;

&lt;p&gt;Compiler: Parses your code, checks syntax, builds an internal tree (called an Abstract Syntax Tree or AST), and generates assembly language—a human-readable version of machine instructions.&lt;/p&gt;

&lt;p&gt;Assembler: Converts that assembly text into binary object files (.o on Linux, .obj on Windows). These are chunks of machine code, but they’re not runnable yet.&lt;/p&gt;

&lt;p&gt;Linker: Glues together all your object files and any libraries (like the C++ standard library) into a final executable. This stage handles both static linking (baking code into your binary) and dynamic linking (loading shared libraries at runtime, like .so files on Linux or .dll on Windows).&lt;/p&gt;

&lt;p&gt;Here’s a visual:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5djg390jenlmsm6gbig0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5djg390jenlmsm6gbig0.png" alt=" " width="274" height="962"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Here’s a quick visual of how source code flows through the pipeline to become an executable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each stage can fail for different reasons. Preprocessor errors? Usually missing headers or typos in #include paths. Compiler errors? Syntax mistakes, type mismatches. Linker errors? Missing function definitions or libraries. Knowing where you are in the pipeline makes debugging way less painful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting Up Our Test Project&lt;/strong&gt;&lt;br&gt;
Let’s build something simple to experiment with. We’ll create three files: a header (source.hpp), an implementation (source.cpp), and a main program (main.cpp). Our “library” will do one thing: add two integers. Riveting, I know—but it’s enough to see every stage in action.&lt;/p&gt;

&lt;p&gt;source.hpp (the interface):&lt;/p&gt;

&lt;p&gt;// source.hpp&lt;br&gt;
// Declares a function that adds two numbers&lt;br&gt;
int add(int a, int b);&lt;br&gt;
source.cpp (the implementation):&lt;/p&gt;

&lt;p&gt;// source.cpp&lt;br&gt;
// Implements the add function&lt;br&gt;
int add(int a, int b) {&lt;br&gt;
    return a + b;&lt;br&gt;
}&lt;br&gt;
main.cpp (the entry point):&lt;/p&gt;

&lt;p&gt;// main.cpp&lt;/p&gt;

&lt;h1&gt;
  
  
  include "source.hpp"
&lt;/h1&gt;

&lt;p&gt;int main() {&lt;br&gt;
    int result = add(2, 3);&lt;br&gt;
    return 0;&lt;br&gt;
}&lt;br&gt;
Save these in a folder. Now let’s try compiling. On Linux with g++ installed (Ubuntu/Debian users can sudo apt install g++), run:&lt;/p&gt;

&lt;p&gt;g++ main.cpp source.cpp -o myprogram&lt;br&gt;
./myprogram&lt;br&gt;
If all goes well, it compiles silently and runs (though it doesn’t print anything yet—we’ll fix that later). But what if you only compile main.cpp?&lt;/p&gt;

&lt;p&gt;g++ main.cpp -o myprogram&lt;br&gt;
You’ll hit an error like:&lt;/p&gt;

&lt;p&gt;undefined reference to `add(int, int)'&lt;br&gt;
That’s the linker complaining. It knows add exists (the compiler saw the declaration in source.hpp), but it can’t find the actual code. That’s because source.cpp was never compiled and linked in. This is our first taste of how the pipeline stages interact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;&lt;br&gt;
Understanding compilation isn’t just academic. Here’s what you get:&lt;/p&gt;

&lt;p&gt;Faster debugging: When you see “undefined reference,” you’ll know it’s a linker issue, not a typo in your code.&lt;/p&gt;

&lt;p&gt;Better build systems: Tools like Make, CMake, or Ninja automate this pipeline, but they’re just orchestrating these same steps under the hood.&lt;/p&gt;

&lt;p&gt;Smarter optimization: Ever wonder what -O2 or -O3 flags do? They tweak the compiler and assembler stages. You’ll see that soon.&lt;/p&gt;

&lt;p&gt;Plus, if you ever work on larger projects or dive into other compiled languages (C, Rust, D, even Java’s ahead-of-time compilation), this mental model transfers directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrapping It Up&lt;/strong&gt;&lt;br&gt;
We’ve mapped out the compilation pipeline: preprocessor → compiler → assembler → linker. We’ve set up a tiny project and seen how missing a file at link-time causes errors. Next time, we’ll crack open the preprocessor and see what #include really does (spoiler: it’s simpler than you think—and more dangerous if you’re not careful).&lt;/p&gt;

&lt;p&gt;Try compiling the code above. Experiment: leave out source.cpp and watch the linker fail. Get comfortable with that error message—you’ll see it again. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Was Basically Gaslighted Into Learning DNS... and I'm Glad I Was</title>
      <dc:creator>Millicodhiambo </dc:creator>
      <pubDate>Sun, 12 Jul 2026 19:51:37 +0000</pubDate>
      <link>https://dev.to/mmicbee/i-was-basically-gaslighted-into-learning-dns-and-im-glad-i-was-15pp</link>
      <guid>https://dev.to/mmicbee/i-was-basically-gaslighted-into-learning-dns-and-im-glad-i-was-15pp</guid>
      <description>&lt;p&gt;I have a confession.&lt;/p&gt;

&lt;p&gt;I was strongly encouraged (read: lovingly gaslighted ) into writing this article. At first, I thought, "Why me? Can't someone else do it?"&lt;/p&gt;

&lt;p&gt;But looking back... I might actually thank the people who pushed me.&lt;/p&gt;

&lt;p&gt;Researching DNS and writing this article taught me far more than simply listening to the tech talk we had on Friday. It forced me to ask questions, connect the dots, and understand what actually happens every time I open a website.&lt;/p&gt;

&lt;p&gt;So, if you've ever heard people throw around the term DNS and wondered what all the fuss is about, this one's for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is DNS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine you want to visit your friend's house.&lt;/p&gt;

&lt;p&gt;You probably remember their name, not their exact GPS coordinates. So you open Google Maps, type in their name or location, and your phone figures out where to take you.&lt;/p&gt;

&lt;p&gt;The internet works almost exactly the same way.&lt;/p&gt;

&lt;p&gt;DNS stands for &lt;em&gt;Domain Name System&lt;/em&gt;. Think of it as the internet's phonebook—or even better, its contacts app.&lt;/p&gt;

&lt;p&gt;Instead of remembering an IP address like &lt;u&gt;&lt;em&gt;142.250.190.78&lt;/em&gt;&lt;/u&gt;, you simply type google.com.&lt;/p&gt;

&lt;p&gt;DNS translates that easy-to-remember name into the numerical IP address that computers use to find each other.&lt;/p&gt;

&lt;p&gt;Without DNS, we'd all be memorizing long strings of numbers just to visit our favorite websites. Imagine trying to remember the IP addresses for Google, GitHub, YouTube, Netflix... every single day.&lt;/p&gt;

&lt;p&gt;No thanks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So What Actually Happens?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's say you type github.com into your browser.&lt;/p&gt;

&lt;p&gt;Here's what happens behind the scenes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your browser asks, "What's the IP address for github.com?"&lt;/li&gt;
&lt;li&gt;It checks with a DNS resolver to see if the answer is already cached.&lt;/li&gt;
&lt;li&gt;If it isn't, the resolver asks other DNS servers until it finds the correct IP address.&lt;/li&gt;
&lt;li&gt;The IP address is sent back to your browser.&lt;/li&gt;
&lt;li&gt;Your browser connects to GitHub's server and loads the website.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All of that usually happens in just a few milliseconds.&lt;/p&gt;

&lt;p&gt;Pretty cool, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does DNS Matter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DNS makes the internet much more human-friendly.&lt;/p&gt;

&lt;p&gt;It allows us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remember names instead of complicated IP addresses.&lt;/li&gt;
&lt;li&gt;Keep using the same website address even if the website moves to a different server.&lt;/li&gt;
&lt;li&gt;Load websites faster through caching, where recently looked-up addresses are temporarily stored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without DNS, browsing the internet would be a lot slower and a lot more frustrating.&lt;/p&gt;

&lt;p&gt;Another Way to Think About It&lt;/p&gt;

&lt;p&gt;Think of your phone contacts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact Name → google.com&lt;/li&gt;
&lt;li&gt;Phone Number → IP Address&lt;/li&gt;
&lt;li&gt;Tapping the Contact → Opening the website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't memorize everyone's phone number—you save their name and let your phone handle the rest.&lt;/p&gt;

&lt;p&gt;DNS does exactly that for the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DNS is one of those technologies that's quietly doing its job every single day.&lt;/p&gt;

&lt;p&gt;Most of us never notice it, yet every website we visit depends on it.&lt;/p&gt;

&lt;p&gt;This article started as an assignment I wasn't exactly excited about. But by the time I finished researching and writing it, I realized I'd learned far more than I expected.&lt;/p&gt;

&lt;p&gt;Sometimes the things we're "forced" to learn end up becoming the things that make everything else in tech start to click.&lt;/p&gt;

&lt;p&gt;If you're just starting your journey into networking or web development, understanding DNS is a great place to begin.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>networking</category>
      <category>dns</category>
      <category>learning</category>
    </item>
    <item>
      <title>My First Day at a developer Bootcamp: What I Experienced as a Beginner</title>
      <dc:creator>Millicodhiambo </dc:creator>
      <pubDate>Sun, 14 Jun 2026 19:52:58 +0000</pubDate>
      <link>https://dev.to/mmicbee/my-first-day-at-a-developer-bootcamp-what-i-experienced-as-a-beginner-4ion</link>
      <guid>https://dev.to/mmicbee/my-first-day-at-a-developer-bootcamp-what-i-experienced-as-a-beginner-4ion</guid>
      <description>&lt;p&gt;Starting a developer bootcamp is both exciting and a bit overwhelming. On my first day, I didn’t expect to understand everything—but I was ready to learn how real developers think and work.&lt;/p&gt;

&lt;p&gt;Even though I couldn’t fully follow all the sessions later in the week, my first day still gave me a strong introduction to the journey I’m stepping into.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What stood out for me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest realization was that software development is not just about writing code—it’s about problem-solving, collaboration, and consistency.&lt;/p&gt;

&lt;p&gt;I also noticed how important tools like Git, GitHub, and development environments are in keeping projects organized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I learned on day one&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1.The importance of having a developer mindset (learning by doing)&lt;br&gt;
2.How developers structure projects and workflows&lt;br&gt;
3.That it’s okay not to understand everything immediately&lt;br&gt;
4.The value of consistency over speed&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My bigger motivation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beyond the bootcamp, there’s a hackathon that marks its conclusion, where I get to work on a small idea called &lt;em&gt;AfriPay&lt;/em&gt;—a concept aimed at improving cross-border payments in Africa by integrating the Bitcoin Lightning Network.&lt;/p&gt;

&lt;p&gt;The Lightning Network is fascinating, but still quite challenging to fully grasp. I’m still learning how it works, and I see that as part of the journey.&lt;/p&gt;

&lt;p&gt;This experience has made me realize how important software engineering is in solving real-world problems in my region.&lt;/p&gt;

&lt;p&gt;Even though I’m still at the beginning of my learning journey, ideas like this keep me motivated to keep going and improving every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My biggest takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even a single day in a developer environment can change how you see technology. It made me realize that becoming a &lt;em&gt;tech junkie&lt;/em&gt; isn’t just about passion—it’s about discipline and continuous learning. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s next for me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m continuing to learn on my own, building small projects, and improving step by step. This bootcamp experience is just the beginning of my journey into tech.&lt;/p&gt;

&lt;p&gt;So yeah, this is just the beginning of my journey.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>learning</category>
      <category>productivity</category>
      <category>bootcamp</category>
    </item>
  </channel>
</rss>
