<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Priyabrata's Blog]]></title><description><![CDATA[Priyabrata's Blog]]></description><link>https://priyabratapaulblog.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 17:41:36 GMT</lastBuildDate><atom:link href="https://priyabratapaulblog.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Story of The First Linked List]]></title><description><![CDATA[🙋‍♂️Hi
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.
Prologue: A Problem Without Order
It was the early 1950s, and computers were still massive rooms o...]]></description><link>https://priyabratapaulblog.hashnode.dev/story-of-the-first-linked-list</link><guid isPermaLink="true">https://priyabratapaulblog.hashnode.dev/story-of-the-first-linked-list</guid><category><![CDATA[history-of-computing]]></category><category><![CDATA[data structures]]></category><category><![CDATA[linked list]]></category><dc:creator><![CDATA[Priyabrata Paul]]></dc:creator><pubDate>Mon, 12 Jan 2026 06:33:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768197615550/815fdb1f-67ce-4168-aeef-2aeed7c35594.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-hi"><strong>🙋‍♂️Hi</strong></h2>
<p>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.</p>
<h2 id="heading-prologue-a-problem-without-order">Prologue: A Problem Without Order</h2>
<p>It was the early 1950s, and computers were still massive rooms of vacuum tubes and punch cards. One of the most pressing challenges was <strong>dynamic memory management</strong>—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.</p>
<p>Enter a young computer scientist named <strong>Allen Newell</strong> (later joined by <strong>Herbert A. Simon</strong>) at the RAND Corporation. They were working on a program to simulate human problem‑solving, a project that would eventually become the <strong>Logic Theory Machine</strong>. 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.</p>
<h2 id="heading-chapter-1-the-insight">Chapter 1: The Insight</h2>
<p>While sketching ideas on a napkin, Newell imagined a <strong>chain of boxes</strong>, each holding a piece of data and a <strong>pointer</strong> 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.</p>
<p>He showed the idea to his colleague <strong>Clifford Shaw</strong>, 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—<strong>data</strong> (the actual value) and <strong>link</strong> (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.</p>
<h2 id="heading-chapter-2-the-first-implementation">Chapter 2: The First Implementation</h2>
<p>In 1955, Newell, Shaw, and Simon wrote a program for the <strong>RAND “Logic Theory Machine”</strong> 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.</p>
<p>Their code, written in assembly for the <strong>IBM 704</strong>, looked roughly like this (simplified for illustration):</p>
<pre><code class="lang-plaintext">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
</code></pre>
<p>The elegance of the solution lay in its <strong>O(1)</strong> insertion at the tail and <strong>O(n)</strong> traversal when searching—exactly the trade‑off they needed.</p>
<h2 id="heading-chapter-3-publication-and-spread">Chapter 3: Publication and Spread</h2>
<p>Newell and Simon published their findings in a <a target="_blank" href="https://archive.org/details/bitsavers_randiplP86ineJul56_3534001">1956 paper titled “A Logic Theory Machine”</a>. Although the primary focus was on automated theorem proving, reviewers noted the novel data structure. The term “<strong>linked list</strong>” did not appear yet; the authors referred to it as a “<strong>chain of records</strong>”.</p>
<p>Around the same time, <strong>Donald Knuth</strong>, then a graduate student, encountered the idea while working on his Ph.D. thesis on sorting algorithms. He formalized the terminology, coining the phrase “<strong>linked list</strong>” in his seminal <a target="_blank" href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming">1968 book "The Art of Computer Programming"</a>. Knuth’s clear exposition helped spread the concept throughout the emerging computer science community.</p>
<h2 id="heading-chapter-4-why-the-linked-list-mattered">Chapter 4: Why the Linked List Mattered</h2>
<p>The linked list solved a fundamental limitation of early computers:</p>
<ul>
<li><p><strong>Dynamic Size</strong>: Nodes could be added or removed without reallocating a whole block of memory.</p>
</li>
<li><p><strong>Efficient Insertions/Deletions:</strong> Changing the list required only updating a couple of pointers, not shifting large swaths of data.</p>
</li>
<li><p><strong>Memory Utilization:</strong> 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.</p>
</li>
</ul>
<h2 id="heading-epilogue-the-chain-continues">Epilogue: The Chain Continues</h2>
<p>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: <strong>connect discrete pieces of data with references, forming a flexible, extensible chain</strong>.</p>
<p>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.</p>
<h2 id="heading-bye"><strong>Bye 🙋‍♂️</strong></h2>
<p>Congratulations! You finished reading this article.<br />See you then, in another story.</p>
<hr />
<h2 id="heading-references">References</h2>
<ul>
<li><p><a target="_blank" href="http://Archive.org">Archive.org</a> <a target="_blank" href="https://archive.org/details/bitsavers_randiplP86ineJul56_3534001">- The Logic Theory Machine (Jul 1956)</a></p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming">Wikipedia - The Art of Computer Programming</a></p>
</li>
</ul>
<hr />
<p><em>Disclaimer: Information used here are obtained from public domain. They are fact-checked and verified.</em><br /><em>The images in this article are intended for illustrative purposes only.</em></p>
]]></content:encoded></item><item><title><![CDATA[Story of The First Array]]></title><description><![CDATA[🙋‍♂️Hi
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.
Prologue: A Need...]]></description><link>https://priyabratapaulblog.hashnode.dev/story-of-the-first-array</link><guid isPermaLink="true">https://priyabratapaulblog.hashnode.dev/story-of-the-first-array</guid><category><![CDATA[history-of-computing]]></category><category><![CDATA[data structures]]></category><category><![CDATA[array]]></category><dc:creator><![CDATA[Priyabrata Paul]]></dc:creator><pubDate>Fri, 02 Jan 2026 18:30:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767296590988/d6ca188f-4f35-4358-b68b-f4da5eeb16a3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-hi">🙋‍♂️Hi</h2>
<p>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.</p>
<h2 id="heading-prologue-a-need-for-order">Prologue: A Need for Order</h2>
<p>It was the spring of 1945 at the <strong>Moore School of Electrical Engineering</strong> in Philadelphia.</p>
<p>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.</p>
<p>“The machine must be able to fetch any datum directly,” he said, tapping the first cell. “<strong>If we give each cell an address, the program can jump straight to it without scanning.”</strong></p>
<p>That simple insight—<strong>contiguous, addressable memory</strong>—was the seed of the <strong>array</strong>.</p>
<h2 id="heading-array-in-hardware-the-edvac-experiment">Array in Hardware - The EDVAC Experiment</h2>
<p>Later that year, the <strong>EDVAC</strong> (Electronic Discrete Variable Automatic Computer) began construction.</p>
<p>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 dove into this complex task, they encountered a significant challenge: the management of data.</p>
<h3 id="heading-problem-data-was-scattered">Problem - Data was scattered</h3>
<p>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.</p>
<p>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.</p>
<h3 id="heading-solution-data-stored-in-arrays-of-memory">Solution - Data stored in arrays of memory</h3>
<p>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.</p>
<p>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.</p>
<p>The EDVAC’s successful use of a contiguous block of memory became the first real‑world demonstration that an <strong>array</strong> could serve as a general‑purpose data container.</p>
<h2 id="heading-from-hardware-to-language-fortrans-dimension">From Hardware to Language – FORTRAN’s DIMENSION</h2>
<p>A decade later, the <strong>IBM 704</strong> 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.</p>
<p>Enter a small team led by <strong>John Backus</strong>. While drafting the language specification for what would become <strong>FORTRAN I</strong>, Backus remembered the EDVAC’s memory layout. He introduced the <strong>DIMENSION</strong> statement:</p>
<pre><code class="lang-plaintext">DIMENSION X(100), Y(100)
</code></pre>
<p>Now a programmer could declare a fixed‑size, one‑dimensional array of 100 elements with a single line of code. The compiler translated <code>X(I)</code> into <code>base address of X + (I‑1) times the word size</code>, exactly the addressing scheme pioneered on the EDVAC.</p>
<p>The first FORTRAN program to use <code>DIMENSION</code> 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.</p>
<h2 id="heading-zerobased-indexing-algol-60">Zero‑Based Indexing – ALGOL 60</h2>
<p>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 <strong>ALGOL 60</strong>, which introduced <strong>zero‑based indexing</strong> for arrays:</p>
<pre><code class="lang-plaintext">integer A[0:9];
</code></pre>
<p>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 <code>array element = base + index × size</code> exact, eliminating the off‑by‑one adjustments that had plagued earlier code.</p>
<p>ALGOL’s array syntax spread quickly to academic circles, influencing later languages such as Pascal, C, and ultimately the modern programming ecosystem.</p>
<h2 id="heading-epilogue-the-legacy-of-a-simple-row">Epilogue: The Legacy of a Simple Row</h2>
<p>From a chalkboard sketch in 1945 to a language keyword in 1957 and a standardized indexing rule in 1960, the <strong>array</strong> traveled from hardware necessity to a universal programming abstraction. Its core idea—<em>store a collection of homogeneous items in a contiguous block and address each by its position</em>—remains unchanged in today’s GPUs, databases, and high‑performance scientific codes.</p>
<p>Every time a program accesses <code>arr[i]</code>, it echoes the same principle that von Neumann first wrote on that blackboard:</p>
<blockquote>
<p><strong>… give each piece of data a number, and you can reach it instantly</strong>.</p>
</blockquote>
<p>The story of the array is a reminder that some of the most powerful tools in computing begin with the simplest of insights.</p>
<h2 id="heading-bye">Bye 🙋‍♂️</h2>
<p>Congratulations! You finished reading this article.<br />See you then, in another story.</p>
<hr />
<h2 id="heading-references">References</h2>
<ul>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/EDVAC">Wikipedia - EDVAC</a></p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/FORTRAN">Wikipedia - FORTRAN</a></p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/ALGOL_60">Wikipedia - ALGOL 60</a></p>
</li>
</ul>
<hr />
<p><em>Disclaimer: Information used here are obtained from public domain. They are fact-checked and verified.</em><br /><em>The images in this article are intended for illustrative purposes only.</em></p>
]]></content:encoded></item></channel></rss>