<?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: Yaser Al-Najjar</title>
    <description>The latest articles on DEV Community by Yaser Al-Najjar (@yaser).</description>
    <link>https://dev.to/yaser</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%2F71570%2F23221688-2b42-4ebd-b22e-4c6bbf9375fc.png</url>
      <title>DEV Community: Yaser Al-Najjar</title>
      <link>https://dev.to/yaser</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yaser"/>
    <language>en</language>
    <item>
      <title>I Built a Compiler with AI Engineering Over a Weekend. These are 3 Core Strategies for Scalable AI Development</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Tue, 24 Feb 2026 18:35:30 +0000</pubDate>
      <link>https://dev.to/yaser/i-built-a-compiler-with-ai-engineering-over-a-weekend-these-are-3-core-strategies-for-scalable-ai-5k7</link>
      <guid>https://dev.to/yaser/i-built-a-compiler-with-ai-engineering-over-a-weekend-these-are-3-core-strategies-for-scalable-ai-5k7</guid>
      <description>&lt;p&gt;You know that feeling when you've been doing something for years, and then someone comes along and says "nah, throw all that away"? That is exactly how I felt reading Cursor's blog post about &lt;a href="https://cursor.com/blog/self-driving-codebases" rel="noopener noreferrer"&gt;self-driving codebases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Don't get me wrong, I do believe this is impressive. 3M+ lines of code. Approximately 1,000 commits per hour. Thousands of agents working together to build a web browser. But something about it bugged me.&lt;/p&gt;

&lt;p&gt;It ignores &lt;em&gt;everything&lt;/em&gt; we have learned about software engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, what is wrong with 1,000 commits per hour?
&lt;/h2&gt;

&lt;p&gt;As you know: &lt;strong&gt;Throughput is not progress.&lt;/strong&gt;&lt;br&gt;
Maybe 10 meaningful commits targeting goals we would like to achieve would be more helpful.&lt;/p&gt;

&lt;p&gt;The Cursor approach optimizes for raw output. More agents, more commits, more lines of code. But after years of building software the "right way," here is what I know matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Agile development&lt;/strong&gt;, meaning time-bounded sprints with scoped work, not infinite agent swarms.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Meaningful changes&lt;/strong&gt; over large volume. 10 thoughtful PRs might beat 1,000 commits.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Strong feedback loops&lt;/strong&gt; like tests, CI, and code review, rather than just hoping the agents figure it out.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Architecture decisions and interface contracts&lt;/strong&gt; backed by documented reasoning, not emergent chaos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when I set out to build &lt;a href="https://github.com/yaseralnajjar/sifr" rel="noopener noreferrer"&gt;Sifr&lt;/a&gt;, a compiled programming language that uses Python syntax and compiles to Rust, I decided to do it with AI engineering. But I wanted &lt;em&gt;disciplined&lt;/em&gt; agents. The kind that follow a process. The kind that write PRDs, create tickets, review each other's code, and do not merge without passing tests.&lt;/p&gt;

&lt;p&gt;And let me tell you, it works. Really well. 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  The project: a whole programming language
&lt;/h2&gt;

&lt;p&gt;Before we get into the workflow, let me give you a taste of what we are building. Sifr is a compiled language with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Python syntax plus static typing&lt;/li&gt;
&lt;li&gt;  Compilation to Rust for native binaries&lt;/li&gt;
&lt;li&gt;  A borrow-by-default ownership model&lt;/li&gt;
&lt;li&gt;  TypeScript-style union types, type narrowing, and protocols&lt;/li&gt;
&lt;li&gt;  Over 45 standard library modules with zero-panic guarantees&lt;/li&gt;
&lt;li&gt;  21 planned phases, with 11 completed and over 80 milestones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a toy. It is a full compiler pipeline (lexer, parser, AST, binder, type checker, HIR, Rust codegen, rustc, and finally binary) with a roadmap stretching from language foundations all the way to a web framework, package manager, and ecosystem.&lt;/p&gt;

&lt;p&gt;And it was built almost entirely using AI engineering following the workflow I am about to describe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sponsorship note:&lt;/strong&gt;&lt;br&gt;
This project was initially sponsored by &lt;strong&gt;CDON&lt;/strong&gt;, a leading marketplace in the Nordics (Sweden, Norway, Denmark, Finland).&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic workflow: implementing a feature
&lt;/h2&gt;

&lt;p&gt;Let's start small. Here is how a single Task moves through the board, from an idea to merged code.&lt;/p&gt;

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

&lt;p&gt;The Task moves across board columns as it progresses: &lt;strong&gt;Backlog -&amp;gt; Ready -&amp;gt; In Progress -&amp;gt; Review -&amp;gt; Done.&lt;/strong&gt; Each step maps to a real action that an AI agent can execute.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Draft the Task.&lt;/strong&gt; The agent writes a Task with the current situation, desired situation, and a suggested solution. This is scoped to a small number of changes.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Add to the board.&lt;/strong&gt; The agent creates a GitHub issue and adds it to the project board. The Task lands in the &lt;strong&gt;Backlog&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Refine &amp;amp; prioritize.&lt;/strong&gt; The agent assesses effort versus value and moves the highest-priority Tasks to &lt;strong&gt;Ready&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Work on the Task.&lt;/strong&gt; The agent picks up the highest-priority Ready Task, creates a branch, implements the changes, runs tests locally, and creates a PR. This PR uses a template that requires an issue link, bullet-point changes, and deployment considerations. The Task moves to &lt;strong&gt;Review&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Review the PR.&lt;/strong&gt; A &lt;em&gt;different&lt;/em&gt; agent, preferably a different model, reviews the PR for logic bugs, unnecessary complexity, test coverage, style, and architecture alignment.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Adjust.&lt;/strong&gt; The implementing agent addresses review comments.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Merge.&lt;/strong&gt; The PR merges, and the Task moves to &lt;strong&gt;Done&lt;/strong&gt;. Ship it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What does a Task actually look like?
&lt;/h3&gt;

&lt;p&gt;Let me show you a real example from Sifr. Here is &lt;strong&gt;Task #100: Expand Built-in Functions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Current Situation:&lt;/strong&gt; &lt;code&gt;max(a, b)&lt;/code&gt; and &lt;code&gt;min(a, b)&lt;/code&gt; with two arguments are not supported (only the list form &lt;code&gt;max([1, 2])&lt;/code&gt; works).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Desired Situation:&lt;/strong&gt; All common Python built-in function signatures should work.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Suggested Solution:&lt;/strong&gt; Update the compiler's lowering phase to handle 2-argument &lt;code&gt;max&lt;/code&gt;/&lt;code&gt;min&lt;/code&gt; `.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Acceptance Criteria:&lt;/strong&gt; &lt;code&gt;max(1, 2)&lt;/code&gt; returns &lt;code&gt;2&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is it. Small, focused, concrete. The agent implemented this in one PR.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚨 Gotcha:&lt;/strong&gt; You do not want to become the bottleneck. Make sure that shipping does not require you to be in the middle. That includes manual testing, manual clicking, manual deployment, all of it. If you are the human doing QA on every PR, you have defeated the purpose.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  But what about bigger features?
&lt;/h2&gt;

&lt;p&gt;A single Task is great for "add a &lt;code&gt;len()&lt;/code&gt; method to strings." But what about "implement a borrow checker"? That is where &lt;strong&gt;Epics&lt;/strong&gt; come in.&lt;/p&gt;

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

