<?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: Kwame Oteng Appiah-Nti</title>
    <description>The latest articles on DEV Community by Kwame Oteng Appiah-Nti (@developerkwame).</description>
    <link>https://dev.to/developerkwame</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%2F383734%2F566f71bd-c29b-4453-9919-1ee3b1add1ef.jpeg</url>
      <title>DEV Community: Kwame Oteng Appiah-Nti</title>
      <link>https://dev.to/developerkwame</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/developerkwame"/>
    <language>en</language>
    <item>
      <title>In Defense of PHP: A Language That Runs the Web Doesn't Get to Die from Bad PR</title>
      <dc:creator>Kwame Oteng Appiah-Nti</dc:creator>
      <pubDate>Sat, 24 Oct 2026 07:11:41 +0000</pubDate>
      <link>https://dev.to/developerkwame/in-defense-of-php-a-language-that-runs-the-web-doesnt-get-to-die-from-bad-pr-5hn4</link>
      <guid>https://dev.to/developerkwame/in-defense-of-php-a-language-that-runs-the-web-doesnt-get-to-die-from-bad-pr-5hn4</guid>
      <description>&lt;p&gt;Another October, another existential crisis for PHP. The &lt;strong&gt;PHP2Shell&lt;/strong&gt; vulnerabilities (CVE-2026-109618 and CVE-2026-109619) dropped with a CVSS score of &lt;strong&gt;9.2&lt;/strong&gt;, a botched disclosure timeline, and a media cycle that practically wrote PHP's obituary for it. As a PHP veteran, I've watched this movie before. But this time, the script is different. The real story isn't about a language flaw; it's about a culture of &lt;strong&gt;not understanding your own code&lt;/strong&gt; and a convenient amnesia about where the actual breaches are happening.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Leak Was the Story, Not the Language
&lt;/h2&gt;

&lt;p&gt;Let's be precise about what happened. The PHP Foundation ran a &lt;strong&gt;coordinated disclosure process&lt;/strong&gt; for two critical RCE bugs. The fixes were ready. Patches were released for PHP &lt;strong&gt;8.5.12, 8.4.27, 8.3.36, and 8.2.35&lt;/strong&gt; on October 21, 2026. The Foundation acknowledged a &lt;strong&gt;"structural failure"&lt;/strong&gt;: the flaw was first spotted in 2024, but the security team, constrained by consensus and resources, stalled on a fix. That is a governance and funding problem, not a language design flaw.&lt;/p&gt;

&lt;p&gt;Then the embargo broke. A consultant leaked the CVE IDs. A security firm published a proof-of-concept video. &lt;strong&gt;Chainguard shipped patched container images more than six hours before the official release&lt;/strong&gt;, letting attackers study the fix in binary form while everyone else was still waiting. The Foundation itself called out this unilateral move.&lt;/p&gt;

&lt;p&gt;What followed was predictable: millions of exploit attempts, mass website takedowns across European governments, and headlines that treated PHP as the culprit. But the culprit was a &lt;strong&gt;broken disclosure ecosystem&lt;/strong&gt;, not the fact that PHP exists. Every piece of software of this scale and age has vulnerabilities. The question is how they are handled, and in this case, the handling failed &lt;em&gt;despite&lt;/em&gt; the language, not because of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real "Code You Don't Understand" Problem: Vibe Coding
&lt;/h2&gt;

