<?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: Alam Asy'arie</title>
    <description>The latest articles on Forem by Alam Asy'arie (@alamasyarie).</description>
    <link>https://forem.com/alamasyarie</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%2F595930%2Fee1aa20b-80c6-4ca6-a4a4-9ecb976bf9ac.jpg</url>
      <title>Forem: Alam Asy'arie</title>
      <link>https://forem.com/alamasyarie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alamasyarie"/>
    <language>en</language>
    <item>
      <title>HtDP Helped Me Discover DDD Without Ever Mentioning It</title>
      <dc:creator>Alam Asy'arie</dc:creator>
      <pubDate>Mon, 05 Jan 2026 11:54:43 +0000</pubDate>
      <link>https://forem.com/alamasyarie/htdp-helped-me-discover-ddd-without-ever-mentioning-it-apn</link>
      <guid>https://forem.com/alamasyarie/htdp-helped-me-discover-ddd-without-ever-mentioning-it-apn</guid>
      <description>&lt;p&gt;I have never read &lt;em&gt;Domain-Driven Design: Tackling Complexity in the Heart of Software&lt;/em&gt; by Eric Evans. I had only skimmed a few articles about it, which felt abstract and disconnected from actual programming. Even after revisiting some of the most popular DDD articles, I found many of them overly complex or exaggerated. HtDP clarified these ideas for me in a way that no article could.&lt;/p&gt;

&lt;h2&gt;
  
  
  Language Is a Tool, Not a Goal
&lt;/h2&gt;

&lt;p&gt;Many beginners—including myself—start their programming journey by asking: "Which language should I learn?" Python? JavaScript? Go? This often leads to focusing on syntax over actual problem-solving—a distraction from what truly matters. What matters more is the &lt;em&gt;thinking framework&lt;/em&gt; for using those tools to solve real problems.&lt;/p&gt;

&lt;p&gt;Consider someone learning carpentry by mastering the use of saws, hammers, and planes without understanding construction principles or reading blueprints. They may cut wood neatly, but they will not be able to build a solid house. Programming works the same way: mastering a language first is not the best approach when learning to program.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Often-Forgotten Order: Data → Program → Solution
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Program design—but not programming—deserves the same role in a liberal-arts education as mathematics and language skills.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just as in solving a math problem, we first identify what is given and what is being asked before attempting the solution. The same discipline applies in &lt;em&gt;How to Design Programs&lt;/em&gt;. In math, this is known as structured problem solving; in HtDP, it is called systematic design thinking.&lt;/p&gt;

&lt;p&gt;HtDP teaches something radical: before writing code, define your data (the "given"). This is not merely about specifying types like &lt;code&gt;int&lt;/code&gt; or &lt;code&gt;string&lt;/code&gt;; it is about understanding the structure of information in the domain and representing it in the chosen programming language. The order taught by HtDP is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Definition&lt;/strong&gt; – What information are we dealing with? How does its structure reflect the real world?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Program&lt;/strong&gt; – How do we process or transform this information?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt; – The concrete implementation that solves the problem.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notably, the first stage says nothing about programming languages. Its focus is understanding the domain itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Itemization: A Gateway to Semantics
&lt;/h2&gt;

&lt;p&gt;One concept from HtDP is &lt;em&gt;itemization&lt;/em&gt;. Initially, it seems simple—representing data that can take several possible values—but the deeper you study it, the more profound its implications.&lt;/p&gt;

&lt;p&gt;How does itemization differ from enumeration? Enumeration is a closed, fixed list of values, such as days of the week. Itemization, on the other hand, is a way of representing &lt;strong&gt;all possible forms or cases of a data type&lt;/strong&gt;, allowing programs to handle every scenario in the domain.&lt;/p&gt;

&lt;p&gt;For example, consider an &lt;code&gt;Order&lt;/code&gt; that can go through several states: &lt;code&gt;Init&lt;/code&gt;, &lt;code&gt;Delivered&lt;/code&gt;, &lt;code&gt;Done&lt;/code&gt;, and &lt;code&gt;Cancel&lt;/code&gt;. At first glance, one might treat these states as an enumeration—a simple list of possible values. However, when we apply itemization, we recognize that &lt;code&gt;Cancel&lt;/code&gt; is not just another fixed value. It represents a branch in the domain where additional information might be required, such as &lt;strong&gt;who canceled the order, when, and why&lt;/strong&gt;. Unlike &lt;code&gt;Init&lt;/code&gt; or &lt;code&gt;Done&lt;/code&gt;, which are straightforward, &lt;code&gt;Cancel&lt;/code&gt; carries &lt;strong&gt;contextual data&lt;/strong&gt; that cannot be captured by a simple enum.&lt;/p&gt;

