<?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>Forem: Priyabrata Paul</title>
    <description>The latest articles on Forem by Priyabrata Paul (@priyabratapaul).</description>
    <link>https://forem.com/priyabratapaul</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%2F3706672%2Ff2ab1cc8-5a85-4fb7-9fa2-0d994697dab1.png</url>
      <title>Forem: Priyabrata Paul</title>
      <link>https://forem.com/priyabratapaul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/priyabratapaul"/>
    <language>en</language>
    <item>
      <title>Remembering Sir Tony Hoare: A Masterclass in Lifelong Learning</title>
      <dc:creator>Priyabrata Paul</dc:creator>
      <pubDate>Wed, 11 Mar 2026 05:41:16 +0000</pubDate>
      <link>https://forem.com/priyabratapaul/remembering-sir-tony-hoare-a-masterclass-in-lifelong-learning-56l8</link>
      <guid>https://forem.com/priyabratapaul/remembering-sir-tony-hoare-a-masterclass-in-lifelong-learning-56l8</guid>
      <description>&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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F2%2F2c%2FSir_Tony_Hoare_IMG_5125.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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F2%2F2c%2FSir_Tony_Hoare_IMG_5125.jpg" alt="Sir Charles Antony Richard (Tony) Hoare" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
    Sir Charles Antony Richard (Tony) Hoare (in 2011)&lt;br&gt;
    &lt;small&gt;&lt;a href="https://commons.wikimedia.org/wiki/File:Sir_Tony_Hoare_IMG_5125.jpg" rel="noopener noreferrer"&gt;Photograph by Rama, Wikimedia Commons, Cc-by-sa-2.0-fr&lt;/a&gt;, &lt;a href="https://creativecommons.org/licenses/by-sa/2.0/fr/deed.en" rel="noopener noreferrer"&gt;CC BY-SA 2.0 FR&lt;/a&gt;, via Wikimedia Commons&lt;/small&gt;&lt;br&gt;
  
  &lt;/p&gt;

&lt;p&gt;The world of computer science has just lost one of its most brilliant and foundational gems with the passing of &lt;strong&gt;Sir Charles Antony Richard (Tony) Hoare (1934-2026)&lt;/strong&gt;. His visionary work shaped the very fabric of modern software, and the digital age as we know it is built upon his logic. &lt;/p&gt;

&lt;p&gt;To anyone in the tech world, his name is legendary. He is best known as the inventor of &lt;strong&gt;Quicksort&lt;/strong&gt;—an elegant algorithm created in 1959 that is still used globally today to sort data. He introduced &lt;strong&gt;Hoare Logic&lt;/strong&gt;, giving engineers a way to mathematically prove that their code is correct and safe. He developed &lt;strong&gt;CSP (Communicating Sequential Processes)&lt;/strong&gt;, which forms the architectural basis for how modern systems do multiple things at once (powering languages like Go). And, with characteristic humility, he is also famous for inventing the "null reference," an innovation he later playfully apologized for as his "billion-dollar mistake." For his monumental impact, he was awarded the A.M. Turing Award in 1980.&lt;/p&gt;

&lt;p&gt;However, behind these towering technical achievements is a story that goes far beyond algorithms. Sir Tony's life leaves behind a beautiful blueprint of what it means to possess an endlessly curious mind. He didn't just invent; he constantly evolved. &lt;/p&gt;