&lt;p&gt;If you want to find the actual security crisis in 2026, look at &lt;strong&gt;vibe coding&lt;/strong&gt;. The entire premise of the "vibe coding" movement is that you can generate code with AI and &lt;em&gt;not read it afterward&lt;/em&gt;, just ship it. The research is damning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Georgia Tech study scanned 43,000 security advisories and found &lt;strong&gt;74 confirmed cases of AI-introduced vulnerabilities&lt;/strong&gt;, including &lt;strong&gt;14 critical&lt;/strong&gt; ones: command injection, authentication bypass, server-side request forgery.&lt;/li&gt;
&lt;li&gt;A benchmark of 186 real-world tasks found that while &lt;strong&gt;57% of AI-generated solutions were functionally correct, only 11.8% were secure&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Vibe-coded applications exhibit &lt;strong&gt;"placeholder logic, unfiltered input, and secret exposure"&lt;/strong&gt;, systematic failures that stem from AI agents' memory loss, locally optimized objectives, and insufficient security knowledge.&lt;/li&gt;
&lt;li&gt;One analysis found &lt;strong&gt;2.74 times more security issues per pull request&lt;/strong&gt; in AI-generated code compared to human-authored code, and a &lt;strong&gt;100% failure rate on basic CSRF protection&lt;/strong&gt; across tested production applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what happens when you deploy &lt;strong&gt;code you don't understand&lt;/strong&gt;. PHP is not the problem. The problem is a generation of developers being told that comprehension is optional. A language is a tool; if you don't know how to use it, or what the AI generated with it, the vulnerability is in the operator, not the tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cloud Isn't Safe Either: Big Tech's Own House Is on Fire
&lt;/h2&gt;

&lt;p&gt;The narrative that PHP is uniquely dangerous collapses when you look at the infrastructure hosting the "modern" stack. In April 2026, &lt;strong&gt;Vercel&lt;/strong&gt;, the platform behind Next.js and a darling of the JavaScript ecosystem, suffered a major breach. The attack vector? An employee at a third-party AI vendor (Context.ai) was infected with &lt;strong&gt;Lumma Stealer&lt;/strong&gt; malware, harvested credentials, and used stolen &lt;strong&gt;OAuth tokens&lt;/strong&gt; to pivot into Vercel's internal systems and exfiltrate environment variables.&lt;/p&gt;

&lt;p&gt;Vercel's CEO described the attacker as &lt;strong&gt;"highly sophisticated"&lt;/strong&gt; and &lt;strong&gt;"significantly accelerated by AI"&lt;/strong&gt;. The breach didn't come from a PHP flaw. It came from the &lt;strong&gt;identity supply chain&lt;/strong&gt; of the cloud-native world: OAuth tokens, third-party SaaS vendors, and broad "allow all" permissions.&lt;/p&gt;

&lt;p&gt;Big Tech spent a decade marketing the cloud as the secure, scalable alternative to "legacy" self-hosting. The message was: &lt;em&gt;trust our infrastructure, and you'll be safe&lt;/em&gt;. But the Vercel breach shows that the cloud simply &lt;strong&gt;moves the attack surface&lt;/strong&gt;: from your code to your OAuth grants, from your server to your vendor's laptop. AWS environments, Google Workspace tokens, and CI/CD pipelines are now the new perimeter. PHP running on a bare-metal server you actually control is not the weak link in that chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modern PHP Is a Performance Beast (If You Bother to Look)
&lt;/h2&gt;

&lt;p&gt;The "PHP is slow" meme is a decade out of date. The ecosystem has quietly undergone a renaissance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FrankenPHP&lt;/strong&gt; bundles PHP into a single Go binary with an embedded Caddy webserver and runs in &lt;strong&gt;worker mode&lt;/strong&gt;, delivering &lt;strong&gt;5 to 15x the requests-per-second&lt;/strong&gt; of traditional PHP-FPM on the same hardware. Symfony benchmarks show &lt;strong&gt;2x to 4x more RPS&lt;/strong&gt; with &lt;strong&gt;median latency divided by three&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RoadRunner&lt;/strong&gt; is a Go-based application server that keeps PHP workers warm, offering a plugin ecosystem for gRPC, queues, and KV storage: &lt;strong&gt;9,200 RPS&lt;/strong&gt; with &lt;strong&gt;3ms latency&lt;/strong&gt; in Symfony benchmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mago&lt;/strong&gt; is emerging as a high-performance alternative to PHPStan for static analysis, and the tooling around type safety and code quality is maturing rapidly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've run PHP side-by-side with &lt;strong&gt;Rust and Go&lt;/strong&gt; in production. The idea that PHP cannot hold its own is a myth propagated by people who haven't benchmarked a modern runtime. The language's core (English-like syntax, shared-nothing request isolation, and an enormous standard library) makes it &lt;strong&gt;uniquely suited for the web&lt;/strong&gt;. The JIT compiler in PHP 8+ and the worker-mode runtimes have closed the performance gap that once justified migration to other stacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Quiet Proof: A Solo Framework With Zero CVEs
&lt;/h2&gt;

