<?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: Aswin M Rajeev </title>
    <description>The latest articles on DEV Community by Aswin M Rajeev  (@aswinmrajeev).</description>
    <link>https://dev.to/aswinmrajeev</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%2F4034086%2Ff1624d98-165e-4c85-a59a-2fda9c14a19b.jpg</url>
      <title>DEV Community: Aswin M Rajeev </title>
      <link>https://dev.to/aswinmrajeev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aswinmrajeev"/>
    <language>en</language>
    <item>
      <title>Should Every Application Really Run Its Own AI for Resource Management?</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:05:20 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/should-every-application-really-run-its-own-ai-for-resource-management-29go</link>
      <guid>https://dev.to/aswinmrajeev/should-every-application-really-run-its-own-ai-for-resource-management-29go</guid>
      <description>&lt;p&gt;Imagine five applications running on a computer, and each has a small AI model trying to optimize how that application uses the system.&lt;/p&gt;

&lt;p&gt;Capable hardware can easily carry that extra weight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;But those models are still spending the user's computation.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is what makes me question the architecture. If every application starts carrying a model to observe its resource usage, predict what it will need and make its own optimization decisions, we haven't removed resource management from the operating system. The OS is still there doing the actual scheduling. We have just added several smaller decision-making systems around it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The OS Already Knows a Lot
&lt;/h3&gt;

&lt;p&gt;It knows memory pressure. It knows which processes are waiting for CPU time, which ones are active, what is being allocated and where contention is happening. More importantly, it sees all applications at once. An application optimizing itself doesn't have that same view.&lt;/p&gt;

&lt;p&gt;Still, the OS has a blind spot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;It can know what an application needs without completely knowing what the user wants from it.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It can know that a program wants 4 GB of RAM and several busy threads. That doesn't mean it knows what the user actually wants from that program.&lt;/p&gt;

&lt;p&gt;Maybe an application doing almost nothing in the background is the one I expect to respond instantly in the next few seconds. Meanwhile another process can be consuming a large amount of CPU for something I don't currently care about. Looking at resource demand alone doesn't completely reveal that difference.&lt;/p&gt;

&lt;p&gt;This is where I think AI becomes interesting—but not as a replacement for the scheduler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Not Every Decision Needs AI
&lt;/h3&gt;

&lt;p&gt;If a deterministic rule already gives the OS an answer, use it. There is little reason to run an inference just to rediscover a decision we could calculate directly.&lt;/p&gt;

&lt;p&gt;Sometimes there isn't even time to ask.&lt;/p&gt;

&lt;p&gt;Some OS operations happen on extremely short timescales. Put model inference in that path and the thing supposedly optimizing the system can become the reason it is slower. Input preparation costs something. Inference costs something. Monitoring the result costs something too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;You could eventually spend more computation deciding how to save computation than you actually save.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That would be a strange optimization.&lt;/p&gt;

&lt;p&gt;So I wouldn't put AI in every decision path. I see it being useful in the less obvious cases, where several system signals exist but they don't translate cleanly into a deterministic decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let AI Handle the Uncertainty
&lt;/h3&gt;

&lt;p&gt;A model trained specifically for this domain could receive things such as RAM pressure, CPU utilization, queue states and process behaviour. Historical user behaviour might be useful too, but I would treat that as secondary data rather than letting the whole system reshape itself around one person's habits.&lt;/p&gt;

&lt;p&gt;The model's job wouldn't be to control the machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;It would take a situation containing uncertainty and turn it into useful information that the OS can evaluate.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The operating system remains the authority because, in the end, it is the component actually controlling the resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reversibility Matters
&lt;/h3&gt;

&lt;p&gt;I would put another restriction on it.&lt;/p&gt;

&lt;p&gt;Before the OS performs an AI-influenced optimization, there should already be a deterministic condition for reversing that action. If the change pushes the system somewhere it shouldn't, recovery shouldn't depend on asking the same model whether its previous prediction was a mistake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Rollback is already defined.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This doesn't mean every application-level AI should disappear. If an IDE needs a model to understand code, that model belongs there. The same applies to an image editor using a model for image processing. Those are features of the application itself.&lt;/p&gt;

