<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rob Vandelinder</title>
    <description>The latest articles on DEV Community by Rob Vandelinder (@rob_v).</description>
    <link>https://dev.to/rob_v</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2600371%2Ff9980702-54bb-4384-86ad-bd9a7f2fbc75.jpg</url>
      <title>DEV Community: Rob Vandelinder</title>
      <link>https://dev.to/rob_v</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rob_v"/>
    <language>en</language>
    <item>
      <title>Demystifying the Developer Environment</title>
      <dc:creator>Rob Vandelinder</dc:creator>
      <pubDate>Wed, 30 Sep 2026 17:17:01 +0000</pubDate>
      <link>https://dev.to/rob_v/demystifying-the-developer-environment-4n8j</link>
      <guid>https://dev.to/rob_v/demystifying-the-developer-environment-4n8j</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my setup running on a "vintage" HP Z440 server with modest specs:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Intel &lt;strong&gt;Xeon E5-2683 v4&lt;/strong&gt; @ 2.1GHz (16 core/32 thread)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;32GB&lt;/strong&gt; ECC DDR4&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Array pool&lt;/strong&gt;: 2 x 4TB HDD, 1 x 2TB HDD, 1 x 6TB parity HDD&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;&lt;strong&gt;Cache pool&lt;/strong&gt;: 1 x 1TB SSD&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;NVIDIA &lt;strong&gt;Quadro M2000&lt;/strong&gt; 4GB&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This isn't a particularly powerful machine by modern standards. It's simply the box I have, and it handles my development environment quite comfortably.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Basic Idea
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand my environment is to think of it as a small private cloud.&lt;/p&gt;

&lt;p&gt;Instead of installing every tool directly on my workstation, most services run as containers on the server. Projects can consume shared services when that makes sense, or bring their own private infrastructure when portability and isolation are more important.&lt;/p&gt;

&lt;p&gt;The result isn't particularly exotic. It's mostly a collection of open-source projects doing very specific jobs.&lt;/p&gt;

&lt;p&gt;There are two ways I tend to deploy infrastructure:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Shared infrastructure — one service, multiple projects.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project-local infrastructure — the service lives inside the application's deployment.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In development I favor convenience and use a shared PostgreSQL instance. In production I favor isolation: each Coolify project gets its own database, so a compromise of one application's database doesn't automatically expose every other application's data.&lt;/p&gt;

&lt;p&gt;For projects intended to be portable or handed to someone else, I generally prefer project-local infrastructure. The entire application can then be deployed with its dependencies rather than relying on services that happen to exist on my server.&lt;/p&gt;

&lt;h2&gt;
  
  
  The List I Use
&lt;/h2&gt;

&lt;p&gt;This isn't intended to be a definitive list of services everyone needs.&lt;/p&gt;

&lt;p&gt;It's the stuff I actually use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment &amp;amp; Infrastructure
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Coolify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;My primary deployment platform.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containerized deployments&lt;/li&gt;
&lt;li&gt;CI/CD, including automatic deployments from Git&lt;/li&gt;
&lt;li&gt;Built-in Traefik proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Nginx Proxy Manager&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Reverse proxy for services outside the Coolify-managed environment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It provides a simple UI for routing domains and managing certificates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Go-static&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A lightweight static web server.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I use it for things like Svelte landing pages where I don't need an entire application stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Redis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caching and other transient data needs.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Storage &amp;amp; Databases
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Appwrite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;An integrated backend platform when I want several services together:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3-compatible object storage&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;Messaging/notifications&lt;/li&gt;
&lt;li&gt;Other application services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's useful when I want the convenience of having those pieces available as one platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VersityGW&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When I only need object storage, I don't necessarily want the rest of a backend platform.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;VersityGW provides S3-compatible object storage while staying relatively lightweight and barebones. I typically deploy it privately alongside the application that needs it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL / MariaDB / Mongo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data persistence.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I use shared instances during development when convenience makes sense, and private instances within project deployments when isolation or portability matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Databasement&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Database backups&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Eventually somebody will delete something important.&lt;/p&gt;

&lt;h3&gt;
  
  
  Source Control &amp;amp; Development
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Forgejo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;My private Git instance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It provides local access to my repositories while allowing projects to be mirrored to GitHub for redundancy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ByteStash&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A private snippet manager, including an MCP server for agent access.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IT Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A collection of common development utilities — token generation, JSON conversion, and more.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SearXNG&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;My private search provider.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent Infrastructure
&lt;/h3&gt;

&lt;p&gt;This is where the environment starts to reflect what I'm currently working on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mem0-aio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agent memory infrastructure.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kanboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A private Kanban system with an MCP server for agent access.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm increasingly interested in infrastructure that an agent can interact with directly rather than treating the development environment as something completely separate from the agent.&lt;/p&gt;