&lt;p&gt;I am Kwame Oteng Appiah-Nti. I have been working on &lt;strong&gt;WebbyPHP&lt;/strong&gt; since 2020, a lightweight, modular, "lego-like" PHP framework extended from CodeIgniter 3 that I built for my own personal projects. It is not a corporate-backed mega-framework. It does not have a foundation, a security team, or a marketing budget. It is just code I wrote, understand, and maintain.&lt;/p&gt;

&lt;p&gt;Recently, I was checking on SEO rankings and I chanced WebbyPHP showing in &lt;strong&gt;Aikido Intel&lt;/strong&gt;, the same security intelligence feed that tracks over 167,000 vulnerabilities and 118,000 malware entries across open-source ecosystems. I opened it and obviously it had run some analysis on it long ago. The result stopped me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aikido found zero vulnerabilities&lt;/strong&gt; in both &lt;code&gt;webbyphp/webby&lt;/code&gt; and &lt;code&gt;webbyphp/engine&lt;/code&gt;. No CVEs. No malicious packages. Nothing.&lt;/p&gt;

&lt;p&gt;What it &lt;em&gt;did&lt;/em&gt; flag were maintenance warnings, the kind that come from a one-person project: quiet commit activity, a small user base, and no automated security scanning configured in the repository. Those are fair critiques of a solo maintainer's bandwidth, and I accept them. But they are &lt;strong&gt;hygiene warnings, not security failures&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then I looked at the frameworks that dominate the headlines, the ones with full-time teams, corporate sponsors, and massive adoption.&lt;/p&gt;

&lt;p&gt;The results are below:&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;webbyphp/webby as seen on aikido intel&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;em&gt;webbyphp/engine as seen on aikido intel&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel&lt;/strong&gt;, the flagship of modern PHP, has had its GitHub packages compromised by a credential stealer, with Aikido Security itself reporting the incident. The Laravel-Lang supply chain attack saw &lt;strong&gt;233 manipulated version tags&lt;/strong&gt; across four Composer packages, with malicious code executing automatically through Composer's autoloader. Laravel's own &lt;code&gt;TokenGuard&lt;/code&gt; has suffered authentication bypass vulnerabilities allowing unauthenticated attackers to authenticate as other users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Symfony&lt;/strong&gt;, the enterprise standard, has accumulated a steady stream of CVEs: parser recursion issues, denial-of-service vectors, and security control bypasses across multiple release branches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WordPress&lt;/strong&gt;, which powers over 43% of the web, required emergency patches for an unauthenticated RCE in its core, &lt;strong&gt;wp2shell&lt;/strong&gt;, confirmed as SQL injection, affecting releases 6.9.0 through 7.0.1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CodeIgniter&lt;/strong&gt;, the very lineage WebbyPHP extends, has its own CVE trail: header validation failures, denial-of-service in the Language class, information leakage, and arbitrary code execution through validation placeholders.&lt;/p&gt;

&lt;p&gt;These are not obscure packages. These are the pillars of the PHP ecosystem. And Aikido's own analysis shows they carry CVEs, while a solo developer's personal framework, built and understood line by line, carries none.&lt;/p&gt;

&lt;p&gt;This is not an indictment of Laravel or Symfony or WordPress. They are massive, complex systems with enormous attack surfaces, and their teams work hard to patch what they find. The point is simpler and more uncomfortable: &lt;strong&gt;a framework's size, budget, and popularity are not proxies for its security&lt;/strong&gt;. A small codebase that its author actually understands, with a narrow surface and no sprawling dependency tree, can be &lt;em&gt;more&lt;/em&gt; secure than a monolith maintained by a committee.&lt;/p&gt;