&lt;p&gt;I am talking specifically about AI being added to applications to manage shared system resources.&lt;/p&gt;

&lt;p&gt;Hardware resources don't belong to individual applications. Every application ultimately asks the same operating system for those resources anyway.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Having several independent models reason about their individual pieces of the machine while the OS remains responsible for the whole machine creates unnecessary system friction.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let applications keep the AI they need for their actual work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;For resource optimization, I would rather give the intelligence to the component that already holds the authority—and make sure that intelligence knows when not to get involved.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>ai</category>
      <category>performance</category>
      <category>software</category>
    </item>
    <item>
      <title>When Should Software Refuse to Continue?</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Sat, 29 Aug 2026 14:56:55 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/when-should-software-refuse-to-continue-1j3f</link>
      <guid>https://dev.to/aswinmrajeev/when-should-software-refuse-to-continue-1j3f</guid>
      <description>&lt;p&gt;A program reaches a state it did not expect. It can still execute instructions. Nothing has crashed yet. &lt;strong&gt;&lt;em&gt;Should it continue?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don't think there is a single answer.&lt;/p&gt;

&lt;p&gt;If software knows it is making an assumption, silently guessing what the user intended is questionable. For a reversible operation, continuing may be reasonable if the uncertainty and its cause are clearly shown. Irreversible actions deserve a different threshold. Sometimes confirmation makes sense; sometimes the operation should simply be rejected.&lt;/p&gt;

&lt;p&gt;That logic changes once &lt;strong&gt;&lt;em&gt;the system itself becomes unreliable.&lt;/em&gt;&lt;/strong&gt; Memory corruption, a security compromise, or an undefined internal state creates a different problem. A system in an undefined state cannot confidently decide that an action is reversible, because the mechanism making that judgment may itself be affected. Returning to a known-good state is preferable whenever possible. Otherwise, stopping may prevent corrupted execution from travelling further.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;&lt;em&gt;stopping is not automatically the safe option either.&lt;/em&gt;&lt;/strong&gt; In safety-critical systems such as avionics or medical equipment, suddenly removing a function can itself create danger. The design may need redundancy, isolation, degraded operation, failover, or another predefined recovery path that keeps essential functions available rather than simply terminating everything.&lt;/p&gt;

&lt;p&gt;Asking the user isn't an escape from every decision. Waiting for an answer can leave an application blocked or preserve a dangerous state. Some decisions must happen before a user could reasonably intervene. Even an application that wants to continue exists under a larger authority; if the operating system terminates it to protect the machine, it cannot simply override that decision.&lt;/p&gt;

&lt;p&gt;So I don't see &lt;strong&gt;&lt;em&gt;"always continue"&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;"always stop"&lt;/em&gt;&lt;/strong&gt; as useful absolute rules. Predicting the next state is itself a probability problem.&lt;/p&gt;

&lt;p&gt;The harder engineering question is deciding &lt;strong&gt;&lt;em&gt;what we are protecting&lt;/em&gt;&lt;/strong&gt;—the current work, the data, the application, the wider system, or continued operation itself—and whether the system is still trustworthy enough to make that choice.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
      <category>computerscience</category>
      <category>software</category>
    </item>
    <item>
      <title>Engineering Isn’t About Building More. It’s About Finding the Best Path.</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Wed, 26 Aug 2026 16:59:55 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/engineering-isnt-about-building-more-its-about-finding-the-best-path-f97</link>
      <guid>https://dev.to/aswinmrajeev/engineering-isnt-about-building-more-its-about-finding-the-best-path-f97</guid>
      <description>&lt;p&gt;Engineering, in my view, is not simply about building a solution. It is about finding the best path to accomplish a task while thinking about what that solution will cause in the long term.&lt;/p&gt;