&lt;p&gt;That's one of the directions I'm exploring with ICOS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documents &amp;amp; Content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Paperless&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Document management and OCR.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It automatically processes documents and supports AI-assisted document classification and extraction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudreve&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cloud document storage.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Honorable Mentions
&lt;/h2&gt;

&lt;p&gt;Not everything on the server exists specifically for software development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;homepage&lt;/strong&gt; provides a central overview of the services running on the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Krusader&lt;/strong&gt; and &lt;strong&gt;Manyfold&lt;/strong&gt; help catalog my 3D-printing assets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immich&lt;/strong&gt; provides Google Photos-style image storage with machine-learning features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mealie&lt;/strong&gt; manages recipes, including importing them from URLs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Booklore&lt;/strong&gt; manages my ebook collection.&lt;/p&gt;

&lt;p&gt;They're not essential to writing software, they're just useful. That's one of the nice things about having your own infrastructure: once you have the platform, it can support more than one purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  So Why Do I Have All This Stuff?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;There is a little more history behind this environment than "developer discovers Docker."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before I became a software developer, I spent roughly 10–15 years working with hardware and IT systems.&lt;/p&gt;

&lt;p&gt;I was a bench technician, field technician, implementation technician, Tier 2 helpdesk technician, and refurbishment technician working in recycling depots. I was managing hardware and server stacks long before I knew what CSS was.&lt;/p&gt;

&lt;p&gt;I've worked with Windows Deployment Services, Active Directory, DHCP/DNS, SCCM, and Windows Server 2012-era infrastructure. I was never a dedicated server administrator, and I don't claim to be an infrastructure expert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But I knew how to wrangle a PC.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I knew how to deploy systems, troubleshoot hardware, chase down network problems, and figure out why something that should work wasn't working.&lt;/p&gt;

&lt;p&gt;I also spent time studying for certifications that I couldn't afford to actually sit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CompTIA A+&lt;/li&gt;
&lt;li&gt;CompTIA Server+&lt;/li&gt;
&lt;li&gt;Microsoft MCP — Windows Desktop&lt;/li&gt;
&lt;li&gt;MCSA Server 2012&lt;/li&gt;
&lt;li&gt;AVIXA CTS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't list those as certifications, because I never earned them, but the knowledge I gained while studying for them didn't disappear just because I couldn't afford the exam.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Foundation
&lt;/h2&gt;

&lt;p&gt;One thing I've noticed as I've moved deeper into software development over the years is that a lot of the problems aren't actually new problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;The technology changes.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The layer changes.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The terminology changes.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;But troubleshooting is still troubleshooting.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Something isn't working.&lt;/li&gt;
&lt;li&gt;Figure out what it's supposed to do.&lt;/li&gt;
&lt;li&gt;Determine where reality diverges from expectation.&lt;/li&gt;
&lt;li&gt;Isolate the problem.&lt;/li&gt;
&lt;li&gt;Change one thing.&lt;/li&gt;
&lt;li&gt;Test it.&lt;/li&gt;
&lt;li&gt;Repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's as true for a Docker container talking to PostgreSQL as it was for a workstation that wouldn't boot.&lt;/p&gt;

&lt;p&gt;Software development added a huge amount of new territory for me: application architecture, APIs, databases, distributed systems, frameworks, algorithms, and a pile of things I didn't know existed when I was repairing computers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm still learning. I'll probably still be learning when I'm 70.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But I didn't start from zero, I started with a decade-plus of learning how to make complicated systems behave. Software just gave me another layer to work on.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Don't Need This
&lt;/h2&gt;

&lt;p&gt;None of this is a recommendation that everyone should go build a server closet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You absolutely don't need one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can develop software perfectly well with a laptop, GitHub, Docker Desktop, and whatever hosted services your project needs. This is simply the environment that makes sense for the way I work.&lt;/p&gt;

&lt;p&gt;It gives me control over my development infrastructure, lets me experiment with different technologies, gives my agents access to services they can actually interact with, and lets me build deployments that can eventually leave my little server entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The infrastructure isn't the point. It's another tool.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just like the extensions in VS Code, these are the tools I've accumulated because they solve problems I actually have, and there are probably another hundred things I've forgotten to mention. That's what happens when you spend enough years building your own toolbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hardware came first. The software came later.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now there's just considerably more TypeScript involved. 😂&lt;/p&gt;