&lt;p&gt;That is the irony at the heart of the PHP2Shell panic. The narrative says PHP is broken, and the big frameworks are the "serious" option. The data says the big frameworks are the ones with the CVE histories, and the quiet, hand-built, understood code is the one that passed clean.&lt;/p&gt;

&lt;p&gt;If you don't understand your code, no framework and no AI will save you. If you &lt;em&gt;do&lt;/em&gt; understand it, even a one-person project from Accra can stand next to the giants and come out with a clean sheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP Powers the Web. It Will Continue to Power the Web.
&lt;/h2&gt;

&lt;p&gt;Here is the number that matters: &lt;strong&gt;69.3% of websites with a known server-side language use PHP&lt;/strong&gt;, according to W3Techs data from October 22, 2026, &lt;em&gt;after&lt;/em&gt; the vulnerability panic. Earlier 2026 data put the figure at &lt;strong&gt;72.4%&lt;/strong&gt;, and even the most conservative estimates place PHP above &lt;strong&gt;70%&lt;/strong&gt;, more than Node.js, Python, and Go &lt;strong&gt;combined&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;WordPress alone powers over &lt;strong&gt;43% of the web&lt;/strong&gt;, and it runs on PHP. Drupal, Joomla, MediaWiki, Nextcloud, Laravel, Symfony: the list of PHP-powered systems is the actual backbone of the internet.&lt;/p&gt;

&lt;p&gt;This dominance is not an accident of history. It is the result of a language that &lt;strong&gt;solved the web's core problem&lt;/strong&gt; (handling HTTP requests, managing state, and rendering dynamic content) with a simplicity and ubiquity that no other stack has matched. PHP's &lt;strong&gt;shared-nothing architecture&lt;/strong&gt; means a bug in one request doesn't poison the next. Its &lt;strong&gt;English-like syntax&lt;/strong&gt; lowers the barrier to entry, which is why it became the language of the open web rather than the language of a single corporation's walled garden.&lt;/p&gt;

&lt;p&gt;The PHP2Shell saga is a &lt;strong&gt;security governance failure&lt;/strong&gt;, not a language failure. The vibe coding crisis is a &lt;strong&gt;comprehension failure&lt;/strong&gt;, not a PHP failure. The Vercel breach is a &lt;strong&gt;cloud supply-chain failure&lt;/strong&gt;, not a PHP failure.&lt;/p&gt;

&lt;p&gt;PHP has survived the "PHP is dead" meme for fifteen years. It survived the jump to PHP 7 and the JIT revolution of PHP 8. It will survive this. The language runs the web because it &lt;em&gt;is&lt;/em&gt; the web, and no amount of bad-faith panic-posting changes the fact that &lt;strong&gt;69% of the internet's server-side logic is written in it&lt;/strong&gt;. If you don't understand your code, the problem isn't the language. If you don't understand your infrastructure, the problem isn't the server. PHP will continue to dominate the World Wide Web, and the people who actually build things with it will keep shipping.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>php</category>
    </item>
    <item>
      <title>Why do some developers compare PHP and NodeJS?</title>
      <dc:creator>Kwame Oteng Appiah-Nti</dc:creator>
      <pubDate>Thu, 27 Aug 2026 02:15:58 +0000</pubDate>
      <link>https://dev.to/developerkwame/why-do-some-developers-compare-php-and-nodejs-3495</link>
      <guid>https://dev.to/developerkwame/why-do-some-developers-compare-php-and-nodejs-3495</guid>
      <description>&lt;p&gt;Why do developers compare PHP and Node.js? (Spoiler: One is a language, the other is a magician’s hat)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And why most people don’t actually know what a programming language is.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Let’s set the scene. You are in a job interview, or perhaps a Reddit thread, and someone asks, &lt;em&gt;“Which is better for the backend? PHP or NodeJS?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You brace yourself for the usual fanboy war—talk of performance, syntax, and frameworks. But if you stop and think about it, this question is linguistically nonsensical. It’s like asking, &lt;em&gt;“Which is better for breakfast? Eggs or the oven?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Yet, this comparison happens every single day. The reason isn't stupidity; it’s a fundamental misunderstanding of what makes a programming language a &lt;em&gt;language&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Here is the hard truth: &lt;strong&gt;NodeJS is not a programming language. PHP is.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Vocabulary vs. The Stage
