<?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: Lawrence</title>
    <description>The latest articles on DEV Community by Lawrence (@obare).</description>
    <link>https://dev.to/obare</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%2F3965270%2F95cba3ed-4ccd-466b-9f82-2dcec1b0a2e3.jpg</url>
      <title>DEV Community: Lawrence</title>
      <link>https://dev.to/obare</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/obare"/>
    <language>en</language>
    <item>
      <title>From Text to Action: How Your Code Actually Runs</title>
      <dc:creator>Lawrence</dc:creator>
      <pubDate>Tue, 11 Aug 2026 19:28:00 +0000</pubDate>
      <link>https://dev.to/obare/from-text-to-action-how-your-code-actually-runs-mg8</link>
      <guid>https://dev.to/obare/from-text-to-action-how-your-code-actually-runs-mg8</guid>
      <description>&lt;p&gt;Every time you hit "Run," a hidden pipeline begins transforming the code you wrote into instructions your computer can actually execute. Although programming languages are designed for humans to read, computers only understand machine code, so your program must first be translated. The journey starts with the lexer, which scans your source code, ignores spaces and comments, and groups characters into meaningful pieces called tokens. For example, let x = 5; is broken into a keyword, a variable name, an assignment operator, and a number. These tokens are then passed to the parser, which checks whether they follow the language's grammar. If the syntax is invalid, the parser reports an error; otherwise, it constructs an Abstract Syntax Tree (AST), a hierarchical representation of your program that captures its logical structure rather than its textual form. Instead of seeing x = 5 + 3 as a line of text, the AST represents it as an assignment operation whose value comes from adding two numbers. This AST acts as the universal representation that the execution engine understands. Once the AST has been built, the execution process reaches a critical decision: should the program be interpreted or compiled? An interpreter walks through the AST one instruction at a time, executing operations as it encounters them. This approach provides almost instant startup because there is no build step, making it ideal during development when code changes frequently. However, interpretation comes with a performance cost because the interpreter repeatedly analyzes instructions every time they are executed. If a loop runs a thousand times, the interpreter must repeatedly determine what each operation means before performing it. A compiler, on the other hand, translates the entire AST into machine code before execution begins. This compilation process increases startup time, especially for large projects, but once complete the processor can execute native instructions directly without further analysis, resulting in significantly faster performance. Many modern programming languages, including Java, C#, and JavaScript, combine the advantages of both approaches through Just-In-Time (JIT) compilation. A JIT compiler initially interprets the program to provide fast startup while simultaneously monitoring execution. When it detects sections of code that run frequently, known as "hot spots," it compiles only those portions into optimized machine code during runtime. As a result, the program starts quickly and gradually becomes faster as its most frequently executed code is optimized. Ultimately, the choice between interpretation and compilation reflects a trade-off between startup time and execution speed. Interpreters prioritize rapid execution of newly written code and simpler debugging, while compilers maximize long-term performance by generating efficient machine instructions ahead of time. JIT compilation bridges these two approaches by combining immediate responsiveness with runtime optimization. Regardless of the execution strategy, every program passes through the same essential stage: the creation of the Abstract Syntax Tree, where raw text is transformed into structured logic. From that point onward, the execution engine decides whether to prioritize getting the program running as quickly as possible or executing it as efficiently as possible, making the difference between interpreters, compilers, and JIT compilers fundamentally a question of balancing startup cost against runtime performance.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ray Tracing</title>
      <dc:creator>Lawrence</dc:creator>
      <pubDate>Sun, 14 Jun 2026 15:19:25 +0000</pubDate>
      <link>https://dev.to/obare/ray-tracing-31hm</link>
      <guid>https://dev.to/obare/ray-tracing-31hm</guid>
      <description>&lt;p&gt;Honestly, the way dedicated hardware and software engineering have teamed up has totally changed the game for developers making worlds look real. Instead of artists spending weeks manually dropping in fake light bulbs to trick your eyes, they can just place one virtual sun in the scene and let ray tracing physics handle the rest. This basically deletes a ton of tedious development time while making sure the lighting always looks right across changing environments. Like, when a character walks from a super bright outdoor courtyard straight into a dark cave, the transition looks completely seamless because the engine recalculates those light paths on the fly.&lt;br&gt;
And honestly, this whole shift goes way beyond video games and movies. Architects use ray tracing to simulate exactly how sunlight enters a building at different times of day, which lets them optimize window placement and energy efficiency before anyone even touches a shovel. Automotive designers rely on it to see how new paint finishes and interior setups look under different weather conditions without needing to build expensive physical prototypes. Even product designers use it to make hyper-realistic marketing images straight from their design files, making it basically impossible to tell the difference between a digital render and an actual photograph.&lt;br&gt;
As tech keeps getting faster, what ray tracing can do is going to get even wilder. Next-gen rendering engines are looking to simulate full spectral rendering, which tracks individual wavelengths of light instead of just mixing standard red, green, and blue values. This means computers will perfectly replicate super complex optics, like the rainbow sheen on an oil slick, light splitting through a crystal prism, or the way light scatters through human skin and deep water. As this keeps evolving, the line between computer graphics and real life is pretty much going to disappear.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>gamedev</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