</description>
      <category>docker</category>
      <category>hardware</category>
      <category>infrastructure</category>
      <category>linux</category>
    </item>
    <item>
      <title>Suggested VS Code Extensions to Try</title>
      <dc:creator>Rob Vandelinder</dc:creator>
      <pubDate>Wed, 30 Sep 2026 17:13:45 +0000</pubDate>
      <link>https://dev.to/rob_v/suggested-vs-code-extensions-to-try-2nng</link>
      <guid>https://dev.to/rob_v/suggested-vs-code-extensions-to-try-2nng</guid>
      <description>&lt;p&gt;I've spent a lot of time in VS Code over the years. At this point, I've accumulated a fairly opinionated collection of extensions that make up my daily development environment.&lt;/p&gt;

&lt;p&gt;This isn't intended to be a definitive list of the "best" VS Code extensions. There are far too many variables for that to be useful. Your ideal setup will depend heavily on your languages, frameworks, operating system, and personal workflow.&lt;/p&gt;

&lt;p&gt;For context, I use what I jokingly call the &lt;strong&gt;FAPN stack&lt;/strong&gt; for the vast majority of my cross-platform applications: &lt;strong&gt;Flutter, Angular, PostgreSQL, and NestJS&lt;/strong&gt;. I occasionally work in Python or C++ for things like Arduino and Raspberry Pi projects, but those aren't part of my everyday development environment.&lt;/p&gt;

&lt;p&gt;So, here's the setup I actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Profiles
&lt;/h2&gt;

&lt;p&gt;One of the things I find particularly useful in VS Code is its support for profiles.&lt;/p&gt;

&lt;p&gt;I use profiles to keep the environment relatively lean. All of my profiles share the same core extensions, while framework-specific tooling is enabled only where I need it. I currently have profiles for Angular, Flutter, Nest, Python, and a general &lt;strong&gt;CrossPlatform&lt;/strong&gt; profile that covers my usual stack without the Python tooling.&lt;/p&gt;

&lt;p&gt;This isn't about shaving milliseconds off VS Code's startup time. It's mostly about keeping the workspace focused. If I'm working on a Nest application, I don't need a pile of Python-specific tooling sitting around simply because I might need it next week.&lt;/p&gt;

&lt;p&gt;My CrossPlatform profile is the one I use most often, and the following is the actual extension set I use there.&lt;/p&gt;

&lt;h2&gt;
  
  
  My List
&lt;/h2&gt;

&lt;p&gt;These are the extensions that make up my core development environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Better Comments&lt;/strong&gt; — Improve code comments with annotations for alerts, information, TODOs, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;change-case&lt;/strong&gt; — Quickly change the case of the current selection or word between formats such as camelCase, CONSTANT_CASE, and snake_case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color Highlight&lt;/strong&gt; — Highlight web colors directly in the editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESLint&lt;/strong&gt; — Code linting for consistency and identifying potential problems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gitignore&lt;/strong&gt; — Quickly add files to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image preview&lt;/strong&gt; — Preview images directly in the editor and on hover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown PDF&lt;/strong&gt; — Convert Markdown documents to PDF.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;markdownlint&lt;/strong&gt; — Markdown linting and style checking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Material Icon Theme&lt;/strong&gt; — Material Design icons for a wide range of file types.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One Dark Pro Italic Vivid&lt;/strong&gt; — My preferred visual theme, including support for italic comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prettier - Code formatter&lt;/strong&gt; — Automatic code formatting using Prettier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rainbow CSV&lt;/strong&gt; — Highlight CSV and TSV files and run SQL-like queries against them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Todo Tree&lt;/strong&gt; — Collect TODO, FIXME, and similar comment tags into a searchable tree.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code Counter&lt;/strong&gt; — Count lines of code across many programming languages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Color Picker&lt;/strong&gt; — A small color picker for web development.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vscode-faker&lt;/strong&gt; — Generate fake data such as names, addresses, commerce data, Lorem Ipsum, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vscode-pdf&lt;/strong&gt; — View PDF files directly in VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WakaTime&lt;/strong&gt; — Automatically tracks coding activity and provides development metrics and time reporting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YAML&lt;/strong&gt; — YAML language support and tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of these are things I use constantly. Others solve very specific problems. That's fine. A development environment doesn't need every extension to be exciting; it just needs the tools to be useful when you need them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools
&lt;/h2&gt;

&lt;p&gt;These are the extensions I use for the broader development tooling around my applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; — Explore and query SQLite databases directly from VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; — Docker-aware development and container tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container Tools&lt;/strong&gt; — Manage and inspect containers and images from within VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLens&lt;/strong&gt; — Visualize Git history and code authorship, including Git blame information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are particularly useful because a lot of my development work isn't simply writing source code. I'm regularly dealing with databases, containers, Git repositories, configuration, and deployment infrastructure as part of the same project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application Development
&lt;/h2&gt;