&lt;/h3&gt;

&lt;p&gt;Let’s get the definitions straight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PHP (Hypertext Preprocessor)&lt;/strong&gt; is a programming language. It has its own syntax, rules, and vocabulary. You write code in PHP to tell the computer what to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NodeJS&lt;/strong&gt; is a runtime environment. It is essentially a "magician's hat" that allows you to run JavaScript on a server. If NodeJS isn't a language, what is it running? &lt;strong&gt;JavaScript.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, when developers compare PHP and NodeJS, they are actually comparing &lt;strong&gt;PHP&lt;/strong&gt; to &lt;strong&gt;JavaScript&lt;/strong&gt; (the languages), but they are bundling it with the execution environment (Node) to judge server-side capability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the Confusion Exists
&lt;/h3&gt;

&lt;p&gt;Why do we forgive this technically incorrect comparison? Because, in practice, they serve the same function: &lt;strong&gt;Server-side execution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a long time, if you wanted to write dynamic websites, your only reliable option was to write PHP, slap it on an Apache server, and hope for the best. Then, in 2009, Ryan Dahl created NodeJS, allowing developers to use the client-side language (JavaScript) to talk to a server.&lt;/p&gt;

&lt;p&gt;Because they occupy the same "space" (backend web development), developers began using the names of the ecosystems interchangeably. They don't say &lt;em&gt;"I'm building this in JavaScript"&lt;/em&gt;; they say &lt;em&gt;"I'm building this in Node."&lt;/em&gt; And they don't say &lt;em&gt;"I'm building this in the PHP runtime"&lt;/em&gt;; they just say &lt;em&gt;"PHP."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Misunderstanding: What is a Language?
&lt;/h3&gt;

&lt;p&gt;The reason this comparison persists comes down to a crucial gap in knowledge: many developers don't understand the difference between &lt;strong&gt;syntax&lt;/strong&gt; and &lt;strong&gt;execution.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Programming Language&lt;/strong&gt; is the &lt;strong&gt;syntax&lt;/strong&gt;. It is the grammar and vocabulary. It dictates how you write &lt;code&gt;if/else&lt;/code&gt; statements, how you define variables, and how you structure data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Runtime&lt;/strong&gt; is the &lt;strong&gt;engine&lt;/strong&gt;. It is the thing that reads that grammar and executes it on your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you say &lt;em&gt;"PHP is slower than Node"&lt;/em&gt;, you are making a category error. You are comparing the speed of PHP's engine (Zend Engine) to the speed of JavaScript's engine (V8). You are not comparing the languages themselves; you are comparing their "cars."&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Language" vs. "Tool" Distinction
&lt;/h3&gt;

&lt;p&gt;To put it in perspective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PHP is a hammer.&lt;/strong&gt; It is a tool you use to build things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NodeJS is a workbench.&lt;/strong&gt; It is a stable platform upon which you place your tools (JavaScript).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You wouldn't say, &lt;em&gt;"Which is better for building a chair? The hammer or the workbench?"&lt;/em&gt; You would say, &lt;em&gt;"Which is better for building a chair? The hammer or the saw?"&lt;/em&gt; (Saw being JavaScript).&lt;/p&gt;

&lt;p&gt;In the same way, the debate should be: &lt;strong&gt;PHP vs. JavaScript.&lt;/strong&gt; Not PHP vs. Node.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why does this matter beyond semantics?
&lt;/h3&gt;