&lt;p&gt;Here is the critical insight. &lt;strong&gt;Every Epic starts with a PRDS, a combined PRD and Solution Design document.&lt;/strong&gt; The agent does not just jump in and start coding. It uses a specific tool to write a single structured document covering &lt;em&gt;both&lt;/em&gt; sides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Product requirements&lt;/strong&gt;: problem statement, goals, scope, constraints, acceptance criteria (with Given/When/Then).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Solution design&lt;/strong&gt;: architecture, data model, API design, error handling, testing strategy, trade-offs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PRDS gets added to the board as an Epic, refined, and then comes the part that matters most. &lt;strong&gt;Step 4 is a human reviewing the PRDS.&lt;/strong&gt; This is the human-in-the-loop checkpoint. You are not reviewing 50 PRs. You are reviewing &lt;em&gt;one document&lt;/em&gt; that shapes all of them.&lt;/p&gt;

&lt;p&gt;Once approved, the Epic gets broken down into smaller Tasks, and those Tasks follow the basic workflow above.&lt;/p&gt;

&lt;p&gt;And here is a step the blog posts never talk about: &lt;strong&gt;the Epic demo.&lt;/strong&gt; Before marking an Epic as Done, you create a working demo that showcases all major features delivered. In Sifr, these live in a &lt;code&gt;./demos&lt;/code&gt; folder, each named after the Epic. If the demo does not work, the Epic is not done. Simple as that.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does an Epic look like?
&lt;/h3&gt;

&lt;p&gt;Here is &lt;strong&gt;Epic: Add &lt;code&gt;collections.Counter&lt;/code&gt;&lt;/strong&gt;. This epic was about adding the first class-based API to the standard library.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Objective:&lt;/strong&gt; Users need to count hashable objects easily. Implement &lt;code&gt;collections.Counter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scope:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  Define &lt;code&gt;class Counter&lt;/code&gt; in &lt;code&gt;lib/sifr/collections.sifr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Implement methods: &lt;code&gt;__init__&lt;/code&gt;, &lt;code&gt;most_common&lt;/code&gt;, &lt;code&gt;total&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;keys&lt;/code&gt;, &lt;code&gt;values&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Add necessary rust implementation to support these methods.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  &lt;strong&gt;Solution Design:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Data Structure:&lt;/strong&gt; Wrap a Rust &lt;code&gt;HashMap&lt;/code&gt; but expose it as a Python class.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;API:&lt;/strong&gt; Match Python's &lt;code&gt;Counter&lt;/code&gt; API exactly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Testing:&lt;/strong&gt; Verify counting works, &lt;code&gt;most_common&lt;/code&gt; returns sorted results, and empty counters behave correctly.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  &lt;strong&gt;Acceptance Criteria:&lt;/strong&gt; &lt;code&gt;from sifr.collections import Counter&lt;/code&gt; works, and &lt;code&gt;Counter("hello").most_common(1)&lt;/code&gt; returns &lt;code&gt;[('l', 2)]&lt;/code&gt;.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The agents broke this down into tasks: implement the intrinsics, implement the Sifr class, add tests, and create a demo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚨 Gotcha:&lt;/strong&gt; Without reviewing the PRDS, you cannot guarantee the results. The agent might build the completely wrong thing, beautifully. I have seen it happen.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In Sifr, every Epic has a PRDS document. The borrow-by-default Phase? It started with a PRDS that defined parameter conventions, escape analysis rules, and codegen patterns, &lt;em&gt;before a single line of code was written.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaling the workflow: many Epics, many Phases
&lt;/h2&gt;

&lt;p&gt;Okay, so you can ship a feature. You can ship a big feature. But what about building an &lt;em&gt;entire programming language&lt;/em&gt; with 21 Phases?&lt;/p&gt;

&lt;p&gt;This is where things get interesting.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Step 1: Plan multiple Phases top-down
&lt;/h3&gt;

&lt;p&gt;The key word here is &lt;strong&gt;top-down.&lt;/strong&gt; You plan the high-level Phases first, then drill into Epics within each Phase. And critically, &lt;strong&gt;avoid parallel Epics.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Sifr's roadmap, each Phase has a clear ordering rationale. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Type System Power comes &lt;em&gt;before&lt;/em&gt; Standard Library, because the stdlib needs generics and closures for proper type signatures.&lt;/li&gt;
&lt;li&gt;  Error Safety comes &lt;em&gt;before&lt;/em&gt; Stdlib Safety Remediation, because you cannot make intrinsics return &lt;code&gt;Result&lt;/code&gt; types if the compiler does not enforce error class hierarchies yet.&lt;/li&gt;
&lt;li&gt;  Borrow-by-Default comes &lt;em&gt;before&lt;/em&gt; Stdlib Deepening, so new stdlib functions are written with the final ownership model from day one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every ordering decision is documented. Not in someone's head, but in the codebase, in the roadmap, with explicit rationale for why Phase N depends on Phase N-1.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Execute Phase by Phase
&lt;/h3&gt;

&lt;p&gt;Each Epic within a Phase follows the epic workflow: PRD -&amp;gt; solution design -&amp;gt; human review -&amp;gt; Task breakdown -&amp;gt; execute. The agents pick up Tasks, implement, create PRs, get reviewed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚨 Gotcha:&lt;/strong&gt; Don't execute too many Phases at once. I tried. The agents start creating workarounds for dependencies that haven't been implemented yet, and you end up with spaghetti. Sequential execution with clear Phase boundaries is the way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Step 3: Review with a different model
&lt;/h3&gt;

&lt;p&gt;This is one of my favorite tricks. After a Phase of execution, I use a &lt;strong&gt;different agent session&lt;/strong&gt; (and often a different model) to review the work. The reviewer has fresh context, with no sunk cost bias or "I already wrote this so it must be right" mentality.&lt;/p&gt;

&lt;p&gt;The reviewer runs in a feedback loop: review -&amp;gt; fix -&amp;gt; review -&amp;gt; fix -&amp;gt; review. Three iterations is the sweet spot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Re-planning with the judge
&lt;/h3&gt;

&lt;p&gt;After review cycles, a "judge" (the smartest model you have access to) evaluates whether the plan needs to be steered. Maybe the type system completion phase revealed that the codegen architecture should be restructured first. Maybe a new constraint emerged.&lt;/p&gt;

&lt;p&gt;The judge decides whether to continue as planned or adjust. If adjustment is needed, the plan is updated and execution continues. Multiple reviewer agents can also weigh in during this phase.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚨 Gotcha #1:&lt;/strong&gt; Parallel work might not be the best idea. There could be unidentified dependencies between Epics. Agents will make workarounds and create sloppy solutions instead of waiting for the right foundation to be in place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚨 Gotcha #2:&lt;/strong&gt; It is good to plan for the future, but don't get stuck with too many details about later Phases. The first few Phases will teach you things that change your assumptions about later Phases (you can also update the plan and insert new phases midway). Plan the &lt;em&gt;current&lt;/em&gt; Phase in detail, and keep future Phases as rough outlines.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What does a Phase Plan look like?
&lt;/h3&gt;

