<?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: Tawhid</title>
    <description>The latest articles on Forem by Tawhid (@dumboprogrammer).</description>
    <link>https://forem.com/dumboprogrammer</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%2F769183%2F05aa538e-de7b-4164-998a-be08ed953e50.png</url>
      <title>Forem: Tawhid</title>
      <link>https://forem.com/dumboprogrammer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dumboprogrammer"/>
    <language>en</language>
    <item>
      <title>7 Underrated Open Source Tools That Will Actually Make You a Better Developer</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Mon, 18 Aug 2025 06:45:03 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/7-underrated-open-source-tools-that-will-actually-make-you-a-better-developer-8lm</link>
      <guid>https://forem.com/dumboprogrammer/7-underrated-open-source-tools-that-will-actually-make-you-a-better-developer-8lm</guid>
      <description>&lt;p&gt;We've all heard of the usual suspects: Git, VS Code, Docker. Great tools, but there's also a second layer of tiny open-source tools operating behind the scenes to speed up development, reduce friction, and minimize the day's annoyance. Seven of these are listed below, why you'll find them useful, how to install them in seconds, and a tiny sample to get you productive right away.&lt;/p&gt;

&lt;p&gt;1) &lt;code&gt;fzf&lt;/code&gt; - the terminal fuzzy finder that actually changes how you navigate&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: an interactive Fuzzy Finder for the terminal. Use it to quickly jump between files, command history, git commits, process lists, etc. It’s insanely flexible and integrates with shell workflows and editors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: instead of remembering exact paths or typing find/ls pipelines, you type a few fuzzy characters and &lt;code&gt;fzf&lt;/code&gt; finds the result,  saves time and cognitive load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install (macOS / Linux / Windows with WSL):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS (Homebrew)
brew install fzf
# Ubuntu
sudo apt install fzf
# Or use the installer to enable shell integration
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;: find a file and open it with your &lt;code&gt;$EDITOR&lt;/code&gt;:&lt;br&gt;
&lt;code&gt;$ vim $(fzf)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use&lt;/strong&gt;: navigation, interactive filters, quick-selection UIs in scripts. Great with fd, rg, or git commands.&lt;/p&gt;

&lt;p&gt;2) &lt;code&gt;bat&lt;/code&gt; - a way-better cat with syntax highlighting and Git awareness&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: a cat clone that adds syntax highlighting, line numbers and Git modification markers. It makes reading files in the terminal pleasant.&lt;br&gt;
&lt;strong&gt;Why it helps&lt;/strong&gt;: quickly skimming a file in terminal becomes readable; useful in code reviews or when exploring unfamiliar repos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS
brew install bat
# Ubuntu (example)
sudo apt install bat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# show file with syntax highlighting and paging
bat src/main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: some distros name the binary &lt;code&gt;batcat&lt;/code&gt; to avoid conflicts - check your package manager. Use in pipelines like &lt;code&gt;bat file | less&lt;/code&gt; if you prefer a pager.&lt;/p&gt;

&lt;p&gt;3) &lt;code&gt;tldr&lt;/code&gt; - documentation that doesn’t make you cry&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What it is&lt;/em&gt;*: community-driven, simplified examples for common CLI tools. If the man page is a novel, tldr gives you short, copy-paste examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: ideal when you only need a few common usage examples for a tool (e.g., &lt;code&gt;tar&lt;/code&gt;, &lt;code&gt;rsync&lt;/code&gt;, &lt;code&gt;openssl&lt;/code&gt;) instead of parsing the whole man page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install (one of many clients)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Node-based client
npm install -g tldr
# Or on many systems:
brew install tldr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tldr tar
# -&amp;gt; shows short examples like 'tar -xzf archive.tar.gz' and similar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: there are fast Rust clients (e.g., &lt;code&gt;tealdeer&lt;/code&gt;) if you want speed.&lt;/p&gt;

&lt;p&gt;4) &lt;code&gt;Glances&lt;/code&gt; - one tool to monitor CPU, RAM, disk, network and more&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: cross-platform system monitoring tool (&lt;code&gt;top&lt;/code&gt;/&lt;code&gt;htop&lt;/code&gt; alternative) that consolidates system stats into one dashboard. Useful for dev servers and local performance checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: when debugging slow builds, flaky containers, or noisy background processes, Glances gives an at-a-glance status without opening multiple tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install (Python-based)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install glances
# or use package manager (apt/brew) for system packages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glances
# opens an ncurses dashboard with CPU, memory, disk, network, processes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: Glances can run as a web server or export stats to InfluxDB if you want long-term monitoring.&lt;/p&gt;

&lt;p&gt;5) &lt;code&gt;HTTPie&lt;/code&gt; - an HTTP client that reads like prose (and is great for APIs)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: a human-friendly command-line HTTP client for testing APIs. It formats requests/responses nicely and has intuitively readable syntax. Perfect for quick API testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: much easier than remembering &lt;code&gt;curl&lt;/code&gt; flags when making JSON requests, sending auth headers, or debugging endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install httpie
# or use your package manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# GET
http https://api.example.com/users
# POST JSON
http POST api.example.com/users name="Tawhid" email="you@example.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6) &lt;code&gt;delta&lt;/code&gt; - readable, GitHub-like diffs in your terminal&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: a syntax-highlighting pager for &lt;code&gt;git diff&lt;/code&gt;/ &lt;code&gt;git show&lt;/code&gt; that renders diffs so they’re easier to read (side-by-side, with intra-line highlighting). If you spend time reading diffs, delta pays back minutes every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: default diffs are hard to parse; &lt;code&gt;delta&lt;/code&gt; brings color, clearer context and optional side-by-side rendering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS
brew install git-delta
# Or download prebuilt binaries from the releases page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example (config git to use delta)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global core.pager "delta --dark"
git config --global interactive.diffFilter "delta --color-only"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;When not to use&lt;/strong&gt;: if you need raw diffs for scripts, keep the raw output; &lt;code&gt;delta&lt;/code&gt; is for human consumption.&lt;/p&gt;

&lt;p&gt;7) &lt;code&gt;ripgrep (rg)&lt;/code&gt; - the &lt;code&gt;grep&lt;/code&gt; replacement that actually respects your repo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: a fast, line-oriented search tool that recursively searches directories while respecting &lt;code&gt;.gitignore&lt;/code&gt;. It combines speed with usability for codebases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it helps&lt;/strong&gt;: faster than many alternatives in realistic developer workflows, and by default ignores binary and hidden files - so your search results are relevant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS
brew install ripgrep
# Ubuntu
sudo apt install ripgrep
# Or cargo install ripgrep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Quick example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# search for function name across project
rg "calculateScore" src/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;: &lt;code&gt;ripgrep&lt;/code&gt; is not always faster than grep in every single scenario (depends on I/O patterns and arguments), but it’s optimized for common codebase searches.&lt;/p&gt;

&lt;p&gt;Big frameworks and IDEs are awesome, but a lot of day-to-day developer productivity comes from small friction reductions: faster search, readable diffs, understandable examples, and clean terminals. These open-source tools aren’t flashy, they’re practical. Invest a few minutes setting one up and you’ll feel the payoff in every subsequent hour of work.&lt;/p&gt;