&lt;p&gt;If you are going to be a developer, understanding the architecture of your tools is essential.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Troubleshooting:&lt;/strong&gt; If you think NodeJS is a language, you will look for language-level bugs. In reality, Node is a C++ program that executes JavaScript. If you have a memory leak, knowing it's the V8 engine (the runtime) rather than your JavaScript syntax is crucial for fixing it.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Learning Curve:&lt;/strong&gt; If you think NodeJS is a language, you might try to learn "Node" without learning JavaScript. You will fail. Node doesn't have its own syntax; it only provides libraries (like &lt;code&gt;fs&lt;/code&gt; and &lt;code&gt;http&lt;/code&gt;). You must learn the base language first.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Ecosystem Growth:&lt;/strong&gt; PHP is evolving the language itself (adding attributes, enums, etc.). Node is evolving the environment (adding better TLS, HTTP/2 support). Knowing which is which helps you follow the right roadmap.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Evolution of the "Comparison"
&lt;/h3&gt;

&lt;p&gt;Historically, this comparison made &lt;em&gt;slightly&lt;/em&gt; more sense in the PHP 5.x days.&lt;/p&gt;

&lt;p&gt;Back then, "PHP" meant the language, the runtime, and the framework all rolled into one messy amalgamation. But in the modern era, PHP is a language that runs on the PHP runtime (Zend). Node is a runtime that runs the JavaScript language on the V8 engine.&lt;/p&gt;

&lt;p&gt;They are completely different species that have converged to occupy the same ecological niche (servers).&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;So, why do developers compare PHP and NodeJS? Because we are lazy linguists. We use shorthand to describe our "stack" rather than our "code."&lt;/p&gt;

&lt;p&gt;When a developer says &lt;em&gt;"I prefer Node,"&lt;/em&gt; they are actually saying &lt;em&gt;"I prefer the JavaScript language, as executed by the V8 engine via the Node runtime, for server-side logic."&lt;/em&gt; That is a mouthful.&lt;/p&gt;

&lt;p&gt;The next time you see this debate online, don't get angry at the person for making the comparison. Use it as a teaching moment. They aren't wrong to compare the ecosystems; they are just mistaken about the vocabulary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt; You code in &lt;strong&gt;PHP&lt;/strong&gt;. You code in &lt;strong&gt;JavaScript&lt;/strong&gt;. You run them on &lt;strong&gt;the PHP runtime&lt;/strong&gt; and &lt;strong&gt;NodeJS&lt;/strong&gt;. If you can keep those categories straight, you are already ahead of the curve.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What’s your take? Do you prefer the strict syntax of PHP or the event-driven flexibility of JavaScript? Let me know in the comments (and feel free to correct me on my categories!).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>node</category>
    </item>
    <item>
      <title>Nice one</title>
      <dc:creator>Kwame Oteng Appiah-Nti</dc:creator>
      <pubDate>Tue, 11 Aug 2026 22:38:08 +0000</pubDate>
      <link>https://dev.to/developerkwame/nice-one-594e</link>
      <guid>https://dev.to/developerkwame/nice-one-594e</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/formulahendry/openclaw-is-old-run-hermes-agent-in-vs-code-through-acp-agent-client-protocol-now-2721" class="crayons-story__hidden-navigation-link"&gt;OpenClaw is old? Run Hermes Agent in VS Code through ACP (Agent Client Protocol) now!&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/formulahendry" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F165772%2Fa45c938b-de3a-4d74-9e06-db4c46bf99d2.jpeg" alt="formulahendry profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/formulahendry" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jun Han
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jun Han
                
                
              
              &lt;div id="story-author-preview-content-3521942" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/formulahendry" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F165772%2Fa45c938b-de3a-4d74-9e06-db4c46bf99d2.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jun Han&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/formulahendry/openclaw-is-old-run-hermes-agent-in-vs-code-through-acp-agent-client-protocol-now-2721" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/formulahendry/openclaw-is-old-run-hermes-agent-in-vs-code-through-acp-agent-client-protocol-now-2721" id="article-link-3521942"&gt;
          OpenClaw is old? Run Hermes Agent in VS Code through ACP (Agent Client Protocol) now!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/vscode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;vscode&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/formulahendry/openclaw-is-old-run-hermes-agent-in-vs-code-through-acp-agent-client-protocol-now-2721" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/formulahendry/openclaw-is-old-run-hermes-agent-in-vs-code-through-acp-agent-client-protocol-now-2721#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