&lt;p&gt;My framework-specific extensions cover the technologies I use most frequently for application development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Angular Language Service&lt;/strong&gt; — Editor services and template support for Angular.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Angular Snippets&lt;/strong&gt; — Angular-specific code snippets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dart&lt;/strong&gt; — Dart language support and debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flutter&lt;/strong&gt; — Flutter development support and debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pubspec Assist&lt;/strong&gt; — Quickly add and update Dart and Flutter dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Svelte for VS Code&lt;/strong&gt; — Svelte language support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS IntelliSense&lt;/strong&gt; — Intelligent Tailwind CSS tooling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, these aren't necessarily installed in every profile. That's the point of the profiles: I can have the tooling available without making every project carry everything I've ever installed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disabled Extensions
&lt;/h2&gt;

&lt;p&gt;There's another category worth mentioning: extensions I've tried but don't currently use.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Tools
&lt;/h3&gt;

&lt;p&gt;I've tried several AI coding extensions at various points. None of them has fit my workflow particularly well enough to leave enabled.&lt;/p&gt;

&lt;p&gt;I actually got my perferred agent working inside VS Code for a while, but the integration stopped short of giving her meaningful interaction with the codebase through the IDE. Eventually I said "fuck it" and went back to running &lt;strong&gt;OpenCode CLI&lt;/strong&gt; alongside VS Code.&lt;/p&gt;

&lt;p&gt;That setup has worked considerably better for me.&lt;/p&gt;

&lt;p&gt;That's probably temporary. I'm interested in trying Unsloth Desktop, and the longer-term direction I'm exploring is somewhat different: bringing the development environment directly into the ICOS platform so the agent can work alongside the developer rather than being bolted onto the IDE as another extension.&lt;/p&gt;

&lt;p&gt;For now, these remain disabled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ACP Client&lt;/strong&gt; — Agent Client Protocol client for VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cline&lt;/strong&gt; — Autonomous coding agent in the IDE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continue&lt;/strong&gt; — Open-source AI code agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama Agent&lt;/strong&gt; — Chat, generate code, edit files, and automate tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm including them because I think it's useful to be honest about what &lt;strong&gt;didn't&lt;/strong&gt; become part of my workflow. A list of installed extensions doesn't tell the whole story. Sometimes the most useful information is knowing which tool you tried and decided wasn't worth keeping around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;Python isn't my primary language, but I keep a prepared Python environment available for projects that require it.&lt;/p&gt;

&lt;p&gt;Rather than loading all of this into my normal CrossPlatform profile, the Python-specific tooling lives in its own profile.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;autoDocstring&lt;/strong&gt; — Generate Python docstrings automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Django&lt;/strong&gt; — Django syntax and snippets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pylance&lt;/strong&gt; — Python language server and development tooling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — Python language support and extension access points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Debugger&lt;/strong&gt; — Python debugging using &lt;code&gt;debugpy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Environment Manager&lt;/strong&gt; — View and manage Python environments and packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Environments&lt;/strong&gt; — Unified Python environment management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python Indent&lt;/strong&gt; — Python indentation support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jinja&lt;/strong&gt; — Jinja template language support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's there when I need it, but it doesn't need to be part of my everyday environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Point
&lt;/h2&gt;

&lt;p&gt;There's nothing particularly revolutionary about this list.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That's intentional.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These are simply the tools I've accumulated through actually building software. Some make development faster. Some make it easier to inspect what I'm working on. Some solve annoyingly specific problems. Some are there because I happen to like the way they work.&lt;/p&gt;

&lt;p&gt;And that's probably the biggest recommendation I can make about VS Code extensions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't install extensions because somebody told you that you need them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try things. Keep the ones that improve your workflow. Disable or remove the ones that don't. Use profiles when your projects span very different ecosystems.&lt;/p&gt;

&lt;p&gt;Your development environment should eventually become an expression of &lt;strong&gt;how you work&lt;/strong&gt;, rather than a collection of somebody else's idea of what a developer is supposed to have installed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;This is my extension stack. There are many like it, but this one is mine.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>toolset</category>
    </item>
    <item>
      <title>New to web dev? Not sure where to start?</title>
      <dc:creator>Rob Vandelinder</dc:creator>
      <pubDate>Wed, 30 Sep 2026 17:08:27 +0000</pubDate>
      <link>https://dev.to/rob_v/new-to-web-dev-not-sure-where-to-start-ong</link>
      <guid>https://dev.to/rob_v/new-to-web-dev-not-sure-where-to-start-ong</guid>
      <description>&lt;h2&gt;
  
  
  A practical launchpad for new developers and vibe coders
&lt;/h2&gt;

&lt;p&gt;You have a new idea. You want to make an app.&lt;/p&gt;