&lt;p&gt;This illustrates why itemization is more than a fixed list: it encourages us to model &lt;strong&gt;all variations and structures within the domain&lt;/strong&gt;, ensuring our program can handle every case meaningfully. Enumeration is static; itemization is &lt;strong&gt;domain-aware and extensible&lt;/strong&gt;, reflecting the real-world complexity of the system we are modeling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Definition as a Bridge to the Domain
&lt;/h2&gt;

&lt;p&gt;Well-defined data is not merely a technical concern; it captures the essence of the problem to be solved. We translate real-world concepts—with all their complexity and nuance—into structures that computers can understand and process.&lt;/p&gt;

&lt;p&gt;This is precisely what DDD emphasizes: deep understanding of the domain, collaboration with domain experts, and creating models that reflect domain knowledge. HtDP introduces these principles at a fundamental level, long before the complexity of enterprise systems arises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Returning to Fundamentals
&lt;/h2&gt;

&lt;p&gt;My experience with HtDP reminded me of the often-overlooked power of foundational literature. &lt;em&gt;How to Design Programs&lt;/em&gt; is not “old” or “theoretical.” It shapes thinking in a way that endures, regardless of programming languages or trendy frameworks.&lt;/p&gt;

&lt;p&gt;Languages change, frameworks come and go, but the ability to understand a problem, define data precisely, and build elegant solutions—that is what distinguishes a good programmer from someone who merely writes code.&lt;/p&gt;

&lt;p&gt;Start with the problem. Understand your domain. Carefully define and refine your data through itemization. Only then write your program. That is the lesson of HtDP, which, without realizing it, embodies the essence of Domain-Driven Design.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you until the next discovery.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Learning Programming as Paying Debt, Not Investment</title>
      <dc:creator>Alam Asy'arie</dc:creator>
      <pubDate>Wed, 31 Dec 2025 16:36:20 +0000</pubDate>
      <link>https://forem.com/alamasyarie/learning-programming-as-debt-not-investment-21gb</link>
      <guid>https://forem.com/alamasyarie/learning-programming-as-debt-not-investment-21gb</guid>
      <description>&lt;p&gt;It is the end of 2025.&lt;br&gt;&lt;br&gt;
More than two years have passed since I started learning programming on my own through the internet. And like the years before, I still feel as if I have made no real progress.&lt;/p&gt;

&lt;p&gt;Why does it feel that way?&lt;/p&gt;

&lt;p&gt;I think the answer is simple: for a long time, I did not have a clear &lt;em&gt;unease&lt;/em&gt;—no concrete reason for what I wanted to do with programming itself.&lt;/p&gt;

&lt;p&gt;So I want to trace this back.&lt;br&gt;&lt;br&gt;
Why did I choose to learn programming in the first place?&lt;/p&gt;

&lt;h3&gt;
  
  
  Raison 'd etre
&lt;/h3&gt;

&lt;p&gt;When I was a child, I experienced something close to existential anxiety. I often wondered about my own existence—why I was here, how the world worked. Then one day my parents gave me a game console.&lt;/p&gt;

&lt;p&gt;I saw games as miniature worlds.&lt;/p&gt;

&lt;p&gt;And I was &lt;strong&gt;shaken&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Game creators, in my eyes, had control like gods. They defined rules, physics, rewards, and consequences. A complete world emerged from intention.&lt;/p&gt;

&lt;p&gt;Years later, in junior high school, I encountered a computer for the first time. I am 37 now, so I still remember what it felt like: inserting a floppy disk, typing commands, and suddenly gaining access to something powerful.&lt;/p&gt;

&lt;p&gt;I was &lt;strong&gt;shaken again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Somehow, I felt there was a connection between games and computers. At the very least, they both shared a screen—but intuitively, I sensed something deeper. From that moment on, I wanted to understand computers the same way I wanted to understand the world.&lt;/p&gt;

&lt;p&gt;By the end of high school, that desire had not faded. At the time, computer science was a highly sought-after major. Many parents wanted their children to study it. &lt;/p&gt;

&lt;p&gt;But university required money. I was the first child, and my parents were still struggling financially. For three years I tried to save enough to enroll, and for three years I failed. Eventually, I gave up. Slowly, the idea of programming slipped out of my life.&lt;/p&gt;

&lt;p&gt;When we are young and broke we tend to forget our deepest curiosities just to survive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Déja vu
&lt;/h3&gt;