&lt;p&gt;Want a one-line starter pack? Try installing fzf, ripgrep, and bat, you’ll notice the difference the same day. (And if you want, I can generate a dotfiles snippet to wire these together in your shell.)&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why We as Programmers Shouldn’t Use AI Art</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Mon, 18 Aug 2025 06:25:59 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/why-we-as-programmers-shouldnt-use-ai-art-3fnj</link>
      <guid>https://forem.com/dumboprogrammer/why-we-as-programmers-shouldnt-use-ai-art-3fnj</guid>
      <description>&lt;p&gt;AI art is everywhere these days. Type in a prompt, and boom. You’ve got a “masterpiece” in seconds. It feels magical, but also… kind of wrong. And as programmers, I think we should step back and ask ourselves: is this really the kind of creativity we want to support?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Because if anyone understands what it means to &lt;em&gt;create&lt;/em&gt;, it’s us.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Code Is Art Too
&lt;/h2&gt;

&lt;p&gt;People outside our world often think coding is just math and rules; cold, logical, robotic. But you and I know that’s not true. Writing good code feels a lot like writing poetry, painting, or composing music. Because, it is just that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We agonize over function names like a poet over word choice.&lt;/li&gt;
&lt;li&gt;We refactor messy blocks of logic the same way a sculptor chips away at stone.&lt;/li&gt;
&lt;li&gt;We structure systems so they’re elegant, not just functional, like a designer shaping form and function together.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code can be beautiful. Code can be art. And if we believe that, then we’re artists too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With AI Art
&lt;/h2&gt;

&lt;p&gt;Here’s the thing about AI art: it doesn’t actually create. It doesn’t wrestle with ideas, make mistakes, or carry intention. It just chews up huge amounts of human-made work—art that real people put hours, years, sometimes entire lives into, and spits out something “new.”&lt;br&gt;
It’s basically remixing without asking. And if you’ve ever had someone rip off your code without credit, you know how bad that feels. Now imagine that happening on a global scale to entire communities of artists.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Should Get It More Than Anyone
&lt;/h2&gt;

&lt;p&gt;As programmers, we’ve been there. We know the difference between throwing together spaghetti code and carefully crafting something that’s a joy to use and maintain. We know what it feels like to build something from scratch and feel proud of it.&lt;/p&gt;

&lt;p&gt;That’s the same pride artists have in their work. And just like we’d hate to see our craft treated as disposable or easily replaced, they deserve the same respect.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What Do We Do?
&lt;/h2&gt;

&lt;p&gt;I’m not saying AI tools are evil. They can be fun, even useful. But when it comes to art, we should think twice. If the tool is built on the unpaid labor of thousands of creators, maybe that’s not something we want to normalize.&lt;/p&gt;

&lt;p&gt;Because at the end of the day, we’re artists too. And artists should have each other’s backs.&lt;/p&gt;

&lt;p&gt;If we really believe code is art, then we should treat other forms of art, and the people behind them, with the same respect we expect for ourselves.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>What tech stacks do you guys use ?</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Sat, 02 Aug 2025 05:12:14 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/what-tech-stacks-do-you-guys-use--5g85</link>
      <guid>https://forem.com/dumboprogrammer/what-tech-stacks-do-you-guys-use--5g85</guid>
      <description>&lt;p&gt;I asked this question a few years ago, but while revisiting my old blog posts, I got curious again: what tech stacks do you use for web development these days?&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>discuss</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Rise of "Objective" Opinions in Tech Content, And Why You Should Care</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Mon, 28 Jul 2025 20:41:34 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/the-rise-of-objective-opinions-in-tech-content-and-why-you-should-care-5ggi</link>
      <guid>https://forem.com/dumboprogrammer/the-rise-of-objective-opinions-in-tech-content-and-why-you-should-care-5ggi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Development is a craft. Think like a developer, not a follower.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"Never use Redux again."&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;"React is dead, switch to SolidJS."&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;"Here's why this framework will double your productivity."&lt;/strong&gt;&lt;br&gt;
Sound familiar?&lt;/p&gt;

&lt;p&gt;If you've been surfing the web, YouTube, dev.to, or Medium lately, you've probably read headlines such as these delivered with the assurance of gospel truth. The line between subjective experience and objective truth is increasingly blurred on a daily basis, especially in the field of programming content.&lt;/p&gt;

&lt;p&gt;Let’s talk about that.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Opinions Masquerade as Facts
&lt;/h2&gt;

&lt;p&gt;The online dev community is full of passionate people. Fortunately. Passion has a tendency to be redefined as &lt;em&gt;truth&lt;/em&gt;, though, especially when one's got something to sell - be it a blog, a camera, or a product.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I didn’t like X in my last project.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“X is a terrible tool. Don’t use it. Ever.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is fine to hate a tool. But when writers, especially &lt;strong&gt;professional developers&lt;/strong&gt;, &lt;strong&gt;influencers&lt;/strong&gt;, and &lt;strong&gt;content creators&lt;/strong&gt;, set forth these stances without context, nuance, or caveat, they accumulate to dogma in technology. It fosters a culture of "right" vs. "wrong" in doing it this way, rather than just working with trade-offs.&lt;/p&gt;



&lt;h2&gt;
  
  
  YouTube: The Home of Overconfident Hot Takes
&lt;/h2&gt;

&lt;p&gt;YouTube is packed with informative dev content, but it's also full of videos like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;"You’re still using Node.js? You’re doing it wrong."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Tailwind is garbage — here’s why I never use it."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Stop using Express.js in 2025."&lt;br&gt;
Are these inherently wrong? Not necessarily.&lt;br&gt;
But most of the time, they’re clickbait-heavy and experience-poor. You’ll often find:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Junior devs or career switchers repeating opinions they read somewhere else&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bold claims that lack benchmarks, context, or industry usage stats&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Videos that tear down a tool just to promote another one (often with an affiliate link.)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These videos tend to &lt;strong&gt;oversimplify complex decisions&lt;/strong&gt; and &lt;strong&gt;overcomplicate simple decisions&lt;/strong&gt;, choosing a framework, API style, or hosting solution, into black-and-white answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blogs: When Content is Just a Sales Pitch
&lt;/h2&gt;

&lt;p&gt;Let’s talk about developer blogs: including big platforms like dev.to, Hashnode, or Medium.&lt;/p&gt;

&lt;p&gt;There’s a growing trend of posts that look like tutorials, but are really &lt;strong&gt;covert product plugs&lt;/strong&gt;. Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A "guide" on building authentication... that just happens to be all about this new API-as-a-Service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Why we moved from X to Y” blog posts… that just happen to be written by an employee at Company Y.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;“Top 5 JavaScript tools you need in 2025” — 3 of which are made by the same company, and all have paid tiers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't inherently bad, developers need to make money, and tools need exposure.&lt;br&gt;
But &lt;strong&gt;transparency matters.&lt;/strong&gt;&lt;br&gt;
If you're promoting a tool, say so.&lt;br&gt;
If you're writing a tutorial, don’t bury three affiliate links and pretend it’s a neutral recommendation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does This Matter
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Junior developers get confused.&lt;br&gt;
When someone’s new, they often don’t know how to filter hype from reality. A post saying “Don’t ever use React Query” might scare someone off a perfectly good tool because the author didn’t like the docs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We stop learning how to think critically.&lt;br&gt;
Part of being a good developer is learning to weigh trade-offs. When content is all about absolutes, we lose that habit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ecosystem becomes more about narrative than facts.&lt;br&gt;
Some tools get hyped to death (hi, Bun), while stable, boring solutions (hi, Express) get dumped on, even if they work just fine.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What You Can Do
&lt;/h2&gt;