&lt;p&gt;Here is a brief look at his journey, which serves as a true masterclass in lifelong learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Age 20s: Pivoting without fear.&lt;/strong&gt; He didn't begin as a computer scientist; he studied Classics and Philosophy at Oxford. Driven by an insatiable desire to learn, he shifted to statistics and machine translation. At just &lt;strong&gt;25 years old&lt;/strong&gt;, while studying as an exchange student in Moscow, he invented &lt;em&gt;Quicksort&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Age 30s: Embracing mistakes to grow.&lt;/strong&gt; It was in his 30s that he introduced the "null reference." Decades later, he publicly and gracefully apologized for it, acknowledging the bugs it inadvertently caused. His willingness to admit failure showed that true learners are never too proud to critique their own work.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Age 35 to 44: Constantly pushing boundaries.&lt;/strong&gt; Never content with the status quo, at &lt;strong&gt;35&lt;/strong&gt;, he created &lt;em&gt;Hoare Logic&lt;/em&gt;, transforming programming from trial-and-error guesswork into a rigorous mathematical science. At &lt;strong&gt;44&lt;/strong&gt;, he tackled a completely new frontier by inventing &lt;em&gt;CSP&lt;/em&gt; to solve the complexities of concurrent programming.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Age 46: Reaching the peak, but keeping the climb.&lt;/strong&gt; At &lt;strong&gt;46&lt;/strong&gt;, he won the Turing Award (the "Nobel Prize of Computing"). For many, this would be the pinnacle and an excuse to rest on their laurels. For him, it was merely a milestone in a continuing journey of discovery.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Age 65 to 90: The ultimate "un-retirement."&lt;/strong&gt; At &lt;strong&gt;65&lt;/strong&gt;, he reached the mandatory retirement age at Oxford University. Instead of stopping, he immediately joined Microsoft Research. He spent his 70s, 80s, and into his 90s continuing to research, publish, and solve complex software vulnerabilities alongside entirely new generations of engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Inspiring Takeaway:
&lt;/h2&gt;

&lt;p&gt;Sir Tony Hoare’s remarkable life proves that intelligence and innovation are not tied to youth—they are tied to curiosity. Whether he was a 25-year-old philosophy student teaching himself algorithms, or a Turing Award-winning elder statesman still researching new ways to write code in his final years, his true superpower was his absolute refusal to stop learning. &lt;/p&gt;

&lt;p&gt;We have lost a titan of technology, but his legacy challenges all of us: to stay humble, embrace the unknown, and remain forever curious.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Tony_Hoare" rel="noopener noreferrer"&gt;Article on Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cs.ox.ac.uk/people/tony.hoare/" rel="noopener noreferrer"&gt;Article on Website of Computer Science Department of University of Oxford&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.computationalcomplexity.org/2026/03/tony-hoare-1934-2026.html" rel="noopener noreferrer"&gt;Article on Computational Complexity Blog by Professor Lance Fortnow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://byteiota.com/tony-hoare-dies-at-92-the-billion-dollar-null-mistake/" rel="noopener noreferrer"&gt;Article on Byteiota&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>computerscience</category>
      <category>history</category>
      <category>legends</category>
      <category>learning</category>
    </item>
    <item>
      <title>From Chaos to Clarity: My Journey Building JSON Query Pro</title>
      <dc:creator>Priyabrata Paul</dc:creator>
      <pubDate>Sat, 14 Feb 2026 17:48:41 +0000</pubDate>
      <link>https://forem.com/priyabratapaul/from-chaos-to-clarity-my-journey-building-json-query-pro-45kg</link>
      <guid>https://forem.com/priyabratapaul/from-chaos-to-clarity-my-journey-building-json-query-pro-45kg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem I choose to solve
&lt;/h2&gt;

&lt;p&gt;As developers, there are occasions when we’ve spent countless hours staring at API responses in JSON format. Thousands of lines of nested brackets and quotes used to stare back, &lt;strong&gt;hiding that one single piece of data we actually needed&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The web has many JSON formatters, viewers, and query tools. They perform well, but often fall short for practical use. Most solutions struggle with large enterprise-scale files. Others don't offer an intuitive, interactive query system. I realized that for most of us, the solution was a &lt;strong&gt;frustrating cycle of copying, pasting into a formatter, and manually hunting for keys.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What I Built as Solution
&lt;/h2&gt;

