<?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>Forem: Dylan Oh</title>
    <description>The latest articles on Forem by Dylan Oh (@ohdylan).</description>
    <link>https://forem.com/ohdylan</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F353796%2F77cabe7e-48b8-4ed6-85a2-6f830c09683a.png</url>
      <title>Forem: Dylan Oh</title>
      <link>https://forem.com/ohdylan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ohdylan"/>
    <language>en</language>
    <item>
      <title>API and SDK, What Are These Two Terms Actually?</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sun, 01 Jun 2025 15:59:42 +0000</pubDate>
      <link>https://forem.com/ohdylan/api-and-sdk-what-are-these-two-terms-actually-1ad8</link>
      <guid>https://forem.com/ohdylan/api-and-sdk-what-are-these-two-terms-actually-1ad8</guid>
      <description>&lt;p&gt;If you are just starting to look into AI (or any software) development, you might hear terms like API, SDK, etc. One of my friends who just got into this hype of AI development asked me these questions, and he did not have any technical background: “What are APIs? What are the differences between API and SDK?” I thought it would also be nice to have a simple-to-understand explanation for you guys.&lt;/p&gt;

&lt;h2&gt;
  
  
  API (Application Programming Interface)
&lt;/h2&gt;

&lt;p&gt;Let’s start with the API. To put it simply, API is how software talks to each other.&lt;/p&gt;

&lt;p&gt;If this is too vague, consider it a clearly defined way one program can request services or information from another. Instead of a human clicking a button, one piece of software makes a structured call to another.&lt;/p&gt;

&lt;p&gt;Many larger software platforms are providing API services to interact with their software. Let’s take X (formerly Twitter) as an example.&lt;/p&gt;

&lt;p&gt;Their APIs are like a set of specific, clearly labeled “service windows” or “access doors,” often called “API endpoints.” Each door is designed for a particular task, e.g., one for posting a tweet, another for getting the followers count, and so on.&lt;/p&gt;

&lt;p&gt;Imagine you are building an AI agent. When your bot wants to post a tweet, it goes to the “PostTweet()” door (this might not be the actual name, just an example) provided by the X API, and presents the tweet text in the required format. The API takes care of the rest, ensuring it gets posted correctly within X’s system. Your bot doesn’t need to know the complex inner workings of X; it just needs to learn how to use the designated API doors.&lt;/p&gt;

&lt;p&gt;Your next question might be: I am a non-technical person who wants to learn about AI. Do I need to know all these things?&lt;/p&gt;

&lt;p&gt;Well, yes.&lt;/p&gt;

&lt;p&gt;Today’s most powerful AI capabilities are services that developers can tap into through APIs. Companies like OpenAI (GPT models), Google (Gemini), and Anthropic (Claude) provide APIs. This means developers can integrate sophisticated features like advanced text generation, image creation, or speech recognition directly into their applications without building these incredibly complex AI models from the ground up. APIs are making advanced AI accessible to a much broader range of builders.&lt;/p&gt;

&lt;h2&gt;
  
  
  SDK (Software Development Kit)
&lt;/h2&gt;

&lt;p&gt;API provides the rules and access points for software communication. But sometimes, especially when you’re working with a complex service or a new platform, just having the list of “doors” (API endpoints) and the rules for knocking isn’t quite enough to get you building quickly and efficiently.&lt;/p&gt;

&lt;p&gt;This is where an SDK, or Software Development Kit, becomes incredibly helpful in making a developer’s life easier when working with a particular platform or API.&lt;/p&gt;

&lt;p&gt;A helpful analogy for this:&lt;/p&gt;

&lt;p&gt;Imagine you’ve bought some flat-pack furniture (IKEA or anything). The API might be the design specifications — how the pieces should connect. The SDK, then, is the box that arrives containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-drilled holes and essential components (these are like code libraries — pre-written chunks of code that handle everyday tasks, like formatting your API requests or managing authentication, so you don’t have to write them from scratch).&lt;/li&gt;
&lt;li&gt;The tools needed for assembly (like helper utilities or specific compilers).&lt;/li&gt;
&lt;li&gt;Clear, step-by-step instructions and diagrams (this is the documentation, code samples, and tutorials that guide you through the process).
An SDK bundles these libraries, tools, documentation, and code samples to help developers build applications for a specific platform (like the Android SDK for building Android apps) or integrate a particular service (like using an AI provider’s SDK) much more smoothly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suppose the API is the blueprint for the conversation. In that case, the SDK provides ready-made phrases, connectors, and helpful tools in your preferred programming language (like Python, Java, or JavaScript) to make that conversation happen with less friction. It helps you get up and running faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do we call an API?
&lt;/h2&gt;

&lt;p&gt;If we were to interact with an AI model’s API directly without an SDK, we would construct an HTTP (Hypertext Transfer Protocol) request. This involves specifying the endpoint URL, setting headers (for authentication with an API key and content type), and sending a JSON payload with our request details.&lt;/p&gt;

&lt;p&gt;Conceptually, using a command-line tool like curl (which sends HTTP requests), it might look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -X POST https://api.ai-provider.com/v1/completions \
     -H "Authorization: Bearer YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
           "model": "the-ai-model-name",
           "prompt": "If I have a next life, I would want to become a...",
           "max_tokens": 50
         }'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don’t have to understand what a “curl” is, but it is a tool or interface that we use to send an HTTP request. We are “calling” the API of this AI provider’s services, with the endpoint of “completions.” APIs of these services are generally provided in the form of a URL. In this example, there would be a base URL: ”&lt;a href="https://api.ai-provider.com%E2%80%9D" rel="noopener noreferrer"&gt;https://api.ai-provider.com”&lt;/a&gt;, and the endpoint is “completions”.&lt;/p&gt;

&lt;p&gt;This is a high-level idea of calling an API (there are more concepts about different HTTP request methods, such as the “POST” you see in the example, but we shall save that for later).&lt;/p&gt;

&lt;h2&gt;
  
  
  How do we use an SDK?
&lt;/h2&gt;

&lt;p&gt;Many AI providers offer SDKs in various programming languages. Let’s imagine we’re using Python with an SDK from an AI provider, similar to how you would use OpenAI’s or Google’s SDK.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;ai_provider_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIClient&lt;/span&gt;