&lt;p&gt;Whether you're using AI to help or getting elbows-deep in the syntax yourself, getting started can be confusing — and sometimes intimidating. There are seemingly endless technologies, frameworks, libraries, tools, acronyms, and opinions to navigate.&lt;/p&gt;

&lt;p&gt;The good news is that it's simpler than it looks.&lt;/p&gt;

&lt;p&gt;A lot of those technologies are solving the &lt;strong&gt;same fundamental problems&lt;/strong&gt;. There may be dozens of frameworks for building a web application, hundreds of libraries for handling different tasks, and countless ways to deploy your finished project. Choosing between them often comes down to the needs of the project and the preferences of the developer.&lt;/p&gt;

&lt;p&gt;I've taken what I've learned over the past seven years of development and distilled it into some simple concepts and tools that I wish someone had handed me when I started. Hopefully, this will save you some headaches, failed builds, irritated customers, and maybe even a few tears.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the setup that I use.&lt;/strong&gt; It is not a universal standard, it is not the "best" stack, and it certainly isn't the only way to build software. Every developer develops their own workflow, and your own toolset should evolve as you discover new skills.&lt;/p&gt;

&lt;p&gt;Think of this as a &lt;strong&gt;launchpad, not a rulebook.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;If you only remember three things:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you're completely new, don't try to learn this entire page.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start with &lt;strong&gt;VS Code, your browser, Node.js, and TypeScript&lt;/strong&gt;. Build something small. When you encounter a problem that requires a database, learn PostgreSQL. When you need a backend, learn NestJS. When you need a more complicated UI, learn the Angular pieces you need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You don't need to know where the road ends before you start walking.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Bare Essentials
&lt;/h2&gt;

&lt;p&gt;Before choosing a framework, there are a few things you'll need regardless of what you're building.&lt;/p&gt;

&lt;h3&gt;
  
  
  VS Code
&lt;/h3&gt;

&lt;p&gt;With today's LLMs and AI-first IDEs, it is possible to build an app without spending much time looking at the underlying code.&lt;/p&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; do that.&lt;/p&gt;

&lt;p&gt;But if you want to become a good developer, I'd strongly recommend getting your hands dirty and learning what's happening behind the curtain.&lt;/p&gt;

&lt;p&gt;VS Code is a great starting point because it's essentially a blank slate. It can handle almost any language and adapt to your workflow through extensions and customizations.&lt;/p&gt;

&lt;p&gt;I have an article about some great starting extensions here: &lt;a href="https://www.linkedin.com/pulse/suggested-vs-code-extensions-try-robert-vandelinder-pqp7c/" rel="noopener noreferrer"&gt;Suggested VS Code Extensions to Try&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Web browser
&lt;/h3&gt;

&lt;p&gt;Very hard to test a web app you're developing without one.&lt;/p&gt;

&lt;p&gt;Your browser also contains some incredibly useful developer tools for inspecting pages, debugging JavaScript, examining network requests, and more.&lt;/p&gt;

&lt;p&gt;Chrome, Edge, Firefox, and Safari all have developer tools. Pick whichever you prefer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Node.js/npm
&lt;/h3&gt;

&lt;p&gt;If you're following the stack below, you'll need Node.js and its package manager, &lt;code&gt;npm&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Node.js allows JavaScript and TypeScript to run outside of a web browser, which makes it useful for building backend applications and development tools.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm&lt;/code&gt; provides access to a huge ecosystem of packages and is also how we'll install the frameworks used in this stack.&lt;/p&gt;

&lt;p&gt;You can build simple backend servers with Node.js on its own. As your projects grow, however, a framework can provide structure and features that make the application easier to build, maintain, and expand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Suggested Framework Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Basics
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Backend: &lt;em&gt;NestJS&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;"Nest is a framework for building efficient, scalable server-side applications."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Install the Nest CLI with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install --global @nestjs/cli&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Clear separation between controllers, services, and other application components&lt;/li&gt;
&lt;li&gt;Introduces useful concepts such as dependency injection and modular architecture&lt;/li&gt;
&lt;li&gt;Encourages you to organize your application instead of putting everything into one giant file&lt;/li&gt;
&lt;li&gt;Scales from small APIs to large applications&lt;/li&gt;
&lt;li&gt;Uses many of the same concepts and language as Angular&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;NestJS is a particularly nice starting point if you're interested in learning how larger applications are structured. You don't need to understand the entire framework before you start — learn the pieces as your application needs them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Web frontend/client: &lt;em&gt;Angular&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;"The web development framework for building modern apps."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Install the Angular CLI with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install --global @angular/cli&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Component-based UI development&lt;/li&gt;
&lt;li&gt;Common patterns with NestJS&lt;/li&gt;
&lt;li&gt;Dependency injection and services&lt;/li&gt;
&lt;li&gt;Built-in support for routing, forms, HTTP communication, and other common application requirements&lt;/li&gt;
&lt;li&gt;Provides an established structure for larger applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Angular can feel like a lot at first. That's okay. You don't need to learn everything before building your first application. Start with components and templates, then introduce services, routing, forms, HTTP, and other concepts as you need them.&lt;/p&gt;