&lt;p&gt;A good product should be highly reliable without unnecessarily consuming the customer's resources. If two solutions achieve the same purpose, I would choose the one that saves resources rather than choosing something simply because it uses more sophisticated technology.&lt;/p&gt;

&lt;p&gt;But reliability alone cannot define a good product. A combustion engine might run throughout its entire life, but if it continuously produces harmful emissions, what meaning does reliability have? Engineering should always uphold sustainable development and give importance to the environment.&lt;/p&gt;

&lt;p&gt;I also believe an engineer's vision should extend beyond a small request from a user. The responsibility begins when the product is created, while different engineering fields and services take responsibility for other parts of its life.&lt;/p&gt;

&lt;p&gt;Engineering is also not a journey without failure. Failure can be part of the engineering journey, because it can expand what we discover. Even solving a problem that wasn't originally intended can open a completely different direction.&lt;/p&gt;

&lt;p&gt;Ultimately, engineering is not about asking &lt;strong&gt;"Can we build this?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is about asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What will happen because we built it?"&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>watercooler</category>
      <category>softwareengineering</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Beyond Syntax: What Really Makes a Programming Language?</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Sat, 01 Aug 2026 18:28:52 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/beyond-syntax-what-really-makes-a-programming-language-43b8</link>
      <guid>https://dev.to/aswinmrajeev/beyond-syntax-what-really-makes-a-programming-language-43b8</guid>
      <description>&lt;p&gt;In this post, I want to explain how I approached the design of my own programming language, &lt;strong&gt;Light&lt;/strong&gt;, and why some of its rules were designed the way they are.&lt;/p&gt;

&lt;p&gt;When designing Light, I was not only deciding how programs should be written. I also had to define how those programs should behave, how different features should interact, and what rules should remain consistent throughout the language.&lt;/p&gt;

&lt;p&gt;One question guided many of these decisions:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What rule should govern this, and how should it interact with the rest of the language?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This led to a design centered around &lt;strong&gt;explicit structure and dynamic flexibility&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Light defines structural rules for program entry, control flow, data access, and reusable program units. At runtime, variables remain dynamically typed while operations such as array access, expression evaluation, and type conversion follow defined rules.&lt;/p&gt;

&lt;p&gt;The same principle applies to &lt;code&gt;Purpose&lt;/code&gt; blocks and libraries. They are not isolated features; their behavior is designed to fit into the language's existing execution and data model.&lt;/p&gt;

&lt;p&gt;A feature is not complete simply because its syntax works. Its behavior must remain predictable when combined with everything around it.&lt;/p&gt;

&lt;p&gt;That is why I focus not only on &lt;strong&gt;what a feature can do&lt;/strong&gt;, but also on &lt;strong&gt;where it belongs, what rules govern it, and how it interacts with existing constructs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For me, this is the foundation of Light's design philosophy:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;explicit rules, structured execution, and dynamic flexibility without sacrificing consistency.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Light is still under active development, including its standard libraries, so its design will continue to evolve as the language grows.&lt;/p&gt;

&lt;p&gt;Your thoughts and feedback are appreciated.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href="https://dev.to/aswinmrajeev/building-light-what-i-learned-after-9-months-10bn"&gt;Building Light Programming Language — What I Learned After 9 Months&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore Light on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/aswinmrajeev/light" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
      <category>showdev</category>
      <category>software</category>
    </item>
    <item>
      <title>Building the Light Programming Language: What I Learned After 9 Months</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Sun, 26 Jul 2026 07:45:28 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/building-light-what-i-learned-after-9-months-10bn</link>
      <guid>https://dev.to/aswinmrajeev/building-light-what-i-learned-after-9-months-10bn</guid>
      <description>&lt;p&gt;A few days ago, I shared the first public release of &lt;strong&gt;Light&lt;/strong&gt;, a programming language I've been designing and developing over the past nine months.&lt;/p&gt;