&lt;p&gt;Whether you’re consuming or creating content, here are a few simple ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Read critically&lt;br&gt;
Ask: What’s the author’s experience? Are they using real examples? Do they explain the trade-offs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Beware of strong claims&lt;br&gt;
If someone says “X is better than Y” — ask, in what context? For what use case?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Look for discourse, not dogma&lt;br&gt;
Good tech content welcomes disagreement. Bad content shuts it down.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reflect your bias (if you’re writing)&lt;br&gt;
If you love SvelteKit, awesome. Say that. But don’t pretend it’s “objectively” better than Next.js unless you’ve tested both deeply.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up: More Nuance, Less Noise
&lt;/h2&gt;

&lt;p&gt;Tech isn’t a religion. It’s a craft.&lt;br&gt;
We need more humble opinions, more curiosity, and less shouting from digital rooftops.&lt;br&gt;
Because the truth is: most decisions in software are subjective.&lt;br&gt;
And that's okay.&lt;br&gt;
So next time you see a bold claim in a video or a post, take a breath.&lt;br&gt;
Ask questions. Look for context. Read the comments (okay, maybe not YouTube’s ).&lt;br&gt;
&lt;strong&gt;Think like a developer, not a follower.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Brainfuck in a nutshell. (and Why Would You Want to Learn It)</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Mon, 28 Jul 2025 18:23:09 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/brainfuck-in-a-nutshell-and-why-would-you-want-to-learn-it-18in</link>
      <guid>https://forem.com/dumboprogrammer/brainfuck-in-a-nutshell-and-why-would-you-want-to-learn-it-18in</guid>
      <description>&lt;p&gt;So you know Python, JavaScript. and then some guy leaned over and said: "Brainfuck."&lt;br&gt;
You laughed. You thought that it was a joke.&lt;br&gt;
Well, it is true.&lt;/p&gt;

&lt;p&gt;And yes the name is 100% intentional.&lt;/p&gt;
&lt;h2&gt;
  
  
  What is Brainfuck?
&lt;/h2&gt;

&lt;p&gt;Brainfuck is a Turing-complete esoteric programming language created by Urban Müller in 1993.&lt;br&gt;
It's as hard to use as humanly (and technically) possible yet still technically able to do anything any other language can do (with a lot of time, patience, and possibly a few tears).&lt;/p&gt;

&lt;p&gt;It's not used to create websites or apps. It's more of a puzzle, a logic gym for brains.&lt;/p&gt;
&lt;h2&gt;
  
  
  How Does It Work?
&lt;/h2&gt;

&lt;p&gt;If you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A line of memory cells that's very long (like a line of small boxes, all set at 0)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A pointer that moves left or right across these boxes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And 8 commands to interact with them&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move pointer to right&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Move pointer to left&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Increment current cell by 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Decrement current cell by 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Print the ASCII character at current cell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;,&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Input a character; store it at current cell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;[&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If current cell is 0, jump past matching ]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;If current cell is not 0, jump to matching [&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's all. No functions, no variables, no comments. Pure, keyboard-bashing chaos.&lt;/p&gt;
&lt;h2&gt;
  
  
  Your First Brainfuck Program: Hello, World!
&lt;/h2&gt;

&lt;p&gt;Here’s the classic &lt;code&gt;"Hello, World!"&lt;/code&gt; in Brainfuck:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;++++++++++[&amp;gt;+++++++&amp;gt;++++++++++&amp;gt;+++&amp;gt;+&amp;lt;&amp;lt;&amp;lt;&amp;lt;-]&amp;gt;++.&amp;gt;+.+++++++..+++.&amp;gt;++.&amp;lt;&amp;lt;+++++++++++++++.&amp;gt;.+++.------.--------.&amp;gt;+.&amp;gt;.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What does this do?&lt;br&gt;
Uh… don’t ask.&lt;br&gt;
But here's a breakdown of just the first part to give you a feel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;++++++++++        // set cell #0 to 10
[                 // start loop
 &amp;gt;+++++++         // move to cell #1, add 7
 &amp;gt;++++++++++      // move to cell #2, add 10
 &amp;gt;+++             // move to cell #3, add 3
 &amp;gt;+               // move to cell #4, add 1
 &amp;lt;&amp;lt;&amp;lt;&amp;lt;-            // move back to cell #0, subtract 1
]                 // loop until cell #0 is zero
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's like attempting to eat soup with a screwdriver. Not intended for the purpose, but worth a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Learn Brainfuck?
&lt;/h2&gt;

&lt;p&gt;Sincerely? You most likely won't require it. But here's why you might consider it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puzzle Addicts: Sudoku in Morse code. Aside from it could be your secret language ;-p&lt;/li&gt;
&lt;li&gt;Brain Gymnastics: It gets you thinking bottom-up, like loops and memory from the ground up.&lt;/li&gt;
&lt;li&gt;Wow Your Nerd Friends: Build a full program using only &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;&amp;gt;&lt;/code&gt;, and others will wonder.&lt;/li&gt;
&lt;li&gt;Get a Deeper Understanding of Computers: You'll get a sense of how computers really work at a far deeper level.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out (No Setup Required)
&lt;/h2&gt;

&lt;p&gt;You may run Brainfuck code in your browser using one of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://copy.sh/brainfuck" rel="noopener noreferrer"&gt;copy.sh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.dcode.fr/brainfuck-language" rel="noopener noreferrer"&gt;Dcode.fr Brainfuck Interpreter&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Or just Google “Brainfuck online interpreter”, they’re everywhere&lt;br&gt;
Paste in the Hello World example and hit run. Boom, you’re a Brainfuck developer now. And then add it on your LinkedIn resume!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Brainfuck is not about practicality.&lt;br&gt;
It's simply a matter of flexing your brain, playing around with code, and chuckling at how silly things get.&lt;br&gt;
If you are bored, curious, or just want to flex, give it a shot. You will not create the next monstrous app in it, but you will certainly get your low-level stripes.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why You Should Try Coding In Rust.</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Mon, 28 Jul 2025 05:54:19 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/why-you-should-try-coding-in-rust-2f81</link>
      <guid>https://forem.com/dumboprogrammer/why-you-should-try-coding-in-rust-2f81</guid>
      <description>&lt;p&gt;If you have spent any time surfing dev Twitter, Github, or any Reddit thread that involves modern programming, you have probably encountered Rust many times. No I am not talking about rust the metal corrosion (but the folks with expertise with Rust will tell you that these memory bugs are equivalent to corrosion). We are talking about the programming language Rust that has been rapidly gaining momentum in software (mostly quietly, and sometimes not so quietly).&lt;/p&gt;

&lt;p&gt;What is the deal with Rust? What's with Google, Microsoft, and even parts of the Linux kernel beginning to bet on Rust? Let's have a look into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Rust: Safety with No Tradeoffs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Rust is all about safety, its big selling point is that it allows you to write hyperfast code without the perilous bugs associated with C and C++, particularly memory management bugs such as null pointer dereferencing, buffer overflows, and use-after-free bugs.&lt;/p&gt;

&lt;p&gt;How does it do that? Enter the borrow checker. You can think of it as Rust's super strick librarian trying to make sure your variables aren't getting accessed in a way that makes your code crash or choke itself a bit. Is it annoying at first (and trust me as a new Rustacean, I do know), but ultimately you will turn that annoyment into livelihood writing Rust code.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Zero-Cost Abstractions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Normally you have to choose. Low-level control or a high-level convenience. Rust says "Why not both?"&lt;/p&gt;

&lt;p&gt;Rust provides you with a lot of features such as pattern matching, traits, enums, and an extremely expressive type system at no performance cost! The compiler is smart enough to drop all the fluff so the end resulting binary is surprisingly lean and mean.&lt;/p&gt;