&lt;p&gt;Years later, a random video appeared on my YouTube feed: a roadmap to becoming a web developer. I watched it.&lt;/p&gt;

&lt;p&gt;And I was &lt;strong&gt;shaken once more&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I realized something fundamental had changed. Access was now open. Anyone could learn—without formal education, without permission. The cost, however, was direction. You could learn anything, but you might not know &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I jumped in enthusiastically. HTML, CSS, then JavaScript. At first, everything felt exciting. But HTML and CSS quickly bored me, and JavaScript felt like an endless maze.&lt;/p&gt;

&lt;p&gt;Days turned into months. Months into years. I kept learning, yet the result felt like nothing. Not because I learned nothing—but because I felt stuck in the same place. &lt;/p&gt;

&lt;p&gt;I fell into tutorial hell.&lt;br&gt;
I jumped between languages and roles.&lt;br&gt;
I watched others who started at the same time move faster, build more, achieve more.&lt;/p&gt;

&lt;p&gt;Only much later did I realize the real problem. I was learning without direction. And more importantly, I was learning for the wrong reason.&lt;/p&gt;

&lt;p&gt;My motivation was never to &lt;em&gt;build products&lt;/em&gt;. I wanted to understand what was inside a computer—how something so seemingly lifeless could exhibit god-like power. I wanted knowledge, not output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rénaissance
&lt;/h2&gt;

&lt;p&gt;This is where the idea of &lt;em&gt;debt&lt;/em&gt; becomes clear to me.&lt;/p&gt;

&lt;p&gt;Learning programming, for me, is not an investment aimed at future returns. It is the repayment of a debt from the past—a debt created when I wanted to learn computers but could not.&lt;/p&gt;

&lt;p&gt;Whether this journey leads to a job or not is secondary. What matters is that the debt is paid: that I finally &lt;em&gt;know&lt;/em&gt; the computer.&lt;/p&gt;

&lt;p&gt;Employment, if it comes, is a side effect. Joke aside, I want my path to be more functional—so I intentionally ignore side effects.&lt;/p&gt;

&lt;p&gt;So in 2026, I am starting over—not from zero, but with a corrected direction. I will treat curiosity as my currency. Not portfolios. Not market demand. Curiosity only.&lt;/p&gt;

&lt;p&gt;I have chosen a curriculum that feels honest and solid: &lt;a href="https://teachyourselfcs.com" rel="noopener noreferrer"&gt;teachyourselfcs&lt;/a&gt;, with selective additions from &lt;a href="https://github.com/ossu/computer-science" rel="noopener noreferrer"&gt;Open Source Society University&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OSSU&lt;/strong&gt;, in full, feels too heavy for me. Instead, I will focus on TYSCS combined with &lt;em&gt;How to Design Programs&lt;/em&gt; and &lt;em&gt;Concepts, Techniques, and Models of Computer Programming&lt;/em&gt; from OSSU's reading material. Both books genuinely interest me.&lt;/p&gt;

&lt;p&gt;There is a saying: a man’s life begins at 40.&lt;br&gt;
So my deadline is two years.&lt;/p&gt;

&lt;p&gt;By the time I turn 40, I hope to have completed this journey and my debt will have been fully settled.&lt;/p&gt;

&lt;p&gt;Even if I do not finish everything, completing HtDP, SICP, CSAPP, and CTMCP would already feel foundational. CS:APP alone might be enough to understand how an iron box becomes a &lt;em&gt;world&lt;/em&gt;. But the other books address something deeper—how to think, not just how to build.&lt;/p&gt;

&lt;p&gt;It is often said that programming is about create something, not what you learn. That statement is correct—very correct. But in my case, the priority is different. I want to understand before I create. I am not interested in &lt;em&gt;playing God&lt;/em&gt; yet.&lt;/p&gt;

&lt;p&gt;That is why writing essays makes more sense for me than building portfolios. Essays externalize understanding. They force clarity. They turn vague intuition into articulated thought. Writing is how I will prove—to myself—that the debt is being paid.&lt;/p&gt;




&lt;p&gt;This essay marks the beginning of my two-year journey.&lt;br&gt;&lt;br&gt;
If there is something worth sharing along the way—something I truly &lt;em&gt;understand&lt;/em&gt;—I will write again.&lt;/p&gt;

&lt;p&gt;Happy New Year’s Eve 🥳&lt;/p&gt;

</description>
      <category>programming</category>
      <category>computerscience</category>
    </item>
  </channel>
</rss>