&lt;p&gt;This is a snippet of how we structure high-level planning. We track all phases, and for each one, we define exactly what capabilities it unlocks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Milestones&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;What it unlocks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Language Foundations&lt;/td&gt;
&lt;td&gt;6 (built-ins → codegen_quality)&lt;/td&gt;
&lt;td&gt;completed&lt;/td&gt;
&lt;td&gt;Single-file programs with classes, error handling, safe indexing, imports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Type System&lt;/td&gt;
&lt;td&gt;6 (narrowing → ...)&lt;/td&gt;
&lt;td&gt;completed&lt;/td&gt;
&lt;td&gt;Generics, closures, generators, decorators, operator overloading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Type System Completion&lt;/td&gt;
&lt;td&gt;6 (stdlib_generic_rewrite → generics_in_stdlib)&lt;/td&gt;
&lt;td&gt;pending&lt;/td&gt;
&lt;td&gt;Auto-init, user-facing generics, pattern matching, enums, bigint, generic stdlib&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice the &lt;strong&gt;"What it unlocks"&lt;/strong&gt; column. We don't just list technical tasks; we list &lt;strong&gt;capabilities&lt;/strong&gt;. Phase 1 unlocks single-file programs. Phase 2 unlocks generics. This helps the AI (and me) understand the &lt;em&gt;purpose&lt;/em&gt; of the phase, not just the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real results
&lt;/h2&gt;

&lt;p&gt;Sifr has completed 11 Phases and over 80 Epics using this workflow. The compiler handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A full type system with generics, protocols, union types, and type narrowing.&lt;/li&gt;
&lt;li&gt;  Over 45 stdlib modules.&lt;/li&gt;
&lt;li&gt;  Borrow-by-default ownership semantics.&lt;/li&gt;
&lt;li&gt;  Error handling with compiler-enforced exhaustiveness checking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this was built with AI engineering following the structured workflow described above. Not thousands of agents racing to commit, but a disciplined process where every feature starts with a plan, gets implemented incrementally, and gets reviewed before merge.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An impressive result is that the first version of the working compiler for the core language was built over a weekend, &lt;strong&gt;literally on a Saturday &amp;amp; Sunday&lt;/strong&gt;!!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can find the repo here: &lt;a href="https://github.com/yaseralnajjar/sifr" rel="noopener noreferrer"&gt;Sifr&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;If you want to adopt this workflow, here is the TL;DR:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Small Tasks&lt;/strong&gt;: Draft -&amp;gt; Board -&amp;gt; Refine -&amp;gt; Work -&amp;gt; Review -&amp;gt; Merge.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Epics&lt;/strong&gt;: PRDS -&amp;gt; Board -&amp;gt; Refine -&amp;gt; &lt;em&gt;Human Review&lt;/em&gt; -&amp;gt; Break Down into Tasks -&amp;gt; Execute -&amp;gt; &lt;strong&gt;Epic Demo&lt;/strong&gt; -&amp;gt; Done.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Phases&lt;/strong&gt;: Plan top-down -&amp;gt; Execute sequentially -&amp;gt; Review with different model -&amp;gt; Re-plan with judge.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Automate the boring stuff&lt;/strong&gt;: Ticket creation, PR templates, review checklists, board management. Make them commands the agent can run.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Don't be the bottleneck&lt;/strong&gt;: If shipping requires you in the loop for every PR, you have lost.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The agents are the hands and &lt;strong&gt;the architect is YOU&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What do you think? Have you tried applying AI engineering on a real project? I would love to hear about your workflow, so drop a comment or reach out!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>python</category>
    </item>
    <item>
      <title>Cursor vs Claude Code vs Gemini CLI</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Mon, 01 Sep 2025 13:57:07 +0000</pubDate>
      <link>https://dev.to/yaser/cursor-vs-claude-code-vs-gemini-cli-more-5hj5</link>
      <guid>https://dev.to/yaser/cursor-vs-claude-code-vs-gemini-cli-more-5hj5</guid>
      <description>&lt;p&gt;Grab a cup of coffee (or tea, no judgment ☕️) and settle in for a chat about AI agentic coding tools.&lt;/p&gt;

&lt;p&gt;This is a personal review (no benchmarks, no automatic evals)... I promise!&lt;/p&gt;




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