&lt;p&gt;This means that Rust is good for system programming (operating systems, embedded devices), but also for web services, game engine, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Real-World affection&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let’s talk about adoption. This isn’t just a playground for language nerds anymore:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mozilla created Rust and used it in Firefox’s rendering engine (Servo).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft is exploring Rust for writing secure system components in Windows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Amazon is backing Rust through AWS and using it to build scalable, efficient infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Linux Kernel: that 30-year-old codebase, is slowly adding Rust support. If that’s not a vote of confidence, I don’t know what is.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Devs Are Switching&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s what draws developers to Rust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Memory safety without garbage collection (no runtime surprise costs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Great tooling (Cargo is probably the best package manager/build tool combo out there)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Friendly, helpful community (check out users.rust-lang.org or the Rust subreddit)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fantastic documentation (the Rust Book is basically a masterclass)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But let’s be honest, the learning curve can be steep. Rust makes you think about your code. Ownership, lifetimes, and borrowing are a different beast. But once it clicks? You’re writing code that’s safe, fast, and often surprisingly elegant.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next?
&lt;/h2&gt;

&lt;p&gt;Rust won't just fade away. With large tech companies covering it, a dedicated community, and proven world success stories, it is on track to be a real player in systems and application development.&lt;/p&gt;

&lt;p&gt;Only you can decide whether you are a grizzled C++ veteran tired of dangling pointers or a high level Pythonista that wants to write something that is faster than a caffeinated squirrel, but either way you should give Rust a look.&lt;/p&gt;

&lt;p&gt;You can try Rust out right now with nothing to install. Just &lt;a href="https://play.rust-lang.org/" rel="noopener noreferrer"&gt;go to and start playing&lt;/a&gt;. The community also recommends checking out The Rust Book. It is completely free, well written, and highly useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Rust is not perfect. It can be maddening at first. But it can also be liberating. Rust forces you to write better code, consider safety, and produce software that does not blow up in production.&lt;/p&gt;

&lt;p&gt;Why not give it a try? The worst thing that will happen is that you walk away with a different outlook on memory. The best thing that can happen? You will become one of the cool kids writing really good systems code in Rust.&lt;/p&gt;

</description>
      <category>rust</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Why Everyone Is Talking About Edge Functions</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Sun, 27 Jul 2025 04:56:38 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/why-everyone-is-talking-about-edge-functions-25bl</link>
      <guid>https://forem.com/dumboprogrammer/why-everyone-is-talking-about-edge-functions-25bl</guid>
      <description>&lt;p&gt;This year there has been a huge buzz in the world of modern web development with edge functions, edge computing or more awkwardly phrased as "running your code at the edge." &lt;/p&gt;

&lt;p&gt;It's not some new punk band. It's the next phase in how we build fast, scalable applications and it isn't hype.&lt;/p&gt;

&lt;p&gt;So, what are edge functions? Why should you care? And how do they fit into modern stacks?&lt;/p&gt;

&lt;h2&gt;
  
  
  First, What Is the Edge?
&lt;/h2&gt;

&lt;p&gt;In the traditional model, when someone requests your app, it hits a centralized server, sometimes in Virginia, and sometimes in Germany, or California, or an enormous AWS data center half a world away in a different timezone.&lt;br&gt;
And that's all okay. But you're in Tokyo and your server is in New York City - that's going to be a pretty big physical distance. And even if you're on fast internet, you've got latency to account for.&lt;br&gt;
The edge is about running your code on servers that are as physically close to your users as possible. Instead of having one origin server - you're deploying to lots and lots of little servers around the world. The benefit? Reduced latency, faster response times, and happy users.&lt;/p&gt;

&lt;h2&gt;
  
  
  So... What Are Edge Functions?
&lt;/h2&gt;

&lt;p&gt;Edge functions are like mini serverless functions that run at those edge locations. Think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Middleware logic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Authentication checks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A/B testing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personalization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redirects, rewrites&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Low-latency APIs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They’re small, fast, and often run in lightweight environments like V8 isolates, not full Node.js processes. This means they spin up quickly and run with minimal cold start.&lt;/p&gt;

&lt;p&gt;Popular platforms supporting edge functions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Vercel Edge Functions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloudflare Workers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Netlify Edge Functions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deno Deploy&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bun (experimental edge support)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Are They a Big Deal?
&lt;/h2&gt;

&lt;p&gt;Let’s break down why edge functions are such a modern dev darling:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Speed Matters&lt;br&gt;
The closer your logic runs to your user, the faster your app feels. We're talking milliseconds saved on every request. That adds up, especially for global apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic Logic Without a Heavy Server&lt;br&gt;
You can run logic like authentication or header manipulation without needing a full server. It’s like CDN rules, but on steroids.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability by Default&lt;br&gt;
No need to think about traffic spikes or managing infrastructure. Edge functions scale globally and automatically, just like serverless.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plays Well With Modern Stacks&lt;br&gt;
Edge functions fit naturally into JAMstack and headless architectures. They’re great when paired with static sites and APIs, letting you add just the right amount of dynamic behavior.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Edge Functions Are Not Great At
&lt;/h2&gt;

&lt;p&gt;Let’s be real: edge functions aren’t a silver bullet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Cold starts still exist, though they’re faster than traditional serverless.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No file system: Most edge environments are sandboxed, no reading/writing to disk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limited runtime: Many edge providers don’t support full Node.js. That means no native modules or heavy server-side logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory &amp;amp; execution time caps: They’re built for small tasks, not running a whole backend.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, edge functions are great for lightweight, latency-sensitive tasks, not your whole monolithic app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Use Them?
&lt;/h2&gt;

&lt;p&gt;If you’re building a modern web app, especially one with a global audience, edge functions are worth exploring. They're perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Running authentication logic at the edge before hitting your backend&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Serving geo-personalized content&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Speeding up routing decisions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rate limiting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Feature flag evaluation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start small. Try using one for middleware. See how it affects performance. The tooling has gotten really developer-friendly in the last couple years.&lt;/p&gt;

&lt;p&gt;Edge functions are one of those “sounds cool, but do I need it?” tools. But once you start to see them in action, particularly in combination with static files or headless CMS's: they begin to feel like magic. &lt;/p&gt;

&lt;p&gt;Let me know if you would want a follow-up post with hands-on examples (like building an auth layer at the edge or using Cloudflare Workers for caching tricks).&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why Git is So Hard to Learn (and Why You Should Learn it Anyway)</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Sun, 27 Jul 2025 04:39:42 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/why-git-is-so-hard-to-learn-and-why-you-should-learn-it-anyway-274c</link>
      <guid>https://forem.com/dumboprogrammer/why-git-is-so-hard-to-learn-and-why-you-should-learn-it-anyway-274c</guid>
      <description>&lt;p&gt;To be clear: Git is confusing! Nobody picks up git and immediately feels like a wizard. If you're someone who has ever looked at your terminal and asked yourself what the hell "detached HEAD" means, you are definitely not alone. &lt;br&gt;
But, Git is worth the pain. Once you get a handle on it, Git can be one of your most powerful tools as a developer. The important part is to know why it feels weird in the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Git Doesn’t Work Like Other Tools
&lt;/h2&gt;

&lt;p&gt;Most tools do one job and do it simply. Git, on the other hand, is like a Swiss Army knife duct-taped to another Swiss Army knife. It tracks versions, coordinates collaboration, manages history, branches reality... and expects you to understand how all those parts fit together.&lt;br&gt;
And unlike DropBox or Google Docs, Git does not give you a nice UI with who changed what. You get a command line, lots of arbitrary logs, and you figure out refs, trees, blobs, and commits. &lt;/p&gt;

&lt;p&gt;So yeah. It's not you, it's Git. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Mental Model Is The Difficult Part
&lt;/h2&gt;

&lt;p&gt;Once you grasp the fundamentals, Git really starts to come together.&lt;/p&gt;

&lt;p&gt;Think of Git as a really cool key-value store, because every commit is merely a point in time or a "snapshot" of your code, and that is precisely how Git will be storing these snapshots; as objects. The objects are related by the hashes, not by the file names. So, if you rename the file, it literally doesn't matter, because git doesn't care about names, it cares about content.&lt;/p&gt;

&lt;p&gt;And branches? They’re just pointers. Tags? Also pointers. HEAD? Just a pointer to the pointer. Once you wrap your head around this, it stops feeling like magic and starts to feel like... well, still weird, but less scary.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Will Mess Up
&lt;/h2&gt;

&lt;p&gt;Everyone messes up in Git. You will push to the wrong branch. You will merge something by accident. You will panic when your files disappear after a reset.&lt;/p&gt;

&lt;p&gt;But here’s the upside to it all: Git is pretty hard to break. You can usually revert almost anything. This is why you have a few options like &lt;code&gt;reflog&lt;/code&gt;, &lt;code&gt;reset&lt;/code&gt;, and &lt;code&gt;checkout&lt;/code&gt;. Even better, as you break things, you will become more assured of how to fix things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-Life Git Advice
&lt;/h2&gt;

&lt;p&gt;Here’s some advice that helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start with a GUI, tools like GitKraken, Sourcetree, and the Git panel in VS Code really make it clearer when you're getting started. But then transition to the terminal slowly. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn the basic commands: &lt;code&gt;clone&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;pull&lt;/code&gt;. You should really get those down cold.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Branching is cheap, so take advantage of it and branch often to experiment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pay attention to the error messages. Git's error messages are long and sometimes verbose, but they usually indicate what went wrong. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't be afraid of rebase, but also don't use it blindly. Know how to rebase, and what you should be rebasing versus merging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;git status&lt;/code&gt; all the time. It's your best friend, I promise.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why It's Worth It
&lt;/h2&gt;

&lt;p&gt;If you're working with code, you're working with Git. Whether you’re solo or on a team of 100, version control is non-negotiable. And Git, for better or worse, is the industry standard.&lt;/p&gt;

&lt;p&gt;Once you get comfortable with it, you’ll find yourself doing things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Fixing a bug from three months ago with one cherry-pick&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Squashing messy commits before a pull request&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Debugging a production issue by bisecting your commit history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolving merge conflicts without breaking a sweat&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s the kind of power that Git gives you. It's not flashy, and it's not easy at first. But it’s absolutely worth learning.&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Debugging MATLAB Scripts Like a Pro: Common Mistakes and How to Fix Them</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Fri, 25 Jul 2025 19:02:12 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/debugging-matlab-scripts-like-a-pro-common-mistakes-and-how-to-fix-them-1on</link>
      <guid>https://forem.com/dumboprogrammer/debugging-matlab-scripts-like-a-pro-common-mistakes-and-how-to-fix-them-1on</guid>
      <description>&lt;p&gt;Let's be frank: if you have written more than two MATLAB scripts in your life, you have probably encountered that dreaded error message way more than you want to admit. You write some code, hit Run, and then BAM! Nothing is working, and no error has been issued. &lt;/p&gt;

&lt;p&gt;The good news is that debugging things in MATLAB does not always have to be painful. After you figure out what you are looking for, it can actually be somewhat fun. So let's go through some of the most common errors that control engineers (and students) make while programming in MATLAB, as well as some possible ways to fix them without having a meltdown. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Not Preallocating Arrays
&lt;/h2&gt;

&lt;p&gt;This is a typical new user error. You write a for-loop that builds a vector or matrix, and MATLAB gets real slow on you, but there is no error message; just bad performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i = 1:1000
    x(i) = i^2;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Technically, this works. But MATLAB has to resize the array on every loop iteration, and that gets expensive fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix it like this:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = zeros(1, 1000);  % Preallocate
for i = 1:1000
    x(i) = i^2;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Pro tip&lt;/em&gt;: If your script feels slower than it should be, check for growing arrays inside loops.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;2. Using &lt;code&gt;=&lt;/code&gt; Instead of &lt;code&gt;==&lt;/code&gt; in Conditionals&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;This one’s sneaky. You write an if statement and accidentally use &lt;code&gt;=&lt;/code&gt; (assignment) instead of &lt;code&gt;==&lt;/code&gt; (comparison).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if x = 5
    disp('x is 5');
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MATLAB throws a syntax error immediately, but it’s still one of the most common logic bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if x == 5
    disp('x is 5');
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Remember&lt;/em&gt;: &lt;code&gt;=&lt;/code&gt; assigns a value. &lt;code&gt;==&lt;/code&gt; checks for equality.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;3. Forgetting to Clear Old Variables&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;MATLAB holds onto variables between runs. So if you define something once, it can stick around and mess with your next script, especially if variable names overlap.&lt;/p&gt;

&lt;p&gt;Let’s say you defined a variable called n in one script and forgot about it. Now it’s interfering with a for loop that also uses n.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start your scripts with a clean slate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clear all; clc;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or, better yet:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clearvars; clc;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This clears the workspace without removing breakpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;4. Indexing from Zero&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;If you're coming from Python, C, or JavaScript, you're used to arrays starting at zero. Not in MATLAB. Here, array indexing starts at one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = [10 20 30];
disp(x(0));  % This will throw an error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;disp(x(1));  % First element
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This mistake is especially common if you’re switching between languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;5. Mismatched Matrix Dimensions&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;You try to multiply two matrices and MATLAB flips out about incompatible dimensions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A = [1 2; 3 4];
B = [5 6];
C = A * B;  % Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Double-check dimensions with size() before you do any matrix math.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;size(A)  % Returns 2x2
size(B)  % Returns 1x2

% Maybe you meant:
C = A * B';  % Transpose B to 2x1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're doing a lot of matrix math, make size() and ' (transpose) your go-to tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;6. Not Using the Debugger&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;If you're adding 20 disp() calls just to figure out what's going wrong, there's a better way. Use MATLAB’s built-in debugger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;-Set breakpoints by clicking the margin next to a line number.&lt;br&gt;
-Step through the code line by line.&lt;br&gt;
-Inspect variable values as you go.&lt;br&gt;
Or, drop this line into your code to pause execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keyboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once paused, you can run commands in the Command Window to investigate.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Trust me. Once you use the debugger, you'll never go back to printing everything manually.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;7. Calling Functions That Don’t Exist&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;You call a function and get this lovely message: &lt;em&gt;Undefined function or variable. This usually means:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You forgot to add the file to your path.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You misspelled the function name.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You're calling a function that was deleted or renamed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use the which command to see where MATLAB is looking.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;which myFunction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it says 'not found', you probably need to:&lt;/p&gt;

&lt;p&gt;Fix the name.&lt;/p&gt;

&lt;p&gt;Add the file’s directory using &lt;code&gt;addpath&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Or double-check the function exists at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Final Thoughts&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;MATLAB can be a little quirky, especially if you’re switching between other languages or just starting out. But once you understand these common pitfalls, debugging becomes way less painful.&lt;/p&gt;

&lt;p&gt;To recap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Preallocate your arrays.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use == for comparisons.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clear your workspace often.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Index from one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always check matrix sizes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the debugger.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And make sure your functions are where MATLAB expects them to be.&lt;/p&gt;

&lt;p&gt;Once these habits stick, you'll find that debugging actually becomes kind of fun. Like solving a puzzle. A frustrating, algebra-covered puzzle, but still a puzzle.&lt;/p&gt;

&lt;p&gt;Got your own MATLAB horror story? Drop it in the comments. Misery loves company.&lt;/p&gt;

&lt;p&gt;Happy scripting.&lt;/p&gt;

</description>
      <category>matlab</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Create a GOOD game as a beginner</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Tue, 22 Jul 2025 07:29:40 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/create-a-good-game-as-a-beginner-48ea</link>
      <guid>https://forem.com/dumboprogrammer/create-a-good-game-as-a-beginner-48ea</guid>
      <description>&lt;p&gt;This guide is tailored towards &lt;a href="https://unity.com/" rel="noopener noreferrer"&gt;Unity 3D&lt;/a&gt; but you can use them for other engines as they are pretty much general.&lt;/p&gt;

&lt;p&gt;Creating a good game as a beginner using Unity is less about ambition and more about clarity, scope, and structured execution. Unity is a robust and versatile engine that, when used methodically, allows even novice developers to build high-quality games. This guide breaks down the essential components of making a good game as a beginner, avoiding generic advice and focusing strictly on Unity-specific, actionable steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Start with a Focused Game Concept&lt;/strong&gt;&lt;br&gt;
Avoid large-scale ideas. Instead, choose a narrowly scoped mechanic and expand only when it is functional. Examples include:&lt;/p&gt;

&lt;p&gt;A 2D top-down shooter with one enemy type and one weapon.&lt;/p&gt;

&lt;p&gt;A single-level puzzle platformer with a jump and switch mechanic.&lt;/p&gt;

&lt;p&gt;A basic clicker game that increments score and introduces timing.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Why this matters in Unity&lt;/u&gt;: Unity projects scale quickly in complexity due to its component-based architecture. Limiting scope keeps inspector hierarchies and script dependencies manageable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Use Unity’s Built-in Tools Over Third-Party Assets&lt;/strong&gt;&lt;br&gt;
Unity provides several mature systems out of the box:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Input System&lt;/u&gt;: Start with the old Input Manager (&lt;code&gt;Input.GetKey&lt;/code&gt;, &lt;code&gt;Input.GetAxis&lt;/code&gt;) before adopting the new Input System. The old system is easier to prototype with.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Tilemap Editor&lt;/u&gt;: For 2D games, Unity’s Tilemap tool speeds up level design.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Animator Controller&lt;/u&gt;: Avoid external animation tools early. Use Unity’s Animator with blend trees and state machines for simple animations.&lt;/p&gt;

&lt;p&gt;This avoids dependency hell and keeps build size and performance in check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Scene Management and Prefabs&lt;/strong&gt;&lt;br&gt;
&lt;u&gt;Break game logic into manageable pieces&lt;/u&gt;:&lt;/p&gt;

&lt;p&gt;Use prefabs extensively. Every enemy, projectile, pickup, and UI element should be a prefab. This allows for scalable instantiation and reuse.&lt;/p&gt;

&lt;p&gt;Utilize ScriptableObjects for shared data (e.g., weapon stats, enemy configurations) without requiring scene references.&lt;/p&gt;

&lt;p&gt;Unity’s prefab workflow lets you decouple scene logic from game logic, improving modularity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Leverage Unity’s Debugging Tools&lt;/strong&gt;&lt;br&gt;
Good games don’t just run; they run predictably. Unity has built-in tools to help:&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Console Debugging&lt;/u&gt;: Use Debug.Log, Debug.LogWarning, and Debug.LogError with context objects.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Gizmos&lt;/u&gt;: Use &lt;code&gt;OnDrawGizmos()&lt;/code&gt; to visualize raycasts, detection ranges, and waypoints directly in the Scene view.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Profiler&lt;/u&gt;: Don’t wait for performance problems. Profile early. Avoid &lt;code&gt;Update()&lt;/code&gt; methods in every script—use managers or events instead.&lt;/p&gt;

&lt;p&gt;These tools help ensure functionality behaves consistently across test runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Implement a Simple Game Loop Early&lt;/strong&gt;&lt;br&gt;
The core game loop should be functional as soon as possible:&lt;/p&gt;

&lt;p&gt;Title screen → gameplay → win/lose condition → restart.&lt;/p&gt;

&lt;p&gt;Use Unity’s &lt;code&gt;SceneManager.LoadScene()&lt;/code&gt; for transitions.&lt;/p&gt;

&lt;p&gt;Keep global managers (e.g., score, lives, settings) on a persistent singleton object via &lt;code&gt;DontDestroyOnLoad&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This ensures your project is playable from start to finish, which is essential for iteration and feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Build Custom Editors Only When Necessary&lt;/strong&gt;&lt;br&gt;
Unity’s editor extension capabilities are powerful, but building custom inspectors or windows is unnecessary for most beginner projects. Instead:&lt;/p&gt;

&lt;p&gt;Use serialized fields with &lt;code&gt;[SerializeField]&lt;/code&gt; and custom tooltips.&lt;/p&gt;

&lt;p&gt;Group fields logically using &lt;code&gt;[Header]&lt;/code&gt;, &lt;code&gt;[Space]&lt;/code&gt;, and &lt;code&gt;[Range]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Editor scripting can become a distraction unless it solves a direct bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Use Version Control from Day One&lt;/strong&gt;&lt;br&gt;
Avoid losing progress due to broken prefabs or scene files. Even for solo projects:&lt;/p&gt;

&lt;p&gt;Use Git with a .gitignore tailored for Unity (available on GitHub).&lt;/p&gt;

&lt;p&gt;Commit before major changes. Unity YAML files are text-based, so changes are trackable.&lt;/p&gt;

&lt;p&gt;This keeps your project maintainable and reduces the fear of experimentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Optimize for Device Early, Not Late&lt;/strong&gt;&lt;br&gt;
If you're targeting mobile or WebGL:&lt;/p&gt;

&lt;p&gt;Test performance on target hardware early. Unity’s editor performance is not indicative of build performance.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Reduce draw calls&lt;/u&gt;: use sprite atlases, static batching, and combine meshes where feasible.&lt;/p&gt;

&lt;p&gt;Use object pooling for frequently instantiated objects like bullets or enemies.&lt;/p&gt;

&lt;p&gt;Unity’s &lt;code&gt;Application.targetFrameRate&lt;/code&gt; and Quality Settings allow tuning for platform-specific needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Avoid Feature Creep Through a Defined Feature Lock&lt;/strong&gt;&lt;br&gt;
Before adding anything new, ask:&lt;/p&gt;

&lt;p&gt;Does it support the core mechanic?&lt;/p&gt;

&lt;p&gt;Can I build and test it in under 2 days?&lt;/p&gt;

&lt;p&gt;Will it create UI or system dependencies that complicate other systems?&lt;/p&gt;

&lt;p&gt;This protects your Unity project from growing beyond your current technical ability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Polish with Small Details, Not Systems&lt;/strong&gt;&lt;br&gt;
A good beginner game feels finished, not because it has many systems, but because the existing systems feel deliberate:&lt;/p&gt;

&lt;p&gt;Add particle effects using Unity’s VFX Graph or ParticleSystem to make actions feel impactful.&lt;/p&gt;

&lt;p&gt;Use audio sources with spatial blending and reverb zones.&lt;/p&gt;

&lt;p&gt;Smooth camera movement with Lerp or Cinemachine.&lt;/p&gt;

&lt;p&gt;Focus on player feedback loops. Simple effects add clarity and professionalism without code bloat.&lt;/p&gt;

&lt;p&gt;Unity allows beginners to create good games, but the key is discipline, not ambition. Use the engine as it is intended, lean into its component-based design, and stay within a narrow scope. A well-executed 2D game that runs smoothly and finishes cleanly will always outshine an unfinished attempt at a 3D open-world RPG. Start with completeness, not complexity.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>csharp</category>
      <category>beginners</category>
    </item>
    <item>
      <title>50+ Tips For Big Games in Unity</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Fri, 18 Jul 2025 04:19:36 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/50-tips-for-big-unity-games-1lpa</link>
      <guid>https://forem.com/dumboprogrammer/50-tips-for-big-unity-games-1lpa</guid>
      <description>&lt;p&gt;Ever tried to create an ambitious game only to be met by a thousand setbacks ? Don't worry it happens. In fact this list is compiled from my own experience building horror games in unity(painful memories). This are for the versions unity LTS 2023 and previous but is not limited to them and applies to unity 6 as well. I hope it was worth a read, enjoy :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning &amp;amp; Project Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Always create a GDD first.&lt;/strong&gt;&lt;br&gt;
A Game Design Document (GDD) is your blueprint. Include story drafts, pseudo code, environment design, post-processing ideas, everything. It keeps you grounded. I personally use notion for that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Always plan your target platform.&lt;/strong&gt;&lt;br&gt;
PC? Console? Mobile? VR? Everything from UI scaling to shader complexity hinges on this decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Decide on your render pipeline early.&lt;/strong&gt;&lt;br&gt;
URP, HDRP, or Built-in. Each has pros and cons. Switching mid-project is painful, and also later on, you may realize that your project is too complex for that certain pipeline but too broad to change, so plan carefully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Prototype first, optimize later.&lt;/strong&gt;&lt;br&gt;
Get the gameplay right before sweating performance. Because, later on, you will need to reoptimize again anyways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Never render what the player can't see.&lt;/strong&gt;&lt;br&gt;
Use occlusion culling, cull distances, and smart camera frustums, fog to hide stuff far away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Break down logic into manager scripts.&lt;/strong&gt;&lt;br&gt;
GameManager, AudioManager, UIManager, etc. Modular systems scale better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Use version control.&lt;/strong&gt;&lt;br&gt;
Git, Plastic SCM, or Perforce, use something with at least 100GB of storage. You'll thank yourself later. And also get an UPS, because electricity can go out anytime, and unity corrupts itself when suddenly closed. So get yourself an asset that autosaves!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Functionalize everything.&lt;/strong&gt;&lt;br&gt;
Keep logic modular. Reference shared systems, don’t duplicate them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Document your code in the GDD.&lt;/strong&gt;&lt;br&gt;
Track your systems, variables, and data structures alongside your design. Trust me, it WILL pay off. You are a human, today you know everything about your code, tomorrow you will be confused as hell. Granted that code should be self documented, having an external documentation helps too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Use ScriptableObjects for shared data.&lt;/strong&gt;&lt;br&gt;
They're ideal for configuration, global state, and shared resources without hard references.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Architecture &amp;amp; Performance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;11. Don’t overuse singletons.&lt;/strong&gt;&lt;br&gt;
Limit them to essential systems, and keep logic out of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Separate core logic from UI.&lt;/strong&gt;&lt;br&gt;
UI should reflect state, not control it. At best, assign runtime references for buttons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Use the Addressable Asset System.&lt;/strong&gt;&lt;br&gt;
Especially for large projects. It’s efficient, modular, and memory-friendly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Organize your project folders early.&lt;/strong&gt;&lt;br&gt;
Structure matters: Scripts/, Prefabs/, Audio/, Art/, Scenes/.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15. Async load big scenes and assets.&lt;/strong&gt;&lt;br&gt;
Prevent hard freezes by using SceneManager.LoadSceneAsync() or Addressables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;16. Profile early and often.&lt;/strong&gt;&lt;br&gt;
Use Unity Profiler, RenderDoc, or external tools regularly. And watch out for every thread !&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17. Use nested prefabs.&lt;/strong&gt;&lt;br&gt;
Makes your systems modular, reusable, and scalable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18. Never animate UI directly on GameObjects.&lt;/strong&gt;&lt;br&gt;
Use DOTween or Unity’s Animator for flexibility and polish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;19. Pick your input system early.&lt;/strong&gt;&lt;br&gt;
Switching between the legacy Input and the new Input System mid-project is painful. And Both input systems aren't ideal for phones. So my recommendation is to use the newer one, if you're planning on multi-platformed games.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;20. Avoid FindObjectOfType() in runtime.&lt;/strong&gt;&lt;br&gt;
Use serialized fields, dependency injection, or event systems. Why? Because they are mad expensive to run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;21. Use event-driven architecture.&lt;/strong&gt;&lt;br&gt;
UnityEvents, C# delegates, or custom event buses keep your code modular.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;22. Set up physics layers and a collision matrix.&lt;/strong&gt;&lt;br&gt;
Do it from day one to avoid debugging chaos later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;23.Keep FixedUpdate() lean.&lt;/strong&gt;&lt;br&gt;
It’s for physics, don’t clutter it with heavy logic. It impacts performance badly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;24. Use object pooling.&lt;/strong&gt;&lt;br&gt;
For bullets, blood splats, enemies, etc. Avoid instantiate/destroy hell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25. Don’t hardcode references.&lt;/strong&gt;&lt;br&gt;
Use ScriptableObjects, serialized fields, or managers to handle resources like audio clips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content, World, and Performance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;26. Implement localization early.&lt;/strong&gt;&lt;br&gt;
Retrofitting it later is a nightmare. Unity's localization package helps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;27. Use gizmos for in-editor debugging.&lt;/strong&gt;&lt;br&gt;
AI ranges, vision cones, nav paths, etc just draw them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;28. Use logs, but don’t rely only on Unity Editor.&lt;/strong&gt;&lt;br&gt;
Implement on-screen logs or console toggles for builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;29. Avoid MonoBehaviour bloat.&lt;/strong&gt;&lt;br&gt;
Large classes are hard to debug. Keep responsibilities separated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30. Understand Unity’s garbage collection.&lt;/strong&gt;&lt;br&gt;
Watch out for allocations from string operations and LINQ. Use object pooling where needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Systems &amp;amp; Optimization
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;31. Bake lighting for static geometry. Use light probes for dynamic objects.&lt;/strong&gt;&lt;br&gt;
This gives you the best performance and visual fidelity mix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;32. Divide large scenes into loading zones.&lt;/strong&gt;&lt;br&gt;
Use additive scenes or addressables for seamless streaming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;33. Manual occlusion for dynamic content.&lt;/strong&gt;&lt;br&gt;
Unity’s occlusion only works for static objects. Use frustum checks or portals for the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;34. Bake navmesh per scene. Use links for transitions.&lt;/strong&gt;&lt;br&gt;
This allows AI to transition between areas cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;35. Build a custom audio system.&lt;/strong&gt;&lt;br&gt;
For horror, layer ambient loops, whispers, distant cries, and stingers. Audio is 70% of fear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;36. Use post-processing volumes for mood shifts.&lt;/strong&gt;&lt;br&gt;
Transition colors, fog, exposure per room or area.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;37. LOD logic for non-visual elements.&lt;/strong&gt;&lt;br&gt;
Disable scripts, triggers, and AI systems far from the player.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;38. Use tags/layers wisely in AI.&lt;/strong&gt;&lt;br&gt;
Detect “Player” or “SoundSource” with custom logic instead of brute-force raycasts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;39. Create a persistent “Manager Scene.”&lt;/strong&gt;&lt;br&gt;
Game state, UI, audio, and input all live here. Load game levels on top of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;40. Simulate memory pressure during testing.&lt;/strong&gt;&lt;br&gt;
Force GC, simulate low-end hardware, and test worst-case scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI, Horror Systems, and Tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;41. Visualize AI logic.&lt;/strong&gt;&lt;br&gt;
Use rays, gizmos, or debug UIs to show what AI sees, hears, or targets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;42. Build a robust save/load system.&lt;/strong&gt;&lt;br&gt;
Don’t just save position! track doors, enemies, notes, and more. Serialize with JSON or binary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;43. Create an event queue system.&lt;/strong&gt;&lt;br&gt;
Chain scares, animations, and sequences across scenes with reusable logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;44. Separate physics layers for enemies and players.&lt;/strong&gt;&lt;br&gt;
Allows fine control over interactions like footsteps, traps, or triggers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;45. Use real-time reflections sparingly.&lt;/strong&gt;&lt;br&gt;
Mirrors, blood puddles? yes. Everywhere else? no. Use baked probes for everything else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;46. Compress textures intelligently.&lt;/strong&gt;&lt;br&gt;
Use mipmaps and Crunch compression to save memory, especially on detailed horror assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;47. Use custom shaders and contact shadows.&lt;/strong&gt;&lt;br&gt;
Creepy lighting, fake subsurface scattering, or screen-space effects all boost horror atmosphere. And also use decals for shadows, less expensive and good visual results. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;48. Log or simulate player behavior.&lt;/strong&gt;&lt;br&gt;
Record test sessions to improve pacing, scare timing, and level layout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;49. Bundle environmental effects together.&lt;/strong&gt;&lt;br&gt;
Avoid chaos when a scare triggers. Group sound, light, camera shake into a timed package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;50. Build internal tools to speed up workflow.&lt;/strong&gt;&lt;br&gt;
Editor scripts for placing lights, randomizing props, or testing paths will save days. For example, I built editor tools to advance through quests and acts to playtest faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some additional tips:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always use simplified colliders like box, sphere, capsule instead of mesh colliders unless needed.&lt;/li&gt;
&lt;li&gt;Always use simplified materials like simple lit instead of standard lit or complex lit.&lt;/li&gt;
&lt;li&gt;Realtime Lighting shouldn't be used unless you need light that needs to be turned off or on at some point.&lt;/li&gt;
&lt;li&gt;Your game is more prone to be gpu intensive than cpu, so debug accordingly. &lt;/li&gt;
&lt;li&gt;Use shader graphs and vfx graphs as they run on the gpu and take less resources &lt;/li&gt;
&lt;li&gt;Have people playtest your game but not actual players, as it may impact their impression. &lt;/li&gt;
&lt;li&gt;If you want to release on ios but don't have a mac or enough money to pay for unity cloud, then run mac os on VMWare, Virtual Box and compile your game there after exporting from unity. (indie dev core)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you made it this far, thank you. These tips come from many hours (and sleepless nights) building large Unity games, especially in the horror genre. Hopefully, they save you some pain and help you build better, smarter, and faster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pyxl-chronicles.itch.io/the-quiet-hours" rel="noopener noreferrer"&gt;You can check out my free beta horror game which I made in last two months.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Got your own tips or horror dev stories?&lt;br&gt;
Drop them in the comments. We’re all in this haunted house together.&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>gamedev</category>
      <category>tutorial</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Why Vibe coding is the best and we are wrong</title>
      <dc:creator>Tawhid</dc:creator>
      <pubDate>Wed, 23 Apr 2025 01:01:39 +0000</pubDate>
      <link>https://forem.com/dumboprogrammer/why-vibe-coding-is-the-best-and-we-are-wrong-266g</link>
      <guid>https://forem.com/dumboprogrammer/why-vibe-coding-is-the-best-and-we-are-wrong-266g</guid>
      <description>&lt;p&gt;(PS. I'm just trolling)&lt;br&gt;
Ah, "vibe coding"! It's got a certain ring to it, doesn't it? While it might not be a widely recognized term in the traditional coding world, the essence of what I think you're getting at – the intuitive, almost artistic approach to development – is definitely something we could all benefit from embracing more. Perhaps we are sleeping on the power of the "vibe" in coding.&lt;/p&gt;

&lt;p&gt;Let's be honest, when we think of coding, images of rigid syntax, logical structures, and meticulous debugging often come to mind. And those are undeniably crucial. But what about the flow state? The moments when the code seems to write itself, when you're deeply connected to the problem and the solution emerges almost organically? That's the "vibe" I suspect you're talking about.&lt;/p&gt;

&lt;p&gt;Think about it: some of the most elegant and innovative solutions in software development didn't necessarily come from strictly following a textbook. They arose from a deep understanding of the problem, a creative leap, and an almost intuitive feel for how the pieces should fit together. It's about more than just knowing the rules; it's about feeling the rhythm of the code.&lt;/p&gt;

&lt;p&gt;Here's why tapping into this "vibe coding" can be so powerful:&lt;/p&gt;

&lt;p&gt;Unlocking Creativity: When you're not solely focused on adhering to every single rule by the book, your mind opens up to more unconventional and potentially brilliant solutions. You start to see connections you might have missed otherwise.&lt;br&gt;
Boosting Intuition: As you gain experience, a certain intuition develops. You start to anticipate potential problems and see patterns more readily. "Vibe coding" encourages you to trust this intuition and explore ideas that might not be immediately obvious through pure logic.&lt;br&gt;
Enhancing Flow: That coveted state of flow, where time seems to melt away and productivity soars, is often fueled by this intuitive connection to the code. When you're "in the zone," you're essentially operating on a powerful creative and intuitive wavelength.&lt;br&gt;
Creating More Elegant Solutions: Code written with a good "vibe" often feels cleaner, more concise, and more maintainable. It's as if the very act of intuitive creation leads to a more harmonious structure.&lt;br&gt;
Increasing Enjoyment: Let's face it, coding can sometimes feel like a slog. But when you're tapping into that creative flow, it becomes a much more enjoyable and fulfilling process.&lt;br&gt;
Now, I'm not suggesting we throw all best practices out the window and just "wing it." That would be chaos! "Vibe coding" isn't about abandoning logic; it's about integrating intuition and creativity alongside established principles. It's about finding that sweet spot where technical expertise meets artistic expression.&lt;/p&gt;

&lt;p&gt;So, how do we cultivate this "vibe"? It's not something you can simply switch on, but here are a few thoughts:&lt;/p&gt;

&lt;p&gt;Deeply Understand the Problem: The more you truly grasp the nuances of what you're trying to solve, the more your intuition can guide you.&lt;br&gt;
Experiment and Play: Don't be afraid to try different approaches, even if they seem a little unconventional at first. Sometimes the most unexpected paths lead to the best discoveries.&lt;br&gt;
Trust Your Gut (to a point): As you gain experience, learn to recognize those moments when your intuition is guiding you towards a promising solution.&lt;br&gt;
Step Away When Stuck: Sometimes, the best way to find the "vibe" is to take a break and let your subconscious work on the problem.&lt;br&gt;
Embrace the Iterative Process: Coding is rarely a linear process. Allow yourself to explore, refactor, and refine your code until it feels right.&lt;br&gt;
Perhaps "vibe coding" isn't a formal methodology, but it represents a powerful aspect of the development process that we often overlook. It's about acknowledging the role of intuition, creativity, and flow in crafting elegant and effective solutions. Maybe it's time we all started tuning into that "vibe" a little more. What do you think?&lt;/p&gt;

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