&lt;p&gt;I wanted a tool that combined fast visualization with a powerful query engine. So, I decided to build &lt;strong&gt;JSON Query Pro&lt;/strong&gt;. It is a comprehensive data exploration environment. It isn't just a viewer; it's a high-performance workbench designed to help developers navigate and reshape massive JSON datasets. &lt;/p&gt;

&lt;p&gt;At its core, the application features a virtualized tree explorer that remains fluid even with millions of rows, paired with a dual-tier query engine that supports both standard JavaScript paths and advanced JSONata transformations. It’s a local-first, privacy-conscious tool that brings professional-grade data manipulation directly to the browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;PFB a short demo of the app.&lt;br&gt;


&lt;iframe src="https://player.vimeo.com/video/1165172114" width="710" height="399"&gt;
&lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;PFB relevant links:&lt;br&gt;
Code Repository: &lt;a href="https://github.com/priyabratapaul/json-query-pro" rel="noopener noreferrer"&gt;https://github.com/priyabratapaul/json-query-pro&lt;/a&gt;&lt;br&gt;
Deployed App Link: &lt;a href="https://json-query-pro.vercel.app" rel="noopener noreferrer"&gt;https://json-query-pro.vercel.app&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  📋 The Blueprint: What I Set Out to Build
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, I mapped out exactly what a "pro" JSON tool should look like. I didn't want a passive viewer; I wanted a dynamic workspace. My primary goals were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Virtualized Tree Engine&lt;/strong&gt;: The UI had to remain fluid (60fps) regardless of whether the file was 1KB or 500MB. This meant only rendering what was visible in the viewport.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;A "Point-and-Click" Selection Mode&lt;/strong&gt;: I wanted to eliminate the need to manually count array indices or type out long, error-prone property paths. Clicking a node should instantly populate the query editor.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dual-Tier Querying&lt;/strong&gt;: A hybrid approach using native JS pathing for simple lookups and the industry-standard JSONata engine for complex filters, counts, and data reshaping.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Local-First Persistence&lt;/strong&gt;: Data should be stored safely in the browser's IndexedDB, ensuring that accidentally closing a tab didn't mean losing hours of investigative work.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🧩 The Wall: Obstacles Faced During Implementation
&lt;/h2&gt;

&lt;p&gt;However, moving from blueprint to browser revealed several harsh engineering realities. As I began implementing these features, I ran into several hurdles. A few of them are mentioned below:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The "Where Am I?" Problem
&lt;/h3&gt;

&lt;p&gt;Even with a clean tree view, working with deeply nested objects (like large database exports) made it impossible to keep track of a field's context. A field named "status" might exist in five different parent objects at different levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I solved it:&lt;/strong&gt; I integrated the selection logic directly into the virtualization engine. Now, every node "knows" its exact absolute path from the root. When you click it, the app doesn't just show you the data; it calculates the precise breadcrumb path and writes the corresponding JSONata code for you.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. The Performance Wall
&lt;/h3&gt;

&lt;p&gt;Early on, the browser simply died when I loaded a 100MB file. The main thread would freeze for 10 seconds just parsing the JSON, and then another 5 seconds trying to calculate the tree structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I solved it:&lt;/strong&gt; I offloaded the entire data lifecycle to a &lt;strong&gt;Web Worker&lt;/strong&gt;. The "brain" of the app now lives in a separate thread. While the worker parses, queries, and flattens the JSON, the main UI remains completely interactive. This was the only way to support professional-scale datasets.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The 1GB String Ceiling and V8 Buffer Limits
&lt;/h3&gt;

&lt;p&gt;During implementation, I hit the hardest wall of all: the "allocation size overflow." I discovered that Chromium-based browsers (Chrome, Edge) have a hard internal limit on string length—roughly &lt;strong&gt;512MB&lt;/strong&gt;. Even if a machine has 64GB of RAM, the JavaScript engine cannot create a single string long enough to represent a massive JSON file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How I solved it:&lt;/strong&gt; I implemented a defensive loading strategy. Instead of relying on a single large string, the worker uses modern streaming APIs (&lt;code&gt;Response.json()&lt;/code&gt;) to parse data in chunks. I also added explicit memory cleanup, nulling out large buffers the moment they are no longer needed to maximize the available heap.&lt;/p&gt;