&lt;p&gt;Rather than introducing the language again, I wanted to share one of the biggest lessons I learned while building it.&lt;/p&gt;

&lt;p&gt;Before diving into that, here's a small example written in &lt;strong&gt;Light&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

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

Purpose Add[a,b]
{
    sum = a + b
    out:sum
    stop
}

x = 23
y = 34

out="'Add{x,y}'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before implementing the first working version of &lt;strong&gt;Light&lt;/strong&gt;, I documented the core concepts, language rules, and the initial specification. At that stage, I believed the primary challenge would be transforming those ideas into a working implementation.&lt;/p&gt;

&lt;p&gt;Development reinforced just how inherently iterative language design is.&lt;/p&gt;

&lt;p&gt;As implementation progressed, practical experimentation exposed interactions that weren't immediately apparent during the initial design. Some features evolved, certain language rules were refined, and additional capabilities were introduced as the language matured. At the same time, performance, error reporting, and the implementation itself were continuously improved through repeated testing and refinement.&lt;/p&gt;

&lt;p&gt;One observation became increasingly clear throughout the project:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The specification shapes the implementation, but the implementation also helps refine the specification.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Looking back, building a programming language has been as much about evaluating and refining design decisions as it has been about writing code. Every iteration strengthened the language, improved its consistency, and reinforced the foundation established by the current public release.&lt;/p&gt;

&lt;p&gt;This release represents an important milestone in the development of Light. While there is still much to explore and refine, it establishes the foundation on which the language will continue to evolve.&lt;/p&gt;




&lt;p&gt;Your feedback and insights are always appreciated.&lt;/p&gt;

&lt;p&gt;If you're new to &lt;strong&gt;Light&lt;/strong&gt;, you can read the introduction to the project here:&lt;br&gt;
&lt;strong&gt;Introducing Light — A New Programming Language:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://dev.to/aswinmrajeev/introducing-light-a-new-programming-language-ghd"&gt;https://dev.to/aswinmrajeev/introducing-light-a-new-programming-language-ghd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To learn more about &lt;strong&gt;Light&lt;/strong&gt; and explore its documentation, visit the official GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/aswinmrajeev/light" rel="noopener noreferrer"&gt;https://github.com/aswinmrajeev/light&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Introducing Light — A New Programming Language</title>
      <dc:creator>Aswin M Rajeev </dc:creator>
      <pubDate>Sat, 18 Jul 2026 16:39:04 +0000</pubDate>
      <link>https://dev.to/aswinmrajeev/introducing-light-a-new-programming-language-ghd</link>
      <guid>https://dev.to/aswinmrajeev/introducing-light-a-new-programming-language-ghd</guid>
      <description>&lt;p&gt;Over the past &lt;strong&gt;9 months&lt;/strong&gt;, I've been designing and developing &lt;strong&gt;Light&lt;/strong&gt;, a programming language with the long-term vision of making script automation more structured, consistent, and easier to build and maintain.&lt;/p&gt;

&lt;p&gt;The idea behind Light began with a simple question: &lt;strong&gt;what would a programming language designed around structured program organization and predictable execution look like?&lt;/strong&gt; That question evolved into designing the language specification, defining its syntax and execution model, implementing the interpreter, and building the foundation of its ecosystem.&lt;/p&gt;

&lt;p&gt;This first public release marks an important milestone. It includes the core language and &lt;strong&gt;two standard libraries&lt;/strong&gt;, establishing the initial foundation of the project. &lt;strong&gt;Light is under active development&lt;/strong&gt;, with additional language features, standard libraries, and developer tooling planned for future releases.&lt;/p&gt;

&lt;p&gt;I'm sharing this first public release to introduce the project and gather feedback from the developer community. I'd appreciate your thoughts on the language design, syntax, documentation, and overall developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hello Light
&lt;/h2&gt;



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

name = _Light_

out="Hello 'name'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/aswinmrajeev/light" rel="noopener noreferrer"&gt;https://github.com/aswinmrajeev/light&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
  </channel>
</rss>