&lt;h4&gt;
  
  
  Database: &lt;em&gt;PostgreSQL or SQLite&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;PostgreSQL is a mature, open-source relational database system and is my primary recommendation for traditional server-backed applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL is a valuable and transferable skill&lt;/li&gt;
&lt;li&gt;Strong support for relational data and relationships&lt;/li&gt;
&lt;li&gt;Supports useful features such as JSON/JSONB and array data types&lt;/li&gt;
&lt;li&gt;Mature ecosystem and extensive documentation&lt;/li&gt;
&lt;li&gt;Suitable for everything from small applications to very large systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SQLite is another excellent option, particularly for smaller or local applications. Unlike PostgreSQL, SQLite doesn't require a separate database server — the database is simply a file that belongs to your application.&lt;/p&gt;

&lt;p&gt;A simple rule of thumb:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SQLite:&lt;/strong&gt; Simple, local, or embedded applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL:&lt;/strong&gt; Applications with a dedicated backend/database server, multiple users, or more complex data requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to become a database administrator before building your first application. Start with tables, relationships, basic queries, and indexes, then learn more as you need it.&lt;/p&gt;

&lt;h4&gt;
  
  
  Mobile client: Flutter
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;"Build apps for any screen."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Flutter allows you to build applications for Android, iOS, desktop, and other platforms from a shared codebase.&lt;/p&gt;

&lt;p&gt;Flutter uses &lt;strong&gt;Dart&lt;/strong&gt;, so I'd consider it a natural next step once you're comfortable with web development rather than something you need to learn immediately.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One codebase can target multiple platforms&lt;/li&gt;
&lt;li&gt;Excellent for building mobile applications&lt;/li&gt;
&lt;li&gt;Dart is another approachable, strongly typed programming language&lt;/li&gt;
&lt;li&gt;Shares many familiar concepts with TypeScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Publishing mobile applications also introduces additional considerations such as developer accounts, platform-specific requirements, testing, and app-store processes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced Concepts
&lt;/h2&gt;

&lt;p&gt;Once you've built an application, you'll eventually run into problems that aren't about writing the application itself.&lt;/p&gt;

&lt;p&gt;That's where some of these concepts come in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Object Storage
&lt;/h3&gt;

&lt;p&gt;Applications often need to store files such as images, documents, backups, or other large objects.&lt;/p&gt;

&lt;p&gt;One common solution is &lt;strong&gt;object storage&lt;/strong&gt;, with Amazon S3 being one of the best-known examples.&lt;/p&gt;

&lt;p&gt;There are several approaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosted object storage:&lt;/strong&gt; Let a provider handle the infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted object storage:&lt;/strong&gt; Run an S3-compatible service yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local filesystem:&lt;/strong&gt; Sometimes perfectly adequate for a small application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right choice depends heavily on the application and its requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;Getting your application from your development machine onto the internet is a whole topic of its own.&lt;/p&gt;

&lt;p&gt;There are roughly three levels of complexity:&lt;/p&gt;

&lt;h4&gt;
  
  
  Managed hosting
&lt;/h4&gt;

&lt;p&gt;Services such as Netlify, Vercel, Firebase, or GitHub Pages can handle much of the infrastructure for you.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cloud VPS
&lt;/h4&gt;

&lt;p&gt;You rent a virtual server and take responsibility for considerably more of the configuration yourself.&lt;/p&gt;

&lt;h4&gt;
  
  
  Self-hosting
&lt;/h4&gt;

&lt;p&gt;You run the application on hardware that you control.&lt;/p&gt;

&lt;p&gt;This could be a spare computer, a home server, or another machine running Docker/Compose.&lt;/p&gt;

&lt;p&gt;Start with the simplest option that meets your needs. You can always learn the more complicated approaches later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Important Concepts to Consider When Designing an App
&lt;/h2&gt;

&lt;p&gt;The code isn't the only thing you need to think about.&lt;/p&gt;

&lt;p&gt;Even a small application should make you stop and ask a few questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data privacy:&lt;/strong&gt; What personal information does the application collect? Does it actually need it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance:&lt;/strong&gt; Are there laws or regulations that apply to the data you're handling?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; How could someone misuse the application or gain access to information they shouldn't have?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets:&lt;/strong&gt; Never commit API keys, passwords, tokens, certificates, or other sensitive secrets to your repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The user:&lt;/strong&gt; What is the application actually like to use? Don't design entirely around what is convenient for you as the developer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; If other people are going to depend on your application, tests aren't optional. The more important the application becomes, the more important automated testing becomes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failure:&lt;/strong&gt; What happens when the network goes down, the database is unavailable, an API changes, or a user does something unexpected?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you're using AI to build the application
&lt;/h3&gt;