&lt;span class="c1"&gt;# this is to initialize the client (often handles API key automatically if configured)
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AIClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;the-ai-model-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;If I have a next life, I would want to become a...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# the exact way to access the text will vary by SDK
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; 
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;An error occurred: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
`&lt;br&gt;
For example, the AI provider mentions that they provide a Python SDK for their services. In that case, you could just import the AI provider SDK and use their services. For example, we can initialise the SDK client and use the SDK function (the “client.completions.create()”) to call the services without knowing the underlying API.&lt;/p&gt;

&lt;p&gt;You can focus more on what you want the AI to do, rather than the nitty-gritty of how to make the web request. This is why developers love SDKs when they are available, they speed up development and reduce the chance of errors in the communication layer.&lt;/p&gt;

&lt;p&gt;Here’s another handy benefit: SDKs can often act as a buffer if the API provider makes behind-the-scenes changes to their API. If the provider, for instance, updates an internal address or tweaks a minor detail, the SDK maintainers will typically update the SDK to adapt. For you, this often means you can update to the newer version of the SDK, and your code that uses the SDK’s functions might not need to change at all, or only require minimal adjustments. This makes maintaining your application easier over time. Of course, for extensive, fundamental changes to an API (which are less common), the SDK itself might have major updates requiring more code changes on your end. However, it is generally a smoother process than deciphering raw API changes yourself.&lt;/p&gt;

&lt;p&gt;I hope this article simplifies these two glossaries and ensures you don’t get intimidated by them going forward in learning AI application development!&lt;/p&gt;

&lt;p&gt;If you find this insightful, subscribe to this newsletter for more articles like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.substack.com/" rel="noopener noreferrer"&gt;https://dylanoh.substack.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why Your Results‑Driven Goal System Is Sabotaging Your Progress (And How to Finally Finish What You Start)</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sat, 19 Apr 2025 08:10:06 +0000</pubDate>
      <link>https://forem.com/ohdylan/why-your-results-driven-goal-system-is-sabotaging-your-progress-and-how-to-finally-finish-what-you-17ip</link>
      <guid>https://forem.com/ohdylan/why-your-results-driven-goal-system-is-sabotaging-your-progress-and-how-to-finally-finish-what-you-17ip</guid>
      <description>&lt;p&gt;I used to pride myself on setting “results‑oriented” goals: hit a revenue target, grow my LinkedIn to 2000 followers, master a new skill in 30 days.&lt;/p&gt;

&lt;p&gt;But every Saturday morning, I would stare at my to‑do list—draft outlines, plan campaigns, code features—and feel my motivation drain away. My brain whispered, “Why not just chill a bit?” And before I knew it, I was scrolling social media instead of moving forward. I wondered,&lt;/p&gt;

&lt;p&gt;_Is this as good as it gets?&lt;/p&gt;

&lt;p&gt;Am I doomed to feel stuck?_&lt;/p&gt;

&lt;p&gt;I thought it was just &lt;strong&gt;me&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After diving into habit and productivity science (and books), I realized our brains are wired to protect us, to resist anything that feels uncomfortable or new.&lt;/p&gt;

&lt;p&gt;Over the past few months, I have experimented with a handful of simple, research‑backed strategies. They aren’t about sheer willpower or marathon work sessions, but tiny actions that trigger momentum.&lt;/p&gt;

&lt;p&gt;Here’s exactly how I turned my weekends from “list paralysis” into “finished first drafts”:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Light the Fuse with a Mini Commitment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do just a sliver of tomorrow’s work today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, if I know I must complete some presentation slides the next day, I will open a blank slide deck and jot down three slide titles the night before. That five‑minute “pre‑action” carves a channel in my brain: I’m not facing an empty deck when I sit down—I’m resuming progress.&lt;/p&gt;

&lt;p&gt;Getting started is half the battle. By lowering the activation energy, you bypass the part of your brain that screams “too hard” and give yourself a running start.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Bust Inertia with the 10‑Second Kick‑Start
&lt;/h2&gt;

&lt;p&gt;Pick a task you can complete in &lt;strong&gt;ten seconds&lt;/strong&gt;—so small it’s impossible to talk yourself out of it.&lt;/p&gt;

&lt;p&gt;On Sunday mornings, before my coffee even cools, I &lt;strong&gt;open a fresh doc and type a word: “Go.”&lt;/strong&gt; That tiny hit of progress floods my system with dopamine, and I’ll often keep writing long after the buzzer stops.&lt;/p&gt;

&lt;p&gt;Look, your brain hates uncertainty.&lt;/p&gt;

&lt;p&gt;A guaranteed win—even as trivial as opening a file—short‑circuits the resistance and primes you for the next step.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Harness Focus with 15‑Minute Sprints
&lt;/h2&gt;

&lt;p&gt;Break your work into &lt;strong&gt;short, intense bursts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I’m buried under emails or research, &lt;strong&gt;I set a fifteen-minute timer and attack one thread&lt;/strong&gt; or section—no distractions allowed. When the timer pings, I take a mini‑break: stretch, refill my water glass, or glance out the window. Then I dive into the next sprint.&lt;/p&gt;

&lt;p&gt;Parkinson’s Law tells us that work expands to fill the time available. A tight deadline creates urgency, and those little victories add up faster than marathon sessions ever could.&lt;/p&gt;

&lt;p&gt;You don’t have to set 15 minutes like me (it might be too short for you), but you would be amazed by how much you could do with laser focus in such a short time.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Anchor Your Expectations for Effortless Progress
&lt;/h2&gt;

&lt;p&gt;Use the first number you think of (your “anchor”) to make more realistic goals &lt;strong&gt;seem easy to achieve&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of telling myself, “Write 200 words,” I start by mentally anchoring “1,000 words.” Then, I scale back to 200. Compared to 1,000, 200 feels like a breeze—yet I often overshoot anyway.&lt;/p&gt;

&lt;p&gt;Our brains latch onto the anchor and judge everything relative to it. A daunting anchor makes the target seem trivial, so you breeze past it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Turn Reflection into Forward Motion with a Weekly Review
&lt;/h2&gt;

&lt;p&gt;Build a &lt;strong&gt;simple feedback loop&lt;/strong&gt;—review what worked, what didn’t, and plan micro‑steps to improve.&lt;/p&gt;

&lt;p&gt;Each Sunday evening:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List&lt;/strong&gt; what I set out to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check off&lt;/strong&gt; what I did.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Analyze&lt;/strong&gt; the roadblocks behind each miss.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt; one tiny next action for each obstacle.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, if I skipped “outline blog post,” I note “got stuck finding data,” then schedule a five-minute Google search first thing Monday morning.&lt;/p&gt;

&lt;p&gt;Reflection without action is just rumination. By pairing insights with micro‑commitments, you close the loop on procrastination and kickstart progress for the week ahead.&lt;/p&gt;

&lt;p&gt;Procrastination isn’t a personal failure—it’s a habit shaped by how our brains protect us. But with the right micro‑actions, you can hack that system and turn every challenge into a series of small, easy wins. Try these five strategies this weekend: light the fuse, kick‑start the engine, sprint in short bursts, anchor your goals, and review smartly.&lt;/p&gt;

&lt;p&gt;Before you know it, you’ll look back at a completed list and wonder why you thought starting was the hardest part. Let me know how you feel after implementing!&lt;/p&gt;

&lt;p&gt;Subscribe to my substack newsletter (in the profile) for the weekly insights I share about what I learned, including emerging technologies, productivity, and anything that triggered my curiosity.&lt;/p&gt;

&lt;p&gt;Cheers.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>motivation</category>
      <category>devresolutions2024</category>
      <category>programming</category>
    </item>
    <item>
      <title>Software Engineering Is Here To Stay In The Age of AI</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Tue, 01 Apr 2025 09:01:22 +0000</pubDate>
      <link>https://forem.com/ohdylan/software-engineering-is-here-to-stay-in-the-age-of-ai-3cnm</link>
      <guid>https://forem.com/ohdylan/software-engineering-is-here-to-stay-in-the-age-of-ai-3cnm</guid>
      <description>&lt;p&gt;I remember the first time I asked an AI to help debug my code. It was a chill afternoon, and instead of Google, I typed a question into ChatGPT. In seconds, it pinpointed the bug and suggested a fix. I felt amazed — and a tiny jolt of fear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;If an AI could solve my problem that quickly, what did that mean for me as a software engineer?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many developers are feeling this mix of excitement and anxiety. With AI tools writing code, answering questions, and even &lt;strong&gt;building entire apps from a prompt&lt;/strong&gt;, it’s natural to wonder: &lt;strong&gt;Will AI replace software engineers&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;I am giving you the reassuring answer, from experts and everyday coding experience — &lt;strong&gt;no&lt;/strong&gt;. Our profession is not vanishing; it’s &lt;strong&gt;evolving&lt;/strong&gt;. AI is changing our daily work and skills, but it’s more like getting a supercharged assistant than facing a takeover. In this article, we’ll explore how AI reshapes software development, the future of coding, and how engineers can adapt and thrive in this new era.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Tools in the Developer’s Daily Life
&lt;/h2&gt;

&lt;p&gt;Walk into any software company today, and you will most likely find AI-powered tools in the coding toolbox. From GitHub Copilot auto-completing lines of code, ChatGPT answering programming questions, Replit’s Ghostwriter writing and explaining code in the browser, these helpers are becoming as common as version control. Rather than eliminating the programmer, &lt;strong&gt;they’re taking over the repetitive grunt work and giving us more time for the interesting stuff&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, &lt;strong&gt;AI pair programmers&lt;/strong&gt; like Copilot can suggest the next few lines of code as you type, sometimes even generating entire functions on the fly. One study found that developers using GitHub Copilot could complete tasks &lt;strong&gt;up to 55% faster&lt;/strong&gt;, and 85% felt more confident in their code quality with the AI’s help. Another survey of 730 developers reported that &lt;strong&gt;most programmers see AI as a helpful collaborator that handles routine tasks, freeing them to focus on more complex, creative work&lt;/strong&gt;. In practice, that means the AI might write the boilerplate or unit tests, while you design the system or tackle a tricky algorithm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI chatbots like ChatGPT&lt;/strong&gt; have quickly become the new Stack Overflow for many of us. Instead of combing through pages of search results, developers can ask an AI a question and often get a direct, useful answer. It’s telling that the volume of new questions on Stack Overflow has plunged by over 75% from its peak since tools like ChatGPT became available. The workflow is changing: we consult the AI assistant for quick answers and code snippets, and then we (humans) double-check and integrate that solution into the bigger picture. AI might catch a syntax error or suggest an API call, but we are the ones to decide if it fits our application’s architecture and requirements.&lt;/p&gt;

&lt;p&gt;Even &lt;strong&gt;low-code and no-code platforms&lt;/strong&gt; are riding the AI wave. Take Replit, for instance — a popular online coding environment. Replit’s new AI Agent can turn a natural language prompt into a working web app. You can say, “Build me a simple to-do list app,” and watch as the AI generates the code for you in the editor. It’s “like having an entire team of software engineers on demand, ready to build what you need — all through a simple chat,” according to Replit’s announcement. This doesn’t make developers obsolete; it lowers the barrier for basic projects and prototypes. Professional engineers are freed up to work on the harder problems or refine and productionize these AI-generated prototypes.&lt;/p&gt;

&lt;p&gt;Importantly, &lt;strong&gt;AI tools are not infallible&lt;/strong&gt;. They sometimes write sloppy code or even &lt;strong&gt;make things up&lt;/strong&gt; (we have all seen ChatGPT confidently spout nonsense if it’s unsure about an answer). So while these tools can generate code, they can’t &lt;strong&gt;guarantee&lt;/strong&gt; it works in your unique context. That’s where we, the developers, come in — reviewing AI contributions, testing and debugging, and providing the insight and context an AI lacks. In other words, &lt;strong&gt;AI is becoming a powerful extension of the developer’s toolkit&lt;/strong&gt;, automating the tedious parts of coding so we can focus on the more intellectually demanding parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI as a Coding Partner, Not a Replacement
&lt;/h2&gt;

&lt;p&gt;Whenever a new automation technology emerges, there’s a familiar fear: “Will this replace me?” But in the case of AI and programmers, think of it less as a replacement and more as an &lt;strong&gt;augmentation&lt;/strong&gt;. AI is like a junior developer who works at superhuman speed — but still &lt;strong&gt;needs supervision&lt;/strong&gt;. It takes direction well and can churn out a draft, but it relies on a senior dev (that’s you) to review, correct, and guide it.&lt;/p&gt;

&lt;p&gt;Someone wisely said, “&lt;em&gt;AI won’t replace developers, but another developer using AI will&lt;/em&gt;.” (I can’t find the original because too many people said this.) In other words, developers who embrace AI will outpace those who don’t. This has rung true in practice: teams that leverage AI coding assistants ship features faster and with fewer errors, whereas those sticking purely to manual methods might fall behind. The software engineer’s role is shifting from the one who writes every line of code to the one who &lt;strong&gt;orchestrates and validates AI-generated code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We become the director, with AI as our eager assistant.&lt;/p&gt;

&lt;p&gt;It’s also useful to remember the limitations of these AIs. They don’t truly understand the why behind your project — your users, business needs, the creative leap needed to solve a novel problem. A senior developer on your team brings years of intuition and &lt;strong&gt;creative problem-solving ability that an AI can’t match&lt;/strong&gt;. AI can crunch data and patterns from millions of lines of code and suggest something that looks plausible. But figuring out if that suggestion is innovative or suitable is a human skill. An AI might suggest a solution that technically works but isn’t optimal for your customers or might introduce subtle bugs. We’ve seen cases where AI-generated answers look perfect at first glance but are incorrect upon careful inspection. This is why &lt;strong&gt;critical thinking and oversight from human engineers remain indispensable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Leading voices in the industry echo this balanced view. &lt;strong&gt;Janel Garvin, CEO of Evans Data Corp&lt;/strong&gt;, put it succinctly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“AI will not replace programmers but will fundamentally change the development landscape, making human creativity and problem-solving essential.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, rather than fearing replacement, it’s better to see AI as a catalyst for change — one that &lt;strong&gt;elevates the importance of our uniquely human skills&lt;/strong&gt;. Creativity, problem decomposition, judgment, and domain expertise become even more important when routine coding is handled by AI.&lt;/p&gt;

&lt;p&gt;Many companies now explicitly position AI as a “&lt;strong&gt;co-pilot&lt;/strong&gt;” (to borrow GitHub’s term) rather than an autopilot. AI helps write the code, but a human pilot is still in control. Microsoft’s developers reported feeling more fulfilled and enjoying coding when using AI assistance because it takes away some drudgery and lets them focus on interesting problems. Coding isn’t becoming a push-button job; it’s becoming a dialogue between developer and AI.&lt;/p&gt;

&lt;p&gt;The Evolving Role of the Software Engineer&lt;br&gt;
So if we’re no longer spending all day writing boilerplate code, what will software engineers do in the future?&lt;/p&gt;

&lt;p&gt;The job is already evolving into something even more engaging. Imagine that instead of grinding out every CRUD function, you’re &lt;strong&gt;designing the system architecture&lt;/strong&gt;, defining high-level logic, and letting AI fill the lower-level gaps. You might spend more time thinking about product requirements, user experience, and how to break a problem down, then hand off some of those sub-tasks to an AI agent to implement under your guidance.&lt;/p&gt;

&lt;p&gt;In essence, we will become more like &lt;strong&gt;architects, product thinkers, and orchestra conductors&lt;/strong&gt; in our projects.&lt;/p&gt;

&lt;p&gt;One likely shift is that software engineers will focus on &lt;strong&gt;system design and integration&lt;/strong&gt;. AI can help write code, but someone needs to decide what code should be written and how different pieces of an app should fit together. Engineers will put more effort into defining the right modules, interfaces, and data flows — the tasks that require understanding the broader context. We’ll also take on roles akin to &lt;strong&gt;quality control&lt;/strong&gt; and &lt;strong&gt;coaching&lt;/strong&gt;. Just as a senior dev today might review a junior dev’s code and offer feedback, tomorrow’s dev might review AI-generated code and correct its mistakes or refine its style.&lt;/p&gt;

&lt;p&gt;We’re even seeing new hybrid roles emerge. A buzzword you might have heard is “&lt;strong&gt;prompt engineer&lt;/strong&gt;.” This refers to someone who specializes in crafting the right prompts (inputs) to get the most useful output from an AI. It sounds a bit futuristic, but it’s a skill many developers are already informally learning: figuring out how to ask things from ChatGPT or Copilot to get the best results. The demand for such skills has grown so much that companies like Anthropic have job listings for prompt engineers with salaries reaching six figures. The rise of generative AI has created a hot market for prompt engineers — jobs that &lt;strong&gt;sometimes pay up to $300k–$375k a year&lt;/strong&gt; (in 2023, though). Essentially, being good at guiding AI has monetary value! Even if “prompt engineer” doesn’t remain a long-term job title, it signals that knowing &lt;strong&gt;how to work effectively with AI is becoming a core part of software development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another area where developers may spend more time is &lt;strong&gt;training and refining AI models&lt;/strong&gt; (for those inclined towards machine learning). As AI-generated code becomes common, understanding how these models work — their strengths, weaknesses, and failure modes — can be hugely beneficial.&lt;/p&gt;

&lt;p&gt;Some forward-looking developers talk about “&lt;strong&gt;Software 2.0&lt;/strong&gt;,” a term popularized by Andrej Karpathy. This term refers to a paradigm in which, instead of writing detailed algorithms, engineers mostly gather data and train neural networks to solve problems. In this view, tomorrow’s programmer might curate datasets and tune AI models as often as writing traditional code. That’s a specialized path, but it shows how &lt;strong&gt;some engineers will morph into AI trainers and curators&lt;/strong&gt;, operating at a higher level of abstraction.&lt;/p&gt;

&lt;p&gt;And let’s not forget the soft skills. The further we go from writing boilerplates, the more our communication and collaboration skills will emerge. Engineers will be interfacing even more with product managers, designers, and stakeholders to decide what needs to be built, because figuring out the right problem to solve is something AI cannot do for us. Understanding user needs, brainstorming creative solutions, and then translating that into AI instructions or an architectural plan requires empathy, teamwork, and leadership. &lt;strong&gt;Software developers will become more well-rounded technologists&lt;/strong&gt;, blending technical knowledge with strategic and creative thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adapting and Thriving with AI: Tips for Engineers
&lt;/h2&gt;

&lt;p&gt;The changes in our field don’t mean you must toss out all your hard-earned skills and start over.&lt;/p&gt;

&lt;p&gt;It means &lt;strong&gt;adapting and upskilling&lt;/strong&gt; in smart ways.&lt;/p&gt;

&lt;p&gt;Here are some actionable ways to future-proof your software engineering career in the age of AI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Embrace AI Tools in Your Workflow&lt;/strong&gt;: Don’t shy away from tools like GitHub Copilot, Replit’s Ghostwriter, or whatever your team uses (please). Get familiar with them. Treat them as your coding sidekick. The more you practice using AI helpers, the better you’ll get at prompting and catching their mistakes. Remember, developers who leverage AI will have an edge, so it’s wise to be among them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on System Design and Big-Picture Thinking&lt;/strong&gt;: Since AI can handle the small stuff, double down on your ability to design robust systems. Practice designing architectures, choosing frameworks, and considering scale, security, and user experience. Your expertise will shine in these areas when AI-generated components need to come together seamlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hone Your Problem-Solving and Creativity&lt;/strong&gt;: Work on projects that require solving novel problems or finding clever solutions. This could mean contributing to open source, participating in hackathons, or tackling different domains. The goal is to strengthen the muscles that think outside the box because AI, which learns from existing code, often can’t handle entirely new approaches or truly creative solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn to Review and Maintain AI-Generated Code&lt;/strong&gt;: Code review is a critical skill in AI. When an AI writes some code for you, don’t take it at face value — read through it and understand it. You might discover a bug or an inefficiency that the AI didn’t catch. Develop a habit of writing tests and using debugging tools to validate code written by you or an AI. Being the quality gate is a valuable role.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve Your “AI Literacy”&lt;/strong&gt;: Not every developer needs to be a machine learning expert, but understanding how AI models work will help you use them better. Spend a weekend learning about how GPT or code transformers work at a high level. Know their limits (e.g., they can’t access new knowledge not in their training data, they can produce wrong answers that sound right). This knowledge will help you troubleshoot when an AI assistant is giving weird outputs, and it will let you explain AI-driven decisions to non-engineers on your team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Develop Soft Skills and Domain Knowledge&lt;/strong&gt;: The human elements — communicating, leading a team, understanding the customer — are becoming even more important. You might find yourself explaining an AI’s output to a manager or client, or working with a non-technical team that wants a feature built. Being able to speak their language and collaborate is key. Also, deepen your understanding of your domain (be it finance, healthcare, gaming, etc.). The more context you have, the better you can guide AI tools to build the right thing. AI is clueless without context — you provide that missing piece.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adopt a Lifelong Learning Mindset&lt;/strong&gt;: Stay curious and keep learning. The tech world changes fast, and AI is turbo-charging that. The good news is that the same AI tools can help you learn faster (ever used ChatGPT to explain a new framework to you?). In 5 or 10 years, the hottest tools and best practices might be things we can’t imagine now. The engineers who thrive will remain flexible and enthusiastic about picking up new skills throughout their careers.
Focusing on these areas will ensure that you drive the AI tools, not the other way around.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Coding Careers Are Here to Stay (and Get Better)
&lt;/h2&gt;

&lt;p&gt;The rise of AI in software development is not the end of coding careers — it’s the beginning of a new chapter. If you’re an aspiring developer, rest assured: there’s plenty of demand for human programmers, but the job might look different from a decade ago. If you’re a seasoned engineer, you’ve probably seen the industry change repeatedly; this is just another evolution that can make your work more interesting and impactful if you adapt to it.&lt;/p&gt;

&lt;p&gt;Every upheaval in technology (from the invention of high-level languages to the advent of the internet to the proliferation of frameworks) has sparked fears of job loss. Yet, each time, software development has expanded and thrived. &lt;strong&gt;AI is the latest tool to automate parts of our job and open new opportunities&lt;/strong&gt;. It can write code but still needs direction, creativity, and critical oversight — all things at which we excel. As AI takes over the rote tasks, developers get to focus on more rewarding aspects of building software. In the future, you might spend less time debugging null pointer exceptions and more time brainstorming features, refining user experiences, and solving high-level design puzzles with the help of an AI partner.&lt;/p&gt;

&lt;p&gt;The profession is maturing into something even more creative and empowered. Just as using calculators didn’t eliminate the need for mathematicians, using AI to assist coding doesn’t eliminate the need for developers — it elevates it. The companies that understand this are investing in their engineers, not replacing them. Developers at Google, for instance, are already &lt;strong&gt;using AI to generate about a quarter of their new code&lt;/strong&gt;. Yet, Google is &lt;strong&gt;hiring developers, not firing them&lt;/strong&gt; — because someone has to define that other 75% and ensure the whole product makes sense. Across the industry, early evidence shows productivity is going up, not down, when AI is in the mix (Salesforce even reported a 30% productivity boost from AI automation).&lt;/p&gt;

&lt;p&gt;In the end, coding as a &lt;strong&gt;career is not going away&lt;/strong&gt;. Instead, it’s becoming more about strategy, creativity, and human insight. So the next time you see an AI solve a problem in seconds that took you hours, don’t panic. Take it as a preview of how much more &lt;strong&gt;efficient and exciting&lt;/strong&gt; your work could become. By welcoming our new AI companions and leveling up alongside them, software engineers can ensure that we remain relevant and central in shaping the future of technology. After all, behind every great AI, there’s a great human engineer who &lt;strong&gt;taught it, guided it, and knew where to point it&lt;/strong&gt; — and that’s a role only we can play.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Learning to Code Has Changed My Life, Forever.</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Mon, 31 Mar 2025 08:51:56 +0000</pubDate>
      <link>https://forem.com/ohdylan/learning-to-code-has-changed-my-life-forever-5g5i</link>
      <guid>https://forem.com/ohdylan/learning-to-code-has-changed-my-life-forever-5g5i</guid>
      <description>&lt;p&gt;Life has a way of taking you on unexpected detours, doesn’t it?&lt;/p&gt;

&lt;p&gt;A few years ago, &lt;strong&gt;I was a restless soul—full of ambition but without clear direction.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I bounced from job to job, chasing a spark I couldn’t define. I tried it all in sales, marketing, interior design, and even as a management trainee at HaiDiLao (a famous Chinese Hotpot chain, in case you haven’t heard of it). Each role was a stepping stone, but none felt like home. My wallet stayed thin, my confidence wavered, and yet, deep down, I knew there was something out there I would love doing if I could find it.&lt;/p&gt;

&lt;p&gt;Then came &lt;strong&gt;a New Year’s Eve countdown party that flipped my world upside down&lt;/strong&gt;. A chance conversation with an old friend introduced me to &lt;strong&gt;coding&lt;/strong&gt;—a field I’d never considered (I would blame my high school’s computer class teacher for that)—and set me on a path of relentless self-study, late-night debugging, and, ultimately, &lt;strong&gt;a career that quadrupled my salary and gave me a sense of purpose I had been craving&lt;/strong&gt;. This is my story: a messy, inspiring journey from being lost to finding my calling as a software engineer and why coding remains a game-changer, even with AI on the rise.&lt;/p&gt;

&lt;p&gt;Buckle up—it’s long, &lt;strong&gt;but I promise it's worth the ride&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ambitious, Lost, and Trying Everything
&lt;/h2&gt;

&lt;p&gt;We all had that self-centric moment when we thought we were the world's center. Growing up, I imagined myself doing something big—something that mattered.&lt;/p&gt;

&lt;p&gt;But as I stepped into the working world, that vision blurred. I didn’t have a clear path, so I threw myself into whatever came my way, hoping to stumble into my passion.&lt;/p&gt;

&lt;p&gt;First up was a &lt;strong&gt;marketing job&lt;/strong&gt; introduced by my sister. I pictured myself as the smooth-talking closer, sealing deals over coffee. The reality? I was the first marketing guy they had hired. I had my biotechnology degree but didn’t know how to do marketing or sales.&lt;/p&gt;

&lt;p&gt;Then came &lt;strong&gt;interior design&lt;/strong&gt;, a curveball even for me. Although it was more like a sales job than designing the house (I had to sell renovation packages to the house owners), both were challenging. I learned much through the job, including more about humanity, communication skills, stress tolerance, etc. It was a great learning experience, but nah, that’s not something I want to do in the long run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, I changed again.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I decided not to go through all, but here is the list of jobs that I have tried before my software engineering career, in historical order:&lt;/p&gt;

&lt;p&gt;Sales and Marketing Executive&lt;/p&gt;

&lt;p&gt;Sales Designer&lt;/p&gt;

&lt;p&gt;Management Trainee in HaiDiLao&lt;/p&gt;

&lt;p&gt;Sales Rep in a Medical Company&lt;/p&gt;

&lt;p&gt;Application Sales Executive&lt;/p&gt;

&lt;p&gt;After multiple job switches, I was burned out. Each job left me with scraps of experience—communication, teamwork, grit—but no real progress. My salary hovered at entry level because I kept resetting the clock. Friends were buying cars and planning vacations while I was still scraping by, wondering why I couldn’t find my fit. It wasn’t just about money, though. &lt;strong&gt;I wanted to wake up excited, not dreading the day ahead&lt;/strong&gt;. I was ambitious, yes, but I was also really lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hitting Pause and the Self-Reflection
&lt;/h2&gt;

&lt;p&gt;Jumping from job to job wasn’t working—it was like throwing darts blindfolded and hoping for a bullseye. I needed a new approach. So, I stopped chasing the next thing for the first time and started looking inward.&lt;/p&gt;

&lt;p&gt;I grabbed a notebook and got honest with myself.&lt;/p&gt;

&lt;p&gt;**_What did I enjoy about those jobs?&lt;/p&gt;

&lt;p&gt;What drove me up the wall?_**&lt;/p&gt;

&lt;p&gt;I scribbled furiously, dissecting every role. I picked which part of those works that I loved and which I hated the most.&lt;/p&gt;

&lt;p&gt;Patterns emerged. I thrived when I could create, solve puzzles, and use my brain hands-on. I also wanted a career with room to grow—something that wouldn’t cap out after a few years.&lt;/p&gt;

&lt;p&gt;Technology kept popping into my head. I’d always been fascinated by apps and websites—how did they work?—but I’d never considered it a viable path.&lt;/p&gt;

&lt;p&gt;I wasn’t a “tech person,” or so I thought.&lt;/p&gt;

&lt;p&gt;One night, I sat on my couch, staring at my notes. “What if there’s something out there that combines all this?” I wondered. “&lt;em&gt;Something challenging, creative, and future-proof?&lt;/em&gt;” I didn’t have the answer yet, but I felt a shift.&lt;/p&gt;

&lt;p&gt;I was done drifting—I was ready to dig deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Countdown Party That Counted
&lt;/h2&gt;

&lt;p&gt;Enter New Year’s Eve in 2018, the night that changed everything. A friend invited me to her countdown party, and I almost bailed. I was in a funk, questioning my life choices, and the idea of plastering on a smile felt daunting. But I dragged myself out the door, figuring a change of scenery might shake me loose.&lt;/p&gt;

&lt;p&gt;The house was buzzing—music thumping, people laughing, a table piled with snacks. I grabbed a drink and started mingling, half-listening to small talk. Then &lt;strong&gt;I spotted a high school buddy I hadn’t seen in ages&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;“So, what do you do now?” I asked.&lt;/p&gt;

&lt;p&gt;“I’m a software engineer at IBM,” he said.&lt;/p&gt;

&lt;p&gt;I blinked. “Wait, you went into computer science? That’s awesome.”&lt;/p&gt;

&lt;p&gt;He laughed. “Nah, man. I studied something else. &lt;strong&gt;Coding came later—I taught myself&lt;/strong&gt;.”&lt;/p&gt;

&lt;p&gt;I nearly dropped my drink. “Hold up. You didn’t go to school for this? You just… learned it?”&lt;/p&gt;

&lt;p&gt;“Yeah,” he said, shrugging like it was no big deal. “It took time, but there’s so much out there—tutorials, courses, forums.”&lt;/p&gt;

&lt;p&gt;My brain was racing. “So anyone can do this? Like, become a real software engineer without a degree?”&lt;/p&gt;

&lt;p&gt;“If you’re willing to do the work, sure,” he said. “It’s not easy, but it’s doable.”&lt;/p&gt;

&lt;p&gt;The countdown started—“Ten, nine, eight…”—and as everyone cheered, I stood there, dazed. Fireworks popped outside, but the real explosion was in my head. I’d always pictured coders as math geniuses with fancy degrees, not regular guys like him—or me. But if he could do it, why couldn’t I?&lt;/p&gt;

&lt;p&gt;“Happy New Year!” the room shouted. For me, it wasn’t just a new year—&lt;strong&gt;it was a new beginning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Grind of Determination: From Novice to Ninja
&lt;/h2&gt;

&lt;p&gt;On January 1st, I woke up with a fire in my belly. I didn’t know much about coding, but I knew I wanted in. I hopped on Udemy and bought a web development course for beginners for $14.90 (discounted from $199.90; as you know, Udemy is on sale for 350 days a year). In that first lesson, I wrote my first line of code. It was basic, but seeing it work felt like magic. I was hooked.&lt;/p&gt;

&lt;p&gt;After tackling the web developer boot camp (I spent a month completing that and faced countless issues), I moved on to picking up the &lt;strong&gt;React frontend framework&lt;/strong&gt; (okay, &lt;strong&gt;library&lt;/strong&gt;) and finally saw myself building some real stuff.&lt;/p&gt;

&lt;p&gt;I then studied Git, databases, UNIX commands, and some basic networking concepts.&lt;/p&gt;

&lt;p&gt;The schedule was brutal. I’d work my day job, come home, and code from 8 p.m. to midnight. Weekends? All coding, all the time—10 a.m. to 2 a.m., fueled by coffee and determination.&lt;/p&gt;

&lt;p&gt;My social life shrank, but I didn’t care. This felt different. It was hard, sure, but it was my hard—progress I could measure in every line I wrote.&lt;/p&gt;

&lt;p&gt;Challenges piled up. I’d spend hours on a bug—a missing colon, a dumb typo—cursing my screen until I fixed it. Those victories, though? Pure adrenaline. I remember my first real project: a web app that pulled all the campsites by region with search functionality. If you have taken &lt;strong&gt;the web development bootcamp from Colt Steele&lt;/strong&gt;, you will know what I mean. Highly recommended course.&lt;/p&gt;

&lt;p&gt;Five months in, I had a portfolio—small apps and a GitHub page. I applied to a couple of jobs, &lt;strong&gt;succeeded with my first on-site interview&lt;/strong&gt;—and got the offer right after the interview. &lt;strong&gt;Shoutout to Justin&lt;/strong&gt;, still a friend that I hang out with now, who taught me a lot and gave me the opportunity to start my software engineering journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Transformation: A New Life in Full Color
&lt;/h2&gt;

&lt;p&gt;Fast-forward to the present. My current salary is four times what I made before entering software engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four. Times.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Money stress faded, replaced by a strange new feeling: security.&lt;/p&gt;

&lt;p&gt;But the real magic wasn’t the cash—it was the work. Coding clicked with me in a way nothing else had. I’d debug a tricky issue or ship a feature and feel satisfied. The job stretched my brain daily. I was learning, growing, and loving every minute (almost).&lt;/p&gt;

&lt;p&gt;Coding didn’t just change my bank account; it rewrote my story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Question: Is Coding Still Worth It with AI?
&lt;/h2&gt;

&lt;p&gt;Now, let’s talk about the elephant in the room: AI. Tools like ChatGPT can write code, fix bugs, and even design apps. I wrote an article about “Lovable,” an AI agent that helps you build an app with just prompt input.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.substack.com/p/exploring-how-lovable-can-empower" rel="noopener noreferrer"&gt;Exploring How Lovable Can Empower Product Builders&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So why bother learning to code? Is it a dying skill?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not a chance. AI is a tool, but not here to takeover.&lt;/p&gt;

&lt;p&gt;The future? &lt;strong&gt;Coders who embrace AI will thrive, blending tech smarts with human insight&lt;/strong&gt;. The basics—algorithms, data flow, problem-solving—will stay golden.&lt;/p&gt;

&lt;p&gt;I’ve got more to say about how software engineering is evolving, not vanishing, so watch for my next article. I will first drop my conclusion here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There will be more software engineering jobs in the future, but they will look different from the current ones.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Reflections and a Nudge
&lt;/h2&gt;

&lt;p&gt;Looking back, I see every stumble as a setup. The dead-end jobs, the sleepless nights, the countdown party—they weren’t random. Life was nudging me toward coding, even when I couldn’t see it. I’m grateful for the mess—it made the triumph sweeter.&lt;/p&gt;

&lt;p&gt;Who knows, I might be bored by the software engineering career in the next few years. But I am not worrying at all. &lt;strong&gt;I am still exploring myself and discovering how I evolve along my journey&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’re stuck, lost, or itching for more, hear me: &lt;strong&gt;your path’s out there&lt;/strong&gt;. Maybe it’s coding or something else, but don’t stop looking. &lt;strong&gt;Reflect. Experiment. Push through the hard parts&lt;/strong&gt;. You will be rewarded handsomely.&lt;/p&gt;

&lt;p&gt;Cheers.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>motivation</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Want to start learning LLM and Generative AI? Start with Ollama and this article.</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sun, 22 Dec 2024 05:39:23 +0000</pubDate>
      <link>https://forem.com/ohdylan/want-to-start-learning-llm-and-generative-ai-start-with-ollama-and-this-article-16hf</link>
      <guid>https://forem.com/ohdylan/want-to-start-learning-llm-and-generative-ai-start-with-ollama-and-this-article-16hf</guid>
      <description>&lt;p&gt;Generative AI and Large Language Models (LLMs) are the buzzwords redefining how we create, automate, and interact with technology. From chatbots that sound almost human to tools that can generate lines of code or full-fledged content in seconds, the potential is limitless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;However, getting started with LLMs can feel overwhelming.&lt;/strong&gt; The complexity of models, infrastructure, and jargon can make even seasoned developers pause. You must have asked, "Where should I start?”.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;Ollama&lt;/strong&gt; comes in. If you’re a developer who wants to experiment with Generative AI without getting lost in the setup maze or spending a fortune on cloud services, Ollama is the perfect starting point. It’s simple, powerful, and respects your time and privacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Ollama?
&lt;/h2&gt;

&lt;p&gt;Ollama allows you to run and manage large language models locally. Yes, locally. That means no cloud dependency, no massive data transfers, and no recurring bills for cloud computing power.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Choose Your Language Model&lt;/strong&gt;: Whether you want to explore conversational AI, code generation, or content creation, Ollama lets you pick from various models. No need to jump between platforms; everything you need is here.&lt;/li&gt;
&lt;/ol&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.amazonaws.com%2Fuploads%2Farticles%2Ftnc83yyu2uiklhbqulce.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.amazonaws.com%2Fuploads%2Farticles%2Ftnc83yyu2uiklhbqulce.png" alt="There are multiple models available to download." width="800" height="446"&gt;&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2F542ep1c691bika5yo00f.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.amazonaws.com%2Fuploads%2Farticles%2F542ep1c691bika5yo00f.png" alt="There are also uncensored models." width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fast and Cost-Effective&lt;/strong&gt;: Run models directly on your computer without relying on cloud services. That means no extra expenses for computing power and faster response times — perfect for beginners experimenting on a budget.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Start Small, Learn Big&lt;/strong&gt;: Ollama is built for all skill levels. Whether you’re just starting with AI or looking to expand your toolkit, the platform provides an easy entry point into LLMs with a clear path to more advanced capabilities. The installation is an easy-breezy process. You may check out the quick installation guide here in the next section.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hands-On Experimentation&lt;/strong&gt;: Experiment locally without worrying about setting up complicated infrastructure. Download a model, start playing, and learn as you go — no need for a big upfront commitment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to install Ollama and get started?
&lt;/h2&gt;

&lt;p&gt;Here’s how you can setup Ollama locally and start running the language models:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Head over to &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; to download the installer for your OS.&lt;/li&gt;
&lt;/ol&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.amazonaws.com%2Fuploads%2Farticles%2Fkxgy1hqiydaorsvvaa1n.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.amazonaws.com%2Fuploads%2Farticles%2Fkxgy1hqiydaorsvvaa1n.png" alt="Download the installer for your OS." width="800" height="1027"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;After that is installed locally, bring up a terminal and run the following:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run llama3.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;… or any model of your choice.&lt;/p&gt;

&lt;p&gt;You are expected to see it downloading the models (if that’s your first time running the model), and once it is done, you will see a prompt:&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.amazonaws.com%2Fuploads%2Farticles%2Fbmk4i1oldn82ykda5o18.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.amazonaws.com%2Fuploads%2Farticles%2Fbmk4i1oldn82ykda5o18.png" alt="Friendly llama model :)" width="800" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are set to go! You can experiment with various models (but please take note that the model images are pretty large).&lt;/p&gt;

&lt;p&gt;That’s it for today’s article! If you are planning to get started with your Gen AI / LLM journey, do follow me on Medium (it’s been some time since I last posted, but I will dedicate myself to posting every week again with very useful technical blogs on AI).&lt;br&gt;
Cheers!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>openai</category>
      <category>rag</category>
    </item>
    <item>
      <title>What You Need to Know To Get Started with Blockchain</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sun, 08 Dec 2024 10:07:28 +0000</pubDate>
      <link>https://forem.com/ohdylan/what-you-need-to-know-to-get-started-with-blockchain-2o7k</link>
      <guid>https://forem.com/ohdylan/what-you-need-to-know-to-get-started-with-blockchain-2o7k</guid>
      <description>&lt;p&gt;Blockchain is a term that can sound a little intimidating. Maybe you’ve seen it flying around in headlines or heard people linking it to Bitcoin (especially in Bitcoin bull run). Or perhaps this is the first time you heard it and thought, “Wait, isn’t blockchain just another name for Bitcoin?” (I know, that’s what my friend asked me exactly).&lt;/p&gt;

&lt;p&gt;In this article, I’m going to explain what blockchain is in extremely simple terms—no jargon, no technical lingo. By the end, you’ll have a clear idea of what blockchain is, how it works, and why people won’t stop talking about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, What is Blockchain Exactly?
&lt;/h2&gt;

&lt;p&gt;Here’s the analogy:&lt;/p&gt;

&lt;p&gt;Imagine you have a notebook that records every transaction you make—like buying a coffee or sending money to a friend. Now imagine that notebook isn’t just yours; it’s shared with thousands of people, and every time a new transaction happens, everyone updates their notebooks at the same time. That’s the basic idea of blockchain.&lt;/p&gt;

&lt;p&gt;But here’s what makes it special:&lt;/p&gt;

&lt;p&gt;No one owns the notebook—it’s shared by everyone (decentralization).&lt;/p&gt;

&lt;p&gt;Once something is written in it, you can’t erase or change it (Immutability).&lt;/p&gt;

&lt;p&gt;Everyone can see what’s written, so there’s no hiding (transparency).&lt;/p&gt;

&lt;p&gt;This “notebook” is what we call a blockchain: a digital, shared ledger that keeps track of everything securely and transparently.&lt;/p&gt;

&lt;p&gt;Why Is It Called Blockchain? What’s Inside a Block?&lt;br&gt;
It’s a chain of “blocks” of information linked together. Each block acts like a digital container that holds specific, important data. &lt;/p&gt;

&lt;p&gt;1) A list of transactions:&lt;/p&gt;

&lt;p&gt;At its core, a block contains a list of transactions. This is the main purpose of the block: to record activities on the network. For example:&lt;/p&gt;

&lt;p&gt;If someone sends cryptocurrency, the transaction details are stored here.&lt;/p&gt;

&lt;p&gt;Some blockchains might include smart contract (we shall talk about this in the future) data or even supply chain records.&lt;/p&gt;

&lt;p&gt;Each transaction includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The sender’s address (who is making the transfer).&lt;/li&gt;
&lt;li&gt;The recipient’s address (who is receiving it).&lt;/li&gt;
&lt;li&gt;The amount or details of what’s being exchanged.&lt;/li&gt;
&lt;li&gt;A timestamp showing when the transaction occurred.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the block a clear record of activities, like a digital ledger page.&lt;/p&gt;

&lt;p&gt;2) A Unique Identifier (The Hash)&lt;/p&gt;

&lt;p&gt;Every block is given a unique “fingerprint” called a hash. This is a unique string of characters generated by running the block’s contents through a cryptographic function.&lt;/p&gt;

&lt;p&gt;Why does this matter? The hash ensures the block’s contents cannot be changed. Even the smallest alteration in the block—like editing a transaction—would completely change the hash, making tampering obvious.&lt;/p&gt;

&lt;p&gt;Think of it like a seal of authenticity: once stamped, the block’s hash proves it hasn’t been altered.&lt;/p&gt;

&lt;p&gt;3) A Link to the Previous Block&lt;/p&gt;

&lt;p&gt;Each block also includes the hash of the previous block (so that it knows which is the previous block before it). This creates a chain of blocks, where every block depends on the one before it. This linking is what makes the blockchain secure and tamper-proof.&lt;/p&gt;

&lt;p&gt;How it works: If someone tried to change a past block, the hash of that block would change. But because every block depends on the hash of the one before it, the entire chain would break, and the network would immediately detect the tampering.&lt;/p&gt;

&lt;p&gt;4) Metadata (other information)&lt;/p&gt;

&lt;p&gt;In addition to transactions and hashes, a block often includes some extra technical details to help the network function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timestamp: The exact time the block was created.&lt;/li&gt;
&lt;li&gt;Block Number: Its position in the chain (e.g., Block 101).&lt;/li&gt;
&lt;li&gt;Nonce (in certain blockchains): A number used to help create the block’s hash during the validation process.&lt;/li&gt;
&lt;li&gt;Validator Information: Details about who verified and added the block (if applicable). We shall dive deeper into validation and mining in the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s all you need to know to get started with blockchain! Remember these: decentralization, immutability, and transparency. Connect these characteristics with the structure of a blockchain above, you will have a clearer picture of what a blockchain looks like.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>beginners</category>
      <category>cryptocurrency</category>
    </item>
    <item>
      <title>Understanding Python’s Global Interpreter Lock (GIL) Mechanism: Benefits and Limitations</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sun, 13 Aug 2023 01:07:46 +0000</pubDate>
      <link>https://forem.com/ohdylan/understanding-pythons-global-interpreter-lock-gil-mechanism-benefits-and-limitations-4aha</link>
      <guid>https://forem.com/ohdylan/understanding-pythons-global-interpreter-lock-gil-mechanism-benefits-and-limitations-4aha</guid>
      <description>&lt;p&gt;Global Interpreter Lock (GIL) is a critical component of implementing Python. It plays an important role in the way Python manages concurrent execution, protecting shared resources from potential race conditions. In this article, we will dive into how the GIL works, why it exists, its benefits, and the limitations it imposes on multi-threaded Python programs.&lt;/p&gt;

&lt;p&gt;Why does GIL even exist?&lt;/p&gt;

&lt;p&gt;The primary reason for the GIL’s existence is CPython’s memory management (CPython is the interpreter and compiler of Python) and its internal data structures. The GIL ensures that only one thread executes Python bytecode (central) at a time, preventing concurrent access to these data structures, which could result in inconsistent states and memory corruption. Without the GIL, developers would have to manage the complexities of fine-grained locking manually, making Python code more prone to subtle concurrency bugs.&lt;/p&gt;

&lt;p&gt;The GIL allows Python to use a simple and efficient memory management system. Reference counting, which is the primary memory management strategy, becomes straightforward with the GIL since objects cannot be accessed concurrently.&lt;/p&gt;

&lt;p&gt;Besides, the GIL also helps simplify the development of CPython extensions by providing a stable execution environment for C code. Extension developers don’t need to worry about managing the GIL explicitly since Python will release it when executing C extensions.&lt;/p&gt;

&lt;p&gt;GIL ensures compatibility with several C libraries that are not designed to be thread-safe. Without the GIL, interacting with these libraries from Python threads could lead to unexpected behavior.&lt;/p&gt;

&lt;p&gt;However, there are reasons that people are always complaining that Python is not performing well.&lt;/p&gt;

&lt;p&gt;Due to the GIL’s global lock, Python threads cannot take full advantage of multi-core processors for CPU-bound tasks. Only one thread can execute Python bytecode at a time, which limits the potential performance improvements from multiple cores.&lt;/p&gt;

&lt;p&gt;Developers often resort to using multiple processes instead of threads in order to overcome this limitation. The multiprocessing module (you can check the Python docs here) allows developers to take advantage of multiple CPU cores by using different Python processes.&lt;/p&gt;

&lt;p&gt;Python’s GIL is less restrictive for I/O-bound tasks (where threads may spend considerable time waiting for external resources), such as network requests or file I/O. In such scenarios, the GIL is less likely to be a bottleneck. GIL will get released when I/O is happening, meaning that the threads can do parallel tasks (however processing is another story).&lt;/p&gt;

&lt;p&gt;Let’s consider a simple example that demonstrates the GIL’s behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;count_up&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Create two threads
&lt;/span&gt;    &lt;span class="n"&gt;thread1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;count_up&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Thread 1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;thread2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;count_up&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Thread 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Start the threads
&lt;/span&gt;    &lt;span class="n"&gt;thread1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;thread2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Wait for both threads to finish
&lt;/span&gt;    &lt;span class="n"&gt;thread1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;thread2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Execution Completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, two threads, t1 and t2, run the count_upfunction concurrently. However, due to the GIL, the output will be like this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thread 1: 0
Thread 1: 1
Thread 1: 2
Thread 1: 3
Thread 1: 4
Thread 2: 0
Thread 2: 1
Thread 2: 2
Thread 2: 3
Thread 2: 4
Execution Completed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The GIL prevents truly parallel execution, and the threads may be executed alternately rather than simultaneously.&lt;/p&gt;

&lt;p&gt;In conclusion, GIL is an essential part of CPython’s design, providing simplicity and safety for memory management. While the GIL limits CPU-bound parallelism, it still allows for effective concurrency in I/O-bound scenarios. Understanding the GIL’s behavior is crucial for writing efficient and responsive multi-threaded Python programs. Developers can also consider using multiple processes through the multiprocessing module to harness the full power of multi-core processors.&lt;/p&gt;

&lt;p&gt;Do follow me if you would like to learn more about my future articles that involve different technologies (I am working on articles for AR/VR development too!). Cheers!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Generating a New IDEA</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Sun, 30 Oct 2022 13:42:31 +0000</pubDate>
      <link>https://forem.com/ohdylan/generating-a-new-idea-3159</link>
      <guid>https://forem.com/ohdylan/generating-a-new-idea-3159</guid>
      <description>&lt;p&gt;Ideas do not fall from the sky.&lt;/p&gt;

&lt;p&gt;We have been telling ourselves that we would definitely start working on something if the opportunity comes. However, many studies have proven that luck doesn’t strike people for no reason. For example, optimists generally have better “luck” as compared to pessimists. There was also another experiment where a $50 dollar note was placed on the floor and picked up by a lady who was not paying attention to her phone while walking after 20 minutes. Coincidence? I don't think so.&lt;/p&gt;

&lt;p&gt;Sames goes to any type of “ideas”. We have to do something to get this inspiration, instead of sitting on the sofa and waiting for them to knock on our doors. So what can we do to find these ideas?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From people around you&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Talk to the people that you want to help solve their problems. For example, I want to serve freelancers as my target audience (as I am a firm believer in the gig economy dominance in the future), therefore I talk to my freelancer friends to understand what kind of pains are they facing throughout their businesses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the forum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I like to browse the forums where my target audience gathers, such as Reddit (with specific subreddit), Facebook groups, and discord channels. I read through their chats and the problems that they have been complaining about. This is a good alternative if you do not have the audience around you physically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal pain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another obvious one would be the issue that you faced day to day. It can be in your work or personal life. Ask yourself: What would be the things that I am willing to pay if someone can help me to do this?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From existing ideas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You do not have to create an original idea from scratch. Notion is not the first note-taking app and Google is not the first search engine. It can be from any existing products that you think at some sort of aspects that you could do better, that might be something you can work on. For example, if the existing products are too costly for smaller businesses to get onboarded, I can help to solve that by adjusting the features to offer, and much more friendly to my target audience (small businesses in this case).&lt;/p&gt;

&lt;p&gt;You do not have to wait for the perfect idea to start. Begin with something small, and you will pivot countless times along the way.&lt;/p&gt;

&lt;p&gt;I have recently faced some issues while communicating with a freelance team on a project. Sometimes, the project management tools are just overkilled for freelance projects (which could be just a few simple tasks), and there is no effective (including cost) communication channel for them as well. Therefore, I would like to create a product, where freelancers can communicate (a real-time chat system) with their clients, and have basic project management tools on the same platform. In that case, they do not have to use and learn so many different tools. Besides, the pricing model would be suitable for freelancers and small projects too, which is charging by days (instead of by month). Therefore, people would not feel so much pressure of having to pay while having no business or project.&lt;/p&gt;

&lt;p&gt;I do not have a super clear features roadmap in terms of this idea yet, therefore I quickly put up a simple Webflow landing page to collect some feedback on this idea. If you faced the same issue, I would really appreciate it if you can help to join the newsletter and help to shape the product along the way. Of course, there would be some special royalty for people who joined this in the early journey. &lt;strong&gt;Check out the landing page here:&lt;/strong&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://frecto.webflow.io/" rel="noopener noreferrer"&gt;
      frecto.webflow.io
    &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Hope to hear from you soon :)&lt;/p&gt;

</description>
      <category>programming</category>
      <category>startup</category>
      <category>challenge</category>
      <category>100daysofcode</category>
    </item>
    <item>
      <title>Career Advice Given by a Technical Director</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Mon, 29 Aug 2022 12:20:44 +0000</pubDate>
      <link>https://forem.com/ohdylan/career-advice-given-by-a-technical-director-1gn7</link>
      <guid>https://forem.com/ohdylan/career-advice-given-by-a-technical-director-1gn7</guid>
      <description>&lt;p&gt;I met with a technical director last week, talking about software engineering in general. He has been one of the smartest people that I know, and an inspiring leader to me. It was great to catch up with him after some time, and I decided to write down his sharing with me.&lt;/p&gt;

&lt;h3&gt;
  
  
  Everyone has imposter syndrome. Literally everyone, including the seniors.
&lt;/h3&gt;

&lt;p&gt;I was sharing with him how sometimes I feel like an imposter where all the engineers around me look smarter than me, etc. He shared with me his previous experience of failing a coding interview and being panicked. Having a little bit of imposter syndrome and being anxious is fine, that’s the motivation to drive you further and work harder. I have also shared with him how I always compare myself with others who have been in the company for more than years. He told me that we should not be thinking about starting to show the work while just joining for a few months. People hired you and might not expect you to perform on the very first day as the processes in companies are different. Just be like a sponge and absorb as much as possible. Sit in, learn and ask people who have been in the company for a longer time.&lt;/p&gt;

&lt;h3&gt;
  
  
  One of the differences between a senior and a junior engineer is that the senior engineer could digest a piece of code more precisely than the junior by just looking at it.
&lt;/h3&gt;

&lt;p&gt;Both senior and junior engineers have to search on Google when writing code, even like “How to implement a hash map in JavaScript”. However, the difference is obvious when both of them were introduced to a block of code, or an issue, the senior is able to spot the crucial piece regarding the root cause fast. The seniors are also able to identify the anti-patterns and being able to guide juniors on how/why they should be changed. This has to be built with experience in the process of reading and writing in the different code bases.&lt;/p&gt;

&lt;h3&gt;
  
  
  It is not just about technical skills to be promoted to a senior engineer, but soft skill matters as well.
&lt;/h3&gt;

&lt;p&gt;Senior engineers have to communicate well with all the team members, especially since they serve as an important layer between the juniors and the managers/leads. They can help to do high-level analysis, and pass on knowledge to the juniors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering managers should not just care about engineers’ job performance, but also about their personal well-being.
&lt;/h3&gt;

&lt;p&gt;He shared with me that one of the roles of an engineering manager is to help the engineers under him/her to unblock things that could hinder them to progress. He tends to make the one-on-one talk with the engineers to be much more casual, checking if they are burned out or having any issues in life. This could make the engineers feel a sense of belonging and encourage the culture of being transparent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do things that make an impact at your company.
&lt;/h3&gt;

&lt;p&gt;The most important part of working in a company is to make sure that the work you do has an impact. A good manager would guide the team into doing higher-impact work. Lower-impact but easy-to-do things are sometimes inevitable. However, we should try our best to avoid works that are low impact and hard to be done. It might be just wasting your time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your manager gets promoted when you are promoted. The same goes for you and the people under you.
&lt;/h3&gt;

&lt;p&gt;When you are climbing the corporate ladder, you might feel that there’s no room for you to move up as your manager is still in his/her position. However, in most cases, the manager will get promoted higher when his/her people are promoted higher. For example, if you are now a manager, and you are able to grow people under you to be a manager, you would eventually grow into the director’s (manager of managers) position. Therefore, the managers will try their best to help people to grow, and be as independent as they go.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus on learning best practices on code structure, and writing tests.
&lt;/h3&gt;

&lt;p&gt;I have also asked for his advice on what should I focus on at this stage of my career. He advised me to learn how to write code in the right and proper way, instead of more languages, or more frameworks. The former could be applied to any programming language that you learn in the future. It is also precious as something that might not be taught in school or in tutorials out there. Besides, always cover your code with unit testing. Start practicing this on every single piece of code that you write.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don’t be chased away by “NO WORK LIFE BALANCE”. It is relative.
&lt;/h3&gt;

&lt;p&gt;When we see someone working from 9 to 8, we might think: “Oh, that’s terrible. Doesn’t the company know what is a work-life balance?” However if engineers from the typical &lt;a href="https://www.scmp.com/tech/big-tech/article/3152363/spreadsheet-sharing-gruelling-hours-chinas-tech-world-goes-viral-996" rel="noopener noreferrer"&gt;“996” working culture&lt;/a&gt; join the company, they might feel they are having the best “work-life balance” ever. More importantly, we should always focus on, what can I learn more from this company. How can I make an impact on work, or influence others? If work-life balance is the only thing that you look at in your 20s, you might be chilling with Netflix in the peak growing period of your life. Under the premise of being healthy, grind hard in your 20s and 30s so that you leave no regrets.&lt;/p&gt;

&lt;p&gt;He also brought this message to me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Software engineering is no different from other types of engineering… things are inherently complicated as time goes by — but the concepts remain similar. If we can look at a vehicle’s engine for example… good engineering makes it maintainable. In order to make it maintainable you need to define a clear structure, boundaries, and processes. The things that change the most often (like engine oil filter), must be easily accessible, and making a change to it should not affect the things that change less often (like the pistons in an engine). It may sound like common sense when you think of a car engine, but the same also applies to software.&lt;/p&gt;

&lt;p&gt;The reality is that engineering is more thinking, testing, trying than writing/doing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lastly, he also shared a framework of career growth as the software engineering manager from this website: &lt;a href="https://www.engineeringladders.com/" rel="noopener noreferrer"&gt;A framework for Engineering Managers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do follow me for future articles on programming, developer productivity, and more topics! Cheers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.medium.com" rel="noopener noreferrer"&gt;Follow me on Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Procrastination? You just need to break down your task.</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Mon, 22 Aug 2022 13:52:00 +0000</pubDate>
      <link>https://forem.com/ohdylan/procrastination-you-just-need-to-break-down-your-task-1pj6</link>
      <guid>https://forem.com/ohdylan/procrastination-you-just-need-to-break-down-your-task-1pj6</guid>
      <description>&lt;p&gt;Have you ever had difficulty maintaining focus while working from home (WFH)? I believe most of us face this issue when we tried to adapt to WFH and I was one of the victims.&lt;/p&gt;

&lt;p&gt;This was what it looks like when I started WFH: I know exactly what task I need to work on, but I just couldn’t get on it. Everything else just seems to be more attractive than the task itself, like cleaning your desk or scrolling through social media, even when you are clearly aware that there is nothing else new for you to look at.&lt;/p&gt;

&lt;p&gt;Due to this, I chose to commute to the office almost every single day, to keep myself more productive. I had finally decided to look at the root cause of it and started to take action.&lt;/p&gt;

&lt;p&gt;There is the only huge reason that this is happening for me:&lt;/p&gt;

&lt;h3&gt;
  
  
  Procrastination caused by Fear
&lt;/h3&gt;

&lt;p&gt;Like I said earlier, I know the things that I have to work on for the day, however, I have no actionable steps for them. The task looks so huge that I just subconsciously escape from it. I would rather do anything else that I can to avoid facing the problem.&lt;/p&gt;

&lt;p&gt;Just an example of a software engineering task: I need to find out what is the reason for a bug that happened yesterday. But the task seems to be too general to start with. If I am not in the office on that day, I will start to tell myself: I need to get myself a cup of coffee before I can start looking at the task, or I shall give myself some time (to relax, to do some house works) before I am ready to look at such a complex troubleshooting task. But the fact is I will never be “ready” to start. There is no perfect timing to start, but creating smaller subtasks will make the change.&lt;/p&gt;

&lt;p&gt;Next time when you receive a task to work on, do not start doing any analysis or brainstorming on the root cause of the issue. Just open up your notepad, and start writing down a step-by-step guide for yourself to tackle the issue. What I can do for the example task mentioned earlier, the task can be broken down into (can be in sequence or not):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find out the exact timing that the bug happened&lt;/li&gt;
&lt;li&gt;Look at the server log to check if there is relevant information&lt;/li&gt;
&lt;li&gt;Check if the bug is replicable in other environments&lt;/li&gt;
&lt;li&gt;Look at the past Jira tickets to see if a similar bug has happened before&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After you have listed out the to-dos for the task, you should have an idea of where to start looking, and procrastination is not going to hit you hard. I have been personally using Notion to keep track of my daily workable tasks, this is an example of my daily to-dos:&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.amazonaws.com%2Fuploads%2Farticles%2Fhlu9w3biaec70am6jpm4.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.amazonaws.com%2Fuploads%2Farticles%2Fhlu9w3biaec70am6jpm4.png" alt="My To-Do List" width="800" height="656"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It seems to be treating yourself like a robot or machine, but this is the best way to beat procrastination based on my personal experience (and yes, I do write out what I want to say during daily stand-up in my to-dos). The reason that I do this is also to prevent myself from spending too much time thinking of what to do while in the midst of deep work.&lt;/p&gt;

&lt;p&gt;If you do also have the problem of focusing while WFH, I do encourage you to try listing out all the tasks before the day starts. It can be as detailed as possible so that our brain is not suffering when we are executing it.&lt;/p&gt;

&lt;p&gt;Do also follow me for more articles on a variety of topics!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.medium.com" rel="noopener noreferrer"&gt;Follow me on Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>writing</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Becoming a Software Developer in 5 Months by being Self-Taught</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Mon, 25 Jul 2022 13:43:00 +0000</pubDate>
      <link>https://forem.com/ohdylan/becoming-a-software-developer-in-5-months-by-being-self-taught-3jo0</link>
      <guid>https://forem.com/ohdylan/becoming-a-software-developer-in-5-months-by-being-self-taught-3jo0</guid>
      <description>&lt;p&gt;I started my journey of learning in 2019 and spent around 5 months landing my first software developer job. This is a quick recap and I hope it might help some of you who wish to get started (especially those who do not have a CS degree).&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning
&lt;/h2&gt;

&lt;p&gt;First of all, I do not have a Computer Science degree (but I am a degree holder, just not related). I started by just sitting in front of the computer, searching on Udemy platform (I am not sponsored), and bought this course: The Web Developer Bootcamp, instructed by Colt Steele. This course gave me a good insight into how web development works overall. You get to build a basic full stack web app that you can extend the functionalities, and eventually make it as part of your own portfolio.&lt;br&gt;
Besides this, I will also recommend picking up a front-end framework, and React is still one of the most popular ones in the job market. Check out the courses for React on Udemy as well and watch the preview videos of them first. You might want to know the capstone projects that these courses are building since they will be your portfolio for showcasing.&lt;br&gt;
If you want to get more exposure to the full stack, I suggest taking up a MERN stacks course (MongoDB, Express, React, Node.js). With these technologies, you will be able to build more interesting projects to demonstrate your skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building
&lt;/h2&gt;

&lt;p&gt;This is a crucial part to land your first job. Show off the projects you built while or after learning. There are several approaches to this:&lt;br&gt;
Follow through the projects built in taken courses&lt;br&gt;
Volunteer to build a website for someone&lt;br&gt;
Collaborate with other developers (Some of the courses do have communities for the learners. Make use of them!)&lt;/p&gt;

&lt;p&gt;After building the projects, put them onto GitHub, and write a nice readme for each of them.&lt;br&gt;
The next would be your LinkedIn profile. If you are collaborating with others, or you did build a website for someone, ask for their help to give a recommendation on your LinkedIn! This will definitely help you to stand out from the competition. Link GitHub to your LinkedIn profile as well, so that recruiters or hiring managers could easily see what you got.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resume
&lt;/h2&gt;

&lt;p&gt;Time to write your resume! I would suggest trying to keep the contents within a page since you do not have much experience in this field for showcasing. Do put in the highlighted projects (as in the projects you really want to show), and give a very brief summary of the technologies used. Remember to also include your GitHub, LinkedIn profile, and your portfolio website (if you have one).&lt;br&gt;
You may now start applying for jobs on LinkedIn, or any other local platform for your country.&lt;/p&gt;

&lt;p&gt;I know sometimes it's hard to force yourself to be disciplined to just sit in front of the computer after a tiring day's job. I had been there but I knew this is something that I shall not regret.&lt;br&gt;
Keep it up and you may ping me on LinkedIn if you are unsure of what to do, or need some motivation and suggestions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.medium.com" rel="noopener noreferrer"&gt;Follow me on Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Amazon 6-Pager</title>
      <dc:creator>Dylan Oh</dc:creator>
      <pubDate>Fri, 08 Apr 2022 15:26:00 +0000</pubDate>
      <link>https://forem.com/ohdylan/amazon-6-pager-b5d</link>
      <guid>https://forem.com/ohdylan/amazon-6-pager-b5d</guid>
      <description>&lt;p&gt;It has been a while since my last article. I have just gotten some new offers and decided to move on with one. Hard decision as I love all my colleagues at the current work place but it is a very rare and challenging position thus the decision was made. Hope all of you are doing great as well :)&lt;/p&gt;

&lt;p&gt;Write up a short one to introduce something that came across my desk when I was reading a book "I Saw the Future At Amazon" by JJ Park (I am not sure whether this is the name of the book, as it was originally translated from Korean), called the "6-pager".&lt;/p&gt;

&lt;p&gt;Traditionally (or what most of us do), we use Powerpoint presentation to present some business ideas, case studies, with all the point forms being listed in the slides. As the presenter, we then elaborate from the points by speech. For these occasions, some people might end up doing the slides at the very last minutes, and improvise during the presentation. This always ends up with an ineffective meeting as most of the participants do not get the clear picture of the discussion, including the presenter. &lt;/p&gt;

&lt;p&gt;In this book, the author introduced how Amazon does this as the presenter will be preparing a 6 pages of "transcript", written properly to describe in depth on the topics to be discussed in the meetings, as if anyone could fully understand without participating in the meeting. When the meeting starts, each of the participants will receive a set of 6-pager, and everyone reads the transcript for 15-30 mins, without anyone making noise. They will jot down the questions that they have, instead of asking the presenter directly like in a PPT presentation which sometimes interrupt the presentation. They might even find the answers in the following pages of the transcript themselves after reading the whole document. When the participants finish reading the 6-pager, the presenter doesn't have to go through all the details again, but proceed to the Q&amp;amp;A session. &lt;/p&gt;

&lt;p&gt;Besides, when we finished the PPT presentation, we sent the presentation slides to the participants for their reference. However, the slides only contain the main points, which they don't get the notes from the presenter. With 6-pager, the presenter has to properly prepare and write up the transcript in order to describe everything by words, so that all of the contents could be referred back in the future. &lt;/p&gt;

&lt;p&gt;I found this method amazing, did a search up on the internet and saw an amazing article by Jesse Freeman, which gives a complete walkthrough and strategies of applying this 6-pager method. You can check out this article &lt;a href="https://writingcooperative.com/the-anatomy-of-an-amazon-6-pager-fc79f31a41c9" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That's it for the sharing today! I have started diving into the development of dApps and Web3 related technologies and I can't wait to share more with you guys when the time comes. I shall try my best to translate them in a beginner-friendly way to you guys and all of my non-technical friends who are interested in blockchain technology. Stay tune!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dylanoh.medium.com" rel="noopener noreferrer"&gt;Follow me on Medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>web3</category>
      <category>beginners</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