&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;Main page: &lt;a href="https://json-query-pro.vercel.app/#/Main" rel="noopener noreferrer"&gt;https://json-query-pro.vercel.app/#/Main&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3th7fttditxxjunsqplt.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%2F3th7fttditxxjunsqplt.png" alt="Main page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Help page: &lt;a href="https://json-query-pro.vercel.app/#/Help" rel="noopener noreferrer"&gt;https://json-query-pro.vercel.app/#/Help&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk90vns4zxcb421exncgd.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%2Fk90vns4zxcb421exncgd.png" alt="Help page"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Sample Queries
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🚀 Sample Data
&lt;/h3&gt;

&lt;p&gt;All examples below reference the default "Tech Innovations" dataset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Company&lt;/strong&gt;: Tech Innovations (San Francisco)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure&lt;/strong&gt;: &lt;code&gt;company&lt;/code&gt; → &lt;code&gt;departments[]&lt;/code&gt; → &lt;code&gt;employees[]&lt;/code&gt; → &lt;code&gt;projects[]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🔍 Basic Retrieval (Simple Queries)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Standard PATH Syntax&lt;/th&gt;
&lt;th&gt;JSONata Syntax&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Get Company Name&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$.company.name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company.name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;First Department&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$.company.departments[0]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company.departments[0]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;All Dept Names&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Not supported (requires index)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company.departments.name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;First Employee Name&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;$.company.departments[0].employees[0].name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;company.departments[0].employees[0].name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  ⚡ Advanced Selection (Complex Queries)
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Filtering Data (JSONata Only)
&lt;/h4&gt;

&lt;p&gt;Find specific items without knowing their index.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Dept&lt;/strong&gt;: &lt;code&gt;company.departments[name="Engineering"]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Software Engineers&lt;/strong&gt;: &lt;code&gt;company.departments.employees[position="Software Engineer"]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Value Clients&lt;/strong&gt;: &lt;code&gt;company.departments.employees.clients[contract_value &amp;gt; 60000]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Deep Search (The Double Star)
&lt;/h4&gt;

&lt;p&gt;Find data anywhere in the file regardless of depth.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Find "Alice"&lt;/strong&gt;: &lt;code&gt;**[name="Alice"]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find all Projects&lt;/strong&gt;: &lt;code&gt;**.projects&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  Reshaping Output
&lt;/h4&gt;