&lt;p&gt;AI can dramatically reduce the amount of code you need to write yourself, but it doesn't remove the need for planning.&lt;/p&gt;

&lt;p&gt;In fact, the opposite can be true.&lt;/p&gt;

&lt;p&gt;When an AI agent is allowed to make decisions without clear requirements or constraints, it can introduce unnecessary functionality, make inconsistent architectural decisions, or solve a problem differently from what you intended.&lt;/p&gt;

&lt;p&gt;Clear requirements, project structure, constraints, and verification steps give the AI something concrete to work against.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI can write the code. You still need to decide what the software should do.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  General Programming Concepts
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Not a deep dive&lt;/em&gt;, just a few concepts I wish I had learned sooner.&lt;/p&gt;

&lt;p&gt;You don't need to master these concepts before you start building software. In fact, you'll probably understand them much better after you've built something that gives you a reason to care about them.&lt;/p&gt;

&lt;h3&gt;
  
  
  SOLID and DRY
&lt;/h3&gt;

&lt;p&gt;You don't need to memorize the SOLID acronym right away. The important idea is that your code should have clear responsibilities and shouldn't become unnecessarily tangled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DRY&lt;/strong&gt; means &lt;strong&gt;Don't Repeat Yourself&lt;/strong&gt;. If you're copying the same logic into five different places, there's probably a better way to organize it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOLID&lt;/strong&gt; is a collection of principles that help you design software that is easier to understand, change, and maintain.&lt;/p&gt;

&lt;p&gt;These concepts can seem abstract when you're starting out. That's normal. You'll start recognizing them naturally as your applications become more complicated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git branches
&lt;/h3&gt;

&lt;p&gt;A Git branch gives you a separate line of development without immediately changing the code everyone else is using.&lt;/p&gt;

&lt;p&gt;A simple workflow might have a &lt;code&gt;dev&lt;/code&gt; branch where new work is integrated and a &lt;code&gt;main&lt;/code&gt; branch representing code that is ready for release.&lt;/p&gt;

&lt;p&gt;You can create a feature branch, make changes, test them, and then merge those changes back into &lt;code&gt;dev&lt;/code&gt; without disrupting the rest of the project.&lt;/p&gt;

&lt;p&gt;There are many different Git workflows, so don't treat &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;main&lt;/code&gt; as universal rules. The important thing to understand is &lt;strong&gt;why branches exist&lt;/strong&gt;: they give you a safe place to make changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git basics
&lt;/h3&gt;

&lt;p&gt;At minimum, become comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;clone&lt;/code&gt; — get a repository onto your computer&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pull&lt;/code&gt; — get changes from the remote repository&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;commit&lt;/code&gt; — record a set of changes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;push&lt;/code&gt; — send your commits to the remote repository&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;branch&lt;/code&gt; — create a separate line of development&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;merge&lt;/code&gt; — combine changes from one branch into another&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pull request&lt;/code&gt; — propose a set of changes for review and merging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to memorize every Git command. Learn what the commands are doing and use documentation when you forget the exact syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  Naming conventions
&lt;/h3&gt;

&lt;p&gt;Good names make code easier to understand.&lt;/p&gt;

&lt;p&gt;Compare:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;x = getData()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;userProfile = getUserProfile()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The second version tells you what the value actually represents without requiring you to read the function to figure it out.&lt;/p&gt;

&lt;p&gt;Different languages and frameworks have established conventions for naming things. Follow them where practical.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Convention&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend functions/variables&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;camelCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend entities/classes&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PascalCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database tables/columns&lt;/td&gt;
&lt;td&gt;SQL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;snake_case&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web frontend functions/variables&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;camelCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web frontend classes/components&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PascalCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web frontend HTML attributes&lt;/td&gt;
&lt;td&gt;HTML&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kebab-case&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web frontend CSS classes/properties&lt;/td&gt;
&lt;td&gt;CSS&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kebab-case&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile frontend functions/variables&lt;/td&gt;
&lt;td&gt;Dart&lt;/td&gt;
&lt;td&gt;&lt;code&gt;camelCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile frontend classes/widgets&lt;/td&gt;
&lt;td&gt;Dart&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PascalCase&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;File naming conventions may differ by framework.&lt;/strong&gt; For example, Dart conventionally uses &lt;code&gt;snake_case&lt;/code&gt; for file names, while Angular commonly uses &lt;code&gt;kebab-case&lt;/code&gt; for source file names.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The exact convention is less important than understanding &lt;strong&gt;what you're looking at&lt;/strong&gt; and being consistent with the conventions of the project you're working in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Separation of concerns
&lt;/h3&gt;