&lt;h2&gt;
  
  
  Cursor
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The good parts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model Freedom&lt;/strong&gt; - The coolest part is that you can point Cursor at any major model. Want a little GPT-5 action? Sure. Prefer Claude or Gemini? Heck yeah! Some models are better for planning (ask mode), while others shine in agent mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Rules Files&lt;/strong&gt; - You can configure a folder full of different rules for, and Cursor will remember them. That's super handy, esp. when you're juggling micro-services.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Killer UX&lt;/strong&gt; - The interface feels polished:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can review snippets, accept or reject them, and see diffs right inside the file.&lt;/li&gt;
&lt;li&gt;Need to undo? Just click the previous message + enter and poof! Instant revert, no &lt;code&gt;git&lt;/code&gt; dance.&lt;/li&gt;
&lt;li&gt;Conversations are saved automatically with neat, user-friendly titles. Allowing to start right where you left off.&lt;/li&gt;
&lt;li&gt;Drag and drop files from the side pane into the chat area; this makes sharing code with the assistant a breeze.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  But... (because there's always a “but”) 😅
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing Uncertainty&lt;/strong&gt; - unexpected changes in pricing is worrying. Especially they don't own the models, Cursor can be easily affected by model vendors pricing changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy Mode?&lt;/strong&gt; - Sometimes the agent decides it's done (or done trying) after a handful of attempts. Not sure if this is the model or the system prompt 🤔&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h2&gt;
  
  
  Claude Code: the Sorcerer with &lt;code&gt;/init&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Claude Code is a command-line wizard. It runs right in your terminal and gives you direct access to Anthropic's models.&lt;/p&gt;

&lt;h3&gt;
  
  
  The awesome bits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/init&lt;/code&gt; is magical&lt;/strong&gt; - Run &lt;code&gt;claude init&lt;/code&gt; and it scans your whole project, then spits out a &lt;code&gt;CLAUDE.md&lt;/code&gt; file. This acts as a brain dump of your project's architecture, tools and conventions. See Anthropics docs: &lt;a href="https://www.anthropic.com/engineering/claude-code-best-practices" rel="noopener noreferrer"&gt;https://www.anthropic.com/engineering/claude-code-best-practices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/context&lt;/code&gt; command&lt;/strong&gt; - Ever wonder why your agent context is full? This command shows what parts are passed into the context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top-notch docs&lt;/strong&gt; - Anthropic's documentation is clear and thorough!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks &amp;amp; subagents&lt;/strong&gt; - Want to set up custom workflows? Think of it as building little AI helpers for specific tasks (I haven't tried this, but it looks promising).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The non-awesome bits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No built-in code indexing&lt;/strong&gt; - The model decides which files to touch on its own. That can pull in huge amounts of code and spike your token usage (and bill 💸).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One big rules file&lt;/strong&gt; - All your guidelines has to live in &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited VS Code integration&lt;/strong&gt; - E.g: you either accept or reject the entire file change. No partial approvals like Cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No easy revert&lt;/strong&gt; - If Claude makes a mess, you're back to &lt;code&gt;git&lt;/code&gt; to roll it back.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h2&gt;
  
  
  Gemini CLI
&lt;/h2&gt;

&lt;p&gt;Google's Gemini CLI is a tempting alternative: very large context and much cheaper.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's interesting
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crazy cheap&lt;/strong&gt; - Gemini Pro 2.5 is much cheaper compared to Sonnet  4.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Great analysis&lt;/strong&gt; - It's very good at static reasoning tasks, e.g: comparing features vs tests or hunting down version conflicts. I've seen it figure out very subtle bugs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's not
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule rebel&lt;/strong&gt; - It tends to ignore project rules unless you keep nudging it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queue UX&lt;/strong&gt; - The queued-message behavior can be clunky; it doesn't interrupt-and-resume smoothly like Claude.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Messy output&lt;/strong&gt; - Often requires linting or manual fixes. E.g: it doesn't automatically run a TS compiler check after generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual saves&lt;/strong&gt; - Conversations doesn't not auto-save; forget to save and you might lose the convo (maybe there is some setting that I missed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poor Docs&lt;/strong&gt; - One github README is all you got 😄&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;So, what do you think? Do you have some other AI coding secret sauce?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploying Apps Without Losing Your Mind</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Sun, 01 Jun 2025 12:53:40 +0000</pubDate>
      <link>https://dev.to/yaser/deploying-apps-without-losing-your-mind-3d54</link>
      <guid>https://dev.to/yaser/deploying-apps-without-losing-your-mind-3d54</guid>
      <description>&lt;p&gt;If you're anything like me, you've probably spent way too many hours figuring out the "simplest" way to deploy apps without losing your sanity. I've been bouncing around options and lemme tell you: it’s been an adventure!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is deploying stuff still complicated? 🤦‍♂️
&lt;/h2&gt;

&lt;p&gt;You know the drill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deployment pipeline&lt;/strong&gt;: CI/CD/k8s. I know, sounds easy until you get into YAML hell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Logging and monitoring&lt;/strong&gt;: Do you like looking at your Datadog bill?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database setup and management&lt;/strong&gt;: "managed" databases... still feels like babysitting at times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secrets and env variables&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Horizontal scaling&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;The list goes on...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What have I tried?
&lt;/h2&gt;

&lt;p&gt;Options that I have used/experimented with at different workplaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hetzner/DigitalOcean/Linode&lt;/strong&gt;: affordable, but SSH-ing into servers to deploy a simple app feels so 2010 😅&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render/Netlify/Vercel&lt;/strong&gt;: Great UX but I think they're overcharging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heroku&lt;/strong&gt;: do you even know how many Dynos you need to run your app?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Elastic Beanstalk&lt;/strong&gt;: not gonna deny, this was one of the nicest solutions as it manages an EC2 instance for you (with no additional fees). One downside top of my mind: I have to deal with lots of YAML&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GCP Cloud Run/AWS Lambdas&lt;/strong&gt;: Cold starts... 🥶&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes&lt;/strong&gt;: Nope, nope, nope. Let's not ruin our mood today with Kubershites 💩&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One common theme? All these solutions still need extra tools for production-grade stuff: secrets, DBs, logging, ugh!&lt;/p&gt;

&lt;h2&gt;
  
  
  Enough venting!
&lt;/h2&gt;

&lt;p&gt;Recently, I stumbled across Cloudflare Workers and decided to experiment with it. Spoiler alert: it's pretty darn cool!&lt;/p&gt;

&lt;h3&gt;
  
  
  So, what exactly is it?
&lt;/h3&gt;

&lt;p&gt;Cloudflare Workers lets you deploy apps on Cloudflare’s global network with the least amount of effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does it work?
&lt;/h3&gt;

&lt;p&gt;Underneath, it uses V8 engine, the same engine powering your Chrome browser.&lt;/p&gt;

&lt;p&gt;Fun fact: the deployment region is "Earth" 🌍 and Cloudflare magically runs your worker in the closest region to your users (thanks to &lt;a href="https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/" rel="noopener noreferrer"&gt;Cloudflare's load balancer: Unimog&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  But what about those dreaded cold starts? ❄️
&lt;/h3&gt;

&lt;p&gt;From the docs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Unlike other serverless providers which use containerized processes, Workers pays the overhead of a JavaScript runtime once. Workers can start roughly a hundred times faster than Node processes in containers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Disclaimer: I haven't ping/load/stress-tested this yet. If you have, please write in the comments!&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's explore some of Cloudflare stack 🛠️
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Compute&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workers: Your basic app deployments.&lt;/li&gt;
&lt;li&gt;Pages: Static sites hosting.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;D1: Managed SQLite with backups and everything.&lt;/li&gt;
&lt;li&gt;KV: key-value store.&lt;/li&gt;
&lt;li&gt;Hyperdrive: Connect your DB (like Postgres) and accelerate queries.&lt;/li&gt;
&lt;li&gt;Queues: Simple queuing.&lt;/li&gt;
&lt;li&gt;R2: S3 compatible blob storage.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

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

&lt;ul&gt;
&lt;li&gt;Observability: Built-in logging.&lt;/li&gt;
&lt;li&gt;Secrets Management: Yup, secrets are handled.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Dev tooling&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrangler: development cli to simulate running workers locally.&lt;/li&gt;
&lt;li&gt;Hono &amp;amp; OpenNext: Frameworks by Cloudflare to streamline your dev experience (OpenNext is like Next.js but deployable anywhere).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;To me, this sounds like most of the tools you would need to deploy your app in one place!&lt;/p&gt;

&lt;h2&gt;
  
  
  Have I built something or I just wanna talk about it?
&lt;/h2&gt;

&lt;p&gt;Couldn't resist! I whipped up a marketplace demo app (it happens that I work at the largest marketplaces in Sweden: CDON &amp;amp; Fyndiq).&lt;/p&gt;

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

&lt;p&gt;Yes, I did vibe-code the UI with Lovable and wrote lots of the code using Cursor 😄&lt;/p&gt;

&lt;p&gt;You can visit the website here (unsure for how long I'll keep this available): &lt;a href="https://marketplace-edge-shop-frontend-integration.alnyaser2.workers.dev/" rel="noopener noreferrer"&gt;https://marketplace-edge-shop-frontend-integration.alnyaser2.workers.dev/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;I've tried to make a micro-service architecture aiming to try out different services from Cloudflare:&lt;/p&gt;

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

&lt;p&gt;This architecture follows CQRS (Command Query Responsibility Segregation) architectural pattern to keep write operations separate from read ones (merchants update products, customers browse without hiccups).&lt;/p&gt;

&lt;p&gt;Here's my &lt;a href="https://github.com/yaseralnajjar/marketplace-edge" rel="noopener noreferrer"&gt;marketplace-edge repo&lt;/a&gt;. It's a mono-repo with the above three apps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inventory-api: Hono api for merchants to manage products.&lt;/li&gt;
&lt;li&gt;shop-projection: Hono api for customers to get products.&lt;/li&gt;
&lt;li&gt;shop-frontend: OpenNext frontend/UI for customers to browse the products.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Small hiccups I found:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared queues:&lt;/strong&gt; Running multiple apps locally (with shared queues) was a pain. I tackled this by creating a script to run two apps using the same wrangler instance. It would've been easier if I could run each app separately and point to the same wrangler local environment (which is a directory).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing:&lt;/strong&gt; integration tests for queues were tricky. I ended up mocking instead of integration testing. I wish there was an internal tooling to make sure everything is working in an integration test.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sounds amazing, right? But wait... 🤔
&lt;/h2&gt;

&lt;p&gt;Cloudflare Workers isn’t the silver bullet for everything. Sorry to burst your bubble! Here’s when I think it's good:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick deployment, minimal hassle.&lt;/li&gt;
&lt;li&gt;Cost-effective (both engineering and compute).&lt;/li&gt;
&lt;li&gt;You're cool with system design around Cloudflare stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Some limitations:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can't really build apps that run 24/7. For example: a Kafka consumer that continuously polls new messages to process (please correct me if I'm wrong in the comments). You might achieve the same result with Cloudflare Pub/Sub, but it's beta as of writing this article.&lt;/li&gt;
&lt;li&gt;Only three languages supported:

&lt;ul&gt;
&lt;li&gt;JavaScript/TypeScript.&lt;/li&gt;
&lt;li&gt;Rust.&lt;/li&gt;
&lt;li&gt;Python (barely usable, standard lib only).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Containers coming soon might fix that though; &lt;a href="https://blog.cloudflare.com/cloudflare-containers-coming-2025/" rel="noopener noreferrer"&gt;keep an eye out&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn! 💬
&lt;/h2&gt;

&lt;p&gt;What do you think?&lt;br&gt;
Could Cloudflare Workers change the game for deploying your apps? Any horror stories from your own deployments? What other options would you recommend?&lt;/p&gt;

&lt;p&gt;Let us know in the comments. I love hearing about everyone’s tech adventures!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>javascript</category>
      <category>rust</category>
    </item>
    <item>
      <title>How You can Fight Corona</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Fri, 13 Mar 2020 22:27:57 +0000</pubDate>
      <link>https://dev.to/yaser/how-you-can-fight-corona-4nkn</link>
      <guid>https://dev.to/yaser/how-you-can-fight-corona-4nkn</guid>
      <description>&lt;p&gt;I live in Istanbul (Turkey), a very crowded city that I am afraid the virus is already all around and just nobody is reporting any case.&lt;/p&gt;

&lt;p&gt;Every single day, the amount of people using masks in public is just increasing and this just reflects the amount of increasing fear 😨&lt;/p&gt;

&lt;p&gt;Just 2 cases have been confirmed positive here, and directly you see this happening:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsups6req4e1j2nzyjg2n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsups6req4e1j2nzyjg2n.jpg" alt="Empty-Shelves" width="800" height="662"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;source: cumhuriyet.com.tr&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Mild
&lt;/h2&gt;

&lt;p&gt;This is the main problem of the outbreak... yes, you heard that right: the majority of the Corona cases are mild!&lt;/p&gt;

&lt;p&gt;You might say that the virus being mild is a good thing... not quite actually, &lt;strong&gt;people with mild or no symptoms are travelling around and spreading the virus to a level that it became pandemic.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem gets even worse when every country is hiding the actual numbers fearing that it will affect the economy 😕&lt;/p&gt;
&lt;h2&gt;
  
  
  Things Getting Ugly
&lt;/h2&gt;

&lt;p&gt;Let's look at the numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The mortality rate initial estimate by the World Health Organization (WHO) is 2%&lt;/li&gt;
&lt;li&gt;The world population is 7.7 billion which is 7,700,000,000&lt;/li&gt;
&lt;li&gt;Suppose that 30% of the world population gets infected that is 2,31 billion people or 2,310,000,000&lt;/li&gt;
&lt;li&gt;Now with 2% mortality rate, &lt;strong&gt;it means that 46 million people or 46,200,000 are gonna be dead by this virus!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now I think you can see why you shouldn't treat this virus as the seasonal flu, and remember that loved ones might be included within these numbers.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/H62nidxxWA8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

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

&lt;p&gt;Here are stuff you can do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Engage with any contribution to find a cure using DataScience/AI.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Adopt remote working culture in your company/organization.&lt;/li&gt;
&lt;li&gt;Encourage and help people from other industries to adopt remote working culture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope there was some better data than the &lt;a href="https://github.com/globalcitizen/2019-wuhan-coronavirus-data" rel="noopener noreferrer"&gt;2019 Wuhan Coronavirus data in this link&lt;/a&gt;, because that would let everyone contribute...&lt;/p&gt;

&lt;p&gt;I am sure with the right set of data and AI techniques we would be able to answer to questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What characteristics make kids less than 10 years old not being affected by this virus?&lt;/li&gt;
&lt;li&gt;What characteristics make some people get recovered and some others dead?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Actually, what human beings need now is not a fancy dashboard to track the virus, we need a fu**** cure!&lt;/p&gt;

</description>
      <category>life</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Why Opera Browser is Using Webcam?</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Thu, 17 Oct 2019 09:00:51 +0000</pubDate>
      <link>https://dev.to/yaser/why-opera-browser-is-using-webcam-19jp</link>
      <guid>https://dev.to/yaser/why-opera-browser-is-using-webcam-19jp</guid>
      <description>&lt;p&gt;I realized many times that Kaspersky is warning me whenever I open Opera browser that it starts using the webcam!&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Opened pages
&lt;/h3&gt;

&lt;p&gt;All are usual pages that do NOT require webcam functionalities, like: Asana, ZenHub, Twitter, Facebook... etc&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;I checked my plugins, and it's kinda empty just those:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Chrome Extensions (by Opera Software).&lt;/li&gt;
&lt;li&gt;Opera Ad Blocker (official plugin form Opera).&lt;/li&gt;
&lt;li&gt;WordWeb Dictionary Lookup.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why I use Opera?
&lt;/h3&gt;

&lt;p&gt;Well, it's super light (memory and CPU) comparing to Google Chrome.&lt;/p&gt;

&lt;p&gt;But I recently feel really concerned about why it uses the camera without showing any permission dialog.&lt;/p&gt;

&lt;p&gt;I hope to see where I'm wrong at this.&lt;/p&gt;

</description>
      <category>security</category>
      <category>privacy</category>
      <category>discuss</category>
    </item>
    <item>
      <title>In Case You Don't Know, Rust is The New "C"</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Tue, 03 Sep 2019 14:58:21 +0000</pubDate>
      <link>https://dev.to/yaser/in-case-you-don-t-know-rust-is-the-new-c-3bcf</link>
      <guid>https://dev.to/yaser/in-case-you-don-t-know-rust-is-the-new-c-3bcf</guid>
      <description>&lt;p&gt;Good read: &lt;a href="https://hub.packtpub.com/rust-is-the-future-of-systems-programming-c-is-the-new-assembly-intel-principal-engineer-josh-triplett/" rel="noopener noreferrer"&gt;“Rust is the future of systems programming, C is the new Assembly”: Intel principal engineer, Josh Triplett&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I really couldn't see this before, but Rust is a replacement for C/C++, a clean replacement.&lt;/p&gt;

&lt;p&gt;Here is &lt;a href="https://www.redox-os.org" rel="noopener noreferrer"&gt;Redox OS&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Redox is a Unix-like Operating System written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;And Wasmer is pretty promising for the web world:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/wasmerio" rel="noopener noreferrer"&gt;
        wasmerio
      &lt;/a&gt; / &lt;a href="https://github.com/wasmerio/wasmer" rel="noopener noreferrer"&gt;
        wasmer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🚀 Fast, secure, lightweight containers based on WebAssembly
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;a href="https://wasmer.io" rel="nofollow noopener noreferrer"&gt;
    
      
      &lt;img width="300" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fwasmerio%2Fwasmer%2Fmaster%2Fassets%2Flogo.png" alt="Wasmer logo"&gt;
    
  &lt;/a&gt;
  &lt;p&gt;
     &lt;a href="https://github.com/wasmerio/wasmer/releases" rel="noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/8fd7919d778f72c2071ca37b4959e5c0bf5b5611f3ffc5f5c0a4f443b178beea/68747470733a2f2f736869656c64732e696f2f6769746875622f762f7461672f7761736d6572696f2f7761736d6572" alt="Github release"&gt;
    &lt;/a&gt;
    &lt;a href="https://github.com/wasmerio/wasmer/blob/main/LICENSE" rel="noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/587a931b36a1dc3a82f53d280d87cb72bf55739f0ebf093fa608b613eccc20f0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f7761736d6572696f2f7761736d65722e737667" alt="License"&gt;
    &lt;/a&gt;
    &lt;a href="https://docs.wasmer.io" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/b4e212beb3a229fe1bcc9a0e79a04c40c45f424ac469c2eb95816a656ad516fb/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d446f6373266d6573736167653d646f63732e7761736d65722e696f26636f6c6f723d626c7565" alt="Wasmer Docs"&gt;
    &lt;/a&gt;
    &lt;a href="https://discord.gg/rWkMNStrEW" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/02efc8c04ed60d1e6326f95ace44b1e3b84349ea46e838c041fd689ffc6c77b4/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f313131303330303530363934323838313837333f6c6162656c3d5761736d6572266c6f676f3d646973636f7264266c6f676f436f6c6f723d7768697465" alt="Wasmer on Discord"&gt;
    &lt;/a&gt;
    &lt;a href="https://x.com/wasmerio" rel="nofollow noopener noreferrer"&gt;
      &lt;img src="https://camo.githubusercontent.com/e3fe5478059c9ecb5ee6a47e7618bf0c61f22b252ca116e8468c45447d9f6605/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f7761736d6572696f" alt="Wasmer on X"&gt;
    &lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;Wasmer is a &lt;em&gt;blazing fast&lt;/em&gt; and &lt;em&gt;secure&lt;/em&gt; &lt;a href="https://webassembly.org" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;WebAssembly&lt;/strong&gt;&lt;/a&gt; runtime that enables incredibly
&lt;em&gt;lightweight containers&lt;/em&gt; to run anywhere: from &lt;em&gt;Desktop&lt;/em&gt; to the &lt;em&gt;Cloud&lt;/em&gt;, &lt;em&gt;Edge&lt;/em&gt; and your browser.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secure&lt;/strong&gt; by default. No file, network, or environment access, unless explicitly enabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pluggable&lt;/strong&gt;. supports &lt;a href="https://wasix.org/" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;WASIX&lt;/strong&gt;&lt;/a&gt;, &lt;a href="https://github.com/WebAssembly/WASI" rel="noopener noreferrer"&gt;WASI&lt;/a&gt; out of the box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incredibly Fast&lt;/strong&gt;. Run WebAssembly at near-native speeds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embeddable&lt;/strong&gt; &lt;a href="https://github.com/wasmerio/wasmer/#wasmer-sdk" rel="noopener noreferrer"&gt;anywhere via Wasmer SDKs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Install Wasmer&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl https://get.wasmer.io -sSfL &lt;span class="pl-k"&gt;|&lt;/span&gt; sh&lt;/pre&gt;

&lt;/div&gt;

  Other installation options (Powershell, Brew, Cargo, ...)
&lt;p&gt;&lt;em&gt;Wasmer can be installed from various package managers. Choose the one that fits best for your environment:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Powershell (Windows)
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;iwr https:&lt;span class="pl-k"&gt;//&lt;/span&gt;win.wasmer.io &lt;span class="pl-k"&gt;-&lt;/span&gt;useb &lt;span class="pl-k"&gt;|&lt;/span&gt; iex&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://formulae.brew.sh/formula/wasmer" rel="nofollow noopener noreferrer"&gt;Homebrew&lt;/a&gt; (macOS, Linux)&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;brew install wasmer&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/ScoopInstaller/Main/blob/master/bucket/wasmer.json" rel="noopener noreferrer"&gt;Scoop&lt;/a&gt; (Windows)&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;scoop install wasmer&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://chocolatey.org/packages/wasmer" rel="nofollow noopener noreferrer"&gt;Chocolatey&lt;/a&gt; (Windows)&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;choco install wasmer&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://crates.io/crates/cargo-binstall/" rel="nofollow noopener noreferrer"&gt;Cargo binstall&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;cargo binstall wasmer-cli&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://crates.io/crates/wasmer-cli/" rel="nofollow noopener noreferrer"&gt;Cargo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: All the available
features are described in the &lt;a href="https://github.com/wasmerio/wasmer/tree/main/lib/cli/README.md" rel="noopener noreferrer"&gt;&lt;code&gt;wasmer-cli&lt;/code&gt;
crate docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;cargo install wasmer-cli&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Looking for more installation options? See &lt;a href="https://github.com/wasmerio/wasmer-install" rel="noopener noreferrer"&gt;the &lt;code&gt;wasmer-install&lt;/code&gt;
repository&lt;/a&gt; to…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/wasmerio/wasmer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Even it might takeover current big C/C++ implementations like this one:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/RustPython" rel="noopener noreferrer"&gt;
        RustPython
      &lt;/a&gt; / &lt;a href="https://github.com/RustPython/RustPython" rel="noopener noreferrer"&gt;
        RustPython
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Python Interpreter written in Rust
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/RustPython/RustPython/./logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FRustPython%2FRustPython%2F.%2Flogo.png" width="125" height="125"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://rustpython.github.io/" rel="nofollow noopener noreferrer"&gt;RustPython&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A Python-3 (CPython &amp;gt;= 3.14.0) Interpreter written in Rust 🐍 😱
🤘.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/RustPython/RustPython/actions?query=workflow%3ACI" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/RustPython/RustPython/workflows/CI/badge.svg" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/RustPython/RustPython" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f4c54106b58c93be163381dbaf1ef98450cab73f8649975a55834a77b8d64510/68747470733a2f2f636f6465636f762e696f2f67682f52757374507974686f6e2f52757374507974686f6e2f6272616e63682f6d61696e2f67726170682f62616467652e737667" alt="codecov"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/RustPython/RustPython/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d3986199b5b5c1bb9a86d0020ca96ea2721c3dac84d0bcafcd1b038cf5a93e61/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f52757374507974686f6e2f52757374507974686f6e2e737667" alt="Contributors"&gt;&lt;/a&gt;
&lt;a href="https://discord.gg/vru8NypEhv" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f066a5a9920d4e5dc1798055f248a7876098cd7c94be67d6fa32608839d9de2/68747470733a2f2f646973636f72646170702e636f6d2f6170692f6775696c64732f313034333132313933303639313134393834352f7769646765742e706e673f7374796c653d736869656c64" alt="Discord Shield"&gt;&lt;/a&gt;
&lt;a href="https://docs.rs/rustpython/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/666c3d32f99b7fd0a2dfb2eee624784235e11f888e8ceb7a03c343d8c8618efb/68747470733a2f2f646f63732e72732f72757374707974686f6e2f62616467652e737667" alt="docs.rs"&gt;&lt;/a&gt;
&lt;a href="https://crates.io/crates/rustpython" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/46f6e866e1a7edbee29589e1fe47c77c4b4020b7dda6598c79794c96d1e1700b/68747470733a2f2f696d672e736869656c64732e696f2f6372617465732f762f72757374707974686f6e" alt="Crates.io"&gt;&lt;/a&gt;
&lt;a href="https://deps.rs/crate/rustpython/0.1.1" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/edfb7b0dd5b202a864fbf3a36069b396f0164eac9d0ed5ec1b9a54e4af657dc6/68747470733a2f2f646570732e72732f63726174652f72757374707974686f6e2f302e312e312f7374617475732e737667" alt="dependency status"&gt;&lt;/a&gt;
&lt;a href="https://gitpod.io#https://github.com/RustPython/RustPython" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/68870242de3e9a920bb9cf78c36a87e12e7b2b2fc396fc64b3483980ffbc5bc5/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d4f70656e253230696e266d6573736167653d476974706f6426636f6c6f723d316161366534266c6f676f3d676974706f64" alt="Open in Gitpod"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Check out our &lt;a href="https://rustpython.github.io/demo/" rel="nofollow noopener noreferrer"&gt;online demo&lt;/a&gt; running on WebAssembly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RustPython requires Rust latest stable version (e.g 1.67.1 at February 7th 2023). If you don't
currently have Rust installed on your system you can do so by following the instructions at &lt;a href="https://rustup.rs/" rel="nofollow noopener noreferrer"&gt;rustup.rs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To check the version of Rust you're currently running, use &lt;code&gt;rustc --version&lt;/code&gt;. If you wish to update
&lt;code&gt;rustup update stable&lt;/code&gt; will update your Rust installation to the most recent stable release.&lt;/p&gt;
&lt;p&gt;To build RustPython locally, first, clone the source code:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/RustPython/RustPython&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;RustPython uses symlinks to manage python libraries in &lt;code&gt;Lib/&lt;/code&gt;. If on windows, running the following helps:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git config core.symlinks &lt;span class="pl-c1"&gt;true&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Then you can change into the RustPython directory and run the demo (Note: &lt;code&gt;--release&lt;/code&gt; is
needed to prevent stack overflow on Windows):&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ &lt;span class="pl-c1"&gt;cd&lt;/span&gt; RustPython
$ cargo run --release demo_closures.py&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/RustPython/RustPython" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  What other Rust potential use-cases do you see?
&lt;/h3&gt;

</description>
      <category>discuss</category>
      <category>programming</category>
      <category>webdev</category>
      <category>python</category>
    </item>
    <item>
      <title>Who Else Does NOT Like Dark Mode?</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Mon, 02 Sep 2019 12:56:54 +0000</pubDate>
      <link>https://dev.to/yaser/who-else-does-not-like-dark-mode-41p5</link>
      <guid>https://dev.to/yaser/who-else-does-not-like-dark-mode-41p5</guid>
      <description>&lt;p&gt;In case you didn't realize, &lt;strong&gt;dark mode is the new trend in UI/UX.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EVERY popular app / website you use is adding the "Dark Mode" feature.&lt;/p&gt;

&lt;p&gt;What wow-ed me recently is the ambient light sensor in browsers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbvh9mrtcefurmkt1vcn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frbvh9mrtcefurmkt1vcn.gif" alt="native" width="1024" height="1024"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;src: &lt;a href="https://blog.arnellebalane.com/using-the-ambient-light-sensor-api-to-add-brightness-sensitive-dark-mode-to-my-website-82223e754630" rel="noopener noreferrer"&gt;https://blog.arnellebalane.com/using-the-ambient-light-sensor-api-to-add-brightness-sensitive-dark-mode-to-my-website-82223e754630&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;More on this here:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/ananyaneogi" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F106991%2Fb487674a-45f7-4116-b695-a2607893e0ac.jpg" alt="ananyaneogi"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/ananyaneogi/enabling-dark-mode-on-websites-based-on-surrounding-light--3jel" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Enabling Dark Mode On Websites Based On Surrounding Light&lt;/h2&gt;
      &lt;h3&gt;Ananya Neogi ・ Jan 4 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#experimental&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;But, I really find the dark theme annoying in so many ways.&lt;/p&gt;

&lt;p&gt;Is it just me?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>discuss</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Is JavaScript Dominating the Dev World?</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Sat, 17 Aug 2019 09:59:21 +0000</pubDate>
      <link>https://dev.to/yaser/is-javascript-dominating-the-dev-world-20cl</link>
      <guid>https://dev.to/yaser/is-javascript-dominating-the-dev-world-20cl</guid>
      <description>&lt;p&gt;I read this today:&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1162077731217117185-444" src="https://platform.twitter.com/embed/Tweet.html?id=1162077731217117185"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1162077731217117185-444');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1162077731217117185&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I was thinking... he is very right!&lt;/p&gt;

&lt;p&gt;And, I really find it scary.&lt;/p&gt;

&lt;p&gt;Cuz hey, &lt;strong&gt;languages that you love might virtually disappear in the next 5 years in favor of JavaScript!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;original cover image is from starrengroup&lt;/em&gt; &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Will Typescript Make Your Software Bug Free?</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Tue, 13 Aug 2019 17:50:56 +0000</pubDate>
      <link>https://dev.to/yaser/will-typescript-make-your-software-bug-free-44bg</link>
      <guid>https://dev.to/yaser/will-typescript-make-your-software-bug-free-44bg</guid>
      <description>&lt;p&gt;I believe this is the WRONG QUESTION.&lt;/p&gt;

&lt;p&gt;Previously, this topic has been discussed in different shapes here:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;And here:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/resir014" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2F10817%2F12f1e1ed-f362-4481-b047-be4a19e36be1.png" alt="resir014"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/resir014/no-typescript-is-not-a-waste-of-time-2hpk" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;No, TypeScript is not a waste of time.&lt;/h2&gt;
      &lt;h3&gt;Resi Respati ・ Jul 29 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#typescript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;But, these two topic forget one simple thing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typescript is just a matter of taste&lt;/strong&gt;, it's not about you writing better code or them writing an ugly one.&lt;/p&gt;

&lt;p&gt;Clean code doesn't abide to language X or Y.&lt;/p&gt;

&lt;p&gt;After all, clean code is clean code.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>What's your weakest backend/frontend skill?</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Tue, 23 Jul 2019 12:38:46 +0000</pubDate>
      <link>https://dev.to/yaser/what-s-your-weakest-backend-frontend-skill-189e</link>
      <guid>https://dev.to/yaser/what-s-your-weakest-backend-frontend-skill-189e</guid>
      <description></description>
      <category>discuss</category>
    </item>
    <item>
      <title>I Got Ranked as #1 Student in Computer Engineering in My University, and Here is What I Think</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Sat, 06 Jul 2019 21:36:27 +0000</pubDate>
      <link>https://dev.to/yaser/i-got-ranked-as-1-student-in-computer-engineering-in-my-university-and-here-is-what-i-think-56gn</link>
      <guid>https://dev.to/yaser/i-got-ranked-as-1-student-in-computer-engineering-in-my-university-and-here-is-what-i-think-56gn</guid>
      <description>&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1147617365405904896-812" src="https://platform.twitter.com/embed/Tweet.html?id=1147617365405904896"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1147617365405904896-812');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1147617365405904896&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Was it worth it?
&lt;/h2&gt;

&lt;p&gt;Hell yeah, the &lt;strong&gt;smile and proudness&lt;/strong&gt; I saw on my &lt;strong&gt;mom and dad&lt;/strong&gt; faces was totally worth it.&lt;/p&gt;

&lt;p&gt;University is not just about courses and instructors, I believe it's much more than that.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yes, you won't learn much from your university courses... &lt;br&gt;
But you will meet a bunch of great people out there!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I met there in the university lots of awesome people, one of them is the co-founder of our online programming academy, &lt;a href="https://coretabs.net" rel="noopener noreferrer"&gt;Coretabs Academy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Aside from that, living abroad in a foreign country is the best instructor you could ever get.&lt;/p&gt;

&lt;p&gt;Living abroad teaches you tons of stuff... the top things I got from that are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Discovering who I am.&lt;/li&gt;
&lt;li&gt;Having a solid independent personality.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you haven't been living abroad, do yourself a favor and &lt;strong&gt;GO DO IT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you think about the university program itself would help you, you're wrong... very very wrong.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fun Fact
&lt;/h4&gt;

&lt;p&gt;The course I've learned the most from is &lt;strong&gt;Accounting&lt;/strong&gt;, which is a university elective course that comes along the Computer Engineering program.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  It won't make any difference in your life
&lt;/h2&gt;

&lt;p&gt;You heard that right, it's never gonna make any difference if you get better grades... cuz yeah, &lt;strong&gt;nobody cares&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;People will applause so hard for you with the fact that they understand that university system is very broken.&lt;/p&gt;

&lt;p&gt;I would say I &lt;strong&gt;owe&lt;/strong&gt; the money that I paid for university to: &lt;strong&gt;Pluralsight, TeamTreehouse, and YouTube&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those are the places where I really learned core tech skills that correspond with the actual market needs.&lt;/p&gt;

&lt;h4&gt;
  
  
  Fun Fact
&lt;/h4&gt;

&lt;p&gt;My attendance on most courses = &lt;strong&gt;ZERO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I just spent the time working (remotely).&lt;br&gt;
And of course, I attended the quizzes, labs, and exams to never fail a course.&lt;/p&gt;

&lt;p&gt;I'm not saying that to brag, &lt;br&gt;
I'm saying that to prove one simple thing: you can learn all university topics on your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would I do next?
&lt;/h2&gt;

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

&lt;p&gt;Here is my answer loud and clear: &lt;strong&gt;I DON'T KNOW!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Seriously, I don't know what path to take in the next 5 years.&lt;/p&gt;

&lt;p&gt;But, I definitely know that I would take the most useful path in my future.&lt;/p&gt;

&lt;p&gt;At least, I know what to do in the next couple of months.&lt;/p&gt;

&lt;p&gt;It's gonna be making &lt;a href="https://coretabs.net" rel="noopener noreferrer"&gt;Coretabs Academy&lt;/a&gt; providing better services/experience for its users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PS: If you're in Cyprus (KKTC) and you would like to hangout and chat, I would love doing so 😁&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>All That You Need to Know About Microsoft's New Programming Language: Bosque</title>
      <dc:creator>Yaser Al-Najjar</dc:creator>
      <pubDate>Sat, 20 Apr 2019 23:38:43 +0000</pubDate>
      <link>https://dev.to/yaser/all-what-you-need-to-know-about-microsoft-s-new-programming-language-bosque-38c0</link>
      <guid>https://dev.to/yaser/all-what-you-need-to-know-about-microsoft-s-new-programming-language-bosque-38c0</guid>
      <description>&lt;h2&gt;
  
  
  What is Bosque?
&lt;/h2&gt;

&lt;p&gt;From &lt;a href="https://github.com/Microsoft/BosqueLanguage" rel="noopener noreferrer"&gt;Bosque GitHub repo&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Bosque programming language is a Microsoft Research project that is investigating language designs for writing code that is simple, obvious, and easy to reason about for both humans and machines&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Lemme add a couple of points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bosque is typed and functional.&lt;/li&gt;
&lt;li&gt;Heavily affected by JavaScript, TypeScript, and ML.&lt;/li&gt;
&lt;li&gt;More of a &lt;strong&gt;research product&lt;/strong&gt; than a profitable product.&lt;/li&gt;
&lt;li&gt;An open source project licensed under MIT (&lt;strong&gt;very non-Microsoft'ish&lt;/strong&gt; 😁).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When was it invented?
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/Microsoft/BosqueLanguage" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; was created on 3rd of Mar, 2019, and &lt;a href="https://www.microsoft.com/en-us/research/project/bosque-programming-language/" rel="noopener noreferrer"&gt;published on Microsoft.com&lt;/a&gt; on 15th of April, 2019.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the implementation of the language?
&lt;/h3&gt;

&lt;p&gt;Currently, the language is implemented on &lt;strong&gt;TypeScript&lt;/strong&gt; which runs on Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what does it bring new into the table?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Maybe a new era of programming
&lt;/h3&gt;

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

&lt;p&gt;The author of Bosque, Mark Marron, introduces a new programming model called &lt;strong&gt;Regularized Programming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf" rel="noopener noreferrer"&gt;In his research paper&lt;/a&gt;, he mentions how &lt;a href="https://en.wikipedia.org/wiki/Structured_programming" rel="noopener noreferrer"&gt;structured programming&lt;/a&gt; (that we knew since 1970) might cause "accidental complexity"!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We believe that, just as structured programming did years ago, this regularized programming model will lead to massively improved developer productivity, increased software quality, and enable a second golden age of developments in compilers and developer tooling.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  How Regularized Programming Differs from Structured Programming
&lt;/h3&gt;

&lt;p&gt;You can simply say that: "Regularized Programming = &lt;strong&gt;Structured Programming v2.0&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;That's how Marron tells us in his white paper, that regularized programming is built on structured programming... but, it aims to &lt;strong&gt;eliminate sources of complexity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In other words, fewer bugs in your code!&lt;/p&gt;

&lt;p&gt;The sources of complexity he mentions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loops, Recursion, and Invariants: I assume you already know those 😆&lt;/li&gt;
&lt;li&gt;Mutable State and Frames: mutable vs immutable objects are always confusing.&lt;/li&gt;
&lt;li&gt;Indeterminate Behaviors, like: uninitialized variables.&lt;/li&gt;
&lt;li&gt;Data Invariant Violations: accessing/modifying data using index in arrays and such.&lt;/li&gt;
&lt;li&gt;Equality and Aliasing: by value, by reference variable passing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code sample
&lt;/h3&gt;

&lt;p&gt;Instead of doing the usual iterative loop in C, e.g: &lt;/p&gt;

&lt;p&gt;Multiply all array elements by 2.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bosque &lt;strong&gt;avoids the whole idea about looping and accessing array directly from the memory&lt;/strong&gt; by doing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;]@{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  It's all academic for now
&lt;/h3&gt;

&lt;p&gt;Now, don't jump to use this in your company or workplace 😆&lt;/p&gt;

&lt;p&gt;Cuz, the whole thing is academic and &lt;strong&gt;meant for R&amp;amp;D&lt;/strong&gt; for the next programming languages generation.&lt;/p&gt;

&lt;p&gt;Quoting from the project repo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;we do not recommend the use of the Bosque language for any production work and instead encourage experimentation only with small/experimental side projects at this point in time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fun fact
&lt;/h3&gt;

&lt;p&gt;People are already questioning the async model for this programming language 😂&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Bonus fun fact
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://developers.slashdot.org/comments.pl?sid=13802960&amp;amp;cid=58460406" rel="noopener noreferrer"&gt;OP&lt;/a&gt;: There will likely be job offers in the next few weeks asking for a couple years of experience with this new programming language.&lt;/p&gt;

&lt;p&gt;Re: And there will be people applying with 5 years experience already too :P&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;h3&gt;
  
  
  What do you think
&lt;/h3&gt;

&lt;p&gt;Do we really need a new programming language with a whole new paradigm? &lt;br&gt;
Would it be really useful to have Bosque?&lt;/p&gt;

</description>
      <category>bosque</category>
      <category>microsoft</category>
    </item>
  </channel>
</rss>