&lt;p&gt;Create a custom report from the data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;company.departments.{
  "department": name,
  "headcount": $count(employees),
  "totalValue": $sum(employees.clients.contract_value)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Lessons Learned
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Performance IS the experience:&lt;/strong&gt; Users don't care how many features you have if the app lags. Background processing is non-negotiable for pro tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The V8 Buffer Limit:&lt;/strong&gt; I learned that the hard way: if your JSON file is 500MB+, standard &lt;code&gt;JSON.parse&lt;/code&gt; is a gamble in Chromium-based browsers. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghost Truncation:&lt;/strong&gt; I found that some streaming APIs don't always give you a nice error message when they fail under memory pressure; they often just stop reading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Engine Feedback:&lt;/strong&gt; We implemented runtime browser detection in our Background Worker to explain memory restrictions specifically when they occur.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🚀 Future Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Breaking the 1GB Barrier: While JSON Query Pro is currently optimized for datasets up to 512MB (Chromium) and 1GB (Firefox), the next frontier is breaking through this browser-imposed ceiling.&lt;/li&gt;
&lt;li&gt;Desktop app: Also I am planning to create desktop version of this app for different OS.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤖 My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Building a high-performance system like JSON Query Pro required more than just standard frontend knowledge—it required deep dives into browser internals, memory management, and concurrency. Throughout this process, I leveraged &lt;strong&gt;GitHub Copilot&lt;/strong&gt; as a senior partner. &lt;/p&gt;

&lt;p&gt;Whether it was brainstorming the communication protocol between the main thread and the Web Worker or debugging the subtle nuances of structured cloning limits, &lt;strong&gt;GitHub Copilot&lt;/strong&gt; provided instant, high-context feedback that significantly accelerated the development cycle. &lt;/p&gt;

&lt;p&gt;It acted as a force multiplier, allowing me to iterate on complex features like the virtualized tree rendering and IndexedDB persistence layer in a fraction of the time it would have taken to research these topics in isolation. The impact on my development experience was profound; it turned what could have been a month-long research project into a week-long implementation sprint, all while maintaining a focus on clean, scalable code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I built JSON Query Pro to turn a large json text into a clear, searchable map. By combining background processing with powerful query languages, I've created a workspace where json data isn't just something you see—it's something you can easily query.&lt;/p&gt;

&lt;p&gt;👉Link to app: &lt;a href="https://json-query-pro.vercel.app" rel="noopener noreferrer"&gt;https://json-query-pro.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Querying!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
      <category>cli</category>
    </item>
    <item>
      <title>Story of The First Linked List</title>
      <dc:creator>Priyabrata Paul</dc:creator>
      <pubDate>Sun, 18 Jan 2026 16:01:58 +0000</pubDate>
      <link>https://forem.com/priyabratapaul/story-of-the-first-linked-list-2f95</link>
      <guid>https://forem.com/priyabratapaul/story-of-the-first-linked-list-2f95</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;🙋‍♂️Hi&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this story, we will uncover how linked lists were first used to solve data structure challenges posed by simple arrays of data. Let’s begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prologue: A Problem Without Order
&lt;/h2&gt;

&lt;p&gt;It was the early 1950s, and computers were still massive rooms of vacuum tubes and punch cards. One of the most pressing challenges was &lt;strong&gt;dynamic memory management&lt;/strong&gt;—how to store a collection of items when the size of that collection could change during execution. Early machines like the ENIAC and the Manchester Mark 1 used fixed‑size arrays; every element occupied a predetermined slot in memory. If a program needed more space than it had reserved, it either crashed or wasted precious memory.&lt;/p&gt;

&lt;p&gt;Enter a young computer scientist named &lt;strong&gt;Allen Newell&lt;/strong&gt; (later joined by &lt;strong&gt;Herbert A. Simon&lt;/strong&gt;) at the RAND Corporation. They were working on a program to simulate human problem‑solving, a project that would eventually become the &lt;strong&gt;Logic Theory Machine&lt;/strong&gt;. Their algorithm needed to keep track of an ever‑growing list of logical statements, but they could not predict how many statements would be generated at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 1: The Insight
&lt;/h2&gt;

&lt;p&gt;While sketching ideas on a napkin, Newell imagined a &lt;strong&gt;chain of boxes&lt;/strong&gt;, each holding a piece of data and a &lt;strong&gt;pointer&lt;/strong&gt; to the next box. “If each box knows where the next one lives,” he mused, “we can add a new box anywhere without moving the existing ones.” The concept was simple: instead of a contiguous block of memory, the data structure would be a series of nodes linked together by addresses.&lt;/p&gt;

&lt;p&gt;He showed the idea to his colleague &lt;strong&gt;Clifford Shaw&lt;/strong&gt;, who was also wrestling with dynamic data in his own work on early artificial intelligence programs. Together they refined the notion: each node would contain two fields—&lt;strong&gt;data&lt;/strong&gt; (the actual value) and &lt;strong&gt;link&lt;/strong&gt; (the address of the next node). The first node would be called the head, and the last node would point to a special null value indicating the end of the chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 2: The First Implementation
&lt;/h2&gt;

&lt;p&gt;In 1955, Newell, Shaw, and Simon wrote a program for the &lt;strong&gt;RAND “Logic Theory Machine”&lt;/strong&gt; that used this chain of nodes to store theorems as they were derived. Because the number of theorems could not be known ahead of time, the linked list allowed the program to allocate a new node whenever a new theorem was proved, linking it to the previous one. Deleting a theorem was equally straightforward: adjust the link of the preceding node to skip over the unwanted node.&lt;/p&gt;

&lt;p&gt;Their code, written in assembly for the &lt;strong&gt;IBM 704&lt;/strong&gt;, looked roughly like this (simplified for illustration):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOCATE NEW NODE
STORE THEOREM IN NODE.DATA
SET NODE.LINK = NULL
IF LIST IS EMPTY THEN
    HEAD = NODE
ELSE
    LAST.LINK = NODE
END IF
LAST = NODE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The elegance of the solution lay in its &lt;strong&gt;O(1)&lt;/strong&gt; insertion at the tail and &lt;strong&gt;O(n)&lt;/strong&gt; traversal when searching—exactly the trade‑off they needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 3: Publication and Spread
&lt;/h2&gt;

&lt;p&gt;Newell and Simon published their findings in a &lt;a href="https://archive.org/details/bitsavers_randiplP86ineJul56_3534001" rel="noopener noreferrer"&gt;1956 paper titled “A Logic Theory Machine”&lt;/a&gt;. Although the primary focus was on automated theorem proving, reviewers noted the novel data structure. The term “&lt;strong&gt;linked list&lt;/strong&gt;” did not appear yet; the authors referred to it as a “&lt;strong&gt;chain of records&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;Around the same time, &lt;strong&gt;Donald Knuth&lt;/strong&gt;, then a graduate student, encountered the idea while working on his Ph.D. thesis on sorting algorithms. He formalized the terminology, coining the phrase “&lt;strong&gt;linked list&lt;/strong&gt;” in his seminal &lt;a href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming" rel="noopener noreferrer"&gt;1968 book "The Art of Computer Programming"&lt;/a&gt;. Knuth’s clear exposition helped spread the concept throughout the emerging computer science community.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 4: Why the Linked List Mattered
&lt;/h2&gt;

&lt;p&gt;The linked list solved a fundamental limitation of early computers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Size&lt;/strong&gt;: Nodes could be added or removed without reallocating a whole block of memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficient Insertions/Deletions:&lt;/strong&gt; Changing the list required only updating a couple of pointers, not shifting large swaths of data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory Utilization:&lt;/strong&gt; Unused memory could be reclaimed by freeing individual nodes, a crucial advantage when memory was measured in kilobytes. These properties made linked lists the backbone of many early operating systems (process control blocks, file allocation tables) and later data structures such as stacks, queues, and even more complex trees.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Epilogue: The Chain Continues
&lt;/h2&gt;

&lt;p&gt;From that modest chain of nodes in a 1950s logic‑theory program, linked lists have grown into a foundational concept taught to every first‑year computer science student. Modern languages hide the pointer arithmetic behind elegant abstractions, but the core idea remains unchanged: &lt;strong&gt;connect discrete pieces of data with references, forming a flexible, extensible chain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So the next time you push an item onto a stack or traverse a singly‑linked list in Python, remember that you’re walking the same mental path that Allen Newell and his colleagues forged half a century ago—link by link, node by node, building ever‑larger structures from the simplest of connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Bye 🙋‍♂️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Congratulations! You finished reading this article.&lt;br&gt;&lt;br&gt;
See you then, in another story.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://Archive.org" rel="noopener noreferrer"&gt;Archive.org&lt;/a&gt; &lt;a href="https://archive.org/details/bitsavers_randiplP86ineJul56_3534001" rel="noopener noreferrer"&gt;- The Logic Theory Machine (Jul 1956)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming" rel="noopener noreferrer"&gt;Wikipedia - The Art of Computer Programming&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>historyofcomputing</category>
      <category>datastructures</category>
      <category>linkedlist</category>
    </item>
    <item>
      <title>Story of The First Array</title>
      <dc:creator>Priyabrata Paul</dc:creator>
      <pubDate>Mon, 12 Jan 2026 11:49:46 +0000</pubDate>
      <link>https://forem.com/priyabratapaul/story-of-the-first-array-2bb0</link>
      <guid>https://forem.com/priyabratapaul/story-of-the-first-array-2bb0</guid>
      <description>&lt;h2&gt;
  
  
  🙋‍♂️Hi
&lt;/h2&gt;

&lt;p&gt;In this story, we will uncover how arrays were first employed to tackle data structure challenges at the hardware level. We will also follow their journey as they became crucial elements of programming languages. Let’s begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prologue: A Need for Order
&lt;/h2&gt;

&lt;p&gt;It was the spring of 1945 at the Moore School of Electrical Engineering in Philadelphia.&lt;/p&gt;

&lt;p&gt;A handful of engineers huddled around a chalk‑filled blackboard, wrestling with a bold new idea: a computer that could store both its instructions and its data in the same memory. John von Neumann, fresh from his work on the Manhattan Project, was sketching a diagram of a long row of identical cells, each labeled with a number—0, 1, 2…—and a tiny arrow pointing to the next.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The machine must be able to fetch any datum directly,” he said, tapping the first cell. “&lt;strong&gt;If we give each cell an address, the program can jump straight to it without scanning.&lt;/strong&gt;”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That simple insight—&lt;strong&gt;contiguous, addressable memory&lt;/strong&gt;—was the seed of the &lt;strong&gt;array&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Array in Hardware - The EDVAC Experiment
&lt;/h2&gt;

&lt;p&gt;Later that year, the &lt;strong&gt;EDVAC&lt;/strong&gt; (Electronic Discrete Variable Automatic Computer) began construction.&lt;/p&gt;

&lt;p&gt;EDVAC was one of the first stored-program computers that utilized registers to hold temporary data and employed magnetic core memory for efficient storage and retrieval of information. Its designers needed a way to keep track of the intermediate results of a long numerical simulation of ballistic trajectories. For this, the values were stored in magnetic core memory. However, as they delved into this complex task, they encountered a significant challenge: the management of data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem - Data was scattered
&lt;/h3&gt;

&lt;p&gt;Initially, data was scattered across non-contiguous memory locations, resembling fragmented islands in a vast ocean. Programmers relied on individual variables to store each piece of data, which forced them into a daunting juggling act as they monitored memory addresses and sizes. This haphazard approach not only complicated coding but also increased the chances of error, rendering even simple operations cumbersome.&lt;/p&gt;

&lt;p&gt;While magnetic core memory offered improvements in speed and reliability over earlier technologies, it did little to alleviate the fundamental issue of fragmented storage. The inefficiencies began to surface, especially when complex calculations required multiple variables. Amidst this chaos, the concept of arrays emerged as a revolutionary solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution - Data stored in arrays of memory
&lt;/h3&gt;

&lt;p&gt;Arrays allowed for contiguous memory allocation, organizing related data into neat blocks. This structural change transformed how EDVAC handled information, making it easier for programmers to access entire datasets at once. No longer did they need to hop between scattered variables; data management became streamlined and intuitive.&lt;/p&gt;

&lt;p&gt;This pivotal transition not only resolved the inefficiencies of the early design but also set the stage for future advancements in computing. With the advent of arrays, EDVAC embraced a new era of organized data handling, laying the groundwork for modern programming practices. The struggles of its early days faded into history, replaced by the promise of efficient and effective data management that continues to shape technology today.&lt;/p&gt;

&lt;p&gt;The EDVAC’s successful use of a contiguous block of memory became the first real‑world demonstration that an &lt;strong&gt;array&lt;/strong&gt; could serve as a general‑purpose data container.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Hardware to Language – FORTRAN’s DIMENSION
&lt;/h2&gt;

&lt;p&gt;A decade later, the &lt;strong&gt;IBM 704&lt;/strong&gt; was humming in a Boston lab. Scientists needed to solve massive systems of linear equations for nuclear physics research. The existing programming methods forced them to write repetitive code for each variable, a nightmare of bookkeeping.&lt;/p&gt;

&lt;p&gt;Enter a small team led by &lt;strong&gt;John Backus&lt;/strong&gt;. While drafting the language specification for what would become &lt;strong&gt;FORTRAN I&lt;/strong&gt;, Backus remembered the EDVAC’s memory layout. He introduced the &lt;strong&gt;DIMENSION&lt;/strong&gt; statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DIMENSION X(100), Y(100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now a programmer could declare a fixed‑size, one‑dimensional array of 100 elements with a single line of code. The compiler translated &lt;code&gt;X(I)&lt;/code&gt; into &lt;code&gt;base address of X + (I‑1) times the word size&lt;/code&gt;, exactly the addressing scheme pioneered on the EDVAC.&lt;/p&gt;

&lt;p&gt;The first FORTRAN program to use &lt;code&gt;DIMENSION&lt;/code&gt; solved a set of differential equations for a weather‑prediction model. It ran orders of magnitude faster than its predecessor because the array allowed the algorithm to iterate over data with simple, predictable memory accesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero‑Based Indexing – ALGOL 60
&lt;/h2&gt;

&lt;p&gt;Across the Atlantic, a consortium of European and American computer scientists gathered in 1960 to design a language that could express algorithms clearly. Their meetings produced &lt;strong&gt;ALGOL 60&lt;/strong&gt;, which introduced &lt;strong&gt;zero‑based indexing&lt;/strong&gt; for arrays:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;integer A[0:9];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The decision to start counting at zero mirrored the way hardware addressed memory—offset 0 from the base address. This subtle change made the mental model of &lt;code&gt;array element = base + index × size&lt;/code&gt; exact, eliminating the off‑by‑one adjustments that had plagued earlier code.&lt;/p&gt;

&lt;p&gt;ALGOL’s array syntax spread quickly to academic circles, influencing later languages such as Pascal, C, and ultimately the modern programming ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Epilogue: The Legacy of a Simple Row
&lt;/h2&gt;

&lt;p&gt;From a chalkboard sketch in 1945 to a language keyword in 1957 and a standardized indexing rule in 1960, the &lt;strong&gt;array&lt;/strong&gt; traveled from hardware necessity to a universal programming abstraction. Its core idea—&lt;em&gt;store a collection of homogeneous items in a contiguous block and address each by its position&lt;/em&gt;—remains unchanged in today’s GPUs, databases, and high‑performance scientific codes.&lt;/p&gt;

&lt;p&gt;Every time a program accesses &lt;code&gt;arr[i]&lt;/code&gt;, it echoes the same principle that von Neumann first wrote on that blackboard:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;… give each piece of data a number, and you can reach it instantly&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The story of the array is a reminder that some of the most powerful tools in computing begin with the simplest of insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bye 🙋‍♂️
&lt;/h2&gt;

&lt;p&gt;Congratulations! You finished reading this article.&lt;br&gt;
See you then, in another story.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/EDVAC" rel="noopener noreferrer"&gt;Wikipedia - EDVAC&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/FORTRAN" rel="noopener noreferrer"&gt;Wikipedia - FORTRAN&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/ALGOL_60" rel="noopener noreferrer"&gt;Wikipedia - ALGOL 60&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>historyofcomputing</category>
      <category>datastructures</category>
      <category>array</category>
    </item>
  </channel>
</rss>