&lt;p&gt;This is one of those concepts that sounds much more complicated than it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't make one piece of your application responsible for everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, your code that handles an HTTP request shouldn't also be responsible for rendering the UI, talking directly to the database, sending emails, and deciding all of your business rules.&lt;/p&gt;

&lt;p&gt;Separate those responsibilities into appropriate parts of the application.&lt;/p&gt;

&lt;p&gt;This makes your code easier to understand and means you can change one part without accidentally breaking everything else.&lt;/p&gt;

&lt;p&gt;You'll encounter this idea under many different names — services, controllers, components, repositories, modules, layers, and more. The terminology changes, but the underlying idea is the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't be afraid of refactoring
&lt;/h3&gt;

&lt;p&gt;The first version of your code doesn't have to be the final version.&lt;/p&gt;

&lt;p&gt;As you learn more about the problem, you'll often discover that something you wrote yesterday could be organized better today. That's normal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refactoring&lt;/strong&gt; means changing the internal structure of your code without intentionally changing what the application does.&lt;/p&gt;

&lt;p&gt;Maybe a function has become too large. Maybe two pieces of code are doing almost the same thing. Maybe you've discovered that something belongs in a service instead of a component.&lt;/p&gt;

&lt;p&gt;Fix it.&lt;/p&gt;

&lt;p&gt;You don't have to get everything right the first time. Good developers spend a significant amount of time improving code they've already written.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read error messages
&lt;/h3&gt;

&lt;p&gt;This sounds obvious, but it's one of the most valuable skills you can develop.&lt;/p&gt;

&lt;p&gt;When something breaks, &lt;strong&gt;read the error before asking an AI to fix it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The error message may tell you exactly what went wrong, which file it happened in, and sometimes even which line caused it.&lt;/p&gt;

&lt;p&gt;You don't need to understand every word immediately. Start by identifying:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What kind of error is it?&lt;/li&gt;
&lt;li&gt;Which file caused it?&lt;/li&gt;
&lt;li&gt;Which line caused it?&lt;/li&gt;
&lt;li&gt;What was the application trying to do?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then investigate from there.&lt;/p&gt;

&lt;p&gt;Learning to understand errors turns debugging from &lt;em&gt;"the computer hates me"&lt;/em&gt; into a solvable problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tests are documentation
&lt;/h3&gt;

&lt;p&gt;Tests aren't just there to prove that your code works today.&lt;/p&gt;

&lt;p&gt;A good test also tells the next developer — which might be &lt;strong&gt;you six months from now&lt;/strong&gt; — what the code is supposed to do.&lt;/p&gt;

&lt;p&gt;If you change something and a test suddenly fails, that failure can tell you that you've changed behaviour that another part of the application depends on.&lt;/p&gt;

&lt;p&gt;You don't need 100% test coverage on your first weekend project. But if you're building something other people will depend on, start treating tests as part of the application rather than something you add after the "real" work is finished.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn to read code you didn't write
&lt;/h3&gt;

&lt;p&gt;Eventually, you'll encounter code that you didn't write yourself.&lt;/p&gt;

&lt;p&gt;Maybe it's an open-source library. Maybe it's a coworker's code. Maybe it's something an AI generated three months ago that you no longer remember.&lt;/p&gt;

&lt;p&gt;Being able to read existing code is just as important as being able to write new code.&lt;/p&gt;

&lt;p&gt;You don't need to understand an entire project before changing it. Start at the piece you're interested in and work outward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What calls this? What does this call? What data goes in? What comes out?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You'll gradually build a mental model of how the pieces fit together.&lt;/p&gt;




&lt;h2&gt;
  
  
  One Last Thing
&lt;/h2&gt;

&lt;p&gt;Don't get caught up in choosing the "perfect" technology, or feel like you need to understand everything before you start building.&lt;/p&gt;

&lt;p&gt;Your first application will probably be messy. You'll make mistakes, discover better approaches, rebuild parts of it, and eventually look back at your early code and wonder what on earth you were thinking.&lt;/p&gt;

&lt;p&gt;That's okay.&lt;/p&gt;

&lt;p&gt;These aren't rules you need to memorize. They're ideas that become more useful as your applications grow and you gain experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build things. Break things. Fix them. Then build something better.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's how you learn to develop software.&lt;/p&gt;

&lt;p&gt;And that's the whole point of this guide: &lt;strong&gt;give yourself enough of a map to start moving, then learn the rest along the way.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's development.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>developers</category>
    </item>
  </channel>
</rss>
