<?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" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Computer Science - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Computer Science - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 21 May 2026 10:21:22 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/computer-science/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Concurrency vs. Parallelism: What’s the Difference and Why Should You Care? ]]>
                </title>
                <description>
                    <![CDATA[ In software engineering, certain concepts appear deceptively simple at first glance but fundamentally shape the way we design and architect systems. Concurrency and parallelism are two such concepts that warrant careful examination. These terms are f... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/concurrency-vs-parallelism-whats-the-difference-and-why-should-you-care/</link>
                <guid isPermaLink="false">68f25bf491a578e35f37419a</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ concurrency ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Parallel Programming ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Wisdom Usa ]]>
                </dc:creator>
                <pubDate>Fri, 17 Oct 2025 15:08:36 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1760622633358/ad43bbd8-116c-42eb-95b7-0ef70156983a.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In software engineering, certain concepts appear deceptively simple at first glance but fundamentally shape the way we design and architect systems. Concurrency and parallelism are two such concepts that warrant careful examination.</p>
<p>These terms are frequently used interchangeably, even among experienced developers. But while they may sound similar and occasionally overlap in practice, they address distinctly different problems and serve separate architectural goals. Understanding this distinction is not just an academic exercise. It directly impacts how you build scalable, efficient systems.</p>
<p>Whether you’re developing a high-traffic web server, training complex machine learning models, or optimising application performance, a solid grasp of these concepts can mean the difference between a solution that merely functions and one that scales elegantly under real-world conditions.</p>
<p>This article provides a comprehensive breakdown of both concepts through visual analogies, practical examples, and technical implementations. By the end, you will be equipped to confidently apply these principles in your software projects.</p>
<h3 id="heading-heres-what-well-cover">Here’s what we’ll cover:</h3>
<ol>
<li><p><a class="post-section-overview" href="#heading-understanding-the-fundamental-concepts">Understanding the Fundamental Concepts</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-the-kitchen-analogy">The Kitchen Analogy</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-what-concurrency-looks-like-in-practice">What Concurrency Looks Like in Practice</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-python-example-implementing-concurrency-with-asyncio">Python Example: Implementing Concurrency with asyncio</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-what-parallelism-looks-like-in-practice">What Parallelism Looks Like in Practice</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-python-example-implementing-parallelism-with-multiprocessing">Python Example: Implementing Parallelism with multiprocessing</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-concurrency-vs-parallelism-a-detailed-comparison">Concurrency vs. Parallelism: A Detailed Comparison</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-when-to-use-each">When to Use Each</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-real-world-applications-and-use-cases">Real-World Applications and Use Cases</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-concurrency-in-production-systems">Concurrency in Production Systems</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-parallelism-in-production-systems">Parallelism in Production Systems</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-hybrid-approaches">Hybrid Approaches</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-choosing-the-right-approach-for-your-problem">Choosing the Right Approach for Your Problem</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-common-pitfall-to-avoid">Common Pitfall to Avoid</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-why-this-distinction-matters-in-practice">Why This Distinction Matters in Practice</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-common-misconceptions-and-clarifications">Common Misconceptions and Clarifications</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-practical-implementation-strategies">Practical Implementation Strategies</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-when-implementing-concurrency">When Implementing Concurrency</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-when-implementing-parallelism">When Implementing Parallelism</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-tools-and-technologies-by-language">Tools and Technologies by Language</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-further-learning-resources">Further Learning Resources</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
</ol>
<h2 id="heading-understanding-the-fundamental-concepts">Understanding the Fundamental Concepts</h2>
<p>Before diving into implementations, let’s establish some clear definitions:</p>
<p><strong>Concurrency</strong> refers to the ability of a system to manage multiple tasks within overlapping time periods. It does not necessarily mean these tasks execute at the exact same instant. Rather, concurrency is about structuring a program to handle multiple operations by interleaving their execution, often on a single processor core.</p>
<p><strong>Parallelism</strong>, by contrast, involves the simultaneous execution of multiple tasks. This typically requires multiple CPU cores or processors working in tandem, with each handling a separate portion of the workload at the same time.</p>
<h3 id="heading-the-kitchen-analogy">The Kitchen Analogy</h3>
<p>Consider the process of cooking as a helpful mental model:</p>
<p>A concurrent kitchen employs a single chef who rapidly switches between preparing multiple dishes. The chef might chop vegetables for one dish, then stir a sauce for another, then return to the first dish to continue preparation. From an observer's perspective, it appears that multiple dishes are being prepared "at once," but in reality, the chef is performing one action at a time in rapid succession.</p>
<p>A parallel kitchen has multiple chefs, each working on different dishes simultaneously. One chef prepares the appetiser while another works on the main course, and a third handles dessert. True simultaneous work is happening across multiple workers.</p>
<p>Same kitchen, different strategies, different outcomes.</p>
<h2 id="heading-what-concurrency-looks-like-in-practice">What Concurrency Looks Like in Practice</h2>
<p><a target="_blank" href="https://mechdampiitb.github.io/cs751_shyamsundar/"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760010754774/e4563560-b9b2-42e0-8c69-5c052db2656c.png" alt="Visual comparison between concurrency and parallelism in task execution. On the left, a single CPU alternates between Task 1 and Task 2 (or Thread 1 and Thread 2), illustrating concurrency without true parallelism. On the right, two CPUs execute Task 1 and Task 2 simultaneously, illustrating both concurrency and parallelism." class="image--center mx-auto" width="866" height="643" loading="lazy"></a></p>
<p>Concurrency is fundamentally about task scheduling, coordination, and resource management. It enables a program to handle multiple operations by strategically interleaving their execution, whether on a single core or across multiple threads.</p>
<p>A practical example: when you stream a video on YouTube while your device downloads a file in the background and your messaging app checks for new messages, your CPU is rapidly context-switching between these tasks. Each task gets a slice of processing time, creating the illusion of simultaneous execution even on a single-core processor.</p>
<h3 id="heading-python-example-implementing-concurrency-with-asyncio">Python Example: Implementing Concurrency with asyncio</h3>
<p>To examine concurrency in more detail, we’ll create a simple application which gets data on various APIs asynchronously. This is an example of how Python’s library, asyncio, lets us spawn multiple network operations without blocking so we can effectively use the waiting time.</p>
<p>In this implementation, we’ll be simulating API calls to a weather service, a news service, and a user profile database. Pay attention to the fact that all three requests begin nearly at the same time, yet the program doesn’t wait until one of them is completed before it begins the next one.</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> asyncio

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fetch_data_from_api</span>(<span class="hljs-params">api_name, delay</span>):</span>
    print(<span class="hljs-string">f"Starting request to <span class="hljs-subst">{api_name}</span>..."</span>)
    <span class="hljs-keyword">await</span> asyncio.sleep(delay)  <span class="hljs-comment"># Simulates network I/O wait</span>
    print(<span class="hljs-string">f"Received response from <span class="hljs-subst">{api_name}</span>"</span>)
    <span class="hljs-keyword">return</span> <span class="hljs-string">f"Data from <span class="hljs-subst">{api_name}</span>"</span>

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fetch_user_profile</span>(<span class="hljs-params">user_id</span>):</span>
    print(<span class="hljs-string">f"Fetching profile for user <span class="hljs-subst">{user_id}</span>..."</span>)
    <span class="hljs-keyword">await</span> asyncio.sleep(<span class="hljs-number">1.5</span>)
    print(<span class="hljs-string">f"Profile loaded for user <span class="hljs-subst">{user_id}</span>"</span>)
    <span class="hljs-keyword">return</span> {<span class="hljs-string">"user_id"</span>: user_id, <span class="hljs-string">"name"</span>: <span class="hljs-string">"John Doe"</span>}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span>():</span>
    <span class="hljs-comment"># All tasks start and are managed concurrently</span>
    results = <span class="hljs-keyword">await</span> asyncio.gather(
        fetch_data_from_api(<span class="hljs-string">"Weather API"</span>, <span class="hljs-number">2</span>),
        fetch_data_from_api(<span class="hljs-string">"News API"</span>, <span class="hljs-number">1</span>),
        fetch_user_profile(<span class="hljs-number">12345</span>)
    )
    print(<span class="hljs-string">"\nAll operations completed!"</span>)
    print(<span class="hljs-string">"Results:"</span>, results)

asyncio.run(main())
</code></pre>
<p><strong>What happens during execution:</strong></p>
<ol>
<li><p>All three async functions are initiated at approximately the same time.</p>
</li>
<li><p>The event loop manages their execution, switching between tasks when one is waiting (during <code>await</code> statements).</p>
</li>
<li><p>While one task waits for simulated I/O, the event loop allows other tasks to make progress.</p>
</li>
<li><p>The task with the shortest delay completes first, even though all were started together.</p>
</li>
<li><p>No task blocks the others, resulting in efficient use of the single thread.</p>
</li>
</ol>
<p><strong>Key insight:</strong> Concurrency optimises responsiveness and resource utilisation. It doesn’t inherently make individual tasks complete faster. Instead, it allows multiple tasks to make progress during the same time period, particularly when those tasks involve waiting for external resources.</p>
<h2 id="heading-what-parallelism-looks-like-in-practice">What Parallelism Looks Like in Practice</h2>
<p><a target="_blank" href="https://www.researchgate.net/figure/Parallelism-mechanism-in-OpenMP-with-multiple-CPU-threads_fig3_311454812"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1760010925777/c85a1976-96da-4f74-abba-62d1d0489d60.png" alt="Diagram illustrating the execution timeline of a parallel region using OpenMP. It shows how threads are forked and joined, with timestamps at the fork (`t_f`) and join (`t_j`), individual thread creation (`t_{i,s}`) and completion (`t_{i,c}`), as well as allocated memory per CPU/thread." class="image--center mx-auto" width="850" height="460" loading="lazy"></a></p>
<p>Parallelism concerns itself with genuine simultaneous execution. This approach leverages multiple CPU cores or processors to divide work and execute portions concurrently in real time.</p>
<p>Parallelism shines when dealing with CPU-intensive operations such as mathematical computations, image processing, video rendering, or training deep learning models.</p>
<h3 id="heading-python-example-implementing-parallelism-with-multiprocessing">Python Example: Implementing Parallelism with multiprocessing</h3>
<p>To better understand parallel execution, we’re going to make a program that carries out intensive calculations in a set of cores of CPUs. The given example relies on Python and the multiprocessing module to create different processes that are executed on different processor cores.</p>
<p>To work with a sufficiently complex example, we’ll compute the sum of the squares of millions of numbers. In contrast to the concurrent code sample, where we were waiting to receive I/O, we are actually doing some CPU-intensive work. You’ll notice the reduction in the time taken to execute the work when it’s shared by a number of cores.</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> multiprocessing <span class="hljs-keyword">import</span> Process, current_process
<span class="hljs-keyword">import</span> time

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">compute_heavy_task</span>(<span class="hljs-params">task_name, iterations</span>):</span>
    <span class="hljs-string">"""Simulates a CPU-intensive operation"""</span>
    process_name = current_process().name
    print(<span class="hljs-string">f"<span class="hljs-subst">{task_name}</span> started on <span class="hljs-subst">{process_name}</span>"</span>)

    <span class="hljs-comment"># Simulate CPU-bound work</span>
    result = <span class="hljs-number">0</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(iterations):
        result += i ** <span class="hljs-number">2</span>

    time.sleep(<span class="hljs-number">1</span>)  <span class="hljs-comment"># Additional simulated work</span>
    print(<span class="hljs-string">f"<span class="hljs-subst">{task_name}</span> completed on <span class="hljs-subst">{process_name}</span>. Result: <span class="hljs-subst">{result}</span>"</span>)
    <span class="hljs-keyword">return</span> result

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    start_time = time.time()

    <span class="hljs-comment"># Create separate processes for each task</span>
    p1 = Process(target=compute_heavy_task, args=(<span class="hljs-string">"Task 1"</span>, <span class="hljs-number">10000000</span>))
    p2 = Process(target=compute_heavy_task, args=(<span class="hljs-string">"Task 2"</span>, <span class="hljs-number">10000000</span>))
    p3 = Process(target=compute_heavy_task, args=(<span class="hljs-string">"Task 3"</span>, <span class="hljs-number">10000000</span>))

    <span class="hljs-comment"># Start all processes (they run on separate CPU cores)</span>
    p1.start()
    p2.start()
    p3.start()

    <span class="hljs-comment"># Wait for all processes to complete</span>
    p1.join()
    p2.join()
    p3.join()

    end_time = time.time()
    print(<span class="hljs-string">f"\nAll tasks completed in <span class="hljs-subst">{end_time - start_time:<span class="hljs-number">.2</span>f}</span> seconds"</span>)
</code></pre>
<p><strong>What happens during execution:</strong></p>
<ol>
<li><p>Three separate processes are spawned, each allocated to available CPU cores.</p>
</li>
<li><p>Each process runs independently with its own memory space and Python interpreter.</p>
</li>
<li><p>All three CPU-intensive calculations execute truly simultaneously across multiple cores.</p>
</li>
<li><p>The total runtime is determined by the longest-running task, not the cumulative sum of all tasks.</p>
</li>
<li><p>On a multi-core system, this completes approximately three times faster than sequential execution.</p>
</li>
</ol>
<p><strong>Key insight:</strong> Parallelism achieves actual speedup by distributing computational workload across multiple processors. This directly reduces total execution time for CPU-bound operations.</p>
<h2 id="heading-concurrency-vs-parallelism-a-detailed-comparison">Concurrency vs. Parallelism: A Detailed Comparison</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Aspect</td><td>Concurrency</td><td>Parallelism</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Core Definition</strong></td><td>Managing and coordinating multiple tasks within overlapping time periods</td><td>Executing multiple tasks simultaneously across multiple processors</td></tr>
<tr>
<td><strong>Primary Goal</strong></td><td>Improve structure, responsiveness, and resource efficiency</td><td>Increase raw computational throughput and speed</td></tr>
<tr>
<td><strong>CPU Utilization</strong></td><td>Can work on single or multiple cores through interleaving</td><td>Requires multiple cores or processors for true parallelism</td></tr>
<tr>
<td><strong>Execution Model</strong></td><td>Task switching and scheduling</td><td>Simultaneous execution across hardware</td></tr>
<tr>
<td><strong>Optimal Use Case</strong></td><td>I/O-bound operations (network requests, file operations, database queries)</td><td>CPU-bound operations (mathematical computations, data processing, rendering)</td></tr>
<tr>
<td><strong>Common Implementation Techniques</strong></td><td>Async/await patterns, threads, coroutines, event loops</td><td>Multiprocessing, GPU computing, and distributed computing frameworks</td></tr>
<tr>
<td><strong>Performance Characteristic</strong></td><td>Reduces idle time and improves throughput without necessarily speeding up individual tasks</td><td>Directly reduces execution time by dividing the work</td></tr>
<tr>
<td><strong>Typical Applications</strong></td><td>Web servers, REST APIs, GUI applications, chat systems, and real-time notifications</td><td>Video encoding, scientific simulations, machine learning training, big data analytics</td></tr>
<tr>
<td><strong>Resource Overhead</strong></td><td>Lower (shared memory, lightweight context switching)</td><td>Higher (separate memory spaces, inter-process communication costs)</td></tr>
</tbody>
</table>
</div><h3 id="heading-when-to-use-each">When to Use Each:</h3>
<p>Use <strong>concurrency</strong> when you want to handle more tasks effectively within the same time period, particularly when those tasks spend time waiting for external resources.</p>
<p>Use <strong>parallelism</strong> when you want to complete tasks faster by leveraging multiple processors to divide the computational workload.</p>
<h2 id="heading-real-world-applications-and-use-cases">Real-World Applications and Use Cases</h2>
<h3 id="heading-concurrency-in-production-systems">Concurrency in Production Systems</h3>
<h4 id="heading-1-web-servers-and-apis">1. Web Servers and APIs</h4>
<p>Modern web frameworks like Node.js, Django with async views, and FastAPI handle thousands of simultaneous client connections. Each request may involve database queries, external API calls, or file operations. Concurrency allows the server to handle new requests while waiting for I/O operations from previous requests to complete.</p>
<h4 id="heading-2-real-time-communication">2. Real-Time Communication</h4>
<p>Chat applications, collaborative editing tools, and live streaming platforms manage multiple simultaneous connections. Messages must be received, processed, and broadcast to multiple clients concurrently without blocking any single connection.</p>
<h4 id="heading-3-mobile-applications">3. Mobile Applications</h4>
<p>Mobile apps perform background synchronization, push notification handling, and data caching while maintaining a responsive user interface. The UI thread remains free while background operations proceed concurrently.</p>
<h4 id="heading-4-microservices-orchestration">4. Microservices Orchestration</h4>
<p>Service meshes coordinate multiple API calls to different microservices, aggregating results efficiently without waiting for each call to complete sequentially.</p>
<h3 id="heading-parallelism-in-production-systems">Parallelism in Production Systems</h3>
<h4 id="heading-1-machine-learning-and-ai">1. Machine Learning and AI</h4>
<p>Training neural networks involves massive matrix computations that can be distributed across multiple GPU cores or even multiple machines. Frameworks like TensorFlow and PyTorch automatically parallelise operations across available hardware.</p>
<h4 id="heading-2-big-data-processing">2. Big Data Processing</h4>
<p>Distributed computing frameworks such as Apache Spark, Hadoop, and Dask divide large datasets across cluster nodes. Each node processes its portion of the data in parallel, enabling analysis of petabyte-scale datasets.</p>
<h4 id="heading-3-media-processing">3. Media Processing</h4>
<p>Video transcoding, image batch processing, and audio rendering leverage multiple CPU cores or GPUs. Each frame or segment can be processed independently in parallel.</p>
<h4 id="heading-4-scientific-computing">4. Scientific Computing</h4>
<p>Computational physics simulations, genome sequencing, and climate modelling require enormous computational resources. Parallelism across supercomputer clusters enables these calculations to complete in reasonable time frames.</p>
<h4 id="heading-5-financial-modelling">5. Financial Modelling</h4>
<p>Risk analysis and portfolio optimisation involve running thousands of scenarios. Parallel processing allows these computations to execute simultaneously, providing results quickly enough for real-time decision making.</p>
<h3 id="heading-hybrid-approaches">Hybrid Approaches</h3>
<p>In practice, sophisticated systems frequently combine both paradigms. Consider a modern web application:</p>
<ol>
<li><p>The web server handles client requests concurrently (handling multiple users simultaneously).</p>
</li>
<li><p>Each request may trigger parallel data processing tasks (such as image resizing across multiple cores).</p>
</li>
<li><p>The database connection pool manages concurrent query execution.</p>
</li>
<li><p>Background job workers process tasks in parallel (such as sending emails or generating reports).</p>
</li>
</ol>
<p>This layered approach leverages the strengths of both concurrency and parallelism to create systems that are both responsive and computationally efficient.</p>
<h2 id="heading-choosing-the-right-approach-for-your-problem">Choosing the Right Approach for Your Problem</h2>
<p>Understanding which paradigm to apply requires analysing the nature of your workload:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>If Your Task Is...</td><td>Choose...</td><td>Reasoning</td></tr>
</thead>
<tbody>
<tr>
<td><strong>I/O-bound</strong> (waiting for network, disk, or database operations)</td><td><strong>Concurrency</strong></td><td>Maximises efficiency by allowing other work to proceed during wait times. The bottleneck is not CPU computation but external resource availability.</td></tr>
<tr>
<td><strong>CPU-bound</strong> (heavy mathematical computation, data processing, rendering)</td><td><strong>Parallelism</strong></td><td>Distributes computational load across multiple processors, directly reducing execution time. The bottleneck is CPU capacity.</td></tr>
<tr>
<td><strong>Mixed workload</strong> (both I/O operations and intensive computation)</td><td><strong>Concurrency + Parallelism</strong></td><td>Concurrent handling of I/O operations combined with parallel processing of CPU-intensive segments provides optimal performance.</td></tr>
<tr>
<td><strong>Many small, independent tasks</strong></td><td><strong>Concurrency</strong> (if I/O) or <strong>Parallelism</strong> (if CPU)</td><td>Choose based on whether tasks are waiting or computing.</td></tr>
<tr>
<td><strong>Few large, divisible computations</strong></td><td><strong>Parallelism</strong></td><td>Split each computation across cores for maximum speedup.</td></tr>
</tbody>
</table>
</div><h3 id="heading-common-pitfall-to-avoid">Common Pitfall to Avoid</h3>
<p>A frequent mistake is attempting to use threading for CPU-bound tasks in languages with a Global Interpreter Lock (like Python's CPython) and expecting parallel speedups. In such cases, threads provide concurrency but not true parallelism.</p>
<p>The GIL ensures only one thread executes Python bytecode at a time, leading to context-switching overhead without genuine parallel execution. For CPU-bound work in Python, multiprocessing or C extensions are necessary for true parallelism.</p>
<h2 id="heading-why-this-distinction-matters-in-practice">Why This Distinction Matters in Practice</h2>
<p>Grasping the difference between concurrency and parallelism extends beyond writing faster code. It fundamentally influences how you architect systems and make technological decisions:</p>
<p>First of all, choosing the appropriate execution model for each component of your system leads to cleaner, more maintainable code. You avoid over-engineering solutions or applying the wrong tool to a problem.</p>
<p>Understanding these concepts also prevents wasteful patterns such as spawning unnecessary processes for I/O-bound work or using single-threaded approaches for parallelizable computations. This directly translates to reduced infrastructure costs.</p>
<p>Systems designed with proper concurrency models also scale horizontally more effectively. Those leveraging parallelism appropriately utilise hardware resources fully as you scale vertically.</p>
<p>In addition, you’ll get some key performance optimisations by choosing the right approach. When profiling reveals bottlenecks, knowing whether to optimise for concurrency or parallelism guides your refactoring efforts in the right direction.</p>
<p>Beyond this, in cloud environments where you pay for compute resources, efficient use of concurrency and parallelism directly affects operational costs. An efficiently concurrent system might handle 10x the load on the same hardware compared to a poorly designed synchronous alternative.</p>
<p>And these concepts are fundamental to backend engineering, distributed systems, DevOps, machine learning engineering, and systems programming. They appear frequently in technical interviews and are essential for senior engineering roles.</p>
<h2 id="heading-common-misconceptions-and-clarifications">Common Misconceptions and Clarifications</h2>
<h3 id="heading-using-threads-automatically-gives-me-parallelism">"Using threads automatically gives me parallelism."</h3>
<p>In reality, threads enable concurrency but do not guarantee parallel execution. In systems with a Global Interpreter Lock (like CPython) or on single-core machines, threads run concurrently but not in parallel. True parallelism requires multiple CPU cores and mechanisms that avoid locking constraints.</p>
<h3 id="heading-parallelism-is-always-faster-than-sequential-execution">"Parallelism is always faster than sequential execution."</h3>
<p>In fact, parallelism introduces overhead, including process creation, inter-process communication, and data synchronisation costs. For small tasks or I/O-bound operations, this overhead can outweigh benefits. Parallelism shows gains when the computational work justifies the overhead.</p>
<h3 id="heading-concurrency-and-parallelism-are-mutually-exclusive">"Concurrency and parallelism are mutually exclusive."</h3>
<p>As you’ve learned, modern high-performance systems routinely combine both. A web server can handle requests concurrently, with each request triggering parallel processing. Understanding how to layer these approaches is key to building sophisticated systems.</p>
<h3 id="heading-more-threads-or-processes-always-mean-better-performance">"More threads or processes always mean better performance."</h3>
<p>Beyond a certain point, adding more threads or processes leads to diminishing returns and even performance degradation due to increased context switching and resource contention. The optimal number depends on workload characteristics and available hardware.</p>
<h3 id="heading-asyncawait-makes-my-code-run-faster">“Async/await makes my code run faster."</h3>
<p>Async/await improves efficiency for I/O-bound operations by reducing idle time, but it does not speed up CPU-bound computations. It changes how waiting is handled, not how quickly individual operations execute.</p>
<h2 id="heading-practical-implementation-strategies">Practical Implementation Strategies</h2>
<h3 id="heading-how-to-implement-concurrency">How to Implement Concurrency</h3>
<p>To introduce concurrency into your programs, first you’ll need to find where time is wasted. Blocking operations that are held waiting on external resources are the best candidates to be put under concurrent execution.</p>
<p>Say you’re building a web scraper to fetch a bunch of data on a variety of sites. Every single HTTP request is most likely waiting until the server gets a response back. Other requests might be underway in your program instead of waiting around during this waiting period. These wait points are identifiable by profiling your application and searching the operations with network calls, file I/O, or database queries.</p>
<p>After you’ve discovered these wait points, the next big step will be to select the concurrency primitive. In Python, I/O-bound operations perform very well using the patterns of async/await with the support of the asyncio framework. It also comes with a minimal cost.</p>
<p>Take a situation when you have to retrieve user data in a REST API and query a database at the same time. With asyncio, you can write code that initiates both tasks almost simultaneously, and then have the event loop alternate between them during periods of waiting.</p>
<p>Here's a practical example:</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> asyncio
<span class="hljs-keyword">import</span> aiohttp

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fetch_user_api</span>(<span class="hljs-params">user_id</span>):</span>
    <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> aiohttp.ClientSession() <span class="hljs-keyword">as</span> session:
        <span class="hljs-keyword">async</span> <span class="hljs-keyword">with</span> session.get(<span class="hljs-string">f'https://api.example.com/users/<span class="hljs-subst">{user_id}</span>'</span>) <span class="hljs-keyword">as</span> response:
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">await</span> response.json()

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">query_database</span>(<span class="hljs-params">user_id</span>):</span>
    <span class="hljs-comment"># Simulating database query</span>
    <span class="hljs-keyword">await</span> asyncio.sleep(<span class="hljs-number">0.5</span>)
    <span class="hljs-keyword">return</span> {<span class="hljs-string">'preferences'</span>: <span class="hljs-string">'theme:dark'</span>, <span class="hljs-string">'notifications'</span>: <span class="hljs-literal">True</span>}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_complete_user_data</span>(<span class="hljs-params">user_id</span>):</span>
    api_data, db_data = <span class="hljs-keyword">await</span> asyncio.gather(
        fetch_user_api(user_id),
        query_database(user_id)
    )
    <span class="hljs-keyword">return</span> {**api_data, **db_data}
</code></pre>
<p>This gives a thorough look at how concurrency works in practice.</p>
<h3 id="heading-when-implementing-parallelism">When Implementing Parallelism</h3>
<p>Before committing parallelism into your system, you’ll need to profile the system and make sure that what causes your bottleneck is CPU-bound computation. Many developers think that their code requires parallelism when it should actually employ concurrency.</p>
<p>You can use profiling tools such as Python cProfile or line profilers to determine where time is being used or wasted in your program. When the time spent in computational loops is as large as compared to waiting in I/O, then parallelism can be beneficial.</p>
<p>To take an example, when processing images, the execution time in pixel manipulation algorithms consumes 90% of the execution time. This is a good sign that parallelism would be useful.</p>
<p>Deciding how to partition the work between multiple processors is sometimes a complex issue that you should consider carefully (in terms of dividing tasks into independent points). These chunks should be able to be processed individually without needing to communicate with each other on a regular basis.</p>
<p>Imagine that you have to examine the log files of several servers. Processing each file may happen on a different core, and the results will get added at the final stage.</p>
<p>Here's how you might structure this:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> multiprocessing <span class="hljs-keyword">import</span> Pool
<span class="hljs-keyword">import</span> re

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">analyze_log_file</span>(<span class="hljs-params">filepath</span>):</span>
    error_count = <span class="hljs-number">0</span>
    <span class="hljs-keyword">with</span> open(filepath, <span class="hljs-string">'r'</span>) <span class="hljs-keyword">as</span> f:
        <span class="hljs-keyword">for</span> line <span class="hljs-keyword">in</span> f:
            <span class="hljs-keyword">if</span> re.search(<span class="hljs-string">r'ERROR|CRITICAL'</span>, line):
                error_count += <span class="hljs-number">1</span>
    <span class="hljs-keyword">return</span> filepath, error_count

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
    log_files = [<span class="hljs-string">'server1.log'</span>, <span class="hljs-string">'server2.log'</span>, <span class="hljs-string">'server3.log'</span>, <span class="hljs-string">'server4.log'</span>]

    <span class="hljs-keyword">with</span> Pool(processes=<span class="hljs-number">4</span>) <span class="hljs-keyword">as</span> pool:
        results = pool.map(analyze_log_file, log_files)

    <span class="hljs-keyword">for</span> filepath, count <span class="hljs-keyword">in</span> results:
        print(<span class="hljs-string">f'<span class="hljs-subst">{filepath}</span>: <span class="hljs-subst">{count}</span> errors found'</span>)
</code></pre>
<p>In this example, each log file is processed entirely on one core without needing to communicate with other processes until the final result aggregation.</p>
<h2 id="heading-tools-and-technologies-by-language">Tools and Technologies by Language</h2>
<p>Various programming languages offer different methods of achieving concurrency and parallelism with their own advantages and disadvantages. And when you understand the available tools in your language of choice, you’ll be able to make a wise architectural choice.</p>
<h3 id="heading-python">Python</h3>
<p>Python has a concurrent and parallel environment. For concurrent programming, the asyncio library offers a more modern syntax of async/await that’s ideal in I/O-bound tasks such as web scraping or API communication.</p>
<p>The threading module allows shared memory execution, but is restricted on CPU-bound tasks by the Global Interpreter Lock. The concurrent futures module is a high-level interface to concurrent task execution, which can be useful when you want to parallelize I/O operations without having to write the low-level code of asynchronous operations.</p>
<p>Sometimes you’ll need actual parallelism because your job requires a lot of CPU time. Multiprocessing starts individual Python processes, which don’t use the GIL at all.</p>
<p>In the case of data science and machine learning processes, distributed parallelism is offered in libraries such as joblib, ray, and dask and can run on your laptop up to a cluster of computers.</p>
<h3 id="heading-javascript-and-nodejs">JavaScript and Node.js</h3>
<p>The event loop architecture had concurrency as its foundation in JavaScript and Node.js. Asynchronous programming is now intuitive with native syntax and Promises being used as the standard model of dealing with I/O operations (like HTTP requests or file system access).</p>
<p>JavaScript is single-threaded, and Node.js is designed to execute single-thread programs that make good use of I/O bound concurrent tasks, such as web servers, which support thousands of parallel connections.</p>
<p>In cases of actual parallelism (for example, image processing or cryptographic tasks), worker threads enable you to execute JavaScript on multiple cores. The child processes module can launch individual instances of Node.js, and the cluster module allows you to launch a pool of workers to accept incoming connections and make the most of all CPU cores in a web server.</p>
<h3 id="heading-java">Java</h3>
<p>Java has mature and battle-tested concurrency and parallelism support. CompletableFuture offers a fluent interface to asynchronous operations, so it’s easier to sequence dependent asynchronous tasks together without any callback hell.</p>
<p>The ExecutorService model also provides detailed management of thread pools and task scheduling, which is necessary in developing high performance server programs. Parallelism Java thread pools are effective at handling worker threads to execute CPU-bound tasks, whereas ForkJoinPool uses work-stealing algorithms that are useful in divide-and-conquer problems.</p>
<p>Java 8 offers parallel streams, which allow you to process collections in parallel with a minimal amount of code rewrites – but you have to pay close attention to when they actually will or will not improve performance.</p>
<h3 id="heading-go">Go</h3>
<p>Go introduced concurrency as a first-class language: goroutines and channels. Goroutines are lightweight threads controlled by the Go runtime, which means that you can run thousands or even millions of operations concurrently with minimal overhead.</p>
<p>The philosophy of communication in Channels offers a secure means of communication between goroutines, and it includes the expression "do not communicate by sharing memory; share memory by communicating." Such a design makes concurrent programming more user-friendly and error-free.</p>
<p>In parallelism, Go automatically allocates goroutines to multiple CPU cores according to the GOMAXPROCS environment variable, and parallel execution is achieved automatically. This renders Go especially effective in the construction of parallel systems such as web servers, network tools, and distributed systems.</p>
<h3 id="heading-rust">Rust</h3>
<p>Rust provides concurrent and parallel programming with memory safety without performance degradation. The ownership system of the language eliminates all forms of data races at compile-time, which means that the entire category of concurrency bugs found in other languages doesn’t exist.</p>
<p>In the case of async operations, you can apply the syntax of Rust to operations of an asynchronous type with runtime libraries such as tokio or async-std and achieves similar performance to C++ without sacrificing safety.</p>
<p>The Rayon library makes parallelism of data exceedingly easy. At times, you can parallelise a calculation by substituting .iter() with .par_iter(). Rust thread pools and channels give you low-level control where necessary, and the type system keeps the threads safe, making sure that problems don’t arise in your code.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Concurrency and parallelism represent fundamental pillars of modern computing architecture. They are not interchangeable buzzwords, but are rather distinct paradigms that address different challenges:</p>
<p>Concurrency focuses on program structure and efficient task coordination. It allows systems to handle multiple operations within overlapping time periods, maximizing resource utilization and responsiveness.</p>
<p>Parallelism focuses on computational throughput and execution speed. It divides work across multiple processors to complete tasks faster through simultaneous execution.</p>
<p>The most powerful systems strategically combine both approaches, applying each where it provides the greatest benefit.</p>
<p>The next time you face a performance challenge, ask yourself these critical questions:</p>
<ol>
<li><p>Is my bottleneck caused by waiting (I/O-bound) or by computation (CPU-bound)?</p>
</li>
<li><p>Am I trying to handle more tasks simultaneously or complete tasks faster?</p>
</li>
<li><p>Do I need better resource utilisation or raw computational throughput?</p>
</li>
</ol>
<p>Your answers will guide you toward the right solution. Understanding when to apply concurrency, when to leverage parallelism, and when to combine them is what separates adequate solutions from exceptional ones. This knowledge empowers you to build systems that are not only fast but also efficient, scalable, and economically viable.</p>
<p>Master these concepts, and you will find yourself equipped to tackle increasingly complex engineering challenges with confidence and precision.</p>
<h3 id="heading-further-learning-resources">Further Learning Resources</h3>
<ul>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=f6kdp27TYZs">"Go Concurrency Patterns" by Rob Pike (Google Tech Talk)</a></p>
</li>
<li><p><a target="_blank" href="https://www.youtube.com/watch?v=oV9rvDllKEg&amp;utm_source=chatgpt.com">"Concurrency is not Parallelism" by Rob Pike</a></p>
</li>
<li><p><a target="_blank" href="https://docs.python.org/3/library/asyncio.html">Python AsyncIO Official Documentation</a></p>
</li>
<li><p><a target="_blank" href="https://realpython.com/python-concurrency/">Real Python: Concurrency and Parallelism in Python</a></p>
</li>
<li><p><a target="_blank" href="https://jcip.net/?utm_source=chatgpt.com">Java Concurrency in Practice by Brian Goetz</a></p>
</li>
<li><p><a target="_blank" href="https://spark.apache.org/docs/latest/">Apache Spark Documentation for Big Data Parallelism</a></p>
</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Unicode —The Secret Language Behind Every Text You See ]]>
                </title>
                <description>
                    <![CDATA[ Have you ever sent a message with an emoji? Read a blog in another language? Or copied some strange symbol from the internet?  All of these are possible because of something called Unicode.  Unicode is a powerful system that lets computers understand... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-unicode-the-secret-language-behind-every-text-you-see/</link>
                <guid isPermaLink="false">688b74903e00617596a6f3ce</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ localization ]]>
                    </category>
                
                    <category>
                        <![CDATA[ unicode ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manish Shivanandhan ]]>
                </dc:creator>
                <pubDate>Thu, 31 Jul 2025 13:50:08 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1753969659647/1f49bf21-9be3-4e60-861f-50c714d7ae87.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Have you ever sent a message with an emoji? Read a blog in another language? Or copied some strange symbol from the internet? </p>
<p>All of these are possible because of something called <a target="_blank" href="https://en.wikipedia.org/wiki/Unicode"><strong>Unicode</strong></a>. </p>
<p>Unicode is a powerful system that lets computers understand and show text in nearly any language, including fun stuff like emojis. 😃</p>
<p>In this article, we’ll break down what Unicode is, why it matters, and how it powers global communication.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><p><a class="post-section-overview" href="#heading-the-problem-before-unicode">The Problem Before Unicode</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-what-is-unicode">What Is Unicode?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-how-does-unicode-work">How Does Unicode Work</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-what-are-unicode-encodings">What Are Unicode Encodings?</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-code-points-characters-and-glyphs">Code Points, Characters, and Glyphs</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-unicode-in-programming">Unicode in Programming</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-why-unicode-matters">Why Unicode Matters</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
</ul>
<h2 id="heading-the-problem-before-unicode">The Problem Before Unicode</h2>
<p>Let’s rewind to the early days of computers when each country had its own way of showing text. These systems were called character encodings. </p>
<p>For example, English text used <a target="_blank" href="https://en.wikipedia.org/wiki/ASCII">ASCII</a>, while others used ISO-8859, Shift-JIS, and more.</p>
<p>But here’s the problem: the same number could mean different things in different systems. </p>
<p>For example, the number <code>0x41</code> meant the letter A in one system, but in another, it might mean something else entirely.</p>
<p>This caused chaos when sharing documents between systems. Special characters would turn into random symbols, and non-English languages were often unreadable. </p>
<p>It was clear that the world needed one universal system. Something that could handle all languages and symbols in a single, consistent way.</p>
<p>That’s where Unicode comes in.</p>
<h2 id="heading-what-is-unicode">What Is Unicode?</h2>
<p>Unicode is a standard system that assigns a unique number, called a code point, to every character. It includes letters, numbers, emojis, symbols, and even <a target="_blank" href="https://invisible-characters.com/">invisible control characters</a>.</p>
<p>Think of it like giving every character in every language its own ID number.</p>
<p>For example:</p>
<ul>
<li><p>The capital letter <strong>A</strong> is given the code <code>U+0041</code></p>
</li>
<li><p>The Greek letter <strong>Ω</strong> is <code>U+03A9</code></p>
</li>
<li><p>The emoji 😀 is <code>U+1F600</code></p>
</li>
</ul>
<p>This means no matter what device, app, or country you’re in, the same code will always mean the same character.</p>
<h2 id="heading-how-does-unicode-work">How Does Unicode Work?</h2>
<p>At its core, Unicode assigns a code point to each character. </p>
<p>Code points look like this: <code>U+XXXX</code>, where <code>XXXX</code> is a number written in hexadecimal (a base-16 system computers use).</p>
<p>But computers don’t store code points directly. They store bytes, the 1s and 0s under the hood. So Unicode needs a way to turn those code points into bytes. This is called encoding.</p>
<h3 id="heading-what-are-unicode-encodings">What Are Unicode Encodings?</h3>
<p>Unicode gives every character a unique code point, but computers don’t store “U+1F600” directly – they store bytes. To convert these code points into bytes that computers can save or transmit, we need encodings.</p>
<p>There are three main ways to turn Unicode code points into bytes:</p>
<p><strong>1. UTF-8 (Most common)</strong></p>
<ul>
<li><p>Uses 1 to 4 bytes.</p>
</li>
<li><p>Great for English and most symbols.</p>
</li>
<li><p>Saves space.</p>
</li>
<li><p>Works on the web and most systems.</p>
</li>
</ul>
<p><strong>2. UTF-16</strong></p>
<ul>
<li><p>Uses 2 or 4 bytes.</p>
</li>
<li><p>Used in Windows, Java, and some older systems.</p>
</li>
</ul>
<p><strong>3. UTF-32</strong></p>
<ul>
<li><p>Uses 4 bytes for everything.</p>
</li>
<li><p>Easy to work with, but uses more memory.</p>
</li>
</ul>
<p>If you’re storing or sending text, the encoding decides how many bytes are used. Choosing UTF‑8 can save space, especially for English-heavy data. When you see garbled text or � symbols, it’s usually a mismatch between encoding and decoding.</p>
<p>Web servers, databases, and APIs often require you to specify the encoding to ensure multilingual text displays correctly. In short, knowing the difference between UTF‑8, UTF‑16, and UTF‑32 helps you prevent bugs, save storage, and build apps that handle text from any language reliably.</p>
<p>So, UTF-8 is often the best choice. It’s efficient, and it works nearly everywhere.</p>
<h3 id="heading-code-points-characters-and-glyphs">Code Points, Characters, and Glyphs</h3>
<p>Let’s break down the main parts of Unicode:</p>
<p><strong>Code Point:</strong></p>
<p>This is the number assigned to a character. For example:</p>
<ul>
<li><p><code>U+0041</code> is the code point for <strong>A</strong></p>
</li>
<li><p><code>U+20AC</code> is for the Euro sign <strong>€</strong></p>
</li>
<li><p><code>U+1F600</code> is for the smiley face 😀</p>
</li>
</ul>
<p><strong>Character:</strong></p>
<p>The actual letter or symbol we see. For example, “A”, “Ω”, or “😎”.</p>
<p><strong>Glyph:</strong></p>
<p>This is the visual design of a character. For example, “A” in Arial looks different from “A” in Times New Roman, but the character is the same.</p>
<h2 id="heading-unicode-in-programming">Unicode in Programming</h2>
<p>Modern programming languages have embraced Unicode, making it easier than ever to build applications that support global audiences. </p>
<p>Whether you’re writing a command-line tool or building a web app, Unicode ensures your text renders correctly, no matter the language.</p>
<p>Take <a target="_blank" href="https://www.freecodecamp.org/news/an-animated-introduction-to-programming-with-python/">Python</a>, for instance. It natively supports Unicode strings:</p>
<pre><code class="lang-typescript">print(<span class="hljs-string">"Welcome 😊"</span>)  # This works because Python uses Unicode under the hood
</code></pre>
<p>You can even mix languages and emojis in the same output without a problem:</p>
<pre><code class="lang-typescript">print(<span class="hljs-string">"こんにちは, friend! 🚀"</span>)
</code></pre>
<p>In <a target="_blank" href="https://www.freecodecamp.org/news/what-is-javascript-definition-of-js/">JavaScript</a>, Unicode enables developers to use characters from virtually any script:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"नमस्ते"</span>);  <span class="hljs-comment">// Prints “Namaste” in Hindi</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"مرحبا بالعالم"</span>);  <span class="hljs-comment">// Arabic: "Hello, world"</span>
</code></pre>
<p>Or even create multilingual UIs:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"greeting"</span>).textContent = <span class="hljs-string">"Bonjour, мир!"</span>;
</code></pre>
<p>Before Unicode, developers had to juggle different encodings like ASCII, which often led to corrupted text when files moved between systems. Now, thanks to Unicode, most languages, including Java, C#, Ruby, Go, and Rust, handle international text gracefully by default.</p>
<p>This shift means developers can write apps that support global users from day one. Whether you’re building a chat app, an international e-commerce site, or a multilingual blog – with Unicode, your code speaks every language.</p>
<h2 id="heading-why-unicode-matters">Why Unicode Matters</h2>
<p>Before Unicode, digital communication across languages was chaotic. </p>
<p>Different systems used different character sets, leading to garbled text, random boxes, or strings of question marks whenever someone typed in a non-Latin-based language. Unicode changed all of that.</p>
<p>With Unicode, you can now mix languages like Chinese and English in the same document without a problem. Whether you’re copying text between applications or transferring data across platforms, it just works. </p>
<p>This consistency has been a game-changer for building multilingual websites and applications. Developers no longer need to worry about separate encodings for different regions. A single, unified standard handles it all.</p>
<p>Unicode isn’t something most users think about, but it’s embedded in almost everything. </p>
<p>It powers the text you see on websites and in your email, your smartphone’s keyboard, and even the way you chat in online games. Social media posts, search queries, and programming languages, all rely on Unicode.</p>
<p>Behind the scenes, the <a target="_blank" href="https://www.unicode.org/consortium/consort.html">Unicode Consortium</a>, made up of industry giants like Google, Apple, and Microsoft, regularly updates the standard. They decide which new characters and emojis make it into our digital vocabulary. </p>
<p>That’s why your favourite facepalm emoji or regional script exists. Someone proposed it, and Unicode made it happen.</p>
<p>Unicode isn’t just a technical convenience. It plays a direct role in how people engage with content. </p>
<p>Pages with broken symbols or unreadable characters had significantly lower engagement rates compared to cleanly rendered ones. It was a clear signal that readability isn’t just about aesthetics – it affects how long people stay and interact with your content.</p>
<p>That’s why even small encoding errors can have a real impact, especially on multilingual platforms or international blogs. Unicode silently keeps everything running smoothly.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Unicode is one of the unsung heroes of our digital world. Without it, the internet would still be a confusing mix of broken characters and language barriers. Because of Unicode, we can type “Hello 😊”, mix multiple languages in a single message, or build global apps that just work.</p>
<p>So the next time you post an emoji, read a message in a different script, or switch languages on your keyboard, take a moment to appreciate the invisible infrastructure behind it all. That’s Unicode, working quietly to make sure we stay connected, no matter what language we speak.</p>
<p><a target="_blank" href="https://blog.manishshivanandhan.com/">Join my newsletter</a> for a summary of my articles every Friday. You can also <a target="_blank" href="https://linkedin.com/in/manishmshiva">connect with me on Linkedin</a>.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ LeetCode Meditations: A Visual Handbook of Data Structures and Algorithms Concepts ]]>
                </title>
                <description>
                    <![CDATA[ It may seem like an oxymoron when the words "LeetCode" and "meditation" are used together – after all, one thing that almost everyone can agree is that LeetCode is challenging. It's called grinding LeetCode for a reason. It doesn't have anything to d... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/leetcode-dsa-concepts-handbook/</link>
                <guid isPermaLink="false">6838baed0c839b0170a2e731</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ MathJax ]]>
                    </category>
                
                    <category>
                        <![CDATA[ leetcode ]]>
                    </category>
                
                    <category>
                        <![CDATA[ DSA ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Eda Eren ]]>
                </dc:creator>
                <pubDate>Thu, 29 May 2025 19:52:13 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1748548297673/2ea8ee5a-e873-4401-b024-86412bf00f8a.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>It may seem like an oxymoron when the words "LeetCode" and "meditation" are used together – after all, one thing that almost everyone can agree is that <a target="_blank" href="https://leetcode.com/">LeetCode</a> is challenging. It's called <em>grinding</em> LeetCode for a reason.</p>
<p>It doesn't have anything to do with the platform, of course, but rather what it represents: tackling problems for hours on end, usually to find a solution that is even harder to understand.</p>
<p>But what is more challenging is finding a roadmap to solve those problems with very little knowledge of data structures and algorithms. This handbook is more or less based on the <a target="_blank" href="https://neetcode.io/practice?tab=blind75">Blind 75 list</a> that's included in <a target="_blank" href="http://neetcode.io">neetcode.io</a>'s practice problems. This is an amazing resource that offers an organized study roadmap for solving LeetCode problems.</p>
<p>In fact, why not take a more structured and <em>calmer</em> approach? We can treat learning about the topics on the list like taking a brief walk in nature – a sort of meditation, if you will.</p>
<p>That said, this handbook is not about specific problems. Rather it’s about understanding the concepts behind them in a casual manner. It is also language agnostic – sometimes you’ll see TypeScript, sometimes Python, and sometimes JavaScript.</p>
<p>This handbook also requires you to be patient, to relax, to take a step back and pay attention. The mid-quality GIFs used in the handbook (maybe ironically!) intend to encourage this. They are not videos, so you can wait for it to come to a moment that you didn't understand or missed instead of hastily rewinding it back or rushing to a certain point in the future.</p>
<p>Solving hundreds of LeetCode problems may be the gate to go through to get an interview at big tech companies…but learning the topics that the problems are about is not under anyone's monopoly.</p>
<p>With that said, let's start the first chapter.</p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ol>
<li><p><a class="post-section-overview" href="#heading-prerequisites">Prerequisites</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-one-arrays-amp-hashing">Chapter One: Arrays &amp; Hashing</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-dynamic-arrays">Dynamic Arrays</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-hash-tables">Hash Tables</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-prefix-sums">Prefix Sums</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-two-two-pointers">Chapter Two: Two Pointers</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-palindrome-example">Palindrome example</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-squares-of-a-sorted-array-example">Squares of a sorted array example</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-three-sliding-window">Chapter Three: Sliding Window</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-fixed-window-size">Fixed window size</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-dynamic-window-size">Dynamic window size</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-four-stack">Chapter Four: Stack</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-five-binary-search">Chapter Five: Binary Search</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-six-linked-lists">Chapter Six: Linked Lists</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-singly-linked-lists">Singly linked lists</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-doubly-linked-lists">Doubly linked lists</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-circular-linked-lists">Circular linked lists</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-interlude-fast-amp-slow-pointers">Interlude: Fast &amp; Slow Pointers</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-finding-the-middle-node-of-a-linked-list">Finding the middle node of a linked list</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-seven-trees">Chapter Seven: Trees</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-binary-trees-binary-search-trees-bsts">Binary trees, binary search trees (BSTs)</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-inserting-into-a-binary-search-tree">Inserting into a binary search tree</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-recursive-solution">Recursive solution</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-iterative-solution">Iterative solution</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-deleting-from-a-binary-search-tree">Deleting from a binary search tree</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-traversals">Traversals</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-depth-first-search-dfs">Depth-First Search (DFS)</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-preorder-traversal">Preorder traversal</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-inorder-traversal">Inorder traversal</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-postorder-traversal">Postorder traversal</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-breadth-first-search-bfs">Breadth-First Search (BFS)</a></p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-eight-heap-priority-queue">Chapter Eight: Heap / Priority Queue</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-heap-properties">Heap properties</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-heaps-with-arrays">Heaps with arrays</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-insertingremoving-elements">Inserting/removing elements</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-heapsort">Heapsort</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-nine-backtracking">Chapter Nine: Backtracking</a></p>
<ul>
<li><a class="post-section-overview" href="#heading-subsets">Subsets</a></li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-ten-tries">Chapter Ten: Tries</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-eleven-graphs">Chapter Eleven: Graphs</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-representing-graphs">Representing graphs</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-edge-list">Edge List</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-adjacency-matrix">Adjacency Matrix</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-adjacency-list">Adjacency List</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-traversals-1">Traversals</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-breadth-first-search">Breadth-First Search</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-depth-first-search">Depth-First Search</a></p>
</li>
</ul>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-twelve-dynamic-programming">Chapter Twelve: Dynamic Programming</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-thirteen-intervals">Chapter Thirteen: Intervals</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-chapter-fourteen-bit-manipulation">Chapter Fourteen: Bit Manipulation</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-bitwise-operators">Bitwise operators</a></p>
<ul>
<li><p><a class="post-section-overview" href="#heading-and-amp">AND (<code>&amp;</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-or">OR (<code>|</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-xor">XOR (<code>^</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-not">NOT (<code>~</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-left-shift-zero-fill-ltlt">Left shift (zero fill) (<code>&lt;&lt;</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-right-shift-sign-preserving-gtgt">Right shift (sign preserving) (<code>&gt;&gt;</code>)</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-right-shift-unsigned-gtgtgt">Right shift (unsigned) (<code>&gt;&gt;&gt;</code>)</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-getting-a-bit">Getting a bit</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-setting-a-bit">Setting a bit</a></p>
</li>
</ul>
</li>
<li><p><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></p>
</li>
<li><p><a class="post-section-overview" href="#heading-resources-amp-credits">Resources &amp; Credits</a></p>
</li>
</ol>
<h2 id="heading-prerequisites">Prerequisites</h2>
<p>Before diving in, some familiarity with TypeScript/JavaScript and Python may be helpful, as these are the languages I use for the examples. Also, a basic understanding of Big O notation is useful as we go over time and space complexities.</p>
<p>Even though we don't go through the mathematics behind the concepts, some basic mathematical knowledge can also help. That said, it's definitely not necessary to enjoy or learn something useful from this handbook.</p>
<h2 id="heading-chapter-one-arrays-amp-hashing">Chapter One: Arrays &amp; Hashing</h2>
<p>Let's very briefly get to know our topics for this chapter: dynamic arrays, hash tables, and prefix sums.</p>
<h3 id="heading-dynamic-arrays">Dynamic Arrays</h3>
<p>Dynamic arrays are, well, dynamic. They're flexible and can change their size during execution.</p>
<p>Python's <code>list</code> type is a dynamic array. We can create an <code>items</code> list, for example:</p>
<pre><code class="lang-python">items = [<span class="hljs-number">3</span>, <span class="hljs-number">5</span>]
</code></pre>
<p>The <strong>length</strong> of <code>items</code> is 2, as you can see, but its <strong>capacity</strong> is greater than or equal to its length. In fact, capacity refers to the total size, whereas length is the actual size.</p>
<p>Since dynamic arrays are still arrays, they need a contiguous block of memory.</p>
<p>We can easily add an item to <code>items</code>:</p>
<pre><code class="lang-python">items.append(<span class="hljs-number">7</span>)
</code></pre>
<p>And add some more:</p>
<pre><code class="lang-python">items.append(<span class="hljs-number">9</span>)
items.append(<span class="hljs-number">11</span>)
items.append(<span class="hljs-number">13</span>)
</code></pre>
<p>All the while, the length and capacity of <code>items</code> keep growing dynamically.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747912308935/960ff442-e095-4781-8ab5-9b84e0ecb804.gif" alt="Animated visualization of four boxes for an &quot;items&quot; array that holds the values 3 and 5 on initialization, appending 7 to the array adds four more boxes to it." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-time-and-space-complexity">Time and space complexity</h4>
<p>Accessing an element is \(O(1)\) as we have <a target="_blank" href="https://en.wikipedia.org/wiki/Random_access">random access</a>.</p>
<p>Inserting a new element or deleting an element is \(O(n)\) (think about having to shift all the elements before inserting or after deleting an item). But, in order to not be too pessimistic, we can look at <a target="_blank" href="https://en.wikipedia.org/wiki/Amortized_analysis">amortized analysis</a> – in that case, inserting/deleting at the end of the array becomes \(O(1)\).</p>
<p>Space complexity is \(O(n)\), as the need for space will grow proportionately as the input increases.</p>
<p>If you need more info about time and space complexity, you can <a target="_blank" href="https://www.freecodecamp.org/news/big-o-notation-why-it-matters-and-why-it-doesnt-1674cfa8a23c/">refer to this guide</a>.</p>
<h3 id="heading-hash-tables">Hash Tables</h3>
<p>A hash table maps keys to values, implementing an <em>associative array</em>.</p>
<p>Python's <code>dict</code> is one example:</p>
<pre><code class="lang-python">number_of_petals = {
    <span class="hljs-string">'Euphorbia'</span>: <span class="hljs-number">2</span>, 
    <span class="hljs-string">'Trillium'</span>: <span class="hljs-number">3</span>, 
    <span class="hljs-string">'Columbine'</span>: <span class="hljs-number">5</span>,
}
</code></pre>
<p>Also JavaScript's "object"s:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> numberOfMoons = {
  <span class="hljs-string">'Earth'</span>: <span class="hljs-number">1</span>,
  <span class="hljs-string">'Mars'</span>: <span class="hljs-number">2</span>,
  <span class="hljs-string">'Jupiter'</span>: <span class="hljs-number">95</span>,
  <span class="hljs-string">'Saturn'</span>: <span class="hljs-number">146</span>,
  <span class="hljs-string">'Uranus'</span>: <span class="hljs-number">27</span>,
  <span class="hljs-string">'Neptune'</span>: <span class="hljs-number">14</span>,
};
</code></pre>
<p>There are two important ingredients for a hash table:</p>
<ul>
<li><p>an array of "buckets" to store the data</p>
</li>
<li><p>a hash function to map the data to a specific index in the array</p>
</li>
</ul>
<p>Hashes are usually large integers, so to find an index, we can take the result of the hash modulo the array's length.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747913143164/2a8371ba-133c-4d5a-a270-b44f935fc91b.gif" alt="Animated visualization of an array with 5 buckets, the hash function finding a bucket for each value in number_of_petals dict." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Note:</strong> The <strong>hash function</strong> that's mapping the elements to buckets is <strong>not</strong> the <code>hash()</code> used in the visual (it's just a <a target="_blank" href="https://docs.python.org/3/library/functions.html#hash">Python function</a> to calculate the hash value of an object). The hash function in this case is the modulo ( <code>%</code> ) operation.</p>
<p>Here, with the hash value of each item's key, we calculate the remainder when it's divided by the length of the array to find which "bucket" it should go to.</p>
<p>The ratio of the number of elements to the number of buckets is called the <strong>load factor</strong>, and the higher it gets, the more <strong>collisions</strong> (when elements have to be inserted at the same place in the array) occur.</p>
<p>There are some collusion resolution tactics like <strong>linear probing</strong> (probing through the array until finding an empty bucket) and <strong>chaining</strong> (chaining multiple elements as linked lists), but we'll not go into those for now.</p>
<h4 id="heading-time-and-space-complexity-1">Time and space complexity</h4>
<p>The average case for searching, inserting, and deleting operations are \(O(1)\) as we use keys to look up the values.</p>
<p>Space complexity is \(O(n)\) as it grows linearly with the amount of elements.</p>
<h3 id="heading-prefix-sums">Prefix Sums</h3>
<p>A prefix sum is the sequence of numbers we get after adding the sums of running totals of another sequence. It's also called the <strong>cumulative sum</strong>.</p>
<p>The first element of the resulting array is the first element of the input array. That's fine. We start at the second item, and add the previous numbers each time as we go. That is:</p>
<p>$$result[i] = \begin{cases} nums[0] &amp; \text{if } i \text{ is zero} \\ result[i - 1] + nums[i] &amp; \text{if } i \geq 1 \end{cases}$$</p><p>In code, we can implement that easily:</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">runningSum</span>(<span class="hljs-params">nums</span>):</span>
    result = [nums[<span class="hljs-number">0</span>]]

    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">1</span>, len(nums)):
        result.append(result[i - <span class="hljs-number">1</span>] + nums[i])

    <span class="hljs-keyword">return</span> result
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747913501237/e9c95eef-6310-457c-b94e-da5a61fc890a.gif" alt="Animated visualization of runningSum of the array [1, 2, 3, 4, 5]." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h4 id="heading-time-and-space-complexity-2">Time and space complexity</h4>
<p>Time complexity for a prefix sum is \(O(n)\) because we're iterating over each of the elements in the array.</p>
<p>The space complexity is also \(O(n)\) because the need for external space grows as the length of the original array grows.</p>
<h2 id="heading-chapter-two-two-pointers">Chapter Two: Two Pointers</h2>
<p>One of the techniques of iterating through an array is the <strong>two pointers technique</strong>, and it is as simple as it sounds: we just keep two pointers, one starting from the left, and the other from the right, gradually getting closer to each other.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747913831967/b8e251a9-2e9e-41be-84ed-46f2559b1515.gif" alt="Animated visualization of two pointers technique" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h3 id="heading-palindrome-example">Palindrome example</h3>
<p>A very basic example can be the one where we check if a string is a palindrome or not. A palindrome is a string that reads the same forwards and backwards.</p>
<p>In an imaginary world where all the inputs always consist of lowercase English letters, we can do it like this:</p>
<pre><code class="lang-typescript"><span class="hljs-comment">// s consists of lowercase English letters</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isPalindrome</span>(<span class="hljs-params">s: <span class="hljs-built_in">string</span></span>) </span>{
  <span class="hljs-keyword">let</span> left = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> right = s.length - <span class="hljs-number">1</span>;

  <span class="hljs-keyword">while</span> (left &lt;= right) {
    <span class="hljs-keyword">if</span> (s[left++] !== s[right--]) {
      <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
  }

  <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
</code></pre>
<p>We initialize two pointers: <code>left</code> and <code>right</code>. <code>left</code> points to the start of the array, while the <code>right</code> points to the last element. As we loop while <code>left</code> is less than <code>right</code>, we check if they are equal. If not, we return <code>false</code> immediately. Otherwise, our <code>left</code> pointer is increased – that is, it's moved to the <em>right</em> one step, and our <code>right</code> pointer is decreased, meaning that it's moved to the <em>left</em> one step. When they eventually overlap, the loop terminates, and we return <code>true</code>.</p>
<p>Let's say our string is <code>'racecar'</code>, which is a palindrome. It will go like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747913932303/e60727a0-4e45-4452-8648-d35d1ae680c9.gif" alt="Animated visualization of isPalindrome, with the example 'racecar' resulting in true." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h3 id="heading-squares-of-a-sorted-array-example">Squares of a sorted array example</h3>
<p>Another example where we can use the two pointers technique is the problem <a target="_blank" href="https://leetcode.com/problems/squares-of-a-sorted-array">Squares of a Sorted Array</a>.</p>
<p>The description says:</p>
<blockquote>
<p>Given an integer array <code>nums</code> sorted in <strong>non-decreasing</strong> order, return <em>an array of</em> <strong><em>the squares of each number</em></strong> <em>sorted in non-decreasing order</em>.</p>
</blockquote>
<p>For example, if the input is <code>[-4, -1, 0, 3, 10]</code>, the output should be <code>[0, 1, 9, 16, 100]</code>.</p>
<p>Now obviously, we can just square each one, and then sort the array with a built-in sort method, and be done with it. But a sorting operation is never better than \(O(n \ log \ n)\) runtime, so we can do it using two pointers in just \(O(n)\) time:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortedSquares</span>(<span class="hljs-params">nums: <span class="hljs-built_in">number</span>[]</span>): <span class="hljs-title">number</span>[] </span>{
  <span class="hljs-keyword">let</span> left = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> right = nums.length - <span class="hljs-number">1</span>;
  <span class="hljs-keyword">let</span> result = [];

  <span class="hljs-keyword">while</span> (left &lt;= right) {
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">Math</span>.abs(nums[left]) &gt; <span class="hljs-built_in">Math</span>.abs(nums[right])) {
      result.push(nums[left++] ** <span class="hljs-number">2</span>);
    } <span class="hljs-keyword">else</span> {
      result.push(nums[right--] ** <span class="hljs-number">2</span>);
    }
  }

  <span class="hljs-keyword">return</span> result.reverse();
}
</code></pre>
<p>We compare the absolute value of the items that <code>left</code> and <code>right</code> are pointing to, and push the square of the greater one to our <code>result</code> array. And we return the reversed version of it.</p>
<p><strong>Note:</strong> The reason we return the reversed result is that the array is initially already sorted, and we get the largest absolute value first. The reason that works is related to how <em>two pointers</em> work: as we start from both ends, we initially start with the smallest and largest values in the array.</p>
<p>Because we only make one pass through the array while comparing, and then later reversing, it ends up being \(O(n)\), a better runtime than \(O(n \ log \ n)\).</p>
<h2 id="heading-chapter-three-sliding-window">Chapter Three: Sliding Window</h2>
<p>Now that we're familiar with the Two Pointers technique, we can add another one to our toolbox: the Sliding Window. It's usually used for operations done on the subsets of a given data. It also comes in two flavors: <strong>fixed window size</strong> and <strong>dynamic window size</strong>.</p>
<h3 id="heading-fixed-window-size">Fixed window size</h3>
<p>If we have a size constraint in a given problem – say, we need to check a \(k\)-sized subarray – sliding window is an appropriate technique to use.</p>
<p>For example, getting the maximum subarray (of size \(k\)) sum of a given array can be done like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747914357907/ecd51e70-e649-4856-a563-47621b950526.gif" alt="Animated visualization of fixed window size sliding window technique, array [1, 5, 4, 2, 9] with k = 3, having the maxSum of 15." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Note that the window size is \(k\), and it doesn't change throughout the operation – hence, <strong>fixed size</strong>.</p>
<p>A very cool thing to notice here is that with each <strong>slide</strong>, what happens to our sum is that we <em>add</em> the right element, and <em>decrease</em> the left element.</p>
<p>Let's look at an example for getting the maximum sum of subarray with given size <code>k</code>:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">maxSubarray</span>(<span class="hljs-params">numbers: <span class="hljs-built_in">number</span>[], k: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">if</span> (numbers.length &lt; k) {
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
  }

  <span class="hljs-keyword">let</span> currentSum = <span class="hljs-number">0</span>;

  <span class="hljs-comment">// Initial sum of the first window </span>
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; k; i++) {
    currentSum += numbers[i];
  }

  <span class="hljs-keyword">let</span> maxSum = currentSum;

  <span class="hljs-keyword">let</span> left = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> right = k;

  <span class="hljs-keyword">while</span> (right &lt; numbers.length) {
    currentSum = currentSum - numbers[left++] + numbers[right++];
    maxSum = <span class="hljs-built_in">Math</span>.max(maxSum, currentSum);
  }

  <span class="hljs-keyword">return</span> maxSum;
}
</code></pre>
<p><strong>Note:</strong> Updating the pointers can be done outside the brackets as well, like this:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">while</span> (right &lt; numbers.length) {
  currentSum = currentSum - numbers[left] + numbers[right];
  maxSum = <span class="hljs-built_in">Math</span>.max(maxSum, currentSum);
  left++;
  right++;
}
</code></pre>
<p>Since the postfix operator returns the value first, they can be used inside the brackets to be slightly more concise.</p>
<p>Here, we first get the initial sum of our window using the <code>for</code> loop, and set it as the maximum sum.</p>
<p>Then we initialize two pointers: <code>left</code> that points to the left end of the window, and <code>right</code> that points to the right end of the window. As we loop, we update our <code>currentSum</code>, decreasing the <code>left</code> value, and adding the <code>right</code> value. When our current sum is more than the maximum sum, <code>maxSum</code> variable is updated as well.</p>
<h3 id="heading-dynamic-window-size">Dynamic window size</h3>
<p>As opposed to the fixed window size version, the size of the window changes dynamically this time.</p>
<p>For example, let's take a brief look at the problem <a target="_blank" href="https://leetcode.com/problems/best-time-to-buy-and-sell-stock">Best Time to Buy and Sell Stock</a>. We need to choose a day to buy a stock, and sell it in the <em>future</em>. The numbers in the array are prices, and we need to buy the stock at as low a price as we can, and sell it as high as we can.</p>
<p>We can initialize <code>left</code> and <code>right</code> pointers again, but this time, we'll update them depending on a condition. When the left item is less than the one on the right, that means it's good – we can buy and sell at those prices, so we get their difference and update our <code>maxDiff</code> variable that holds the maximum difference between the two.</p>
<p>If, however, the left one is greater than the right one, we update our <code>left</code> pointer to be where the <code>right</code> is at. In both cases, we'll continue updating <code>right</code> until we reach the end of the array.</p>
<p>With the blue arrow indicating the left pointer, and the red the right one, the process looks like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747914550588/222996a0-d2a6-414e-86cf-fe60deb908d8.gif" alt="Animated visualization of dynamic window size sliding window technique, array [7, 1, 5, 3, 6] having the maxDiff of 5." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>The solution looks like this:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">maxProfit</span>(<span class="hljs-params">prices: <span class="hljs-built_in">number</span>[]</span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">let</span> left = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> right = left + <span class="hljs-number">1</span>;
  <span class="hljs-keyword">let</span> maxDiff = <span class="hljs-number">0</span>;

  <span class="hljs-keyword">while</span> (right &lt; prices.length) {
    <span class="hljs-keyword">if</span> (prices[left] &lt; prices[right]) {
      <span class="hljs-keyword">let</span> diff = prices[right] - prices[left];
      maxDiff = <span class="hljs-built_in">Math</span>.max(maxDiff, diff);
    } <span class="hljs-keyword">else</span> {
      left = right;
    }

    right++;
  }

  <span class="hljs-keyword">return</span> maxDiff;
}
</code></pre>
<p><strong>Note:</strong> This one is also called <strong>fast/catch-up</strong> version of dynamic sliding window, because the <code>left</code> pointer jumps to catch up with the <code>right</code> pointer in the <code>else</code> block.</p>
<h4 id="heading-time-and-space-complexity-3">Time and space complexity</h4>
<p>Both examples have the same time and space complexity: The time complexity is \(O(n)\) because in the worst case we iterate through all the elements in the array. The space complexity is \(O(1)\) as we don't need additional space.</p>
<h2 id="heading-chapter-four-stack">Chapter Four: Stack</h2>
<p>A stack data type is perhaps one of the most well-known ones. A stack of books might be a good example to visualize, but insertion and deletion can only happen from the one end. A stack operates through the last-in first-out (LIFO) principle: the last item to go in is the first to go out.</p>
<p>Usually we'll have methods for <em>pushing</em> an element onto the stack, and <em>popping</em> an element from the stack.</p>
<p>For example, let's say we're looking for valid parentheses in a given string, and the operation we'll do goes like this.</p>
<p>As we iterate over the characters in the string, we <em>push</em> the character onto the stack. If we pushed a closing parenthesis (one of <code>)</code>, <code>}</code>, or <code>]</code>), then, if the previous pushed element is its opening pair, we'll <em>pop</em> that pair from the stack.</p>
<p>If, at the end, the stack is empty, the string consists of valid parentheses.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747914829489/e86baf72-22f6-41fe-9de9-f4da136a8777.gif" alt="Animated visualization of pushing to and popping off from a stack of parentheses." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>A stack can be implemented as an array or a linked list. But using linked lists is more common because with arrays, we have a potential <em>stack overflow</em> when we predefine a maximum stack size. On the other hand, linked lists are not static when it comes to memory, so they are a good candidate to implement stacks.</p>
<p>Linked lists are also efficient because we are using one end of the stack for insertion and deletion, and doing these are constant time operations.</p>
<p>Let's look at one easy stack implementation in Python.</p>
<p>Now, we can use a <code>list</code>, but <a target="_blank" href="https://docs.python.org/3/faq/design.html#how-are-lists-implemented-in-cpython">a list in Python is implemented as a dynamic array underneath</a>, so at one point, pushing an item can be an \(O(n)\) operation if the list needs to be copied into another memory location. For that reason, we'll use a <a target="_blank" href="https://docs.python.org/3/library/collections.html#collections.deque"><code>deque</code></a>, which is implemented as a doubly-linked list, so that we know push and pop operations will be \(O(1)\).</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> deque

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Stack</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span>(<span class="hljs-params">self</span>):</span>
        self._stack = deque()

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">push</span>(<span class="hljs-params">self, item</span>):</span>
        self._stack.append(item)

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">pop</span>(<span class="hljs-params">self</span>):</span>
        <span class="hljs-keyword">return</span> self._stack.pop()

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">peek</span>(<span class="hljs-params">self</span>):</span>
        <span class="hljs-keyword">return</span> self._stack[<span class="hljs-number">-1</span>]

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">is_empty</span>(<span class="hljs-params">self</span>):</span>
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">not</span> bool(len(self._stack))

    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">size</span>(<span class="hljs-params">self</span>):</span>
        <span class="hljs-keyword">return</span> len(self._stack)
</code></pre>
<p>In addition to <code>push</code> and <code>pop</code>, we'll also usually have functions like <code>peek</code> to get the topmost item in the stack, <code>is_empty</code> to check if the stack is empty, and <code>size</code> to get the size of the stack.</p>
<p>We can also do it using JavaScript. Now, we can do it using an array, but we want to use a linked list instead. Since we don't have a robust built-in library like Python this time, we'll implement a very simple version of it ourselves. Even though we haven't seen linked lists so far, the basic idea is that we have nodes, each of which has a <code>data</code> value, and a <code>next</code> pointer pointing to the next node.</p>
<p>Let's create a simple node first:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> </span>{
  <span class="hljs-keyword">constructor</span>(data) {
    <span class="hljs-built_in">this</span>.data = data;
    <span class="hljs-built_in">this</span>.next = <span class="hljs-literal">null</span>;
  }
}
</code></pre>
<p>We can write our stack now:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Stack</span> </span>{
  <span class="hljs-keyword">constructor</span>() {
    <span class="hljs-built_in">this</span>.top = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.length = <span class="hljs-number">0</span>;
  }

  push(item) {
    <span class="hljs-keyword">const</span> node = <span class="hljs-keyword">new</span> Node(item);
    node.next = <span class="hljs-built_in">this</span>.top;
    <span class="hljs-built_in">this</span>.top = node;
    <span class="hljs-built_in">this</span>.length++;
  }

  pop() {
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.isEmpty()) { <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>; }

    <span class="hljs-keyword">const</span> data = <span class="hljs-built_in">this</span>.top.data;
    <span class="hljs-built_in">this</span>.top = <span class="hljs-built_in">this</span>.top.next;
    <span class="hljs-built_in">this</span>.length--;

    <span class="hljs-keyword">return</span> data;
  }

  peek() {
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.isEmpty()) { <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>; }

    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.top.data;
  }

  isEmpty() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.size() === <span class="hljs-number">0</span>;
  }

  size() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.length;
  }
}
</code></pre>
<p>Now, let’s use it:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> myStack = <span class="hljs-keyword">new</span> Stack();

myStack.push(<span class="hljs-number">5</span>);
myStack.push(<span class="hljs-number">17</span>);
myStack.push(<span class="hljs-number">55345</span>);
myStack.push(<span class="hljs-number">0</span>);
myStack.push(<span class="hljs-number">103</span>)

<span class="hljs-built_in">console</span>.log(myStack.size()) <span class="hljs-comment">// 5</span>
<span class="hljs-built_in">console</span>.log(myStack.peek()) <span class="hljs-comment">// 103</span>

myStack.pop()

<span class="hljs-built_in">console</span>.log(myStack.size()) <span class="hljs-comment">// 4</span>
<span class="hljs-built_in">console</span>.log(myStack.peek()) <span class="hljs-comment">// 0</span>
</code></pre>
<h4 id="heading-time-and-space-complexity-4">Time and space complexity</h4>
<p>Each method we defined for our stack has \(O(1)\) time complexity, and it would be the same if we were to use an array as well. However, as mentioned above, arrays have limitations in that having to allocate a predefined stack size can lead to a stack overflow. And if we were to use a dynamic array, the whole array might need to be copied to go into another memory location after a certain size is reached, leading to \(O(n)\) time. So, linked lists are ideal to implement a stack data type.</p>
<p>If the space complexity is linear – \(O(n)\)– the stack will grow linearly with the number of items in it.</p>
<h2 id="heading-chapter-five-binary-search">Chapter Five: Binary Search</h2>
<p>Binary search is one of the most well-known algorithms. It's also a <a target="_blank" href="https://brilliant.org/wiki/divide-and-conquer/">divide-and-conquer algorithm</a>, where we break the problem into smaller components.</p>
<p>The crux of binary search is to find a target element in a given sorted array. We have two pointers: <code>high</code> to point to the largest element, and <code>low</code> to point to the smallest element. We first initialize them for the whole array itself, with <code>high</code> being the last index and <code>low</code> being the first index.</p>
<p>Then, we calculate the midpoint. If the target is greater than the midpoint, then we adjust our <code>low</code> pointer to point to the <code>mid + 1</code>, otherwise if the target is less than the midpoint, we adjust <code>high</code> to be <code>mid - 1</code>. With each iteration, we eliminate half the array until the midpoint equals the target or the <code>low</code> pointer passes <code>high</code>.</p>
<p>If we find the index of the target, we can return it as soon as we find it. Otherwise, we can just return <code>-1</code> to indicate that the target doesn't exist in the array.</p>
<p>For example, if we have a <code>nums</code> array <code>[-1, 0, 3, 5, 9, 12]</code> and our <code>target</code> is <code>9</code>, the operation looks like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747915126875/c27134cb-ae7c-4f09-88d8-13fc64900319.gif" alt="Animated visualization of binary search, array [-1, 0, 3, 5, 9. 12] with target = 9, the result being the index 4." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>We can write it in TypeScript like this:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">search</span>(<span class="hljs-params">nums: <span class="hljs-built_in">number</span>[], target: <span class="hljs-built_in">number</span></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">let</span> high = nums.length - <span class="hljs-number">1</span>;
  <span class="hljs-keyword">let</span> low = <span class="hljs-number">0</span>;

  <span class="hljs-keyword">while</span> (high &gt;= low) {
    <span class="hljs-keyword">let</span> mid = <span class="hljs-built_in">Math</span>.floor((high + low) / <span class="hljs-number">2</span>);

    <span class="hljs-keyword">if</span> (target &gt; nums[mid]) {
      low = mid + <span class="hljs-number">1</span>;
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (target &lt; nums[mid]) {
      high = mid - <span class="hljs-number">1</span>;
    } <span class="hljs-keyword">else</span> {
      <span class="hljs-keyword">return</span> mid;
    }
  }

  <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
}
</code></pre>
<h4 id="heading-time-and-space-complexity-5">Time and space complexity</h4>
<p>The time complexity of a binary search algorithm is \(O(log \ n)\) in the worst case. (For example, if the target is not in the array, we'll be halving the array until there is one element left.) The space complexity is \(O(1)\) as we don't need extra space.</p>
<h2 id="heading-chapter-six-linked-lists">Chapter Six: Linked Lists</h2>
<p>A linked list is a linear data structure that you're likely to be familiar with. It is also a data structure that can grow and shrink dynamically – so unlike arrays, there's no need to allocate memory beforehand.</p>
<p>An important part of a linked list is the <strong>head pointer</strong> that points to the beginning of the list. There may or may not be a <strong>tail pointer</strong> that also points to the end of the list.</p>
<p>The core ingredient of a linked list is a simple node, which consists of two parts: data and the next pointer. So, it is an important idea to remember: <em>a node only knows about its data and its neighbor.</em></p>
<p>The very last node in the linked list points to <code>null</code> to indicate it's the end of the list.</p>
<p>But there are different types of linked lists that differ from each other slightly, so let's briefly take a look at them.</p>
<h3 id="heading-singly-linked-lists">Singly linked lists</h3>
<p>The core idea with singly linked lists is that each node, along with the data it has, has a pointer that points <em>only</em> to the next node:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> </span>{
  <span class="hljs-keyword">constructor</span>(data) {
    <span class="hljs-built_in">this</span>.data = data;
    <span class="hljs-built_in">this</span>.next = <span class="hljs-literal">null</span>;
  }
}
</code></pre>
<p>And here is an example where we have three nodes, holding the values <code>1</code>, <code>2</code>, and <code>3</code> consecutively:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747915365474/8604a69f-f24f-4dc5-b4a0-2eba452a4305.gif" alt="Animated visualization of a singly linked list, with nodes having 1, 2, and 3 as values." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Here is a simple implementation of a singly linked list in JavaScript:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SinglyLinkedList</span> </span>{
  <span class="hljs-keyword">constructor</span>() {
    <span class="hljs-built_in">this</span>.head = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.length = <span class="hljs-number">0</span>;
  }

  <span class="hljs-comment">// Add value to the end of the list</span>
  append(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    <span class="hljs-comment">// If the list is empty</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
      <span class="hljs-built_in">this</span>.head = node;
      <span class="hljs-built_in">this</span>.tail = <span class="hljs-built_in">this</span>.head;
    } <span class="hljs-keyword">else</span> {
      <span class="hljs-built_in">this</span>.tail.next = node;
      <span class="hljs-built_in">this</span>.tail = node;
    }

    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }

  <span class="hljs-comment">// Add value to the beginning of the list</span>
  prepend(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    <span class="hljs-comment">// If the list is empty</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
      <span class="hljs-built_in">this</span>.head = node;
      <span class="hljs-built_in">this</span>.tail = <span class="hljs-built_in">this</span>.head;
    } <span class="hljs-keyword">else</span> {
      node.next = <span class="hljs-built_in">this</span>.head;
      <span class="hljs-built_in">this</span>.head = node;
    }

    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }

  remove(value) {
    <span class="hljs-comment">// If the list is empty, return null</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) { 
      <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>; 
    }

    <span class="hljs-comment">// If it is the first element</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head.data === value) {
      <span class="hljs-built_in">this</span>.head = <span class="hljs-built_in">this</span>.head.next;
      <span class="hljs-built_in">this</span>.length--;
      <span class="hljs-comment">// If it is the only element </span>
      <span class="hljs-comment">// (we don't have anything after removing it)</span>
      <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
        <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
      } 
      <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;

    <span class="hljs-keyword">while</span> (currentNode.next) {
      <span class="hljs-keyword">if</span> (currentNode.next.data === value) {
        currentNode.next = currentNode.next.next;
        <span class="hljs-comment">// If it is the last element, update tail</span>
        <span class="hljs-keyword">if</span> (currentNode.next === <span class="hljs-literal">null</span>) {
          <span class="hljs-built_in">this</span>.tail = currentNode;
        } 
        <span class="hljs-built_in">this</span>.length--;
        <span class="hljs-keyword">return</span>;
      }
      currentNode = currentNode.next;
    }
  }

  search(value) {
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;

    <span class="hljs-keyword">while</span> (currentNode) {
      <span class="hljs-keyword">if</span> (currentNode.data === value) {
        <span class="hljs-keyword">return</span> currentNode;
      }
      currentNode = currentNode.next;
    }

    <span class="hljs-comment">// If the value does not exist, return null</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
  }

  printList() {
    <span class="hljs-keyword">let</span> values = [];
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;
    <span class="hljs-keyword">while</span> (currentNode) {
      values.push(currentNode.data);
      currentNode = currentNode.next;
    }

    <span class="hljs-built_in">console</span>.log(values);
  }
}
</code></pre>
<p><strong>Note:</strong> We'll keep a tail pointer in all these examples for convenience. It <a target="_blank" href="https://softwareengineering.stackexchange.com/a/301863">doesn't hurt</a> to have a tail pointer.</p>
<p>We can now use it:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> mySinglyLinkedList = <span class="hljs-keyword">new</span> SinglyLinkedList();

mySinglyLinkedList.prepend(<span class="hljs-number">3</span>);
mySinglyLinkedList.prepend(<span class="hljs-number">143</span>);
mySinglyLinkedList.prepend(<span class="hljs-number">5</span>);

mySinglyLinkedList.printList(); <span class="hljs-comment">// [ 5, 143, 3 ]</span>

mySinglyLinkedList.append(<span class="hljs-number">21</span>);
mySinglyLinkedList.printList(); <span class="hljs-comment">// [ 5, 143, 3, 21 ]</span>

<span class="hljs-built_in">console</span>.log(mySinglyLinkedList.search(<span class="hljs-number">143</span>));
<span class="hljs-comment">// Node {</span>
<span class="hljs-comment">//   data: 143,</span>
<span class="hljs-comment">//   next: Node { data: 3, next: Node { data: 21, next: null } }</span>
<span class="hljs-comment">// }</span>

mySinglyLinkedList.remove(<span class="hljs-number">143</span>);
mySinglyLinkedList.printList(); <span class="hljs-comment">// [ 5, 3, 21 ]</span>

<span class="hljs-built_in">console</span>.log(mySinglyLinkedList.search(<span class="hljs-number">143</span>)); <span class="hljs-comment">// null</span>
</code></pre>
<h3 id="heading-doubly-linked-lists">Doubly linked lists</h3>
<p>Doubly linked lists differ from the "singly" ones in that each node also has another pointer that points to the previous element.</p>
<p>So, this time, a single node will look different:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> </span>{
  <span class="hljs-keyword">constructor</span>(data) {
    <span class="hljs-built_in">this</span>.data = data;
    <span class="hljs-built_in">this</span>.next = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.previous = <span class="hljs-literal">null</span>;
  }
}
</code></pre>
<p>Here is the same example as above, but as a doubly linked list:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747915463580/605d3541-a702-4bef-9777-28c47800b7aa.gif" alt="Animated visualization of a doubly linked list, with nodes having 1, 2 and 3 as values." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>A simple implementation might look like this:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DoublyLinkedList</span> </span>{
  <span class="hljs-keyword">constructor</span>() {
    <span class="hljs-built_in">this</span>.head = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.length = <span class="hljs-number">0</span>;
  }

  <span class="hljs-comment">// Add value to the end of the list</span>
  append(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    <span class="hljs-comment">// If the list is empty</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
      <span class="hljs-built_in">this</span>.head = node;
      <span class="hljs-built_in">this</span>.tail = <span class="hljs-built_in">this</span>.head;
    } <span class="hljs-keyword">else</span> {
      node.previous = <span class="hljs-built_in">this</span>.tail;
      <span class="hljs-built_in">this</span>.tail.next = node;
      <span class="hljs-built_in">this</span>.tail = node;
    }

    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }

  <span class="hljs-comment">// Add value to the beginning of the list</span>
  prepend(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    <span class="hljs-comment">// If the list is empty</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
      <span class="hljs-built_in">this</span>.head = node;
      <span class="hljs-built_in">this</span>.tail = <span class="hljs-built_in">this</span>.head;
    } <span class="hljs-keyword">else</span> {
      <span class="hljs-built_in">this</span>.head.previous = node;
      node.next = <span class="hljs-built_in">this</span>.head;
      <span class="hljs-built_in">this</span>.head = node;
    }

    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }

  remove(value) {
    <span class="hljs-comment">// If the list is empty, return null</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) { 
      <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
    }

    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;

    <span class="hljs-comment">// If it is the first element</span>
    <span class="hljs-keyword">if</span> (currentNode.data === value) {
      <span class="hljs-built_in">this</span>.head = currentNode.next;
      <span class="hljs-comment">// If the removed element is not the only one,</span>
      <span class="hljs-comment">// make the previous pointer of the new head null</span>
      <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head) {
        <span class="hljs-built_in">this</span>.head.previous = <span class="hljs-literal">null</span>;
      <span class="hljs-comment">// If the removed element was the only element,</span>
      <span class="hljs-comment">// point the tail to null as well</span>
      } <span class="hljs-keyword">else</span> {
        <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
      }
      <span class="hljs-built_in">this</span>.length--;
      <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-keyword">while</span> (currentNode) {
      <span class="hljs-keyword">if</span> (currentNode.data === value) {
        <span class="hljs-keyword">if</span> (currentNode.previous) {
          currentNode.previous.next = currentNode.next;
        }
        <span class="hljs-keyword">if</span> (currentNode.next) {
          currentNode.next.previous = currentNode.previous;
        <span class="hljs-comment">// If it's the last element in the list, update tail</span>
        <span class="hljs-comment">// to point to the previous node</span>
        } <span class="hljs-keyword">else</span> {
          <span class="hljs-built_in">this</span>.tail = currentNode.previous;
        }

        <span class="hljs-built_in">this</span>.length--;
        <span class="hljs-keyword">return</span>;
      }

      currentNode = currentNode.next;
    }
  }

  search(value) {
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;
    <span class="hljs-keyword">while</span> (currentNode) {
      <span class="hljs-keyword">if</span> (currentNode.data === value) {
        <span class="hljs-keyword">return</span> currentNode;
      }
      currentNode = currentNode.next;
    }

    <span class="hljs-comment">// If the value does not exist, return null</span>
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
  }

  printList() {
    <span class="hljs-keyword">let</span> values = [];
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;

    <span class="hljs-keyword">while</span> (currentNode) {
      values.push(currentNode.data);
      currentNode = currentNode.next;
    }

    <span class="hljs-built_in">console</span>.log(values);
  }
}
</code></pre>
<h3 id="heading-circular-linked-lists">Circular linked lists</h3>
<p>With circular linked lists, we have the last node also pointing to the first element, creating circularity.</p>
<p>We'll only look at the singly circular linked list for simplicity's sake, so our node will look the same as in the first example:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> </span>{
  <span class="hljs-keyword">constructor</span>(data) {
    <span class="hljs-built_in">this</span>.data = data;
    <span class="hljs-built_in">this</span>.next = <span class="hljs-literal">null</span>;
  }
}
</code></pre>
<p>The same example, in a circular linked list fashion:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747915538225/ea4341cb-2a39-4728-b833-362455a51cdd.gif" alt="Animated visualization of a circular linked list, nodes having 1, 2, and 3 as values." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Here is a simple implementation:</p>
<pre><code class="lang-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CircularLinkedList</span> </span>{
  <span class="hljs-keyword">constructor</span>() {
    <span class="hljs-built_in">this</span>.head = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
    <span class="hljs-built_in">this</span>.length = <span class="hljs-number">0</span>;
  }

  <span class="hljs-comment">// Add value to the "end" of the list</span>
  append(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    <span class="hljs-comment">// If the list is empty</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) {
      <span class="hljs-built_in">this</span>.head = node;
      <span class="hljs-built_in">this</span>.tail = node;
      <span class="hljs-comment">// As the only node in the list, it should point to itself</span>
      node.next = node;
    } <span class="hljs-keyword">else</span> {
      <span class="hljs-comment">// As the "last" node, it should point to the head (this.tail.next)</span>
      node.next = <span class="hljs-built_in">this</span>.tail.next;
      <span class="hljs-built_in">this</span>.tail.next = node;
      <span class="hljs-built_in">this</span>.tail = node;
    }

    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }

  <span class="hljs-comment">// Add value to the beginning of the list</span>
  prepend(value) {
    <span class="hljs-keyword">let</span> node = <span class="hljs-keyword">new</span> Node(value);
    node.next = <span class="hljs-built_in">this</span>.head;
    <span class="hljs-comment">// Update last node's next pointer to point to the new node</span>
    <span class="hljs-built_in">this</span>.tail.next = node;
    <span class="hljs-built_in">this</span>.head = node;
    <span class="hljs-built_in">this</span>.length++;
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>;
  }  

  remove(value) {
    <span class="hljs-comment">// If the list is empty, return null</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) { 
      <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>; 
    }

    <span class="hljs-comment">// If it is the first element</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head.data === value) {
      <span class="hljs-comment">// If it's the only element</span>
      <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head.next === <span class="hljs-built_in">this</span>.head) {
        <span class="hljs-built_in">this</span>.head = <span class="hljs-literal">null</span>;
        <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
        <span class="hljs-keyword">return</span>;
      }
      <span class="hljs-built_in">this</span>.head = <span class="hljs-built_in">this</span>.head.next;
      <span class="hljs-built_in">this</span>.tail.next = <span class="hljs-built_in">this</span>.head;
      <span class="hljs-built_in">this</span>.length--;
      <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;
    <span class="hljs-keyword">let</span> prevNode = <span class="hljs-literal">null</span>;

    <span class="hljs-comment">// Iterate until you find the value or</span>
    <span class="hljs-comment">// you don't find it after traversing the whole list</span>
    <span class="hljs-keyword">while</span> (currentNode.data !== value || prevNode === <span class="hljs-literal">null</span>) {
      <span class="hljs-keyword">if</span> (currentNode.next === <span class="hljs-built_in">this</span>.head) { 
        <span class="hljs-keyword">break</span>; 
      }
      prevNode = currentNode;
      currentNode = currentNode.next;
    }

    <span class="hljs-keyword">if</span> (currentNode.data === value) {
      <span class="hljs-comment">// If there is a previous node before the element to be removed,</span>
      <span class="hljs-comment">// update the previous node's next pointer to point to</span>
      <span class="hljs-comment">// the one after the element to be removed</span>
      <span class="hljs-comment">// (unlink it)</span>
      <span class="hljs-keyword">if</span> (prevNode) {
        prevNode.next = currentNode.next;
        <span class="hljs-comment">// If the element to be removed is the last one,</span>
        <span class="hljs-comment">// update tail to be the previous node</span>
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.tail === currentNode) {
          <span class="hljs-built_in">this</span>.tail = prevNode;
        }
      <span class="hljs-comment">// If the element to be removed is the first one in the list</span>
      } <span class="hljs-keyword">else</span> {
        <span class="hljs-comment">// If it's the only one in the list</span>
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head.next === <span class="hljs-built_in">this</span>.head) {
          <span class="hljs-built_in">this</span>.head = <span class="hljs-literal">null</span>;
          <span class="hljs-built_in">this</span>.tail = <span class="hljs-literal">null</span>;
        } <span class="hljs-keyword">else</span> {
          <span class="hljs-built_in">this</span>.head = <span class="hljs-built_in">this</span>.head.next;
          <span class="hljs-built_in">this</span>.tail.next = <span class="hljs-built_in">this</span>.head;
        }
      }
    }
  }

  printList() {
    <span class="hljs-keyword">let</span> nodes = [];
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.head;
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head === <span class="hljs-literal">null</span>) { 
      <span class="hljs-built_in">console</span>.log(nodes); 
      <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-comment">// Traverse the list once to add the values, </span>
    <span class="hljs-comment">// don't go in circles</span>
    <span class="hljs-keyword">do</span> {
      nodes.push(currentNode.data);
      currentNode = currentNode.next;
    } <span class="hljs-keyword">while</span> (currentNode !== <span class="hljs-built_in">this</span>.head);

    <span class="hljs-built_in">console</span>.log(nodes);
  }
}
</code></pre>
<h4 id="heading-time-and-space-complexity-6">Time and space complexity</h4>
<p>With linked lists, the time complexity for accessing an element is in the worst case \(O(n)\). <em>Prepending</em> and <em>appending</em> an element depends on whether we have a tail pointer. If we have it, then both operations are \(O(1)\), as we only need to arrange pointers. But if we don't have a tail pointer, <em>appending</em> an element requires traversing the whole list, so it is an \(O(n)\) operation. Removing an element is similar – in the worst case, it is \(O(n)\).</p>
<p>If the space complexity is linear – \(O(n)\)– then the amount of data to store grows linearly with the number of nodes in the list.</p>
<h2 id="heading-interlude-fast-amp-slow-pointers">Interlude: Fast &amp; Slow Pointers</h2>
<p>Let's take a quick look at a technique that comes in handy when it comes to working with linked lists.</p>
<p>We can keep two pointers while traversing a linked list: fast and slow. While the fast one increases by two steps, the slow pointer will increase by just one step.</p>
<h3 id="heading-finding-the-middle-node-of-a-linked-list">Finding the middle node of a linked list</h3>
<p>When the fast pointer reaches the end of the list, the slow pointer will be at the "middle" node.</p>
<p>Let's see how it might work:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> slow = head;
<span class="hljs-keyword">let</span> fast = head;

<span class="hljs-keyword">while</span> (fast !== <span class="hljs-literal">null</span> &amp;&amp; fast.next !== <span class="hljs-literal">null</span>) {
  slow = slow.next;
  fast = fast.next.next;
}
</code></pre>
<p>We can think of a list like <code>[1, 2, 3, 4, 5]</code> (where each value is a node in the linked list).</p>
<p>Both <code>fast</code> and <code>slow</code> start pointing to the head, that is, <code>1</code>.</p>
<p>Then, we update the slow pointer one step, which will be <code>2</code>. And, <code>fast</code> will be at <code>3</code>.</p>
<p>When we update <code>slow</code> again, it will be at <code>3</code>. When the fast pointer increases, it will be two steps ahead, and its <code>next</code> pointer will point to the <code>null</code> value, at which point our loop will stop iterating.</p>
<p><code>slow</code> will end up pointing to the node with the value <code>3</code>, which is the middle node.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747915833404/d3c562e8-36e3-459f-a29c-860e0d4869f0.gif" alt="Animated visualization of fast and slow pointers technique on a linked list of 5 nodes." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>With an even number of nodes, there are two candidates for the middle node. For example, with a list like <code>[1, 2, 3, 4]</code>, our current implementation will find the middle as <code>3</code>. This technique is also useful to detect cycles in a linked list.</p>
<h2 id="heading-chapter-seven-trees">Chapter Seven: Trees</h2>
<p>Let’s take a look at a non-linear data structure that is pretty familiar to many developers: trees.</p>
<p>Whether familiarity breeds contempt or not is arguable, so let's start with the simplest component of a tree: a node.</p>
<p>Trees, like linked lists, are made up of nodes. The simplest version of a tree is just the <strong>root node</strong> which doesn't have any edges (links) pointing to it; that is, it has no <strong>parent nodes</strong>. It is the starting point, in a way.</p>
<p>A tree can only have one root node, and when you think about it, <em>if there are</em> \(n\) <em>nodes in a tree, that means there are</em> \(n - 1\) <em>edges (links)</em> because there is no edge (link) pointing to the root node.</p>
<p>If you've looked at a tree long enough, you might've had a moment of epiphany: a tree has smaller trees within itself. A branch may as well be a trunk, having other branches for the little tree it constitutes.</p>
<p>The tree data structure is like this, it is recursive: <em>a child node can be the root of a subtree</em>.</p>
<p>Two terms that are important when it comes to a tree node are <strong>depth</strong> and <strong>height</strong>.</p>
<p>The <strong>depth</strong> of a node is how far away it is from the root node (how many edges (links) does it take to travel from the root node to it), and the <strong>height</strong> of a node is how far away it is from its furthest <strong>leaf node</strong> (which is a node that has no children).</p>
<p><strong>Note:</strong> The height of the root node is the same as the height of the whole tree.</p>
<p>A <strong>balanced tree</strong> is one where <em>the heights of the left and right subtrees of every node differ by at most 1</em>.</p>
<h3 id="heading-binary-trees-binary-search-trees-bsts">Binary trees, binary search trees (BSTs)</h3>
<p>A <strong>binary tree</strong> is a tree where each node has at most two children. That is, a node can have a left child node and a right child node, and no more.</p>
<p>The maximum number of nodes in a binary tree is \(2^h - 1\) where \(h\) is the height of the tree. This is where the <em>binary</em> of the binary tree makes sense: on each level, the number of nodes grows proportionately to the exponents of \(2\).</p>
<p>For example, the number of nodes on the first level (the 0th level) is \(2^0 = 1\), which is just the root node. The second level has at most 2 nodes: \(2^1 = 2\) (remember that we're counting from \(0\), so the second level is \(1\)).</p>
<p>A <strong>binary search tree</strong> is a binary tree where the values smaller than the node go to its left and those greater than it go to its right:</p>
<p>$$\text{left children } \lt \text{ node } \lt \text{ right children}$$</p><p>Here is an example:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747916761231/c0b5301c-6832-43a9-8abd-30f578ac2a29.gif" alt="Animated visualization of a binary search tree with 8 as the root node, 3 as its left child, 10 as its right child. 3 has 1 as it left child, 6 as its right child. 6 has 4 as its left child, 7 as its right child. 10 has 14 as its right child. 14 has 13 as its left child. " class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>We can define a tree node like this:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> TreeNode {
  val: <span class="hljs-built_in">number</span>;
  left: TreeNode | <span class="hljs-literal">null</span>;
  right: TreeNode | <span class="hljs-literal">null</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">val: <span class="hljs-built_in">number</span>, left?: TreeNode | <span class="hljs-literal">null</span>, right?: TreeNode | <span class="hljs-literal">null</span></span>) {
    <span class="hljs-built_in">this</span>.val = val;
    <span class="hljs-built_in">this</span>.left = (left === <span class="hljs-literal">undefined</span> ? <span class="hljs-literal">null</span> : left);
    <span class="hljs-built_in">this</span>.right = (right === <span class="hljs-literal">undefined</span> ? <span class="hljs-literal">null</span> : right);
  }
}
</code></pre>
<h4 id="heading-inserting-into-a-binary-search-tree">Inserting into a binary search tree</h4>
<p>If we want to insert a new node into a binary search tree, we need to insert it into its proper place to keep the properties of a BST intact.</p>
<h5 id="heading-recursive-solution">Recursive solution:</h5>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">insertIntoBST</span>(<span class="hljs-params">root: TreeNode | <span class="hljs-literal">null</span>, val: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">if</span> (root === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> TreeNode(val);
  }

  <span class="hljs-keyword">if</span> (val &lt; root.val) {
    root.left = insertIntoBST(root.left, val);
  } <span class="hljs-keyword">else</span> {
    root.right = insertIntoBST(root.right, val);
  }

  <span class="hljs-keyword">return</span> root;
}
</code></pre>
<p>Here, we traverse the tree until we find a space (a <code>null</code> position) for our value that is waiting to be a <code>TreeNode</code>. We start with the root node. If the value of the node-to-be-inserted is less than the value of the root node, we go left (passing <code>root.left</code> as the <code>root</code> argument to the function). Otherwise, we go right (passing <code>root.right</code> as the <code>root</code> argument).</p>
<h4 id="heading-time-and-space-complexity-7">Time and space complexity</h4>
<p>The time complexity is \(O(h)\) where \(h\) is the height of the tree. On each level in the tree, we either go left or right, so we don't necessarily visit every single node. The space complexity is also \(O(h)\) because we use recursion, creating a new stack frame for each function call.</p>
<p><em>Note that if the tree is unbalanced, the time and space complexity can be said to be</em> \(O(n)\)<em>.</em></p>
<h5 id="heading-iterative-solution">Iterative solution:</h5>
<p>We can also do it iteratively, using pointers only:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">insertIntoBST</span>(<span class="hljs-params">root: TreeNode | <span class="hljs-literal">null</span>, val: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">if</span> (root === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> TreeNode(val);
  }

  <span class="hljs-keyword">let</span> prevNode: TreeNode | <span class="hljs-literal">null</span> = <span class="hljs-literal">null</span>;
  <span class="hljs-keyword">let</span> currentNode: TreeNode | <span class="hljs-literal">null</span> = root;

  <span class="hljs-keyword">while</span> (currentNode !== <span class="hljs-literal">null</span>) {
    prevNode = currentNode;
    <span class="hljs-keyword">if</span> (val &lt; currentNode.val) {
      currentNode = currentNode.left;
    } <span class="hljs-keyword">else</span> {
      currentNode = currentNode.right;
    }
  }

  <span class="hljs-keyword">if</span> (prevNode) {
    <span class="hljs-keyword">if</span> (val &lt; prevNode.val) {
      prevNode.left = <span class="hljs-keyword">new</span> TreeNode(val);
    } <span class="hljs-keyword">else</span> {
      prevNode.right = <span class="hljs-keyword">new</span> TreeNode(val);
    }
  }

  <span class="hljs-keyword">return</span> root;
}
</code></pre>
<p>Here, we do the same thing: iterating until we find the correct place, but also keeping track of the parent node. Then, we insert the node as either the left or the right child of the parent, depending on its value.</p>
<h4 id="heading-time-and-space-complexity-8">Time and space complexity</h4>
<p>The time complexity is again \(O(h)\) (<em>or if the tree is unbalanced,</em> \(O(n)\)) for the same reason as in the recursive solution. But the space complexity is constant – \(O(1)\) – as we only use pointers.</p>
<h4 id="heading-deleting-from-a-binary-search-tree">Deleting from a binary search tree</h4>
<p>The challenging thing when deleting a node from a BST is keeping the BST as a BST. All smaller values should still go to the root node's left subtree, and all those that are larger should go to the root node's right subtree.</p>
<p>Let's take a look at how we might do it in JavaScript:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deleteNode</span>(<span class="hljs-params">root: TreeNode | null, key: number</span>) </span>{
  <span class="hljs-keyword">if</span> (root === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span> root;
  }

  <span class="hljs-keyword">if</span> (key &lt; root.val) {
    root.left = deleteNode(root.left, key);
  } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (key &gt; root.val) {
    root.right = deleteNode(root.right, key);
  } <span class="hljs-keyword">else</span> {
    <span class="hljs-comment">// Node-to-be-deleted has no children</span>
    <span class="hljs-keyword">if</span> (root.left === <span class="hljs-literal">null</span> &amp;&amp; root.right === <span class="hljs-literal">null</span>) {
      <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
    } 

    <span class="hljs-comment">// If either the left or the right child exists,</span>
    <span class="hljs-comment">// return the one that exists as the new child </span>
    <span class="hljs-comment">// of the parent node (of the node-to-be-deleted)</span>
    <span class="hljs-keyword">if</span> (root.left === <span class="hljs-literal">null</span> || root.right === <span class="hljs-literal">null</span>) {
      <span class="hljs-keyword">return</span> root.left ? root.left : root.right;
    }

    <span class="hljs-comment">// If both children exist, traverse the left subtree, get its maximum value...</span>
    <span class="hljs-keyword">let</span> currentNode = root.left;

    <span class="hljs-keyword">while</span> (currentNode.right !== <span class="hljs-literal">null</span>) {
      currentNode = currentNode.right;
    }

    <span class="hljs-comment">// ...replace it with the node-to-be-deleted</span>
    root.val = currentNode.val;
    <span class="hljs-comment">// ...then apply the recursion to the left subtree to get rid of the duplicate value</span>
    root.left = deleteNode(root.left, root.val);
  }

  <span class="hljs-keyword">return</span> root;
}
</code></pre>
<p>We traverse the tree until we find the node to be deleted. Once we find it, there are several things to do.</p>
<p>In the case where it doesn't have any child nodes, we can return <code>null</code> and be done with it.</p>
<p>If it has one child node, we can return the one that exists using the ternary operation (<code>return root.left ? root.left : root.right</code>).</p>
<p><strong>Note:</strong> <em>In this case, we're essentially making the root of the subtree the child of the parent node.</em></p>
<p>For example, in the image, if the node-to-be-deleted is 10 (it has only right child node with the value 14), we make 14 the right child of 8. It doesn't break our BST, because those that are larger than 8 continue to be in the right subtree of 8:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747918477656/7a66ad05-3c93-4482-987e-399f65e9dc57.png" alt="A binary tree that has the value 8 as its root node. It has a left child with the value 3 and a right child with the value 10. The left child has a left child node that has the value 1 and a right child node that has the value 6, which has a left child node with the value 4 and a right child node with the value 7. The right child of the root node that has the value 10 has a right child node with value 14, which has a left child node that has the value 13." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Otherwise, if both the left and right children of the node-to-be-deleted exist, we need to do something different.</p>
<p>In this case, we'll replace the node-to-be-deleted with the largest value in the left subtree.</p>
<p>But, after replacing, we'll have two nodes of the same value in both places, so we need to apply <code>deleteNode</code> itself to the subtree that we've taken our replacement node from.</p>
<p>This is all done to keep the BST as BST. It might be a bit difficult to wrap your head around at first, but <a target="_blank" href="https://www.youtube.com/watch?v=LFzAoJJt92M">NeetCode has a detailed explanation of this problem</a>.</p>
<p><strong>Note</strong> that we can also use the smallest value in the right subtree as well. In that case, our code would look like this:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> currentNode = root.right;

<span class="hljs-keyword">while</span> (currentNode.left !== <span class="hljs-literal">null</span>) {
  currentNode = currentNode.left;
}

root.val = currentNode.val;
root.right = deleteNode(root.right, root.val);
</code></pre>
<h4 id="heading-time-and-space-complexity-9">Time and space complexity</h4>
<p>Similar to inserting into a BST, both the time and space complexity of deleting from a BST will be \(O(h)\) where \(h\) is the height of the tree.</p>
<h4 id="heading-traversals">Traversals</h4>
<p>We'll take a brief look at two of the most famous ways to traverse a tree where the order in which we visit the nodes matters: depth-first search and breadth-first search.</p>
<h5 id="heading-1-depth-first-search-dfs">1. Depth-First Search (DFS)</h5>
<p>In a depth-first search, we traverse through a branch until we get to a leaf node. Then, we backtrack and do the same thing with another branch.</p>
<p>There are three common ways to do a depth-first search:</p>
<ul>
<li><p>preorder traversal</p>
</li>
<li><p>inorder traversal</p>
</li>
<li><p>postorder traversal</p>
</li>
</ul>
<h6 id="heading-preorder-traversal">Preorder traversal:</h6>
<p>It goes like this: We first visit the node, then go on to its left subtree, then the right subtree.</p>
<p><strong>node ➞ left subtree ➞ right subtree</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747918872908/dedfc341-d32e-4558-abd6-00ff8d67b46f.gif" alt="Animated visualization of the same binary search tree displaying preorder traversal, with highlighted nodes in this order: 8, 3, 1, 6, 4, 7, 10, 14, 13." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>We can do a preorder walk recursively:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">preorderWalk</span>(<span class="hljs-params">node</span>) </span>{
  <span class="hljs-keyword">if</span> (node === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span>;
  }

  <span class="hljs-built_in">console</span>.log(node.val);
  preorderWalk(node.left);
  preorderWalk(node.right);
}
</code></pre>
<h6 id="heading-inorder-traversal">Inorder traversal:</h6>
<p>It goes like this: we first visit the left subtree, then the node, then the right subtree.</p>
<p><strong>left subtree ➞ node ➞ right subtree</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747918945108/a1ff3284-8aa0-4815-928c-99cdbd8ac956.gif" alt="Animated visualization of the same binary search tree displaying inorder traversal, with highlighted nodes in this order: 1, 3, 4, 6, 7, 8, 10, 13, 14." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Note:</strong> The inorder traversal gives us the sorted values.</p>
<p>We can do an inorder walk recursively as well:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">inorderWalk</span>(<span class="hljs-params">node</span>) </span>{
  <span class="hljs-keyword">if</span> (node === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span>;
  }

  inorderWalk(node.left);
  <span class="hljs-built_in">console</span>.log(node.val);
  inorderWalk(node.right);
}
</code></pre>
<h6 id="heading-postorder-traversal">Postorder traversal:</h6>
<p>It goes like this: we first visit the left subtree, then the right subtree, and finally the node.</p>
<p><strong>left subtree ➞ right subtree ➞ node</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919023258/e3c7f4a3-3ec8-47d3-aa49-e8f4b0f8d30a.gif" alt="Animated visualization of the same binary search tree displaying postorder traversal, with highlighted nodes in this order: 1, 4, 7, 6, 3, 13, 14, 10, 8." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>We can do a postorder walk recursively:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">postorderWalk</span>(<span class="hljs-params">node</span>) </span>{
  <span class="hljs-keyword">if</span> (node === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span>;
  }

  postorderWalk(node.left);
  postorderWalk(node.right);
  <span class="hljs-built_in">console</span>.log(node.val);
}
</code></pre>
<h5 id="heading-2-breadth-first-search-bfs">2. Breadth-First Search (BFS)</h5>
<p>In breadth-first search, we visit the nodes level by level, that is, visiting every child of a node first before moving on.</p>
<p>A queue is used when implementing a BFS. Since we don't have edges connecting all the children on one level together, it makes sense to keep them in a queue and visit each one when their time comes. When a node is added to the queue and has not been visited yet, it's called a <strong>discovered node</strong>.</p>
<p>A simple BFS operation looks like this (which is repeated until the queue is empty):</p>
<ul>
<li><p>visit node</p>
</li>
<li><p>enqueue left child</p>
</li>
<li><p>enqueue right child</p>
</li>
</ul>
<p>Note that the breadth-first search is also known as <em>level-order traversal</em>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919081789/17beb70f-7302-4f32-9a9a-72d69e190ac9.gif" alt="Animated visualization of the same binary search tree displaying level-order traversal, with highlighted nodes in this order: 8, 3, 10, 1, 6, 14, 4, 7, 13." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>A simple example of a level-order traversal in JavaScript might look like this:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">levelOrderWalk</span>(<span class="hljs-params">root</span>) </span>{
  <span class="hljs-keyword">if</span> (root === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span>;
  }

  <span class="hljs-keyword">let</span> queue = [];
  queue.push(root);

  <span class="hljs-keyword">while</span> (queue.length &gt; <span class="hljs-number">0</span>) {
    <span class="hljs-keyword">let</span> currentNode = queue[<span class="hljs-number">0</span>];

    <span class="hljs-built_in">console</span>.log(currentNode.val);

    <span class="hljs-keyword">if</span> (currentNode.left !== <span class="hljs-literal">null</span>) {
      queue.push(currentNode.left);
    }

    <span class="hljs-keyword">if</span> (currentNode.right !== <span class="hljs-literal">null</span>) {
      queue.push(currentNode.right);
    }

    <span class="hljs-comment">// Remove the current node</span>
    queue.shift();
  }
}
</code></pre>
<p>This example is based on Vaidehi Joshi's <a target="_blank" href="https://gist.github.com/vaidehijoshi/27f9fa6b6b68f70360019805b5ca3692#file-level_order_search-js">GitHub Gist</a>.</p>
<h2 id="heading-chapter-eight-heap-priority-queue">Chapter Eight: Heap / Priority Queue</h2>
<p>It’s now time to take a look at a data structure called a <em>heap</em>, which is a great way to implement an <a target="_blank" href="https://en.wikipedia.org/wiki/Abstract_data_type">abstract data type</a> called a <strong>priority queue</strong>. They're so interrelated that priority queues are sometimes referred to as heaps – because heaps are a very efficient way to create a priority queue.</p>
<h3 id="heading-heap-properties">Heap properties</h3>
<p>The kind of heap we're interested in is also called a <strong>binary heap</strong> because it's just a binary tree that has specific properties.</p>
<p>One of them is that it must be a <strong>complete binary tree</strong>, meaning that all the levels must be filled, and <em>all nodes in the last level should be as far left as possible</em>.</p>
<p>For example, when it comes to shape, this is a complete binary tree:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919274226/cdc2f987-3327-4220-8584-ad3999ea7f39.gif" alt="Animated visualization of a tree with root node having two children, both of its left and right children having two children their own. The left child of the left child has only a left child on its own." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>But heaps must also be either a <strong>max heap</strong> or a <strong>min heap</strong> – all the parent nodes must be either greater than or equal to the values of their children (if it's a max heap) or less than or equal to the values of their children (if it's a min heap).</p>
<p>A max heap might look like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919301787/6a3b30cd-a686-4112-80a9-0249c7597751.gif" alt="Animated visualization of a max heap, having 42 at the top, 19 at its left, 36 at its right. 19 has 17 at its left, 3 at its right. 36 has 25 at its left, 1 at its right. 17 has 2 at its left." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Note:</strong> A left child doesn't have to be less than the right child at all, as in a binary search tree. Also, we can always have duplicate values in a heap.</p>
<p>A min heap, on the other hand, has the values of parent nodes less than those of their children:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919335031/b5b82848-ac1f-405d-9124-725a9c26af55.gif" alt="Animated visualization of a min heap, having 1 at the top, 2 at its left, 3 at its right. 2 has 17 at its left, 19 at its right. 3 has 36 at its left, 7 at its right. 17 has 42 at its left." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Note:</strong> When we have a max heap, the root node will have the maximum value. And, if we have a min heap instead, the root node will have the minimum value.</p>
<h3 id="heading-heaps-with-arrays">Heaps with arrays</h3>
<p>We can create a heap using an array. Since the root node is the most interesting element with either a maximum or minimum value, it'll be the first element in our array, residing at the 0th index.</p>
<p>What's nice about using an array is that, given a parent node's index \(i\), its left child will be at the index \(2i + 1\), and its right child will be at the index \(2i + 2\).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919415922/b98a55a9-f9cc-4e11-8d53-f5a8a411d861.gif" alt="Animated visualization of the max heap above implemented as an array. A left child's index corresponds to 2i+1, a right child's index corresponds to 2i+2." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Given that, any child node's parent will be at the index \(\lfloor{\frac{(n - 1)}{2}}\rfloor\).</p>
<p><strong>Note:</strong> \(\lfloor\) and \(\rfloor\)indicate the <a target="_blank" href="https://en.wikipedia.org/wiki/Floor_and_ceiling_functions">floor function</a>.</p>
<p>One question we might ask at this moment is that why should we use an array at all?</p>
<p>The answer lies in the word <strong>queue</strong> of a <strong>priority queue</strong>. Since a queue is mainly concerned with the first element (following the <a target="_blank" href="https://en.wikipedia.org/wiki/FIFO_\(computing_and_electronics\)">FIFO principle</a>), an array can be an ideal choice. In a priority queue, each element has a priority, and the value with the highest priority is dequeued first.</p>
<h3 id="heading-insertingremoving-elements">Inserting/removing elements</h3>
<p>Let's take a look at how we can add an element to a heap.</p>
<p>We know that we have to add the new element to the bottom leftmost place, but once we do that, it might violate the max heap or the min heap property. Then, how can we avoid violating the <strong>heap-order property</strong>?</p>
<p>We'll <strong>heapify</strong>, of course!</p>
<p>Let's say that we want to add a node with the value <code>20</code>:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919523941/eb0959dd-fcf8-4fb7-9ebf-938fde24ba10.gif" alt="Animated visualization of the max heap above. A new item 20 is first inserted at the leftest possible place. Then it swaps places with 17 and then 19, coming to the left of 42." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>So, heapify is the swapping of nodes until we know that the heap-order property is maintained.</p>
<p>A similar thing happens when we need to remove an element. But since we're mainly concerned with the maximum or the minimum element, we just need to remove the root node. So, how are we going to do that?</p>
<p>We start off by swapping the last element (the bottom leftmost one) with the root. Now we can easily remove the "root," which resides as a leaf node. But we still need to maintain the heap-order property, so we need to <strong>heapify</strong> again.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747919564248/0e7b9a38-6b23-4448-a804-cf095d16f30e.gif" alt="Animated visualization of the max heap above. 2 swapping places with 42, 42 being disappeared. 2 later swaps places with 36 and 25, now 36 coming to the top." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h3 id="heading-heapsort">Heapsort</h3>
<p>Even better thing is that if we have a heap, and continually heapify it, we can sort an array.</p>
<p>Let's build a max heap first:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buildMaxHeap</span>(<span class="hljs-params">arr: <span class="hljs-built_in">number</span>[]</span>) </span>{
  <span class="hljs-comment">/*
  Index of the last internal node 
  (i.e., the parent of the last leaf node, 
   or, the last non-leaf node).
  The last leaf node will reside at index arr.length - 1,
  so, we're getting its parent using the formula mentioned above.
  */</span>
  <span class="hljs-keyword">let</span> i = <span class="hljs-built_in">Math</span>.floor((arr.length - <span class="hljs-number">1</span>) / <span class="hljs-number">2</span>);

  <span class="hljs-keyword">while</span> (i &gt;= <span class="hljs-number">0</span>) {
    heapify(arr, i, arr.length);
    i--;
  }

  <span class="hljs-keyword">return</span> arr;
}
</code></pre>
<p>Then, the <code>heapify</code> function:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">heapify</span>(<span class="hljs-params">arr: <span class="hljs-built_in">number</span>[], i: <span class="hljs-built_in">number</span>, maxLength: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">while</span> (i &lt; maxLength) {
    <span class="hljs-keyword">let</span> index = i;
    <span class="hljs-keyword">let</span> leftChildIdx = <span class="hljs-number">2</span> * i + <span class="hljs-number">1</span>;
    <span class="hljs-keyword">let</span> rightChildIdx = leftChildIdx + <span class="hljs-number">1</span>;

    <span class="hljs-keyword">if</span> (leftChildIdx &lt; maxLength &amp;&amp; arr[leftChildIdx] &gt; arr[index]) {
      index = leftChildIdx;
    }

    <span class="hljs-keyword">if</span> (rightChildIdx &lt; maxLength &amp;&amp; arr[rightChildIdx] &gt; arr[index]) {
      index = rightChildIdx;
    }

    <span class="hljs-keyword">if</span> (index === i) { <span class="hljs-keyword">return</span>; }

    <span class="hljs-comment">// Swap</span>
    [arr[i], arr[index]] = [arr[index], arr[i]];

    i = index;
  }
}
</code></pre>
<p>With a given index <code>i</code>, we get its left and right children indices, and if the indices are within bounds, we check if they are out of order. In that case, we make the <code>index</code> the index of the child, and swap the two nodes. Then, we continue with that new index, assigning it to <code>i</code>.</p>
<p>Now, <code>heapify</code> is nice and all, but how can we actually use it for sorting?</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">heapSort</span>(<span class="hljs-params">arr: <span class="hljs-built_in">number</span>[]</span>) </span>{
  buildMaxHeap(arr);

  <span class="hljs-keyword">let</span> lastElementIdx = arr.length - <span class="hljs-number">1</span>;

  <span class="hljs-keyword">while</span> (lastElementIdx &gt; <span class="hljs-number">0</span>) {
    [arr[<span class="hljs-number">0</span>], arr[lastElementIdx]] = [arr[lastElementIdx], arr[<span class="hljs-number">0</span>]];

    heapify(arr, <span class="hljs-number">0</span>, lastElementIdx);
    lastElementIdx--;
  }

  <span class="hljs-keyword">return</span> arr;
}
</code></pre>
<p><strong>Note</strong> that our max heap <code>[42, 19, 36, 17, 3, 25, 1, 2]</code> won't change when used in the <code>buildMaxHeap</code> function, as it's already a max heap! But if it were to have <code>17</code> as the right child of <code>42</code>, then <code>17</code> would have <code>25</code> as a child, which breaks the heap-order property. So, using <code>buildMaxHeap</code> with this broken version will correctly swap the <code>17</code> and <code>25</code>, making it a max heap:</p>
<pre><code class="lang-typescript">buildMaxHeap([<span class="hljs-number">42</span>, <span class="hljs-number">36</span>, <span class="hljs-number">17</span>, <span class="hljs-number">19</span>, <span class="hljs-number">3</span>, <span class="hljs-number">25</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>]);

<span class="hljs-comment">// -&gt; [42, 36, 25, 19, 3, 17, 1, 2]</span>
</code></pre>
<p>In <code>heapSort</code>, with our newly built max heap, we'll start with swapping the first and last nodes. Then, we'll keep heapifying until we get all the elements in their place. If we use it with our very own max heap, we can see that it returns the sorted array:</p>
<pre><code class="lang-typescript">heapSort([<span class="hljs-number">42</span>, <span class="hljs-number">19</span>, <span class="hljs-number">36</span>, <span class="hljs-number">17</span>, <span class="hljs-number">3</span>, <span class="hljs-number">25</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>]);
<span class="hljs-comment">// -&gt; [1, 2, 3, 17, 19, 25, 36, 42]</span>
</code></pre>
<p>The examples are adapted from <a target="_blank" href="https://medium.com/basecs/heapify-all-the-things-with-heap-sort-55ee1c93af82">Vaidehi Joshi's article</a>.</p>
<h4 id="heading-time-and-space-complexity-10">Time and space complexity</h4>
<p>Heap sort, as a nice sorting algorithm it is, runs in \(O(n \ log \ n)\) time.</p>
<p>In this example, building the max heap starts from the last non-leaf node and goes up to the root node, each time calling <code>heapify</code>. The <code>heapify</code> function has a time complexity of \(O(log \ n)\) as we're working with a binary tree, and in the worst case, we get to do it for all the levels. Since we do it \(n / 2\) times, overall, <code>buildMaxHeap</code> has \(O(n \ log \ n)\) time complexity.</p>
<p>We're swapping the first and last elements, and heapifying as we go through each element, so this is also overall an \(O(n \ log \ n)\) operation — which makes the time complexity of <code>heapSort</code> \(O(n \ log \ n)\)<em>.</em></p>
<p><strong>Note:</strong> Building the max heap <a target="_blank" href="https://stackoverflow.com/questions/9755721/how-can-building-a-heap-be-on-time-complexity">can be improved to have</a> \(O(n)\) <a target="_blank" href="https://stackoverflow.com/questions/9755721/how-can-building-a-heap-be-on-time-complexity">runtime</a>.</p>
<p>Since there is no use of auxiliary space, the space complexity is constant, \(O(1)\).</p>
<h2 id="heading-chapter-nine-backtracking">Chapter Nine: Backtracking</h2>
<p>Let's start with admitting this one fact: backtracking is hard. Or rather, <em>understanding it the first time</em> is hard. Or, it's one of those concepts that you think you grasped it, only to realize later that you actually didn't.</p>
<p>We'll focus on one problem of finding the subsets of an array, but before that, let's imagine that we're walking along a path.</p>
<p>Then, we reach a fork. We pick one of the paths, and walk.</p>
<p>Then, we reach another fork in the path. We pick one of the paths again, and go on walking, then we reach a dead end. So, we <em>backtrack</em> to the last point we had a fork, then go through the other path that we didn't choose the first time.</p>
<p>Then we reach another dead end. So, we <em>backtrack</em> once more and realize that there are no other paths we can go from there. So we <em>backtrack</em> again, and explore the other path we didn't choose the first time we came to this point.</p>
<p>We reach yet another dead end, so we <em>backtrack</em>. We see that there are no more paths to explore, so we <em>backtrack</em> once more.</p>
<p>Now, we're at our starting point. There are no more paths left to explore, so we can stop walking.</p>
<p>It was a nice but tiring walk, and it went like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747920157477/3151155c-d40c-408d-bff6-5d326ad0a0f3.gif" alt="Animated visualization of the concept of backtracking." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Now, let's take a look at a LeetCode problem.</p>
<h3 id="heading-subsets">Subsets</h3>
<p>The description for <a target="_blank" href="https://leetcode.com/problems/subsets">Subsets</a> says:</p>
<blockquote>
<p>Given an integer array <code>nums</code> of <strong>unique</strong> elements, return <em>all possible subsets (the power set)</em>.</p>
<p>The solution set <strong>must not</strong> contain duplicate subsets. Return the solution in <strong>any order</strong>.</p>
</blockquote>
<p>For example:</p>
<pre><code class="lang-plaintext">Input: nums = [1, 2, 3]
Output: [[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]
</code></pre>
<p>Or:</p>
<pre><code class="lang-plaintext">Input: nums = [0]
Output: [[], [0]]
</code></pre>
<p>Before diving into the solution code, let's take a look at how backtracking will work in this case. Let's call the <code>nums</code> array <code>items</code> instead:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747920218696/a85bf516-9bc1-4231-ab39-4a31ce1a8e6d.gif" alt="Animated visualization of backtracking for an array [1, 2, 3], exploring each possible choice." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>For each item in <code>items</code>, we have initially two choices: to include the item, or not to include it.</p>
<p>For each level \(n\) in this <em>decision tree</em>, we have the option to include the next item in <code>items</code>. We have \(2^n\) possible subsets in total.</p>
<p>Let's simplify the example a bit, and say that <code>items</code> is now <code>['a', 'b']</code> (<strong>We'll ignore the problem specifics for now</strong>).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747920275978/ab435765-7b05-4939-bd72-55dcfae7a6d4.gif" alt="Animated visualization of backtracking for an array ['a', 'b'], exploring each possible choice." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>In this case, we can use backtracking like this:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">subsets</span>(<span class="hljs-params">items: <span class="hljs-built_in">string</span>[]</span>) </span>{
  <span class="hljs-keyword">let</span> result: <span class="hljs-built_in">string</span>[][] = [];
  <span class="hljs-keyword">let</span> currentSubset: <span class="hljs-built_in">string</span>[] = [];

  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">backtrack</span>(<span class="hljs-params">idx: <span class="hljs-built_in">number</span></span>) </span>{
    <span class="hljs-keyword">if</span> (idx &gt;= items.length) {
      result.push([...currentSubset]);
      <span class="hljs-keyword">return</span>;
    }

    currentSubset.push(items[idx]);
    backtrack(idx + <span class="hljs-number">1</span>);

    currentSubset.pop();
    backtrack(idx + <span class="hljs-number">1</span>);
  }

  backtrack(<span class="hljs-number">0</span>);

  <span class="hljs-keyword">return</span> result;
}

<span class="hljs-built_in">console</span>.log(subsets([<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>]));
<span class="hljs-comment">// -&gt; [['a', 'b'], ['a'], ['b'], []]</span>
</code></pre>
<p>Well, it looks simple at first glance, but what's going on?</p>
<p>One thing to notice is that we <code>pop</code> from the <code>currentSubset</code>, then call <code>backtrack</code>. In our example of walking, that's the part we go back to our previous point, and continue our walk.</p>
<p>In the first animation, we indicated a dead end with a cross mark, and in this case, a dead end is the <strong>base case</strong> we reach.</p>
<p>It might still be tough to understand, so let's add some helpful <code>console.log</code>s, and see the output:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">subsets</span>(<span class="hljs-params">items: <span class="hljs-built_in">string</span>[]</span>) </span>{
  <span class="hljs-keyword">let</span> result: <span class="hljs-built_in">string</span>[][] = [];
  <span class="hljs-keyword">let</span> currentSubset: <span class="hljs-built_in">string</span>[] = [];

  <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">backtrack</span>(<span class="hljs-params">idx: <span class="hljs-built_in">number</span></span>) </span>{
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`======= this is backtrack(<span class="hljs-subst">${<span class="hljs-built_in">arguments</span>[<span class="hljs-number">0</span>]}</span>) =======`</span>)
    <span class="hljs-keyword">if</span> (idx &gt;= items.length) {
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`idx is <span class="hljs-subst">${idx}</span>, currentSubset is [<span class="hljs-subst">${currentSubset}</span>], adding it to result...`</span>);
      result.push([...currentSubset]);
      <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`backtrack(<span class="hljs-subst">${<span class="hljs-built_in">arguments</span>[<span class="hljs-number">0</span>]}</span>) is returning...\n`</span>)
      <span class="hljs-keyword">return</span>;
    }

    currentSubset.push(items[idx]);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`added <span class="hljs-subst">${items[idx]}</span> to currentSubset, inside backtrack(<span class="hljs-subst">${<span class="hljs-built_in">arguments</span>[<span class="hljs-number">0</span>]}</span>)`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`calling backtrack(<span class="hljs-subst">${idx + <span class="hljs-number">1</span>}</span>)...`</span>)
    backtrack(idx + <span class="hljs-number">1</span>);

    <span class="hljs-keyword">let</span> item = currentSubset.pop();
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`popped <span class="hljs-subst">${item}</span> from currentSubset, inside backtrack(<span class="hljs-subst">${<span class="hljs-built_in">arguments</span>[<span class="hljs-number">0</span>]}</span>)`</span>);
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`calling backtrack(<span class="hljs-subst">${idx + <span class="hljs-number">1</span>}</span>)...`</span>)
    backtrack(idx + <span class="hljs-number">1</span>);

    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`******* done with backtrack(<span class="hljs-subst">${<span class="hljs-built_in">arguments</span>[<span class="hljs-number">0</span>]}</span>) *******\n`</span>);
  }

  backtrack(<span class="hljs-number">0</span>);

  <span class="hljs-keyword">return</span> result;
}

<span class="hljs-built_in">console</span>.log(subsets([<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>]));
</code></pre>
<p>The output looks like this:</p>
<pre><code class="lang-plaintext">======= this is backtrack(0) =======
added a to currentSubset, inside backtrack(0)
calling backtrack(1)...
======= this is backtrack(1) =======
added b to currentSubset, inside backtrack(1)
calling backtrack(2)...
======= this is backtrack(2) =======
idx is 2, currentSubset is [a,b], adding it to result...
backtrack(2) is returning...

popped b from currentSubset, inside backtrack(1)
calling backtrack(2)...
======= this is backtrack(2) =======
idx is 2, currentSubset is [a], adding it to result...
backtrack(2) is returning...

******* done with backtrack(1) *******

popped a from currentSubset, inside backtrack(0)
calling backtrack(1)...
======= this is backtrack(1) =======
added b to currentSubset, inside backtrack(1)
calling backtrack(2)...
======= this is backtrack(2) =======
idx is 2, currentSubset is [b], adding it to result...
backtrack(2) is returning...

popped b from currentSubset, inside backtrack(1)
calling backtrack(2)...
======= this is backtrack(2) =======
idx is 2, currentSubset is [], adding it to result...
backtrack(2) is returning...

******* done with backtrack(1) *******

******* done with backtrack(0) *******

[ [ 'a', 'b' ], [ 'a' ], [ 'b' ], [] ]
</code></pre>
<p>If you noticed, <em>Add</em> <code>'a'</code>? and <em>Go ahead?</em> arrows on the first level are calls to <code>backtrack(0)</code>.</p>
<p><em>Add</em> <code>'b'</code>? and <em>Go ahead?</em> arrows on the second level are calls to <code>backtrack(1)</code>.</p>
<p><code>backtrack(2)</code> calls are when we reach the "dead ends". In those cases, we add <code>currentSubset</code> to the <code>result</code>. We always reach the base case in a <code>backtrack(2)</code> call because it's only when the <code>idx</code> equals <code>items.length</code>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747920409397/0c18c7a6-1776-415b-8918-a6cafe6ba70c.gif" alt="Animated visualization of backtrack function for the array ['a', 'b']." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p><strong>Note:</strong> We modified the function in the above examples to work with strings, but in the actual solution we'll only deal with numbers, so in TypeScript, <code>result</code> and <code>currentSubset</code> will look like this:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">let</span> result: <span class="hljs-built_in">number</span>[][] = [];
<span class="hljs-keyword">let</span> currentSubset: <span class="hljs-built_in">number</span>[] = [];
</code></pre>
<p>Also, the function parameter and return types are different:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">subsets</span>(<span class="hljs-params">nums: <span class="hljs-built_in">number</span>[]</span>): <span class="hljs-title">number</span>[][] </span>{ ... }
</code></pre>
<p>Otherwise, everything stays the same.</p>
<h4 id="heading-time-and-space-complexity-11">Time and space complexity</h4>
<p>A subset is, in the worst case, length \(n\) which is the length of our input. We'll have \(2^n\) subsets and since we also use a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax">spread operator</a> in our example to copy <code>currentSubset</code>, the time complexity will be \(O(n \cdot 2^n)\). The space complexity is – <em>I think</em> – \(O(n \cdot 2^n)\) as well because of the recursive call stack (which is of depth <code>n</code>), and the space needed for <code>result</code> (which is in the worst case \(2^n\)).</p>
<h2 id="heading-chapter-ten-tries">Chapter Ten: Tries</h2>
<p>The trie data structure <a target="_blank" href="https://en.wikipedia.org/wiki/Trie#History,_etymology,_and_pronunciation">gets its name from the word <em>re<strong><strong>trie</strong></strong>val</em></a> – and it's usually pronounced as "try," so that we don't get confused with another familiar and friendly data structure, "tree."</p>
<p>But a trie is still a tree (or tree-like) data structure whose nodes usually store individual letters. So, by traversing the nodes in a trie, we can retrieve strings.</p>
<p>Tries are useful for applications such as autocompletion and spellchecking – and the larger our trie is, the less work we have to do for inserting a new value.</p>
<p><strong>Note:</strong> Using arrays is not very memory-efficient, but for now, we'll stick to the array implementation.</p>
<p>First, let's see what a trie looks like:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747920685051/e152eedd-75c6-478b-8291-5510b8f1421c.gif" alt="Animated visualization of a trie having the values &quot;sea&quot; and &quot;see&quot;" class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>In this trie, we can retrieve the strings "sea" and "see" – but not "sew", for example.</p>
<p>There is a lot going on, but we can try to understand it piece by piece.</p>
<p>Let's look at a trie node.</p>
<p>We'll create a <code>TrieNode</code> class that has <code>children</code>, which is an array of length 26 (so that each index corresponds to a letter in the English alphabet), and a flag variable <code>isEndOfWord</code> to indicate whether that node represents the last character of a word:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> TrieNode {
  children: (TrieNode | <span class="hljs-literal">null</span>)[];
  isEndOfWord: <span class="hljs-built_in">boolean</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
    <span class="hljs-built_in">this</span>.children = <span class="hljs-built_in">Array</span>.from({ length: <span class="hljs-number">26</span> }, <span class="hljs-function">() =&gt;</span> <span class="hljs-literal">null</span>);
    <span class="hljs-built_in">this</span>.isEndOfWord = <span class="hljs-literal">false</span>;
  }
}
</code></pre>
<p>We're initializing <code>children</code> with <code>null</code> values. As we add a character to our trie, the index that corresponds to that character will be filled.</p>
<p><strong>Note:</strong> We're not storing the actual character itself in this implementation – it's implicit in the usage of indices.</p>
<p>In a trie, we start with an empty root node.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> Trie {
  root: TrieNode;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
    <span class="hljs-built_in">this</span>.root = <span class="hljs-keyword">new</span> TrieNode();
  }
  <span class="hljs-comment">// ...</span>
}
</code></pre>
<p>To insert a word, we're going to loop through each character, and initialize a new <code>TrieNode</code> to the corresponding index.</p>
<pre><code class="lang-typescript">insert(word: <span class="hljs-built_in">string</span>) {
  <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.root;
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> char <span class="hljs-keyword">of</span> word) {
    <span class="hljs-keyword">let</span> idx = char.charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
    <span class="hljs-keyword">if</span> (currentNode.children[idx] === <span class="hljs-literal">null</span>) {
      currentNode.children[idx] = <span class="hljs-keyword">new</span> TrieNode();
    }
    currentNode = currentNode.children[idx];
  }

  currentNode.isEndOfWord = <span class="hljs-literal">true</span>;
}
</code></pre>
<p>Once we reach the node that indicates the last character of the word we inserted, we also mark the <code>isEndOfWord</code> variable as <code>true</code>.</p>
<p><strong>Note:</strong> <code>word</code> is going to be lowercase in these examples – otherwise, we have to convert it, such as:</p>
<pre><code class="lang-typescript">word = word.toLowerCase();
</code></pre>
<p>For searching a word's existence in the trie, we'll do a similar thing. We'll look at the nodes for each character, and if we reach the last one that has <code>isEndOfWord</code> marked as <code>true</code>. That means we've found the word:</p>
<pre><code class="lang-typescript">search(word: <span class="hljs-built_in">string</span>) {
  <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.root;
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> char <span class="hljs-keyword">of</span> word) {
    <span class="hljs-keyword">let</span> idx = char.charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
    <span class="hljs-keyword">if</span> (currentNode.children[idx] === <span class="hljs-literal">null</span>) {
      <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }      
    currentNode = currentNode.children[idx];
  }

  <span class="hljs-keyword">return</span> currentNode.isEndOfWord;
}
</code></pre>
<p><strong>Note:</strong> If we find the word we're looking for, then it's called a <strong>search hit</strong>. Otherwise, we have a <strong>search miss</strong> and the word doesn't exist in our trie.</p>
<p>Removing a word is a bit more challenging. Let's say that we want to remove the word "see." But, there is also another word "sea," with the same prefix ('s' and 'e'). So, we should remove only the nodes that we're allowed to.</p>
<p>For this reason, we'll define a recursive function. Once we reach the last character of the word we want to remove, we'll back up and remove the characters we can remove:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">const</span> removeRecursively = <span class="hljs-function">(<span class="hljs-params">node: TrieNode | <span class="hljs-literal">null</span>, word: <span class="hljs-built_in">string</span>, depth: <span class="hljs-built_in">number</span></span>) =&gt;</span> {
  <span class="hljs-keyword">if</span> (node === <span class="hljs-literal">null</span>) {
    <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
  }

  <span class="hljs-keyword">if</span> (depth === word.length) {
    <span class="hljs-keyword">if</span> (node.isEndOfWord) {
      node.isEndOfWord = <span class="hljs-literal">false</span>;
    }
    <span class="hljs-keyword">if</span> (node.children.every(<span class="hljs-function"><span class="hljs-params">child</span> =&gt;</span> child === <span class="hljs-literal">null</span>)) {
      node = <span class="hljs-literal">null</span>;
    }

    <span class="hljs-keyword">return</span> node;
  }

  <span class="hljs-keyword">let</span> idx = word[depth].charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
  node.children[idx] = removeRecursively(node.children[idx], word, depth + <span class="hljs-number">1</span>);

  <span class="hljs-keyword">if</span> (node.children.every(<span class="hljs-function"><span class="hljs-params">child</span> =&gt;</span> child === <span class="hljs-literal">null</span>) &amp;&amp; !node.isEndOfWord) {
    node = <span class="hljs-literal">null</span>;
  }

  <span class="hljs-keyword">return</span> node;
}
</code></pre>
<p><code>depth</code> indicates the index of the word, or <em>the depth of the trie we reach</em>.</p>
<p>Once <code>depth</code> is equal to the word's length (one past the last character), we check if it's the end of the word. If that's the case, we'll mark it as <code>false</code> now, because that word won't exist from here on. Then, we can only mark the node as <code>null</code> if it doesn't have any children (in other words, if all of them are <code>null</code>). We'll apply this logic to each child node recursively until the word is removed as far as it can be removed.</p>
<p>Here is the final example implementation of a trie:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> TrieNode {
  children: (TrieNode | <span class="hljs-literal">null</span>)[];
  isEndOfWord: <span class="hljs-built_in">boolean</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
    <span class="hljs-built_in">this</span>.children = <span class="hljs-built_in">Array</span>.from({ length: <span class="hljs-number">26</span> }, <span class="hljs-function">() =&gt;</span> <span class="hljs-literal">null</span>);
    <span class="hljs-built_in">this</span>.isEndOfWord = <span class="hljs-literal">false</span>;
  }
}

<span class="hljs-keyword">class</span> Trie {
  root: TrieNode;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
    <span class="hljs-built_in">this</span>.root = <span class="hljs-keyword">new</span> TrieNode();
  }

  insert(word: <span class="hljs-built_in">string</span>) {
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.root;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> char <span class="hljs-keyword">of</span> word) {
      <span class="hljs-keyword">let</span> idx = char.charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
      <span class="hljs-keyword">if</span> (currentNode.children[idx] === <span class="hljs-literal">null</span>) {
        currentNode.children[idx] = <span class="hljs-keyword">new</span> TrieNode();
      }
      currentNode = currentNode.children[idx];
    }

    currentNode.isEndOfWord = <span class="hljs-literal">true</span>;
  }

  search(word: <span class="hljs-built_in">string</span>) {
    <span class="hljs-keyword">let</span> currentNode = <span class="hljs-built_in">this</span>.root;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> char <span class="hljs-keyword">of</span> word) {
      <span class="hljs-keyword">let</span> idx = char.charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
      <span class="hljs-keyword">if</span> (currentNode.children[idx] === <span class="hljs-literal">null</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
      }      
      currentNode = currentNode.children[idx];
    }

    <span class="hljs-keyword">return</span> currentNode.isEndOfWord;
  }

  remove(word: <span class="hljs-built_in">string</span>) {
    <span class="hljs-keyword">const</span> removeRecursively = <span class="hljs-function">(<span class="hljs-params">node: TrieNode | <span class="hljs-literal">null</span>, word: <span class="hljs-built_in">string</span>, depth: <span class="hljs-built_in">number</span></span>) =&gt;</span> {
      <span class="hljs-keyword">if</span> (node === <span class="hljs-literal">null</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">null</span>;
      }

      <span class="hljs-keyword">if</span> (depth === word.length) {
        <span class="hljs-keyword">if</span> (node.isEndOfWord) {
          node.isEndOfWord = <span class="hljs-literal">false</span>;
        }
        <span class="hljs-keyword">if</span> (node.children.every(<span class="hljs-function"><span class="hljs-params">child</span> =&gt;</span> child === <span class="hljs-literal">null</span>)) {
          node = <span class="hljs-literal">null</span>;
        }

        <span class="hljs-keyword">return</span> node;
      }

      <span class="hljs-keyword">let</span> idx = word[depth].charCodeAt(<span class="hljs-number">0</span>) - <span class="hljs-string">'a'</span>.charCodeAt(<span class="hljs-number">0</span>);
      node.children[idx] = removeRecursively(node.children[idx], word, depth + <span class="hljs-number">1</span>);

      <span class="hljs-keyword">if</span> (node.children.every(<span class="hljs-function"><span class="hljs-params">child</span> =&gt;</span> child === <span class="hljs-literal">null</span>) &amp;&amp; !node.isEndOfWord) {
        node = <span class="hljs-literal">null</span>;
      }

      <span class="hljs-keyword">return</span> node;
    }

    removeRecursively(<span class="hljs-built_in">this</span>.root, word, <span class="hljs-number">0</span>);
  }
}

<span class="hljs-keyword">let</span> t = <span class="hljs-keyword">new</span> Trie();

t.insert(<span class="hljs-string">'sea'</span>);
t.insert(<span class="hljs-string">'see'</span>);

<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'sea'</span>)); <span class="hljs-comment">// true</span>
<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'see'</span>)); <span class="hljs-comment">// true</span>

<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'hey'</span>)); <span class="hljs-comment">// false</span>
<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'sew'</span>)); <span class="hljs-comment">// false</span>

t.remove(<span class="hljs-string">'see'</span>);

<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'see'</span>)); <span class="hljs-comment">// false </span>
<span class="hljs-built_in">console</span>.log(t.search(<span class="hljs-string">'sea'</span>)); <span class="hljs-comment">// true</span>
</code></pre>
<h4 id="heading-time-and-space-complexity-12">Time and space complexity</h4>
<p>The time complexity of creating a trie is going to be \(O(m * n)\) where \(m\) is the longest word and \(n\) is the total number of words. Inserting, searching, and deleting a word is \(O(a * n)\) where \(a\) is the length of the word and \(n\) is the total number of words.</p>
<p>When it comes to space complexity, in the worst case, each node can have children for all the characters in the alphabet we're representing. But, the size of the alphabet is constant, so the growth of storage needs will be proportionate to the number of nodes we have, which is \(O(n)\) where \(n\) is the number of nodes.</p>
<h2 id="heading-chapter-eleven-graphs">Chapter Eleven: Graphs</h2>
<p>A graph is probably <em>the</em> data structure that everyone is familiar with, regardless of their profession or interests.</p>
<p><a target="_blank" href="https://en.wikipedia.org/wiki/Graph_theory#Representation">Graph theory</a> is a very broad topic, but we'll simply look at some of the main ingredients of what makes a graph and how to represent it, as well as basic graph traversals.</p>
<p>In a graph, there are two main components: vertices (or nodes) and edges that connect those vertices.</p>
<p><strong>Note:</strong> Here, we're going to use "vertex" and "node" interchangeably. The terms "adjacent vertices" and "neighbors" are used interchangeably as well.</p>
<p>A graph can be <strong>directed</strong> or <strong>undirected</strong>. With a directed edge, we have an origin and a destination vertex. On the other hand, an undirected edge is bidirectional, origin and destination are not fixed.</p>
<p><strong>Note:</strong> There might also be <a target="_blank" href="https://en.wikipedia.org/wiki/Graph_\(discrete_mathematics\)#Mixed_graph">mixed graphs</a> that have both directed and undirected edges.</p>
<p>A graph can also be weighted or unweighted, each edge can have different weights, usually representing the cost of going from one vertex to the other.</p>
<p>We can define a graph like this:</p>
<p>$$G = (V, \ E)$$</p><p>\(V\) is a set of vertices, and \(E\) is a set of edges.</p>
<p>For example, if we have a directed graph like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747921387268/fe3d0ef9-a271-4c87-9143-84e80e41af5f.gif" alt="Animated visualization of a graph with nodes A, B, C, D. A has directed edges to B and C, C has one to B and D. D has one to C. " class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Then, we have the vertices:</p>
<p>$$V = \{A, \ B, \ C, \ D\}$$</p><p>And, the edges are:</p>
<p>$$E = \{(A, \ B), \ (A, \ C), \ (C, \ B), \ (C, \ D)\, \ (D, \ C)\}$$</p><p>If we have an undirected graph such as this one:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747921458245/d2920859-81c0-4082-a49d-e41b08b81124.gif" alt="Animated visualization of the same graph above with undirected edges." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>We have the same vertices:</p>
<p>$$V = \{A, \ B, \ C, \ D\}$$</p><p>But our edges can look like this:</p>
<p>$$E = \{\{B, \ A\}, \{A, \ C\}, \{C, \ B\}, \{D, \ C\}\}$$</p><p><strong>Note:</strong> We use parentheses when it comes to directed edges, but curly braces with undirected edges as there is no direction from one vertex to the other.</p>
<p>When two vertices share an edge, they are <strong>adjacent</strong> to each other. The <strong>degree</strong> of a vertex is the number of adjacent vertices to it. We can also define the degree as the number of edges coming out of the vertex. For example, in the above image, the vertex A has a degree of 2.</p>
<p>A <strong>simple path</strong> is the one that we don't repeat any vertices while traversing the graph.</p>
<p>An example might look like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747921569022/50f556e7-f954-4203-8c4b-493b2be5a353.gif" alt="Animated visualization of the same graph above with highlighted nodes in this order: A, B, C, D." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>A <strong>cycle</strong> is a simple path, except that we end up at the vertex we started with:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747921594728/717408ba-f9fb-4cef-9b52-70f487e9162d.gif" alt="Animated visualization of the same graph above with highlighted nodes in this order: A, B, C (with all the edges also highlighted)." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<h3 id="heading-representing-graphs">Representing graphs</h3>
<p>When it comes to representing graphs, there are several ways to do it, and we'll look at three of them: an edge list, an adjacency matrix, and an adjacency list.</p>
<h4 id="heading-edge-list">Edge List</h4>
<p>We can simply put all the edges in an array:</p>
<pre><code class="lang-plaintext">[ [A, B], [A, C], [B, C], [C, D] ]
</code></pre>
<p>But to find an edge in an edge list, we'll have to iterate through them, so it will have \(O(E)\) time complexity, where in the worst case, we'll search the whole list to find an edge. Similarly, it needs \(O(E)\) amount of space to represent all the edges.</p>
<h4 id="heading-adjacency-matrix">Adjacency Matrix</h4>
<p>The adjacency matrix for our example might look like this:</p>
<p>$$\left\lceil\begin{matrix}&amp; A &amp; B &amp; C &amp; D \\A &amp; 0 &amp; 1 &amp; 1 &amp; 0 \\B &amp; 1 &amp; 0 &amp; 1 &amp; 0 \\C &amp; 1 &amp; 1 &amp; 0 &amp; 1 \\D &amp; 0 &amp; 0 &amp; 1 &amp; 0\end{matrix}\right\rceil$$</p><p>Each row is for a vertex, and the matching column shows the relationship between those vertices. For example, the vertex A doesn't have an edge pointing to D, so the cell that matches A and D is 0. On the other hand, A is connected to B and C, so those cells have the value 1.</p>
<p><strong>Note:</strong> If the graph is weighted, we can simply put the weight instead of <code>1</code>, and when there is no edge, the value can stay <code>0</code>.</p>
<p><em>An adjacency matrix will have 0s in the "main diagonal," showing that there are no self-loops.</em></p>
<p>Let's try implementing it in TypeScript.</p>
<p>We'll start with a minimal graph vertex:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> GraphVertex {
  value: <span class="hljs-built_in">string</span> | <span class="hljs-built_in">number</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">value: <span class="hljs-built_in">string</span> | <span class="hljs-built_in">number</span></span>) {
    <span class="hljs-built_in">this</span>.value = value;
  }
}
</code></pre>
<p>Now we can define our graph. We'll make it really simple with three properties to hold: <code>matrix</code> to represent the graph as an adjacency matrix, <code>vertices</code> to hold vertices, and <code>isDirected</code> to indicate whether our graph is directed:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> Graph {
  matrix: <span class="hljs-built_in">number</span>[][];
  vertices: GraphVertex[];
  isDirected: <span class="hljs-built_in">boolean</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">vertices: GraphVertex[], isDirected = <span class="hljs-literal">true</span></span>) {
    <span class="hljs-built_in">this</span>.vertices = vertices;
    <span class="hljs-built_in">this</span>.isDirected = isDirected;
    <span class="hljs-comment">// ...</span>
  }

  <span class="hljs-comment">// ...</span>
}
</code></pre>
<p>Initializing our adjacency matrix might look like this:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.matrix = <span class="hljs-built_in">Array</span>.from({ length: vertices.length }, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-keyword">return</span> <span class="hljs-built_in">Array</span>.from({ length: vertices.length }, <span class="hljs-function">() =&gt;</span> <span class="hljs-number">0</span>)
});
</code></pre>
<p>We'll have an array with the length of vertices. Each item in the array is an array with the length of vertices as well, but filled with zeroes.</p>
<p>In our example with four vertices, the initial adjacency matrix looks like this:</p>
<pre><code class="lang-typescript">[ [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>], [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>], [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>], [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>] ]
</code></pre>
<p>Then, adding an edge is just marking the corresponding value as <code>1</code>, so that we can represent a connection between two vertices:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] = <span class="hljs-number">1</span>;
</code></pre>
<p><strong>Note:</strong> This implementation assumes that all vertices are distinct.</p>
<p>If we have an undirected graph, we can have it both ways:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
  <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v2)][<span class="hljs-built_in">this</span>.vertices.indexOf(v1)] = <span class="hljs-number">1</span>;
}
</code></pre>
<p>Removing an edge, in this case, will be just resetting the value to <code>0</code>:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] = <span class="hljs-number">0</span>;
</code></pre>
<p>And, checking for the existence of an edge is simply checking whether the corresponding value is <code>0</code> or not:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] !== <span class="hljs-number">0</span>;
</code></pre>
<p>And, here is the whole example with additional methods for adding and removing an edge, checking if there is an edge between two vertices, and checking if a specific vertex is in the graph:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> Graph {
  matrix: <span class="hljs-built_in">number</span>[][];
  vertices: GraphVertex[];
  isDirected: <span class="hljs-built_in">boolean</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">vertices: GraphVertex[], isDirected = <span class="hljs-literal">true</span></span>) {
    <span class="hljs-built_in">this</span>.vertices = vertices;
    <span class="hljs-built_in">this</span>.matrix = <span class="hljs-built_in">Array</span>.from({ length: vertices.length }, <span class="hljs-function">() =&gt;</span> {
      <span class="hljs-keyword">return</span> <span class="hljs-built_in">Array</span>.from({ length: vertices.length }, <span class="hljs-function">() =&gt;</span> <span class="hljs-number">0</span>)
    });
    <span class="hljs-built_in">this</span>.isDirected = isDirected;
  }

  addEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] = <span class="hljs-number">1</span>;

    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
      <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v2)][<span class="hljs-built_in">this</span>.vertices.indexOf(v1)] = <span class="hljs-number">1</span>;
    }
  }

  <span class="hljs-comment">/* 
  For a weighted graph:

  addEdge(v1: GraphVertex, v2: GraphVertex, weight: number) {
    this._checkVertexIsInGraph(v1);
    this._checkVertexIsInGraph(v2);

    this.matrix[this.vertices.indexOf(v1)][this.vertices.indexOf(v2)] = weight;
    if (!this.isDirected) {
      this.matrix[this.vertices.indexOf(v2)][this.vertices.indexOf(v1)] = weight;
    }
  }
  */</span>

  removeEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] = <span class="hljs-number">0</span>;

    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
      <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v2)][<span class="hljs-built_in">this</span>.vertices.indexOf(v1)] = <span class="hljs-number">0</span>;
    }
  }

  hasEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.matrix[<span class="hljs-built_in">this</span>.vertices.indexOf(v1)][<span class="hljs-built_in">this</span>.vertices.indexOf(v2)] !== <span class="hljs-number">0</span>;
  }

  getAdjacencyMatrix() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.matrix;
  }

  _checkVertexIsInGraph(v: GraphVertex) {
    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.vertices.includes(v)) {
      <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'Vertex doesn\'t exist'</span>);
    }
  }
}


<span class="hljs-keyword">let</span> a = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'A'</span>);
<span class="hljs-keyword">let</span> b = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'B'</span>);
<span class="hljs-keyword">let</span> c = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'C'</span>);
<span class="hljs-keyword">let</span> d = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'D'</span>);

<span class="hljs-keyword">let</span> graph = <span class="hljs-keyword">new</span> Graph([a, b, c, d], <span class="hljs-literal">false</span>);

graph.addEdge(a, b);
graph.addEdge(a, c);
graph.addEdge(b, c);
graph.addEdge(c, d);

<span class="hljs-built_in">console</span>.log(graph.getAdjacencyMatrix());
<span class="hljs-comment">// -&gt; [ [0, 1, 1, 0], [1, 0, 1, 0], [1, 1, 0, 1], [0, 0, 1, 0] ]</span>
</code></pre>
<p>Operations on an adjacency matrix have \(O(1)\) time complexity. But our storage needs will be \(O(V^2)\) where \(V\) is the number of vertices.</p>
<h4 id="heading-adjacency-list">Adjacency List</h4>
<p>In an adjacency list, usually a hashmap <strong>or</strong> an array of linked lists is used. For example:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">let</span> graph = {
  <span class="hljs-string">'A'</span>: [<span class="hljs-string">'B'</span>, <span class="hljs-string">'C'</span>],
  <span class="hljs-string">'B'</span>: [<span class="hljs-string">'A'</span>, <span class="hljs-string">'C'</span>],
  <span class="hljs-string">'C'</span>: [<span class="hljs-string">'A'</span>, <span class="hljs-string">'B'</span>, <span class="hljs-string">'D'</span>],
  <span class="hljs-string">'D'</span>: [<span class="hljs-string">'C'</span>]
}
</code></pre>
<p>Let's see how we can modify our code above to use an adjacency list instead.</p>
<p>Instead of having a <code>matrix</code> which is an array of arrays, we can have a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map"><code>Map</code></a> that maps the vertices to an array of their neighbors.</p>
<p>We can initialize it as a map that has the vertices as keys, each of which has a value of an empty array for now:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.list = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>&lt;GraphVertex, GraphVertex[]&gt;();
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> v <span class="hljs-keyword">of</span> vertices) {
  <span class="hljs-built_in">this</span>.list.set(v, []);
}
</code></pre>
<p>Adding an edge will be just pushing to the array of corresponding vertex:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.list.get(v1)!.push(v2);
</code></pre>
<p>If our graph is undirected, we can do it both ways here as well:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
  <span class="hljs-built_in">this</span>.list.get(v2)!.push(v1);
}
</code></pre>
<p>Removing an edge will be deleting that vertex from the array:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.list.set(v1, <span class="hljs-built_in">this</span>.list.get(v1)!.filter(<span class="hljs-function"><span class="hljs-params">v</span> =&gt;</span> v !== v2));
</code></pre>
<p>Checking if an edge exists is just checking the existence of that vertex in the array:</p>
<pre><code class="lang-typescript"><span class="hljs-built_in">this</span>.list.get(v1)!.includes(v2);
</code></pre>
<p><strong>Note:</strong> We're using a <a target="_blank" href="https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html#non-null-assertion-operator">non-null assertion operator</a> as we’re using TypeScript in these examples. As we'll see below, we first check if the vertex is in the graph. And since we're adding all the vertices in the graph as keys to <code>this.list</code>, we're sure that getting that vertex from the list is not <code>undefined</code>. But TypeScript will warn us because if a key is not found in a <code>Map</code> object, it could <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get#return_value">potentially return <code>undefined</code></a>.</p>
<p>Here is our graph:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">class</span> Graph {
  list: <span class="hljs-built_in">Map</span>&lt;GraphVertex, GraphVertex[]&gt;;
  vertices: GraphVertex[];
  isDirected: <span class="hljs-built_in">boolean</span>;

  <span class="hljs-keyword">constructor</span>(<span class="hljs-params">vertices: GraphVertex[], isDirected = <span class="hljs-literal">true</span></span>) {
    <span class="hljs-built_in">this</span>.vertices = vertices;
    <span class="hljs-built_in">this</span>.list = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>();
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> v <span class="hljs-keyword">of</span> vertices) {
      <span class="hljs-built_in">this</span>.list.set(v, []);
    }
    <span class="hljs-built_in">this</span>.isDirected = isDirected;
  }

  addEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-built_in">this</span>.list.get(v1)!.push(v2);

    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
      <span class="hljs-built_in">this</span>.list.get(v2)!.push(v1);
    }
  }

  removeEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-built_in">this</span>.list.set(v1, <span class="hljs-built_in">this</span>.list.get(v1)!.filter(<span class="hljs-function"><span class="hljs-params">v</span> =&gt;</span> v !== v2));

    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.isDirected) {
      <span class="hljs-built_in">this</span>.list.set(v2, <span class="hljs-built_in">this</span>.list.get(v2)!.filter(<span class="hljs-function"><span class="hljs-params">v</span> =&gt;</span> v !== v1));
    }
  }

  hasEdge(v1: GraphVertex, v2: GraphVertex) {
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v1);
    <span class="hljs-built_in">this</span>._checkVertexIsInGraph(v2);

    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.list.get(v1)!.includes(v2);
  }

  getAdjacencyList() {
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.list;
  }

  _checkVertexIsInGraph(v: GraphVertex) {
    <span class="hljs-keyword">if</span> (!<span class="hljs-built_in">this</span>.vertices.includes(v)) {
      <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">'Vertex doesn\'t exist'</span>);
    }
  }
}


<span class="hljs-keyword">let</span> a = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'A'</span>);
<span class="hljs-keyword">let</span> b = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'B'</span>);
<span class="hljs-keyword">let</span> c = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'C'</span>);
<span class="hljs-keyword">let</span> d = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'D'</span>);

<span class="hljs-keyword">let</span> graph = <span class="hljs-keyword">new</span> Graph([a, b, c, d], <span class="hljs-literal">false</span>);

graph.addEdge(a, b);
graph.addEdge(a, c);
graph.addEdge(b, c);
graph.addEdge(c, d);

<span class="hljs-built_in">console</span>.log(graph.getAdjacencyList());

<span class="hljs-comment">/* Output:

Map (4) {
  GraphVertex: { "value": "A" } =&gt; [
    GraphVertex: { "value": "B" }, 
    GraphVertex: { "value": "C" }
  ], 
  GraphVertex: { "value": "B" } =&gt; [
    GraphVertex: { "value": "A" }, 
    GraphVertex: { "value": "C" }
  ], 
  GraphVertex: { "value": "C" } =&gt; [
    GraphVertex: { "value": "A" }, 
    GraphVertex: { "value": "B" }, 
    GraphVertex: { "value": "D" }
  ], 
  GraphVertex: { "value": "D" } =&gt; [
    GraphVertex: { "value": "C" }
  ]
} 

*/</span>
</code></pre>
<p>Getting the neighbors of a vertex is \(O(1)\) because we're just looking up a key in a map. But finding a particular edge can be \(O(d)\) where \(d\) is the number of degrees of the vertex, because we might need to traverse all the neighbors to find it. And, it could be \(V - 1\) where \(V\) is the number of vertices in the graph. It's the case when that vertex has all the other vertices as its neighbors.</p>
<p>The space complexity can be \(O(V + E)\) where \(V\) is the number of vertices and \(E\) is the number of edges.</p>
<h3 id="heading-traversals-1">Traversals</h3>
<p>Continuing with the adjacency list representation, let's now take a look at two (very familiar) ways to traverse a graph: breadth-first search and depth-first search.</p>
<p>But first, we'll modify our graph a little bit. We'll add a new vertex <code>'E'</code> and update some edges:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">let</span> a = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'A'</span>);
<span class="hljs-keyword">let</span> b = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'B'</span>);
<span class="hljs-keyword">let</span> c = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'C'</span>);
<span class="hljs-keyword">let</span> d = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'D'</span>);
<span class="hljs-keyword">let</span> e = <span class="hljs-keyword">new</span> GraphVertex(<span class="hljs-string">'E'</span>);


<span class="hljs-keyword">let</span> graph = <span class="hljs-keyword">new</span> Graph([a, b, c, d, e], <span class="hljs-literal">false</span>);

graph.addEdge(a, b);
graph.addEdge(a, c);
graph.addEdge(b, d);
graph.addEdge(c, e);
</code></pre>
<p>The important idea to remember is that there is no hierarchy of vertices, so we don't have a root node.</p>
<p>For a breadth-first or depth-first search, we can use an arbitrary node as a starting point.</p>
<h4 id="heading-breadth-first-search">Breadth-First Search</h4>
<p>With our new graph, a breadth-first search traversal looks like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747922399341/f4b9f63b-5188-48a2-83ec-51524721c2b1.gif" alt="Animated visualization for a breadth-first search of a graph with nodes A, B, C, D, E with highlighted nodes in this order: A, B, C, D, E." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>When it comes to breadth-first search, usually a queue is used, and the idea is simple: given a current node, we'll add the adjacent nodes first, marking them as visited as we go.</p>
<p>Inside the <code>Graph</code> class, we can implement a <code>bfs</code> method that does just that:</p>
<pre><code class="lang-typescript">bfs(startNode: GraphVertex) {
  <span class="hljs-keyword">const</span> visited = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>();
  <span class="hljs-keyword">const</span> queue = [startNode];
  visited.add(startNode);

  <span class="hljs-keyword">while</span> (queue.length &gt; <span class="hljs-number">0</span>) {
    <span class="hljs-keyword">const</span> currentNode = queue.shift();
    <span class="hljs-comment">// console.log(currentNode);</span>
    <span class="hljs-built_in">this</span>.list.get(currentNode <span class="hljs-keyword">as</span> GraphVertex)!.forEach(<span class="hljs-function">(<span class="hljs-params">node</span>) =&gt;</span> {
      <span class="hljs-keyword">if</span> (!visited.has(node)) {
        visited.add(node);
        queue.push(node);
      }
    });
  }
}
</code></pre>
<p>If we call the <code>bfs</code> method with <code>a</code> as the starting vertex (<code>graph.bfs(a)</code>), and log <code>currentNode</code> to console each time we go, it's as we expected:</p>
<pre><code class="lang-plaintext">GraphVertex { value: 'A' }
GraphVertex { value: 'B' }
GraphVertex { value: 'C' }
GraphVertex { value: 'D' }
GraphVertex { value: 'E' }
</code></pre>
<p>With the adjacency list, using a BFS has \(O(V + E)\) time complexity (sum of the vertices and edges) as we're traversing the whole graph.</p>
<h4 id="heading-depth-first-search">Depth-First Search</h4>
<p>With the same modified graph, a depth-first search looks like this:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747922463260/72e852c1-642f-4ce0-829d-e658a8a7b880.gif" alt="Animated visualization for a depth-first search of a graph with nodes A, B, C, D, E with highlighted nodes in this order: A, B, D, C, E." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>With depth-first search there is usually recursion involved as we're traversing through a path until we have visited all the nodes in that path. Once we hit a dead end, we'll <strong>backtrack</strong> and continue exploring until we have visited all the vertices in the graph.</p>
<p>Again, inside the <code>Graph</code> class, we can add a <code>dfs</code> method:</p>
<pre><code class="lang-typescript">dfs(startNode: GraphVertex, visited = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>()) {
  visited.add(startNode);
  <span class="hljs-comment">// console.log(startNode);</span>
  <span class="hljs-built_in">this</span>.list.get(startNode)!.forEach(<span class="hljs-function">(<span class="hljs-params">node</span>) =&gt;</span> {
    <span class="hljs-keyword">if</span> (!visited.has(node)) {
      <span class="hljs-built_in">this</span>.dfs(node, visited);
    }
  });
}
</code></pre>
<p>Starting with a node, we check how deep we can go from there. Once we reach a dead end (when the <code>dfs</code> inside <code>forEach</code> returns), we continue checking other neighbors (with <code>forEach</code>) until none is left. We essentially do the same thing until all the vertices are visited.</p>
<p>Logging the output matches our expectation:</p>
<pre><code class="lang-plaintext">GraphVertex { value: 'A' }
GraphVertex { value: 'B' }
GraphVertex { value: 'D' }
GraphVertex { value: 'C' }
GraphVertex { value: 'E' }
</code></pre>
<p>The time complexity for a depth-first search traversal of a graph is the similar to BFS, \(O(V + E)\).</p>
<h2 id="heading-chapter-twelve-dynamic-programming">Chapter Twelve: Dynamic Programming</h2>
<p>Dynamic programming (DP) is one of those concepts that is a bit intimidating when you hear it for the first time. But the crux of it is simply breaking problems down into smaller parts and solving them. It’s also about storing those solutions so that we don't have to compute them again.</p>
<p>Breaking problems down into subproblems is nothing new – that's pretty much what problem-solving is all about. What dynamic programming is also specifically concerned with are <strong>overlapping subproblems</strong> that are repeating – we want to calculate solutions to those subproblems so that we won't be calculating them again each time. Put another way, <em>we want to remember the past so that we won't be condemned to repeat it</em>.</p>
<p>For example, calculating 1 + 1 + 1 + 1 + 1 is very easy if we have already calculated 1 + 1 + 1 + 1. We can just remember the previous solution, and use it:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747922611072/bcb33cae-aed3-41bd-8823-4e10a0e13fbf.gif" alt="Animated visualization of the result of 1 + 1 + 1 + 1 constituting a subproblem of 1 + 1 + 1 + 1 + 1 ." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>Calculating the Fibonacci sequence is one of the well-known examples when it comes to dynamic programming. Because we have to calculate the same functions each time for a new number, it lends itself to DP very well.</p>
<p>For example, to calculate <code>fib(4)</code> we need to calculate <code>fib(3)</code> and <code>fib(2)</code>. But calculating <code>fib(3)</code> also involves calculating <code>fib(2)</code>, so we'll be doing the same calculation, <em>again</em>.</p>
<p>A classic, good old recursive Fibonacci function might look like this:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fib</span>(<span class="hljs-params">n: <span class="hljs-built_in">number</span></span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">if</span> (n === <span class="hljs-number">0</span> || n === <span class="hljs-number">1</span>) {
    <span class="hljs-keyword">return</span> n;
  }

  <span class="hljs-keyword">return</span> fib(n - <span class="hljs-number">1</span>) + fib(n - <span class="hljs-number">2</span>);
}
</code></pre>
<p>Though the issue we have just mentioned remains: we'll keep calculating the same values:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747922659848/577aef57-17b5-40ad-a926-74387b0e3731.gif" alt="Animated visualization displaying repeated fibonacci calls." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>But, we want to do better.</p>
<p><strong>Memoization</strong> is remembering the problems we have solved before so that we don't have to solve them again and waste our time. We can <em>reuse</em> the solution to the subproblem we've already memoized. So, we can keep a <em>cache</em> to store those solutions and use them:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fib</span>(<span class="hljs-params">n: <span class="hljs-built_in">number</span>, cache: <span class="hljs-built_in">Map</span>&lt;<span class="hljs-built_in">number</span>, <span class="hljs-built_in">number</span>&gt;</span>): <span class="hljs-title">number</span> </span>{
  <span class="hljs-keyword">if</span> (cache.has(n)) {
    <span class="hljs-keyword">return</span> cache.get(n)!;
  }

  <span class="hljs-keyword">if</span> (n === <span class="hljs-number">0</span> || n === <span class="hljs-number">1</span>) {
    <span class="hljs-keyword">return</span> n;
  }

  <span class="hljs-keyword">const</span> result = fib(n - <span class="hljs-number">1</span>, cache) + fib(n - <span class="hljs-number">2</span>, cache);
  cache.set(n, result);

  <span class="hljs-keyword">return</span> result;
}
</code></pre>
<p>For example, we can initially pass an empty <code>Map</code> as the argument for <code>cache</code>, and print the first 15 Fibonacci numbers:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">let</span> m = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Map</span>&lt;<span class="hljs-built_in">number</span>, <span class="hljs-built_in">number</span>&gt;();

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">15</span>; i++) {
  <span class="hljs-built_in">console</span>.log(fib(i, m));
}

<span class="hljs-comment">/*
  0
  1
  1
  2
  3
  5
  8
  13
  21
  34
  55 
  89
  144
  233
  377 
 */</span>
</code></pre>
<p>There are two different approaches with dynamic programming: <strong>top-down</strong> and <strong>bottom-up</strong>.</p>
<p>Top-down is like what it sounds: starting with a large problem, breaking it down to smaller components, memoizing them. It's what we just did with the <code>fib</code> example.</p>
<p>Bottom-up is also like what it sounds: starting with the smallest subproblem, finding out a solution, and working our way up to the larger problem itself. It also has an advantage: with the bottom-up approach, we don't need to store every previous value – we can only keep the two elements at the bottom so that we can use them to build up to our target.</p>
<p>With the bottom-up approach, our <code>fib</code> function can look like this:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fib</span>(<span class="hljs-params">n: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">let</span> dp = [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>];
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">2</span>; i &lt;= n; i++) {
    dp[i] = dp[i - <span class="hljs-number">1</span>] + dp[i - <span class="hljs-number">2</span>];
  }

  <span class="hljs-keyword">return</span> dp[n];
}
</code></pre>
<p>Just note that we are keeping an array whose size will grow linearly as the input increases. So, we can do better with constant space complexity, not using an array at all:</p>
<pre><code class="lang-typescript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fib</span>(<span class="hljs-params">n: <span class="hljs-built_in">number</span></span>) </span>{
  <span class="hljs-keyword">if</span> (n === <span class="hljs-number">0</span> || n === <span class="hljs-number">1</span>) {
    <span class="hljs-keyword">return</span> n;
  }

  <span class="hljs-keyword">let</span> a = <span class="hljs-number">0</span>;
  <span class="hljs-keyword">let</span> b = <span class="hljs-number">1</span>;

  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">2</span>; i &lt;= n; i++) {
    <span class="hljs-keyword">let</span> tmp = a + b;
    a = b;
    b = tmp;
  }

  <span class="hljs-keyword">return</span> b;
}
</code></pre>
<h4 id="heading-time-and-space-complexity-13">Time and space complexity</h4>
<p>The time complexities for both the top-down and bottom-up approaches in the Fibonacci example are \(O(n)\) as we solve each subproblem, each of which is of constant time.</p>
<p><strong>Note:</strong> The time complexity of the recursive Fibonacci function that doesn't use DP is exponential (in fact, \(O(\phi^{n})\) – yes <a target="_blank" href="https://en.wikipedia.org/wiki/Golden_ratio">the golden ratio</a> as its base).</p>
<p>But when it comes to space complexity, the bottom-up approach (the second version) is \(O(1)\).</p>
<p><strong>Note:</strong> The first version we've used for the bottom-up approach has \(O(n)\) time complexity as we store the values in an array.</p>
<p>The top-down approach has \(O(n)\) space complexity because we store a <code>Map</code> whose size will grow linearly as <code>n</code> increases.</p>
<h2 id="heading-chapter-thirteen-intervals">Chapter Thirteen: Intervals</h2>
<p>An interval simply has a start and an end. The easiest way to think about intervals is as time frames.</p>
<p>With intervals, the usual concern is whether they overlap or not.</p>
<p>For example, if we have an interval <code>[1, 3]</code> and another <code>[2, 5]</code>, they are clearly overlapping, so they can be merged together to create a new interval <code>[1, 5]</code>:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747923034510/05767713-f24f-4467-82f5-89e025631be9.gif" alt="Animated visualization with interval [1, 3] merging with [2, 5], becoming [1, 5]." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<p>In order for two intervals <strong>not to overlap</strong>:</p>
<ul>
<li>the <em>start</em> of one should be <em>strictly larger</em> than the <em>end</em> of the other</li>
</ul>
<pre><code class="lang-plaintext">newInterval[0] &gt; interval[1]
</code></pre>
<p>Or:</p>
<ul>
<li>the <em>end</em> of the one should be <em>strictly smaller</em> than the <em>start</em> of the other</li>
</ul>
<pre><code class="lang-plaintext">newInterval[1] &lt; interval[0]
</code></pre>
<p>If both of these are false, they are overlapping.</p>
<p>If they are overlapping, the new (merged) interval will have the minimum value from both intervals as its start, and the maximum as its end:</p>
<pre><code class="lang-plaintext">[
  min(newInterval[0], interval[0]),
  max(newInterval[1], interval[1])
]
</code></pre>
<h2 id="heading-chapter-fourteen-bit-manipulation">Chapter Fourteen: Bit Manipulation</h2>
<p><a target="_blank" href="https://en.wikipedia.org/wiki/Bitwise_operation">A bitwise operation</a> operates on a bit string, a bit array, or a binary numeral (considered as a bit string) at the level of its individual bits.</p>
<p>Let's first represent a number in binary (base 2). We can use <code>toString</code> method on a <a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">number</a>, and specify the <strong>radix</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">17</span>;

<span class="hljs-built_in">console</span>.log(n.toString(<span class="hljs-number">2</span>)); <span class="hljs-comment">// 10001</span>
</code></pre>
<p>We can also parse an integer giving it a base:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">parseInt</span>(<span class="hljs-number">10001</span>, <span class="hljs-number">2</span>)); <span class="hljs-comment">// 17</span>
</code></pre>
<p><strong>Note:</strong> We can also represent a binary number with the prefix <code>0b</code>:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-number">0b10001</span>); <span class="hljs-comment">// 17</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-number">0b101</span>); <span class="hljs-comment">// 5</span>
</code></pre>
<p>For example, these are the same number:</p>
<pre><code class="lang-javascript"><span class="hljs-number">0b1</span> === <span class="hljs-number">0b00000001</span> <span class="hljs-comment">// true</span>
</code></pre>
<p>All bitwise operations are performed on 32-bit binary numbers in JavaScript. That is, <em>before a bitwise operation is performed, JavaScript converts numbers to 32-bit</em> <strong><em>signed</em></strong> <em>integers.</em></p>
<p>So, for example, <code>17</code> won't be simply <code>10001</code> but <code>00000000 00000000 00000000 00010001</code>.</p>
<p><em>After the bitwise operation is performed, the result is converted back to 64-bit JavaScript numbers.</em></p>
<h3 id="heading-bitwise-operators">Bitwise operators</h3>
<h4 id="heading-and-amp">AND (<code>&amp;</code>)</h4>
<p>If two bits are <code>1</code>, the result is <code>1</code>, otherwise <code>0</code>.</p>
<p>The GIFs below show the numbers as 8-bit strings, but when doing bitwise operations, remember they are converted to 32-bit numbers.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747923324409/4415a01f-6129-4dcf-a1ce-b8e898bdba9a.gif" alt="Animated visualization of an AND operation. 00010001 &amp; 00000101 = 00000001." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> x1 = <span class="hljs-number">0b10001</span>;
<span class="hljs-keyword">const</span> x2 = <span class="hljs-number">0b101</span>;

<span class="hljs-keyword">const</span> result = x1 &amp; x2; <span class="hljs-comment">// 1 (0b1)</span>
</code></pre>
<h4 id="heading-or">OR (<code>|</code>)</h4>
<p>If either of the bits is <code>1</code>, the result is <code>1</code>, otherwise <code>0</code>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747923365941/22e562c4-e195-4567-b8ef-4b94cb4a394f.gif" alt="Animated visualization of an OR operation. 00010001 | 00000101 = 00010101." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> x1 = <span class="hljs-number">0b10001</span>;
<span class="hljs-keyword">const</span> x2 = <span class="hljs-number">0b101</span>;

<span class="hljs-keyword">const</span> result = x1 | x2; <span class="hljs-comment">// 21 (0b10101)</span>
</code></pre>
<h4 id="heading-xor">XOR (<code>^</code>)</h4>
<p>If the bits are different (one is <code>1</code> and the other is <code>0</code>), the result is <code>1</code>, otherwise <code>0</code>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747923403151/52090e1a-98ee-4303-a433-6318ec6f18d2.gif" alt="Animated visualization of a XOR operation. 00010001 ^ 00000101 = 00010100." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> x1 = <span class="hljs-number">0b10001</span>;
<span class="hljs-keyword">const</span> x2 = <span class="hljs-number">0b101</span>;

<span class="hljs-keyword">const</span> result = x1 ^ x2; <span class="hljs-comment">// 20 (0b10100)</span>
</code></pre>
<h4 id="heading-not">NOT (<code>~</code>)</h4>
<p>Flips the bits (<code>1</code> becomes <code>0</code>, <code>0</code> becomes <code>1</code>).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1747923458432/2807b821-8069-45e6-a37b-d8167ec722e7.gif" alt="Animated visualization of a NOT operation. ~00010001 = 11101110." class="image--center mx-auto" width="600" height="400" loading="lazy"></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">17</span>;

<span class="hljs-keyword">const</span> result = ~n; <span class="hljs-comment">// -18</span>
</code></pre>
<p><strong>Note:</strong> Bitwise NOTing any 32-bit integer <code>x</code> yields <code>-(x + 1)</code>.</p>
<p>If we use <a target="_blank" href="https://stackoverflow.com/a/33758875">a helper function</a> to see the binary representations, it is as we expected:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(createBinaryString(n));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00010001</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(result));
<span class="hljs-comment">// -&gt; 11111111 11111111 11111111 11101110</span>
</code></pre>
<p>The leftmost bit indicates the signal – whether the number is negative or positive.</p>
<p>Remember that we said JavaScript uses 32-bit <strong>signed</strong> integers for bitwise operations. <strong>The leftmost bit is</strong> <code>1</code> for negative numbers and <code>0</code> for positive numbers. Also, the operator operates on the operands' bit representations in <a target="_blank" href="https://en.wikipedia.org/wiki/Two's_complement">two's complement</a>. The operator is applied to each bit, and the result is constructed bitwise.</p>
<p><strong>Note:</strong> Two's complement allows us to get a number with an inverse signal. One way to do it is to invert the bits of the number in the positive representation and add 1 to it:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">twosComplement</span>(<span class="hljs-params">n</span>) </span>{
  <span class="hljs-keyword">return</span> ~n + <span class="hljs-number">0b1</span>;
}
</code></pre>
<h4 id="heading-left-shift-zero-fill-ltlt">Left shift (zero fill) (<code>&lt;&lt;</code>)</h4>
<p>Shifts the given number of bits to the left, adding zero bits shifted in from the right.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">17</span>;
<span class="hljs-keyword">const</span> result = n &lt;&lt; <span class="hljs-number">1</span>; <span class="hljs-comment">// 34</span>


<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">17</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00010001</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">34</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00100010</span>
</code></pre>
<p><strong>Note</strong> that the 32nd bit (the leftmost one) is discarded.</p>
<h4 id="heading-right-shift-sign-preserving-gtgt">Right shift (sign preserving) (<code>&gt;&gt;</code>)</h4>
<p>Shifts the given number of bits to the right, preserving the sign when adding bits from the left.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">17</span>;
<span class="hljs-keyword">const</span> result = n &gt;&gt; <span class="hljs-number">1</span>; <span class="hljs-comment">// 8</span>


<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">17</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00010001</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">8</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00001000</span>
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">-17</span>;
<span class="hljs-keyword">const</span> result = n &gt;&gt; <span class="hljs-number">1</span>; <span class="hljs-comment">// -9</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">-17</span>));
<span class="hljs-comment">// -&gt; 11111111 11111111 11111111 11101111</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">-9</span>));
<span class="hljs-comment">// -&gt; 11111111 11111111 11111111 11110111</span>
</code></pre>
<h4 id="heading-right-shift-unsigned-gtgtgt">Right shift (unsigned) (<code>&gt;&gt;&gt;</code>)</h4>
<p>Shifts the given number of bits to the right, adding <code>0</code>s when adding bits in from the left, no matter what the sign is.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">17</span>;
<span class="hljs-keyword">const</span> result = n &gt;&gt;&gt; <span class="hljs-number">1</span>; <span class="hljs-comment">// 8</span>


<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">17</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00010001</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">8</span>));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00001000</span>
</code></pre>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> n = <span class="hljs-number">-17</span>;
<span class="hljs-keyword">const</span> result = n &gt;&gt;&gt; <span class="hljs-number">1</span>; <span class="hljs-comment">// 2147483639</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">-17</span>));
<span class="hljs-comment">// -&gt; 11111111 11111111 11111111 11101111</span>

<span class="hljs-built_in">console</span>.log(createBinaryString(<span class="hljs-number">2147483639</span>));
<span class="hljs-comment">// -&gt; 01111111 11111111 11111111 11110111</span>
</code></pre>
<h3 id="heading-getting-a-bit">Getting a bit</h3>
<p>To get a specific bit, we first need to create a <strong>bitmask</strong>. We can do this by shifting <code>1</code> to the left by the index of the bit we want to get. The result is the <strong>AND</strong> of the binary number and the bitmask.</p>
<p>But using JavaScript, we can also do an unsigned right shift by the index to put the bit in the first place (so that we don't get the actual value that is in that position, but whether it is a <code>1</code> or a <code>0</code>):</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBit</span>(<span class="hljs-params">number, idx</span>) </span>{
  <span class="hljs-keyword">const</span> bitMask = <span class="hljs-number">1</span> &lt;&lt; idx;
  <span class="hljs-keyword">const</span> result = number &amp; bitMask;

  <span class="hljs-keyword">return</span> result &gt;&gt;&gt; idx;
}
</code></pre>
<p>For example, let's try <code>13</code>, which is <code>1101</code> in binary:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> binaryNumber = <span class="hljs-number">0b1101</span>;

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Bit at position 0:'</span>, getBit(binaryNumber, <span class="hljs-number">0</span>));
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Bit at position 1:'</span>, getBit(binaryNumber, <span class="hljs-number">1</span>));
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Bit at position 2:'</span>, getBit(binaryNumber, <span class="hljs-number">2</span>));
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Bit at position 3:'</span>, getBit(binaryNumber, <span class="hljs-number">3</span>));

<span class="hljs-comment">/*
Output:

Bit at position 0: 1
Bit at position 1: 0
Bit at position 2: 1
Bit at position 3: 1
*/</span>
</code></pre>
<h3 id="heading-setting-a-bit">Setting a bit</h3>
<p>If we want to turn a bit to <code>1</code> (in other words, to "<em>set a bit</em>"), we can do a similar thing.</p>
<p>First, we can create a bitmask again by shifting <code>1</code> to the left by the index of the bit we want to set to <code>1</code>. The result is the <strong>OR</strong> of the number and the bitmask:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setBit</span>(<span class="hljs-params">number, idx</span>) </span>{
  <span class="hljs-keyword">const</span> bitMask = <span class="hljs-number">1</span> &lt;&lt; idx;
  <span class="hljs-keyword">return</span> number | bitMask;    
}
</code></pre>
<p>Remember that in our example <code>13</code> was <code>1101</code> in binary, let's say we want to set the <code>0</code> at index 1:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> binaryNumber = <span class="hljs-number">0b1101</span>;
<span class="hljs-keyword">const</span> newBinaryNumber = setBit(binaryNumber, <span class="hljs-number">1</span>);

<span class="hljs-built_in">console</span>.log(createBinaryString(newBinaryNumber));
<span class="hljs-comment">// -&gt; 00000000 00000000 00000000 00001111</span>

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Bit at position 1:'</span>, getBit(newBinaryNumber, <span class="hljs-number">1</span>));
<span class="hljs-comment">// -&gt; Bit at position 1: 1</span>
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>With some detours here and there, we took a look at fourteen (or fifteen, if you count our <em>interlude</em>) different concepts, from arrays and hashing to bit manipulation.</p>
<p>Although I have to say that eventually, with time, it’s easy to forget all that we learned. But, that's not a problem in itself, because as you might have realized, if there is one idea that should stick with you with this handbook, it’s that problems are best solved when they are broken into smaller parts. And, as with anything else, writing or talking to yourself (see <a target="_blank" href="https://www.freecodecamp.org/news/rubber-duck-debugging/">duck debugging</a>) works miracles.</p>
<p>Now, it's time to take a deep breath.</p>
<p>It was a delightful adventure to explore data structures and algorithms, and hopefully you found some value in it.</p>
<p>Have a beautiful journey ahead, and until then, happy coding.</p>
<h3 id="heading-resources-amp-credits">Resources &amp; Credits</h3>
<p>This handbook was mainly inspired by the amazing <a target="_blank" href="https://medium.com/basecs">BaseCS series</a> by Vaidehi Joshi, which is an incredible resource for learning basic computer science concepts.</p>
<p>The visualization idea was inspired by Lydia Hallie's <a target="_blank" href="https://dev.to/lydiahallie/series/3341">JavaScript Visualized series</a>.</p>
<p>Of course, you can also check out <a target="_blank" href="https://neetcode.io/courses">NeetCode's courses</a> which can be incredibly helpful for a serious study.</p>
<p>There are many other resources to check out if you want to go further, here are some of the ones I used in our exploration:</p>
<ul>
<li><p><a target="_blank" href="http://brilliant.org">brilliant.org</a></p>
</li>
<li><p><a target="_blank" href="http://leetcodethehardway.com">leetcodethehardway.com</a></p>
</li>
<li><p><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference">MDN Web Docs</a></p>
</li>
<li><p><a target="_blank" href="http://baeldung.com/cs">baeldung.com/cs</a></p>
</li>
<li><p><a target="_blank" href="https://lucasfcosta.com/2018/12/25/bitwise-operations.html"><em>The Absolute Essentials for Bit Manipulation in JavaScript</em> by Lucas F. Costa</a></p>
</li>
<li><p><a target="_blank" href="https://condor.depaul.edu/ntomuro/courses/402/notes/heap.html">Heap &amp; HeapSort - Noriko Tomuro</a></p>
</li>
<li><p><a target="_blank" href="https://faculty.cs.niu.edu/~freedman/340/340notes/340heap.htm">Heaps - Professor Reva Freedman</a></p>
</li>
<li><p><a target="_blank" href="https://realpython.com/how-to-implement-python-stack/#using-collectionsdeque-to-create-a-python-stack">"Using <code>collections.deque</code> to Create a Python Stack" - Jim Anderson</a></p>
</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Learn A-Level Computer Science Concepts ]]>
                </title>
                <description>
                    <![CDATA[ Understanding fundamental programming concepts is crucial for success in computer science, especially for students preparing for the Cambridge A-Level Computer Science exam. Mastering these topics not only helps in exams but also builds a strong foun... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/learn-a-level-computer-science-concepts/</link>
                <guid isPermaLink="false">67ae2dae801148b110575d1c</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Thu, 13 Feb 2025 17:36:46 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739496613329/9a7ef36b-53ef-4b9f-8bc9-9992293cdaa9.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Understanding fundamental programming concepts is crucial for success in computer science, especially for students preparing for the Cambridge A-Level Computer Science exam. Mastering these topics not only helps in exams but also builds a strong foundation for real-world software development. One of the best ways to grasp these concepts is through practical implementation in a programming language like VB.NET, which is widely used for teaching structured and object-oriented programming.</p>
<p>We just published a course on the <a target="_blank" href="http://freeCodeCamp.org">freeCodeCamp.org</a> YouTube channel that will teach you all about the essential programming concepts required for Cambridge A-Level Computer Science, with a focus on VB.NET implementation. This comprehensive course, developed by Moarz, provides clear and practical explanations of key topics such as Object-Oriented Programming (OOP), algorithms, and Abstract Data Types (ADTs). Whether you're preparing for an exam or looking to deepen your understanding of computer science fundamentals, this course offers valuable insights and hands-on coding demonstrations.</p>
<p>The course begins with an introduction to Object-Oriented Programming, covering fundamental principles such as classes, objects, inheritance, and polymorphism. These concepts are essential for writing modular and reusable code, which is a key skill in both academic and professional settings.</p>
<p>Next, the course covers algorithms, including essential searching and sorting techniques. Understanding algorithms is important for writing efficient code, and this section explains the logic behind popular methods such as bubble sort, quicksort, and binary search. By implementing these algorithms in VB.NET, learners can develop a solid grasp of computational thinking and problem-solving strategies.</p>
<p>The final section explores Abstract Data Types (ADTs), a core concept in computer science that involves data structures like linked lists and binary trees. ADTs help organize and manage data efficiently, making them essential for building complex software systems. The course breaks down these structures in an easy-to-understand way, demonstrating their real-world applications.</p>
<p>By the end of this course, you'll have a strong understanding of programming concepts that are critical for Cambridge A-Level Computer Science and beyond. Watch the full course on the <a target="_blank" href="https://youtu.be/VvKcxBBqQJ8">freeCodeCamp.org YouTube channel</a> (3-hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/VvKcxBBqQJ8" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 1200 Free Computer Science Courses from the World’s Top Universities ]]>
                </title>
                <description>
                    <![CDATA[ In this article, we’ve compiled 1000+ online courses offered by the 60 best universities in the world for studying computer science in 2025. We first built the list in 2020 using a data-driven approac ]]>
                </description>
                <link>https://www.freecodecamp.org/news/free-courses-top-cs-universities/</link>
                <guid isPermaLink="false">66c376aef278f15f931a3431</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ education ]]>
                    </category>
                
                    <category>
                        <![CDATA[ self-improvement  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manoel ]]>
                </dc:creator>
                <pubDate>Tue, 28 Jan 2025 06:00:00 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1738170135222/602b9c8f-09ff-42ca-ad26-cec5fc06a7ef.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In this article, we’ve compiled 1000+ online courses offered by the 60 best universities in the world for studying computer science in 2025.</p>
<p>We first built the list in 2020 using a data-driven approach that we have used each year, including 2025. You can find the methodology below.</p>
<h2 id="heading-methodology"><strong>Methodology</strong></h2>
<p>First, we identified the&nbsp;<a href="https://en.wikipedia.org/wiki/College_and_university_rankings#Global_rankings"><strong>leading world university rankings</strong></a>. Since we were interested in computer science specifically, he looked at their latest computer science rankings.</p>
<p>For the 2025 update, Suparn, my colleague used the same sources and methodology to find the top 60 universities offering online computer science courses.</p>
<p>Here are the rankings used:</p>
<ul>
<li><p><strong>QS:</strong> <a href="https://www.topuniversities.com/university-subject-rankings/computer-science-information-systems"><strong>World University Ranking 2025 — Computer Science &amp; IT</strong></a></p>
</li>
<li><p><strong>Times Higher Education:</strong> <a href="https://www.timeshighereducation.com/world-university-rankings/2025/subject-ranking/computer-science"><strong>World University Ranking 2025 — Computer Science</strong></a></p>
</li>
</ul>
<p>Then, we crawled and scraped each ranking.</p>
<p>Now that we had some data, we used&nbsp;<a href="https://jupyter.org/"><strong>Jupyter</strong></a> with Python to process it. We combined the two rankings into one by averaging the position of each university in each ranking. Then, we filtered out the universities that didn’t offer online courses, and limited the list to the top 60 institutions — the cream of the crop.</p>
<img src="https://cdn.hashnode.com/uploads/covers/67609e10de2c94d89bd72b33/72627f3f-8db1-41a9-a00f-5f50ec8e5d48.png" alt="72627f3f-8db1-41a9-a00f-5f50ec8e5d48" style="display:block;margin:0 auto" width="644" height="706" loading="lazy">

<p><em>Combined ranking: top 10 universities for studying computer science in 2024</em></p>
<p>As you can see above, we found that the top three institutions are <strong>#1</strong>&nbsp;<a href="https://www.classcentral.com/university/mit"><strong>MIT</strong></a>, &nbsp;<strong>#2</strong> <a href="https://www.classcentral.com/university/oxford"><strong>Oxford</strong></a> , and <strong>#3</strong> <a href="https://www.classcentral.com/university/stanford"><strong>Stanford</strong></a>.</p>
<p>Finally, we used the&nbsp;<a href="https://www.classcentral.com/subjects"><strong>Class Central database</strong></a>, with its 250K online courses, to find all the computer science courses offered by the universities in the ranking.</p>
<p>The end result is a list of 1000+ online courses offered by the 60 best universities in the world for studying computer science in 2025.</p>
<h2 id="heading-stats"><strong>Stats</strong></h2>
<ul>
<li><p>Enrollments range from 10 to over 13 million, with 14 courses exceeding 1 million enrollments</p>
</li>
<li><p>Altogether, they have over 81M enrollments, with an average of 222K enrollments</p>
</li>
<li><p>921 courses are in English, 114 Chinese, 5 Spanish, and 3 French</p>
</li>
<li><p>Together, they account for more than 78K reviews at Class Central, with an average of 216 reviews</p>
</li>
<li><p>Average rating: 4.37 out of 5.0</p>
</li>
<li><p>All these courses are free or can be audited for free</p>
</li>
<li><p>104 courses are beginner level, 111 are intermediate level, and 49 are advanced level.</p>
</li>
</ul>
<h2 id="heading-more-courses"><strong>More Courses</strong></h2>
<img src="https://www.classcentral.com/report/wp-content/uploads/2021/12/free-certificates-banner.png" alt="free-certificates-banner" style="display:block;margin:0 auto" width="1024" height="512" loading="lazy">

<p>The full list is split into subjects. With over 1000 courses to pick from, I hope you find something you like. But if these aren’t enough, check out&nbsp;<a href="https://www.classcentral.com/"><strong>Class Central’s catalog</strong></a> of 250K online courses or our thematic collections:</p>
<ul>
<li><p><a href="https://www.classcentral.com/report/free-developer-it-certifications/"><strong>2000+ Free Developer and IT Certifications</strong></a></p>
</li>
<li><p><a href="https://www.classcentral.com/report/harvard-cs50-guide/"><strong>Harvard Computer Science Courses with Free Certificate</strong></a></p>
</li>
<li><p><a href="https://www.classcentral.com/report/wolfram-u-free-certificates/"><strong>40+ Free Certificates from Wolfram U</strong></a></p>
</li>
<li><p><a href="https://www.classcentral.com/report/free-codesignal-certificates/"><strong>800+ Free Certificates: Master Tech &amp; Soft Skills with CodeSignal Learn</strong></a></p>
</li>
<li><p><a href="https://www.classcentral.com/report/big-tech-free-courses/"><strong>10,000+ Free Courses from Tech Giants: Learn from Google, Microsoft, Amazon, and More</strong></a></p>
</li>
<li><p><a href="https://www.classcentral.com/report/ocw-courses/"><strong>8000+ OpenCourseWare Courses from Top Institutions</strong></a>.</p>
</li>
</ul>
<h2 id="heading-computer-science-727"><strong>Computer Science (727)</strong></h2>
<ul>
<li><p><a href="https://www.classcentral.com/course/freecodecamp-harvard-cs50-full-computer-science-university-course-119762?ref=freecodecamp"><strong>Harvard CS50 – Full Computer Science University Course</strong></a> from <em>Harvard University</em> ★★★★★(1012)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-harvard-university-cs50-s-introd-442?ref=freecodecamp"><strong>CS50's Introduction to Computer Science</strong></a> from <em>Harvard University</em> ★★★★★(204)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-034-artificial-intelligence-fall-2010-40938?ref=freecodecamp"><strong>Artificial Intelligence</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(182)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-01sc-introduction-to-electrical-engineering-and-computer-science-i-spring-2011-40932?ref=freecodecamp"><strong>Introduction to Electrical Engineering and Computer Science I</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(58)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-advanced-algorithms-compsci-224-48051?ref=freecodecamp"><strong>Advanced Algorithms - COMPSCI 224</strong></a> from <em>Harvard University</em> ★★★★★(35)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-introduction-to-artificial-intelligence-301?ref=freecodecamp"><strong>Introduction to Artificial Intelligence</strong></a> from <em>Stanford University</em> ★★★★☆(31)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-massachusetts-institute-of-techn-11483?ref=freecodecamp"><strong>Machine Learning with Python: from Linear Models to Deep Learning.</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★☆☆(30)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-harvard-university-cs50-s-18122?ref=freecodecamp"><strong>CS50's Introduction to Artificial Intelligence with Python</strong></a> from <em>Harvard University</em> ★★★★★(29)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-georgia-institute-of-technolo-23256?ref=freecodecamp"><strong>Data Structures &amp; Algorithms I: ArrayLists, LinkedLists, Stacks and Queues</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(28)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-006-introduction-to-algorithms-spring-2020-66373?ref=freecodecamp"><strong>Introduction to Algorithms</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(25)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-harvard-university-cs50-s-comput-10143?ref=freecodecamp"><strong>CS50’s Computer Science for Business</strong></a> from <em>Harvard University</em> ★★★★★(21)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-intro-to-machine-learning-2996?ref=freecodecamp"><strong>Intro to Machine Learning</strong></a> from <em>Stanford University</em> ★★★★☆(20)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/coding-stanford-university-automata-theory-376?ref=freecodecamp"><strong>Automata Theory</strong></a> from <em>Stanford University</em> ★★★★☆(20)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-introduction-to-deep-learning-53113?ref=freecodecamp"><strong>Introduction to Deep Learning</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(20)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-stanford-university-computer-sci-2175?ref=freecodecamp"><strong>Computer Science 101</strong></a> from <em>Stanford University</em> ★★★★☆(19)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-mas-s62-cryptocurrency-engineering-and-design-spring-2018-40972?ref=freecodecamp"><strong>Cryptocurrency Engineering and Design</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(19)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/human-computer-interaction-the-georgia-institute--14444?ref=freecodecamp"><strong>Human-Computer Interaction I: Fundamentals &amp; Design Principles</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(15)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/coding-university-of-british-columbia-how-to-code-3465?ref=freecodecamp"><strong>How to Code: Simple Data</strong></a> from <em>The University of British Columbia</em> ★★★★☆(15)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-design-of-computer-programs-323?ref=freecodecamp"><strong>Design of Computer Programs</strong></a> from <em>Stanford University</em> ★★★★☆(14)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/unix-delft-university-of-technology-unix-tools-da-18180?ref=freecodecamp"><strong>Unix Tools: Data, Software and Production Engineering</strong></a> from <em>Delft University of Technology</em> ★★★★★(13)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-for-clinical-trials-and-precision-medicine-ruishan-liu-132489?ref=freecodecamp"><strong>AI for Clinical Trials and Precision Medicine - Ruishan Liu</strong></a> from <em>Stanford University</em> ★★★★★(11)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-learning-from-data-introductory-machine-learning-course-366?ref=freecodecamp"><strong>Learning from Data (Introductory Machine Learning course)</strong></a> from <em>California Institute of Technology</em> ★★★★★(10)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-harvard-university-cs50-s-comput-16857?ref=freecodecamp"><strong>CS50's Computer Science for Lawyers</strong></a> from <em>Harvard University</em> ★★★★★(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/information-technology-the-georgia-institute-of-t-5898?ref=freecodecamp"><strong>Information and Communication Technology (ICT) Accessibility</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-reinforcement-learning-1849?ref=freecodecamp"><strong>Reinforcement Learning</strong></a> from <em>Brown University</em> ★★★☆☆(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-the-university-of-california-san-8216?ref=freecodecamp"><strong>Machine Learning Fundamentals</strong></a> from <em>University of California, San Diego</em> ★★★★☆(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016-40930?ref=freecodecamp"><strong>Introduction to Computer Science and Programming in Python</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-machine-learning-1020?ref=freecodecamp"><strong>Machine Learning</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-introduction-to-computer-vision-1022?ref=freecodecamp"><strong>Introduction to Computer Vision</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-georgia-institute-of-technolo-23255?ref=freecodecamp"><strong>Data Structures &amp; Algorithms II: Binary Trees, Heaps, SkipLists and HashMaps</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-172-performance-engineering-of-software-systems-fall-2018-40943?ref=freecodecamp"><strong>Performance Engineering of Software Systems</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-lecture-collection-convolutional-neural-networks-for-visual-recognition-spring-2017-53111?ref=freecodecamp"><strong>Convolutional Neural Networks for Visual Recognition</strong></a> from <em>Stanford University</em> ★★★★☆(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-advanced-operating-systems-1016?ref=freecodecamp"><strong>Advanced Operating Systems</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-introduction-to-computer-architecture-642?ref=freecodecamp"><strong>Introduction to Computer Architecture</strong></a> from <em>Carnegie Mellon University</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-computer-networking-2336?ref=freecodecamp"><strong>Computer Networking</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-georgia-institute-of-technolo-23283?ref=freecodecamp"><strong>Data Structures &amp; Algorithms III: AVL and 2-4 Trees, Divide and Conquer Algorithms</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-s897-machine-learning-for-healthcare-spring-2019-40955?ref=freecodecamp"><strong>Machine Learning for Healthcare</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-824-distributed-systems-spring-2020-53357?ref=freecodecamp"><strong>MIT 6.824 Distributed Systems - Spring 2020</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-university-of-california-san--10436?ref=freecodecamp"><strong>Data Structures: An Active Learning Approach</strong></a> from <em>University of California, San Diego</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/coding-university-of-british-columbia-how-to-code-3464?ref=freecodecamp"><strong>How to Code: Complex Data</strong></a> from <em>The University of British Columbia</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-georgia-institute-of-technolo-23282?ref=freecodecamp"><strong>Data Structures &amp; Algorithms IV: Pattern Matching, Dijkstra’s, MST, and Dynamic Programming Algorithms</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-distributed-systems-lecture-series-53062?ref=freecodecamp"><strong>Distributed Systems</strong></a> from <em>University of Cambridge</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ece-252-53359?ref=freecodecamp"><strong>Electrical and Computer Engineering - Systems Programming and Concurrency</strong></a> from <em>University of Waterloo</em> ★★★★☆(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/human-computer-interaction-the-georgia-institute--14445?ref=freecodecamp"><strong>Human-Computer Interaction II: Cognition, Context &amp; Culture</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-6-s191-introduction-to-deep-learning-8083?ref=freecodecamp"><strong>6.S191: Introduction to Deep Learning</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-0002-introduction-to-computational-thinking-and-data-science-fall-2016-40931?ref=freecodecamp"><strong>Introduction to Computational Thinking and Data Science</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-2025-ai-education-summit-welcome-remarks-433719?ref=freecodecamp"><strong>AI and Education Summit: Transforming Learning and Workforce Readiness</strong></a> from <em>Stanford University</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-software-architecture-design-3418?ref=freecodecamp"><strong>Software Architecture &amp; Design</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/logic-stanford-university-language-proof-and-logi-2340?ref=freecodecamp"><strong>Language, Proof and Logic</strong></a> from <em>Stanford University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-machine-learning-unsupervised-learning-1848?ref=freecodecamp"><strong>Machine Learning: Unsupervised Learning</strong></a> from <em>Brown University</em> ★★★☆☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-the-university-of-california-san-diego-10241?ref=freecodecamp"><strong>Algorithmic Design and Techniques</strong></a> from <em>University of California, San Diego</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-using-electronic-health-records-for-better-care-110035?ref=freecodecamp"><strong>Using Electronic Health Records for Better Care</strong></a> from <em>Stanford University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-design-ai-envisioning-ai-augmented-products-191650?ref=freecodecamp"><strong>Design &amp; AI - Envisioning AI-Augmented Products</strong></a> from <em>Stanford University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-security-and-the-software-defined-network-110036?ref=freecodecamp"><strong>Stanford Seminar - Security and the Software Defined Network</strong></a> from <em>Stanford University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-self-driving-cars-for-everyone-191985?ref=freecodecamp"><strong>Stanford Seminar - Self-Driving Cars for Everyone</strong></a> from <em>Stanford University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-practical-blockchain-applications-steven-pu-108719?ref=freecodecamp"><strong>Stanford Seminar - Practical Blockchain Applications - Steven Pu</strong></a> from <em>Stanford University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-iot-from-smart-sensors-to-smart-networks-110007?ref=freecodecamp"><strong>Stanford Webinar - IOT: From Smart Sensors to Smart Networks</strong></a> from <em>Stanford University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-gender-disparities-in-software-engineering-191916?ref=freecodecamp"><strong>Stanford Seminar - Gender Disparities in Software Engineering</strong></a> from <em>Stanford University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-introduction-to-operating-systems-3419?ref=freecodecamp"><strong>Introduction to Operating Systems</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/human-computer-interaction-the-georgia-institute--14447?ref=freecodecamp"><strong>Human-Computer Interaction IV: Evaluation, Agile Methods &amp; Beyond</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-deep-learning-for-natural-language-processing-8097?ref=freecodecamp"><strong>Deep Learning for Natural Language Processing</strong></a> from <em>University of Oxford</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/software-engineering-university-of-british-columb-8205?ref=freecodecamp"><strong>Software Engineering: Introduction</strong></a> from <em>The University of British Columbia</em> ★★★☆☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-knowledge-based-ai-cognitive-systems-1025?ref=freecodecamp"><strong>Knowledge-Based AI: Cognitive Systems</strong></a> from <em>Georgia Institute of Technology</em> ★★★☆☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-delft-university-of-technology--9760?ref=freecodecamp"><strong>The Quantum Internet and Quantum Computers: How Will They Change the World?</strong></a> from <em>Delft University of Technology</em> ★★★☆☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-6-s094-deep-learning-for-self-driving-cars-8132?ref=freecodecamp"><strong>6.S094: Deep Learning for Self-Driving Cars</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-046j-introduction-to-algorithms-sma-5503-fall-2005-40942?ref=freecodecamp"><strong>Introduction to Algorithms (SMA 5503)</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-opencourseware-introduction-to-computer-science-and-programming-fall-2008-40929?ref=freecodecamp"><strong>Introduction to Computer Science and Programming (Fall 2008)</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs547-human-computer-interaction-seminar-series-107766?ref=freecodecamp"><strong>Stanford - Human-Computer Interaction Seminar Series</strong></a> from <em>Stanford University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-to-compute-with-schroedinger-s-cat-an-introduction-to-quantum-computing-110031?ref=freecodecamp"><strong>How to Compute with Schrödinger's Cat - An Introduction to Quantum Computing</strong></a> from <em>Stanford University</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-web3-considered-possible-futures-for-decentralization-and-digital-ownership-191575?ref=freecodecamp"><strong>Web3 Considered - Possible Futures for Decentralization and Digital Ownership</strong></a> from <em>Stanford University</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-race-technology-and-algorithmic-bias-vision-justice-radcliffe-institute-179689?ref=freecodecamp"><strong>Race, Technology, and Algorithmic Bias - Vision and Justice</strong></a> from <em>Harvard University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-deepmind-x-ucl-deep-learning-lecture-series-2020-45714?ref=freecodecamp"><strong>Deep Learning Lecture Series</strong></a> from <em>University College London</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-unsupervised-biomedical-image-segmentation-using-hyperbolic-representations-jeffrey-gu-132501?ref=freecodecamp"><strong>Towards Unsupervised Biomedical Image Segmentation Using Hyperbolic Representations - Jeffrey Gu</strong></a> from <em>Stanford University</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-creating-human-computer-partnerships-269978?ref=freecodecamp"><strong>Creating Human-Computer Partnerships - Stanford Seminar</strong></a> from <em>Stanford University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-decision-transformer-reinforcement-learning-via-sequence-modeling-191606?ref=freecodecamp"><strong>Stanford Seminar - Decision Transformer: Reinforcement Learning via Sequence Modeling</strong></a> from <em>Stanford University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-computability-complexity-algorithms-1024?ref=freecodecamp"><strong>Computability, Complexity &amp; Algorithms</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-high-performance-computer-architecture-1018?ref=freecodecamp"><strong>High Performance Computer Architecture</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/health-informatics-the-georgia-institute-of-techn-13541?ref=freecodecamp"><strong>Health Informatics: A Current and Historical Perspective</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/human-computer-interaction-the-georgia-institute--14446?ref=freecodecamp"><strong>Human-Computer Interaction III: Ethics, Needfinding &amp; Prototyping</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-stanford-university-compilers-2716?ref=freecodecamp"><strong>Compilers</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-introduction-to-graduate-algorithms-10625?ref=freecodecamp"><strong>Introduction to Graduate Algorithms</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/object-oriented-programming-university-of-british-8201?ref=freecodecamp"><strong>Software Construction: Object-Oriented Design</strong></a> from <em>The University of British Columbia</em> ★★☆☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-purdue-university-introduction-t-47957?ref=freecodecamp"><strong>Introduction to Scientific Machine Learning</strong></a> from <em>Purdue University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/java-university-of-british-columbia-software-cons-8200?ref=freecodecamp"><strong>Software Construction: Data Abstraction</strong></a> from <em>The University of British Columbia</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-delft-university-of-technology-m-204582?ref=freecodecamp"><strong>Machine Learning for Semiconductor Quantum Devices</strong></a> from <em>Delft University of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-tsinghua-university-data-structur-5720?ref=freecodecamp"><strong>Data Structures and Algorithm Design Part II | 数据结构与算法设计(下)</strong></a> from <em>Tsinghua University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-massachusetts-institute-of-t-192616?ref=freecodecamp"><strong>Introduction to Computational Science and Engineering</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/javascript-ecole-polytechnique-federale-de-lausan-6881?ref=freecodecamp"><strong>Nature, in Code: Biology in JavaScript</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-006-introduction-to-algorithms-fall-2011-40936?ref=freecodecamp"><strong>Introduction to Algorithms</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-042j-mathematics-for-computer-science-fall-2010-40941?ref=freecodecamp"><strong>Mathematics for Computer Science</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-046j-design-and-analysis-of-algorithms-spring-2015-70694?ref=freecodecamp"><strong>Design and Analysis of Algorithms</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-opencourseware-introduction-to-computer-science-and-programming-spring-2011-40928?ref=freecodecamp"><strong>Introduction to Computer Science and Programming (Spring 2011)</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-boltzmann-law-physi-21012?ref=freecodecamp"><strong>Boltzmann Law: Physics to Computing</strong></a> from <em>Purdue University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-deep-learning-for-computer-vision-46762?ref=freecodecamp"><strong>Deep Learning for Computer Vision</strong></a> from <em>University of Michigan</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-chicago-quantum-c-56654?ref=freecodecamp"><strong>Quantum Computer Systems Design III: Working with Noisy Systems</strong></a> from <em>The University of Chicago</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-massachusetts-institute-of-technolog-107514?ref=freecodecamp"><strong>Understanding the World Through Data</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-learning-and-memory-180526?ref=freecodecamp"><strong>Learning and Memory</strong></a> from <em>Yale University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-beyond-cryptocurrency-blockchain-for-the-real-world-110002?ref=freecodecamp"><strong>Beyond Cryptocurrency: Blockchain for the Real World</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/blockchain-university-of-toronto-blockchain-princ-292544?ref=freecodecamp"><strong>Dive Into the World of Blockchain: Principles, Mechanics, and Tokens</strong></a> from <em>University of Toronto</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-rethinking-the-ai-ux-boundary-for-designing-human-ai-experiences-108697?ref=freecodecamp"><strong>Rethinking the AI-UX Boundary for Designing Human-AI Experiences</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-how-chatgpt-and-generative-ai-will-shape-the-future-of-work-191522?ref=freecodecamp"><strong>How ChatGPT and Generative AI Will Shape the Future of Work</strong></a> from <em>Stanford University</em> ★☆☆☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-not-to-generate-random-numbers-110037?ref=freecodecamp"><strong>Stanford Seminar - How Not to Generate Random Numbers</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-building-the-smartest-and-open-virtual-assistant-to-protect-privacy-monica-lam-108721?ref=freecodecamp"><strong>Stanford Seminar - Building the Smartest and Open Virtual Assistant to Protect Privacy - Monica Lam</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-grey-yang-tuning-gpt-3-on-a-single-gpu-via-zero-shot-hyperparameter-transfer-127043?ref=freecodecamp"><strong>Tuning GPT-3 on a Single GPU via Zero-Shot Hyperparameter Transfer</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-recurrent-neural-networks-128111?ref=freecodecamp"><strong>MIT: Recurrent Neural Networks</strong></a> from <em>Alexander Amini</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-wireless-above-100ghz-132468?ref=freecodecamp"><strong>Wireless Above 100GHz</strong></a> from <em>New York University (NYU)</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-generalization-and-personalization-in-federated-learning-karan-singhal-132497?ref=freecodecamp"><strong>Generalization and Personalization in Federated Learning - Karan Singhal</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-graph-based-modeling-in-computational-pathology-siyi-tang-132509?ref=freecodecamp"><strong>MedAI- Graph-Based Modeling in Computational Pathology - Siyi Tang</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-erik-altman-synthetic-data-sets-for-the-financial-industry-454143?ref=freecodecamp"><strong>Synthetic Data Sets for the Financial Industry</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-martin-riedmiller-learning-controllers-from-engineering-to-agi-127044?ref=freecodecamp"><strong>Learning Controllers - From Engineering to AGI</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-google-s-multilingual-neural-machine-translation-system-192015?ref=freecodecamp"><strong>Stanford Seminar - Google's Multilingual Neural Machine Translation System</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-deep-generative-modeling-128090?ref=freecodecamp"><strong>Deep Generative Modeling</strong></a> from <em>Alexander Amini</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-regulatory-evaluation-of-image-processing-software-devices-182529?ref=freecodecamp"><strong>Regulatory Evaluation of Image Processing Software Devices</strong></a> from <em>Yale University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-edge-computing-in-autonomous-vehicles-panel-discussion-191812?ref=freecodecamp"><strong>Edge Computing in Autonomous Vehicles - Panel Discussion</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-finding-fairness-cynthia-dwork-radcliffe-institute-179716?ref=freecodecamp"><strong>Finding Fairness - Incorporating Societal Values in Computer Algorithms</strong></a> from <em>Harvard University</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-exploring-the-implications-of-machine-learning-for-cognitive-disabilities-191925?ref=freecodecamp"><strong>Exploring the Implications of Machine Learning for Cognitive Disabilities</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-molecular-imaging-182537?ref=freecodecamp"><strong>AI in Molecular Imaging</strong></a> from <em>Yale University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-toward-scalable-autonomy-aleksandra-faust-108695?ref=freecodecamp"><strong>Stanford Seminar - Toward Scalable Autonomy - Aleksandra Faust</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-pioneering-the-science-of-information-179114?ref=freecodecamp"><strong>Pioneering the Science of Information - IBM's Role in Shaping Information Technology</strong></a> from <em>University of Melbourne</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-soul-of-a-new-machine-rethinking-the-computer-191784?ref=freecodecamp"><strong>The Soul of a New Machine - Rethinking the Computer</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-2-prefix-free-codes-289250?ref=freecodecamp"><strong>Data Compression I - Lecture 2: Prefix Free Codes</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-ei-seminar-russ-tedrake-feedback-control-from-pixels-127056?ref=freecodecamp"><strong>Feedback Control from Pixels</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-visualization-for-machine-learning-google-brain-128104?ref=freecodecamp"><strong>Visualization for Machine Learning - Google Brain</strong></a> from <em>Alexander Amini</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-2025-ai-education-summit-daniel-schwartz-the-information-age-the-age-of-creation-438141?ref=freecodecamp"><strong>The Information Age and The Age of Creation</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-stanford-university-algorithms-design--8984?ref=freecodecamp"><strong>Algorithms: Design and Analysis, Part 1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-cyber-physical-systems-design-analysis-10473?ref=freecodecamp"><strong>Cyber-Physical Systems Design &amp; Analysis</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-artificial-intelligence-8565?ref=freecodecamp"><strong>Artificial Intelligence</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-british-columbia--120532?ref=freecodecamp"><strong>Introduction to Quantum Computing</strong></a> from <em>The University of British Columbia</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-human-computer-interaction-8567?ref=freecodecamp"><strong>Human-Computer Interaction</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-hacker-tools-13160?ref=freecodecamp"><strong>Hacker Tools</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-high-performance-computing-1028?ref=freecodecamp"><strong>High Performance Computing</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-columbia-university-programming--295555?ref=freecodecamp"><strong>Programming &amp; Data Structures</strong></a> from <em>Columbia University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-the-georgia-institute-of--274065?ref=freecodecamp"><strong>AI for Teacher Assistance</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-stanford-university-algorithms-design--19393?ref=freecodecamp"><strong>Algorithms: Design and Analysis, Part 2</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/introduction-to-blockchain-dlt-54642?ref=freecodecamp"><strong>Introduction to Blockchain Technology and Applications</strong></a> from <em>University College London</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-harvard-university-machine-learn-270681?ref=freecodecamp"><strong>Machine Learning and AI with Python</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-delft-university-of-techn-146908?ref=freecodecamp"><strong>AI skills: Introduction to Unsupervised, Deep and Reinforcement Learning</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/health-informatics-the-georgia-institute-of-techn-13542?ref=freecodecamp"><strong>Health Informatics: Data and Interoperability Standards</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-delft-university-of-technology-d-204583?ref=freecodecamp"><strong>Development and Applications of Germanium Quantum Technologies</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/ethics-delft-university-of-technology-ethics-in-a-190753?ref=freecodecamp"><strong>Ethics in AI Design</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-purdue-university-compute-52912?ref=freecodecamp"><strong>Computer Applications of Artificial Intelligence and e-Construction</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-delft-university-of-techn-146907?ref=freecodecamp"><strong>AI skills for Engineers: Supervised Machine Learning</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-arm-education-ai-at-the-edge-on--440497?ref=freecodecamp"><strong>AI at the Edge on Arm: Understanding and Deploying LLMs for Mobile Devices</strong></a> from <em>Arm Education</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-compilers-theory-and-practice-8572?ref=freecodecamp"><strong>Compilers: Theory and Practice</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/image-analysis-ecole-polytechnique-federale-de-la-12066?ref=freecodecamp"><strong>Image Processing and Analysis for Life Scientists</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-the-georgia-institute-of--274063?ref=freecodecamp"><strong>Assessment Design with AI</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-introduction-to-dee-33404?ref=freecodecamp"><strong>Introduction to Deep Learning</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/chatbots-the-georgia-institute-of-technology-chat-274064?ref=freecodecamp"><strong>Chatbots for Instruction</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/problem-solving-delft-university-of-technology-co-284459?ref=freecodecamp"><strong>Complex Problem Structuring: a Socio-Technical Perspective</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-the-georgia-institute-of-technol-9695?ref=freecodecamp"><strong>Machine Learning</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/health-informatics-the-georgia-institute-of-techn-13543?ref=freecodecamp"><strong>Health Informatics: The Cutting Edge</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-the-university-of-california-san-302383?ref=freecodecamp"><strong>Computer Graphics II: Rendering</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-graphics-the-university-of-california-sa-127752?ref=freecodecamp"><strong>Computer Graphics</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/iot-internet-of-things-ecole-polytechnique-federa-47956?ref=freecodecamp"><strong>IoT Systems and Industrial Applications with Design Thinking</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-chicago-introduct-24327?ref=freecodecamp"><strong>Introduction to Quantum Computing for Everyone</strong></a> from <em>The University of Chicago</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-statistical-machine-learning-8509?ref=freecodecamp"><strong>Statistical Machine Learning</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-delft-university-of-technology--34203?ref=freecodecamp"><strong>Fundamentals of Quantum Information</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-quantum-computing-i-21183?ref=freecodecamp"><strong>Applied Quantum Computing I: Fundamentals</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/gamification-the-georgia-institute-of-technology--9485?ref=freecodecamp"><strong>Accessible Gamification</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-quantum-computing-i-21186?ref=freecodecamp"><strong>Applied Quantum Computing III: Algorithm and Software</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-structures-the-university-of-california-san--10246?ref=freecodecamp"><strong>Data Structures Fundamentals</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/embedded-systems-purdue-university-computer-visio-96635?ref=freecodecamp"><strong>Computer Vision for Embedded Systems</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-the-university-of-california-san-diego-10247?ref=freecodecamp"><strong>Graph Algorithms</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/technology-eth-zurich-self-driving-cars-with-duck-21872?ref=freecodecamp"><strong>Self-Driving Cars with Duckietown</strong></a> from <em>ETH Zurich</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-universite-de-montreal-machine-l-126091?ref=freecodecamp"><strong>Machine Learning Use Cases in Finance</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-quantum-detectors-a-21181?ref=freecodecamp"><strong>Quantum Detectors and Sensors</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-harvard-university-fundamentals--21641?ref=freecodecamp"><strong>Fundamentals of TinyML</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-chicago-introduct-25375?ref=freecodecamp"><strong>Introduction to Quantum Computing for Everyone 2</strong></a> from <em>The University of Chicago</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/biology-life-sciences-cornell-university-applicat-296811?ref=freecodecamp"><strong>Applications of Machine Learning in Plant Science</strong></a> from <em>Cornell University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/deep-learning-universite-de-montreal-deep-learnin-18145?ref=freecodecamp"><strong>Deep Learning Essentials</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/tinyml-harvard-university-deploying-tinyml-21643?ref=freecodecamp"><strong>Deploying TinyML</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/engineering-purdue-university-quantum-computing-i-21185?ref=freecodecamp"><strong>Applied Quantum Computing II: Hardware</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/tinyml-harvard-university-mlops-for-scaling-tinym-66338?ref=freecodecamp"><strong>MLOps for Scaling TinyML</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-ku-leuven-ai-in-healthcar-274285?ref=freecodecamp"><strong>AI in Healthcare. Hype or Help?</strong></a> from <em>KU Leuven University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-delft-university-of-technology-q-291676?ref=freecodecamp"><strong>Quantum Communication and the Quantum Network Explorer</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/communication-delft-university-of-technology-towa-435910?ref=freecodecamp"><strong>Quantum-safe Digital Infrastructures: Technical Challenges and Solutions</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/tinyml-harvard-university-applications-of-tinyml-21642?ref=freecodecamp"><strong>Applications of TinyML</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-chicago-quantum-c-56652?ref=freecodecamp"><strong>Quantum Computer Systems Design I: Intro to Quantum Computation and Programming</strong></a> from <em>The University of Chicago</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-introduct-286617?ref=freecodecamp"><strong>Introduction à l'éthique de l’IA</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-universite-de-montreal-bi-18144?ref=freecodecamp"><strong>Bias and Discrimination in AI</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/economics-university-of-toronto-trading-and-lendi-292545?ref=freecodecamp"><strong>Explore Trading and Lending in Decentralized Finance</strong></a> from <em>University of Toronto</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/quantum-computing-university-of-chicago-quantum-c-56653?ref=freecodecamp"><strong>Quantum Computer Systems Design II: Principles of Quantum Architecture</strong></a> from <em>The University of Chicago</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-tsinghua-university-data-str-1646?ref=freecodecamp"><strong>Data Structures and Algorithm Design Part I | 数据结构与算法设计(上)</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/communication-delft-university-of-technology-quan-435911?ref=freecodecamp"><strong>Quantum-safe Digital infrastructures: Challenges and Solutions for Governance</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-delft-university-of-techn-21197?ref=freecodecamp"><strong>AI in Practice: Preparing for AI</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-the-university-of-texas-at-a-13675?ref=freecodecamp"><strong>LAFF-On Programming for High Performance</strong></a> from <em>The University of Texas at Austin</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-delft-university-of-technology-m-96687?ref=freecodecamp"><strong>Modern Distributed Systems</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-gt-refresher-advanced-os-4734?ref=freecodecamp"><strong>GT - Refresher - Advanced OS</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-biais-et--295042?ref=freecodecamp"><strong>Biais et discrimination en IA</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-technique-291683?ref=freecodecamp"><strong>Techniques d’intelligence artificielle : des fondements aux applications</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-868j-the-society-of-mind-fall-2011-40953?ref=freecodecamp"><strong>The Society of Mind</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-introduct-295043?ref=freecodecamp"><strong>Introduction à l'apprentissage profond</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-851-advanced-data-structures-spring-2012-40951?ref=freecodecamp"><strong>Advanced Data Structures</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-the-university-of-california-san-diego-10275?ref=freecodecamp"><strong>NP-Complete Problems</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-the-university-of-california-san-diego-10248?ref=freecodecamp"><strong>String Processing and Pattern Matching Algorithms</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/blockchain-university-of-toronto-blockchain-techn-292552?ref=freecodecamp"><strong>Blockchain Technology and the Future of FinTech</strong></a> from <em>University of Toronto</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-delft-university-of-technology-q-363693?ref=freecodecamp"><strong>Quantum Hardware and its Applications with Quantum Inspire</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/geometry-tsinghua-university-ji-suan-ji-he-comput-5434?ref=freecodecamp"><strong>计算几何 | Computational Geometry</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-the-university-of-texas-at-a-7852?ref=freecodecamp"><strong>LAFF – On Programming for Correctness</strong></a> from <em>The University of Texas at Austin</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-l-essenti-295558?ref=freecodecamp"><strong>L'essentiel de l'apprentissage profond</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-vision-ar-294709?ref=freecodecamp"><strong>Vision artificielle et exploitation intelligente des ressources naturelles</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-les-couli-295044?ref=freecodecamp"><strong>Les coulisses des systèmes de recommandation</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-mas-s62-cryptocurrency-engineering-and-design-spring-2018-53942?ref=freecodecamp"><strong>Cryptocurrency Engineering and Design - Spring 2018</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/humanities-ku-leuven-ai-to-understand-and-connect-459314?ref=freecodecamp"><strong>AI to Understand and Connect People</strong></a> from <em>KU Leuven University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-delft-university-of-techn-21198?ref=freecodecamp"><strong>AI in Practice: Applying AI</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-tsinghua-university-big-data-machine-lea-12739?ref=freecodecamp"><strong>Big Data Machine Learning | 大数据机器学习</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs105-introduction-to-computers-full-course-107758?ref=freecodecamp"><strong>Introduction to Computers - Stanford University</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-statistics-university-of-cambridge--446362?ref=freecodecamp"><strong>Navigating complex health data challenges</strong></a> from <em>University of Cambridge</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-universite-de-montreal-recommend-22799?ref=freecodecamp"><strong>Recommender Systems: Behind the Screen</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/blockchain-university-of-toronto-decentralized-de-292546?ref=freecodecamp"><strong>Navigating Decentralized Derivatives and Governance in Blockchain</strong></a> from <em>University of Toronto</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-how-you-can-use-chatgpt-to-increase-your-creative-output-191521?ref=freecodecamp"><strong>How You Can Use ChatGPT to Increase Your Creative Output</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/math-ecole-polytechnique-federale-de-lausanne-opt-22236?ref=freecodecamp"><strong>Optimization: principles and algorithms - Network and discrete optimization</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs229-machine-learning-full-course-taught-by-andrew-ng-autumn-2018-107761?ref=freecodecamp"><strong>Stanford CS229 - Machine Learning Full Course Taught by Andrew Ng - Autumn 2018</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-deep-learning-in-life-sciences-spring-2021-48202?ref=freecodecamp"><strong>Deep Learning in Life Sciences - Spring 2021</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-peking-university-suan-fa-ji-chu-funda-3244?ref=freecodecamp"><strong>算法基础 | Fundamental Algorithms</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-ecole-polytechnique-federale-de-lausan-22237?ref=freecodecamp"><strong>Optimization: principles and algorithms - Unconstrained nonlinear optimization</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computationalthinking-spring-21-94397?ref=freecodecamp"><strong>Introduction to Computational Thinking</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs221-artificial-intelligence-principles-and-techniques-autumn-2019-107762?ref=freecodecamp"><strong>Artificial Intelligence - Principles and Techniques - Autumn 2019</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-01sc-introduction-to-eecs-i-90334?ref=freecodecamp"><strong>Introduction to EECS I</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-370-the-battlecode-programming-competition-january-iap-2013-40945?ref=freecodecamp"><strong>The Battlecode Programming Competition</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-849-geometric-folding-algorithms-linkages-origami-polyhedra-fall-2012-40950?ref=freecodecamp"><strong>Geometric Folding Algorithms: Linkages, Origami, Polyhedra</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-and-law-i-mariano-florentino-cuellar-president-of-the-carnegie-endowment-for-international-peace-191623?ref=freecodecamp"><strong>AI and Law: Implications for Society and Legal Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-artificial-intelligence-for-business-leaders-191600?ref=freecodecamp"><strong>Artificial Intelligence for Business Leaders</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-opencourseware-programming-for-the-puzzled-january-iap-2018-40946?ref=freecodecamp"><strong>Programming for the Puzzled (January IAP 2018)</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-software-defined-networking-at-the-crossroads-110069?ref=freecodecamp"><strong>Stanford Seminar - Software-Defined Networking at the Crossroads</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-15-566-information-technology-as-an-integrating-force-in-manufacturing-spring-2003-292253?ref=freecodecamp"><strong>Information Technology as an Integrating Force in Manufacturing</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-189-multicore-programming-primer-january-iap-2007-40944?ref=freecodecamp"><strong>Multicore Programming Primer</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-peking-university-li-lun-ji--2436?ref=freecodecamp"><strong>理论计算机科学基础 | Introduction to Theoretical Computer Science</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-artificial-intelligence-current-and-future-paradigms-and-implications-191912?ref=freecodecamp"><strong>Artificial Intelligence - Current and Future Paradigms and Implications</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-18-404j-theory-of-computation-fall-2020-90333?ref=freecodecamp"><strong>Theory of Computation, Fall 2020</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-cryptocurrencies-and-blockchains-the-science-behind-the-technology-dan-boneh-191601?ref=freecodecamp"><strong>Cryptocurrencies and Blockchains - The Science Behind the Technology</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-100l-introduction-to-cs-and-programming-using-python-fall-2022-292230?ref=freecodecamp"><strong>Introduction to CS and Programming using Python</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-deep-learning-for-medical-diagnoses-108742?ref=freecodecamp"><strong>Stanford Seminar - Deep Learning for Medical Diagnoses</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-transformers-in-language-the-development-of-gpt-models-including-gpt3-109963?ref=freecodecamp"><strong>Stanford Seminar - Transformers in Language: The Development of GPT Models Including GPT-3</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs154-stanford-introduction-to-the-theory-of-computing-107760?ref=freecodecamp"><strong>Introduction to the Theory of Computing - Stanford</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-fate-of-ai-ethics-anna-bethke-108692?ref=freecodecamp"><strong>Stanford Seminar - The FATE of AI Ethics, Anna Bethke</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-designing-assistive-technologies-for-agency-109976?ref=freecodecamp"><strong>Stanford Seminar - Designing Assistive Technologies for Agency</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-890-algorithmic-lower-bounds-fun-with-hardness-proofs-fall-2014-40954?ref=freecodecamp"><strong>Algorithmic Lower Bounds: Fun with Hardness Proofs</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-software-centric-visible-light-communication-for-the-internet-of-things-110011?ref=freecodecamp"><strong>Software-Centric Visible Light Communication for the Internet of Things</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-part-two-how-you-can-use-chatgpt-to-increase-your-creative-output-203279?ref=freecodecamp"><strong>How to Use ChatGPT to Increase Your Creative Output - Part Two</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-introduction-to-deep-learning-6-s191-128081?ref=freecodecamp"><strong>MIT Introduction to Deep Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs330-deep-multi-task-and-meta-learning-107765?ref=freecodecamp"><strong>Stanford CS330: Deep Multi-Task and Meta Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-machine-learning-course-cs-156-48196?ref=freecodecamp"><strong>Machine Learning Course</strong></a> from <em>California Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-using-data-for-increased-realism-with-haptic-modeling-and-devices-108685?ref=freecodecamp"><strong>Using Data for Increased Realism with Haptic Modeling and Devices</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-deep-learning-in-speech-recognition-108769?ref=freecodecamp"><strong>Stanford Seminar - Deep Learning in Speech Recognition</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-the-future-of-blockchain-and-cryptocurrencies-dan-boneh-191706?ref=freecodecamp"><strong>The Future of Blockchain and Cryptocurrencies - Dan Boneh</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-ai-in-the-workplace-rethinking-skill-development-310939?ref=freecodecamp"><strong>AI in the Workplace: Rethinking Skill Development</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-ai-bias-and-fairness-128086?ref=freecodecamp"><strong>AI Bias and Fairness</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-natural-language-processing-for-production-level-conversational-interfaces-109992?ref=freecodecamp"><strong>Stanford Seminar - Natural Language Processing for Conversational Interfaces</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-bugs-in-crypto-implementations-110004?ref=freecodecamp"><strong>Stanford Seminar - Bugs in Crypto Implementations</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ge-wang-the-artful-design-of-interactive-ai-systems-158532?ref=freecodecamp"><strong>The Artful Design of Interactive AI Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-artificial-intelligence-planning-53358?ref=freecodecamp"><strong>Artificial Intelligence Planning</strong></a> from <em>University of Edinburgh</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-deep-generative-modeling-128078?ref=freecodecamp"><strong>Deep Generative Modeling</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-reinforcement-learning-128077?ref=freecodecamp"><strong>MIT: Reinforcement Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-how-ai-is-turning-your-smartphone-into-the-swiss-army-knife-of-clinical-diagnostics-184802?ref=freecodecamp"><strong>How AI Is Turning Your Smartphone Into the Swiss Army Knife of Clinical Diagnostics</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs234-reinforcement-learning-winter-2019-107764?ref=freecodecamp"><strong>Stanford CS234: Reinforcement Learning - Winter 2019</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-representation-learning-for-autonomous-robots-anima-anandkumar-108691?ref=freecodecamp"><strong>Stanford Seminar - Representation Learning for Autonomous Robots, Anima Anandkumar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-creating-interfaces-with-rich-physical-properties-through-digital-fabricationity-109982?ref=freecodecamp"><strong>Stanford Seminar - Creating Interfaces with Rich Physical Properties Through Digital Fabrication</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-chris-re-how-machine-learning-is-changing-software-158564?ref=freecodecamp"><strong>How Machine Learning is Changing Software</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-ai-in-healthcare-128082?ref=freecodecamp"><strong>AI in Healthcare</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs224w-machine-learning-with-graphs-fall-2019-107763?ref=freecodecamp"><strong>Machine Learning with Graphs - Fall 2019</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-enabling-nlp-machine-learning-few-shot-learning-using-associative-processing-108770?ref=freecodecamp"><strong>Stanford Seminar - Enabling NLP, Machine Learning, and Few-Shot Learning Using Associative Processing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-smart-physical-systems-from-the-standpoint-of-an-ai-company-109997?ref=freecodecamp"><strong>Smart Physical Systems from the Standpoint of an AI Company</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-can-the-brain-do-back-propagation-110023?ref=freecodecamp"><strong>Stanford Seminar - Can the Brain Do Back-Propagation?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-frontiers-of-medical-ai-therapeutics-and-workflows-andre-esteva-132514?ref=freecodecamp"><strong>Frontiers of Medical AI - Therapeutics and Workflows</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-agentic-ai-a-progression-of-language-model-usage-428258?ref=freecodecamp"><strong>Agentic AI: A Progression of Language Model Usage</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-rob-fergus-data-augmentation-for-image-based-reinforcement-learning-127045?ref=freecodecamp"><strong>Data Augmentation for Image-Based Reinforcement Learning</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-ei-seminar-phillip-isola-emergent-intelligence-getting-more-out-of-agents-than-you-bake-in-127057?ref=freecodecamp"><strong>MIT EI Seminar - Phillip Isola - Emergent Intelligence- Getting More Out of Agents Than You Bake In</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-automatic-speech-recognition-128076?ref=freecodecamp"><strong>MIT 6.S191 - Automatic Speech Recognition</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-18-404j-theory-of-computation-fall-2020-292268?ref=freecodecamp"><strong>Theory of Computation</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-peking-university-suan-fa-she-ji-yu-fe-6364?ref=freecodecamp"><strong>算法设计与分析(高级) | Advanced Design and Analysis of Algorithms</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-deep-maths-machine-learning-and-mathematics-142787?ref=freecodecamp"><strong>Deep Maths - Machine Learning and Mathematics</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-forecasting-and-aligning-ai-jacob-steinhardt-108686?ref=freecodecamp"><strong>Forecasting and Aligning AI - Jacob Steinhardt</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-deep-learning-for-symbolic-mathematics-guillaume-lample-francois-charton-108720?ref=freecodecamp"><strong>Deep Learning for Symbolic Mathematics - Guillaume Lample &amp; Francois Charton</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-neural-networks-on-chip-design-from-the-user-perspective-108736?ref=freecodecamp"><strong>Stanford Seminar - Neural Networks on Chip Design from the User Perspective</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-solana-larsen-who-has-power-over-ai-158512?ref=freecodecamp"><strong>Solana Larsen- Who Has Power Over AI?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-rebooting-the-internet-191779?ref=freecodecamp"><strong>Stanford Seminar - Rebooting the Internet</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-federated-learning-in-medicine-breaking-down-silos-to-advance-medical-research-191811?ref=freecodecamp"><strong>Federated Learning in Medicine - Breaking Down Silos to Advance Medical Research</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-luke-zettlemoyer-large-language-models-will-they-keep-getting-bigger-127042?ref=freecodecamp"><strong>Large Language Models - Will They Keep Getting Bigger?</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-jacob-andreas-natural-language-explanations-of-deep-networks-127052?ref=freecodecamp"><strong>Jacob Andreas - Natural Language Explanations of Deep Networks</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-ei-seminar-lerrel-pinto-diverse-data-and-efficient-algorithms-for-robot-learning-127055?ref=freecodecamp"><strong>Diverse Data and Efficient Algorithms for Robot Learning</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-towards-ai-for-3d-content-creation-128083?ref=freecodecamp"><strong>Towards AI for 3D Content Creation</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-6-036-introduction-to-machine-learning-277819?ref=freecodecamp"><strong>6.036 Introduction to Machine Learning</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-creativity-code-marcus-du-sautoy-142826?ref=freecodecamp"><strong>The Creativity Code - Marcus du Sautoy</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-training-classifiers-with-natural-language-explanations-108753?ref=freecodecamp"><strong>Stanford Seminar - Training Classifiers with Natural Language Explanations</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-new-golden-age-for-computer-architecture-john-hennessy-110000?ref=freecodecamp"><strong>Stanford Seminar - New Golden Age for Computer Architecture - John Hennessy</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-applying-theory-to-practice-and-practice-to-theory-110043?ref=freecodecamp"><strong>Stanford Seminar - Applying Theory to Practice and Practice to Theory</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-weakly-supervised-large-scale-computational-pathology-for-diagnosis-prognosis-max-lu-132496?ref=freecodecamp"><strong>Weakly-Supervised, Large-Scale Computational Pathology for Diagnosis and Prognosis - Max Lu</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-federated-hyperparameters-tuning-challenges-baselines-connections-mikhail-khodak-132498?ref=freecodecamp"><strong>Federated Hyperparameter Tuning - Challenges, Baselines, and Connections</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-what-s-next-for-blockchain-in-china-191915?ref=freecodecamp"><strong>Stanford Seminar - What's Next for Blockchain in China?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-opening-remarks-artificial-intelligence-the-future-of-medicine-health-care-is-here-312415?ref=freecodecamp"><strong>Artificial Intelligence - The Future of Medicine and Health Care Is Here</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-neurosymbolic-ai-128097?ref=freecodecamp"><strong>Neurosymbolic AI</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-beyond-deep-learning-learning-reasoning-128116?ref=freecodecamp"><strong>Beyond Deep Learning - Learning+Reasoning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-sequence-modeling-with-neural-networks-128115?ref=freecodecamp"><strong>Sequence Modeling with Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-lenia-biology-of-artificial-life-bert-wang-chak-chan-108731?ref=freecodecamp"><strong>Stanford Seminar - Lenia- Biology of Artificial Life, Bert Wang-Chak Chan</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-scalable-intelligent-systems-build-and-deploy-by-2025-108757?ref=freecodecamp"><strong>Stanford Seminar - Scalable Intelligent Systems Build and Deploy by 2025</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-erudite-prototype-system-for-computational-intelligence-108758?ref=freecodecamp"><strong>Stanford Seminar - Erudite: Prototype System for Computational Intelligence</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-safe-passwords-made-easy-to-use-108762?ref=freecodecamp"><strong>Stanford Seminar - Safe Passwords Made Easy to Use</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computational-memory-a-stepping-stone-to-non-von-neumann-computing-108766?ref=freecodecamp"><strong>Computational Memory - A Stepping-Stone to Non-Von Neumann Computing?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-quest-for-low-storage-latency-changes-everything-108771?ref=freecodecamp"><strong>Stanford Seminar - The Quest for Low Storage Latency Changes Everything</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-rex-neo-architecture-an-energy-efficient-new-processor-architecture-110014?ref=freecodecamp"><strong>Stanford Seminar - The REX Neo Architecture - An Energy Efficient New Processor Architecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-citadel-of-one-individuality-and-the-rise-of-the-machines-suzanne-sadedin-110034?ref=freecodecamp"><strong>Stanford Seminar - Citadel of One- Individuality and the Rise of the Machines, Suzanne Sadedin</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-dynamic-code-optimization-and-the-nvidia-denver-processor-110041?ref=freecodecamp"><strong>Dynamic Code Optimization and the NVIDIA Denver Processor</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-instruction-sets-should-be-free-the-case-for-risc-v-110050?ref=freecodecamp"><strong>Stanford Seminar - Instruction Sets Should Be Free- The Case for RISC-V</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-multimodal-opportunistic-risk-assessment-for-ischemic-heart-disease-juan-manuel-132511?ref=freecodecamp"><strong>Multimodal Opportunistic Risk Assessment for Ischemic Heart Disease - Juan Manuel</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-rethinking-architecture-design-for-data-heterogeneity-in-fl-liangqiong-qu-132513?ref=freecodecamp"><strong>Rethinking Architecture Design for Data Heterogeneity in FL - Liangqiong Qu</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-few-shot-chest-x-ray-diagnosis-using-clinical-literature-images-angshuman-paul-132520?ref=freecodecamp"><strong>Few-Shot Chest X-Ray Diagnosis Using Clinical and Literature Images</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-akshay-chaudhari-data-efficient-ai-for-accelerating-mri-acquisition-158543?ref=freecodecamp"><strong>Data-Efficient AI for Accelerating MRI Acquisition</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-with-dan-boneh-hacking-ai-security-privacy-of-machine-learning-models-191718?ref=freecodecamp"><strong>Hacking AI - Security &amp; Privacy of Machine Learning Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs229-machine-learning-summer-2019-lecture-8-kernel-methods-support-vector-machine-191744?ref=freecodecamp"><strong>Stanford CS229 - Machine Learning - Summer 2019 - Kernel Methods &amp; Support Vector Machine</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-create-a-better-user-experience-through-ai-michael-bernstein-191767?ref=freecodecamp"><strong>Create a Better User Experience Through AI - Michael Bernstein</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-nvidia-gpu-computing-a-journey-from-pc-gaming-to-deep-learning-191963?ref=freecodecamp"><strong>NVIDIA GPU Computing - A Journey from PC Gaming to Deep Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-transforms-health-care-artificial-intelligence-the-future-of-medicine-health-care-is-here-312413?ref=freecodecamp"><strong>AI Transforms Health Care - The Future of Medicine and Health Care</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-computer-science-and-it-faculty-of-engineering-and-information-technology-deep-dive-178938?ref=freecodecamp"><strong>Computer Science and IT at the University of Melbourne - Faculty of Engineering and IT Overview</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs50-2012-week-3-continued-179835?ref=freecodecamp"><strong>CS50 2012 - Week 3 Continued: Search Algorithms and Sorting Techniques</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-recent-papers-in-embodied-intelligence-127046?ref=freecodecamp"><strong>EI Seminar - Recent Papers in Embodied Intelligence</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-daniel-wolpert-computational-principles-underlying-the-learning-of-sensorimotor-repertoires-127049?ref=freecodecamp"><strong>Computational Principles Underlying the Learning of Sensorimotor Repertoires</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-yejin-choi-intuitive-reasoning-as-un-supervised-neural-generation-127051?ref=freecodecamp"><strong>Intuitive Reasoning as Unsupervised Neural Generation</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-michael-carbin-the-lottery-ticket-hypothesis-127053?ref=freecodecamp"><strong>The Lottery Ticket Hypothesis - Michael Carbin</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-recurrent-neural-networks-and-transformers-128080?ref=freecodecamp"><strong>Recurrent Neural Networks and Transformers</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-introduction-to-deep-learning-128112?ref=freecodecamp"><strong>MIT: Introduction to Deep Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-introduction-to-deep-learning-128103?ref=freecodecamp"><strong>Introduction to Deep Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-5630-advanced-topics-in-cryptography-fall-2023-426580?ref=freecodecamp"><strong>Advanced Topics in Cryptography</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-failures-where-to-find-them-considering-safety-as-a-function-of-structure-108684?ref=freecodecamp"><strong>Stanford Seminar - Failures &amp; Where to Find Them: Considering Safety as a Function of Structure</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-denoising-diffusion-models-for-denoising-diffusion-mri-tiange-xiang-132484?ref=freecodecamp"><strong>Denoising Diffusion Models for Denoising Diffusion MRI - Tiange Xiang</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-real-time-seizure-detection-using-eeg-hyewon-jeong-132488?ref=freecodecamp"><strong>Real-Time Seizure Detection Using EEG - Hyewon Jeong</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-deep-learning-methods-for-electrocardiograms-and-echocardiograms-weston-hughes-132500?ref=freecodecamp"><strong>Deep Learning Methods for Electrocardiograms and Echocardiograms</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-towards-generalist-imaging-using-multimodal-self-supervised-learning-mars-huang-132505?ref=freecodecamp"><strong>Towards Generalist Imaging Using Multimodal Self-Supervised Learning - Mars Huang</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-karen-liu-the-new-role-of-physics-simulation-in-ai-158551?ref=freecodecamp"><strong>The New Role of Physics Simulation in AI</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-human-ai-interaction-under-societal-disagreement-191518?ref=freecodecamp"><strong>Stanford Seminar - Human-AI Interaction Under Societal Disagreement</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-talk-inequality-in-healthcare-ai-data-science-to-reduce-inequality-improve-healthcare-191620?ref=freecodecamp"><strong>Inequality in Healthcare: Using AI and Data Science to Reduce Disparities</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-taraxa-io-a-globalized-blockchain-protocol-startup-191904?ref=freecodecamp"><strong>Stanford Seminar -</strong></a> <a href="http://Taraxa.io"><strong>Taraxa.io</strong></a><a href="https://www.classcentral.com/course/youtube-stanford-seminar-taraxa-io-a-globalized-blockchain-protocol-startup-191904?ref=freecodecamp"><strong>: A Globalized Blockchain Protocol Startup</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-cybersecurity-in-modern-era-zero-knowledge-proofs-explained-270417?ref=freecodecamp"><strong>Cybersecurity in the Modern Era - Zero Knowledge Proofs Explained</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-sheng-wang-generative-ai-for-multimodal-biomedicine-378286?ref=freecodecamp"><strong>Generative AI for Multimodal Biomedicine</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-ruslan-salakhutdinov-building-embodied-autonomous-agents-127041?ref=freecodecamp"><strong>Building Embodied Autonomous Agents</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-machine-learning-for-scent-128094?ref=freecodecamp"><strong>Machine Learning for Scent</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-introduction-to-deep-learning-128093?ref=freecodecamp"><strong>Introduction to Deep Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-convolutional-neural-networks-128079?ref=freecodecamp"><strong>Convolutional Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-convolutional-neural-networks-128118?ref=freecodecamp"><strong>Convolutional Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-introduction-to-deep-learning-128119?ref=freecodecamp"><strong>Introduction to Deep Learning - MIT 2018</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-improved-ultrasound-image-formation-domain-adaptation-with-no-data-182522?ref=freecodecamp"><strong>Improved Ultrasound Image Formation - Domain Adaptation With No Data</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/chatgpt-universite-de-montreal-chatgpt-pour-tous-289214?ref=freecodecamp"><strong>ChatGPT pour tous</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-leela-a-semantic-intelligent-agent-108761?ref=freecodecamp"><strong>Stanford Seminar - Leela: A Semantic Intelligent Agent</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-an-architect-s-point-of-view-on-emerging-technologies-108768?ref=freecodecamp"><strong>Stanford Seminar - An Architect's Point of View on Emerging Technologies</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-dialog-markets-110015?ref=freecodecamp"><strong>Stanford Seminar - Dialog Markets</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-time-traveling-hardware-and-software-systems-110017?ref=freecodecamp"><strong>Stanford Seminar - Time Traveling Hardware and Software Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-concepts-and-questions-as-programs-110019?ref=freecodecamp"><strong>Stanford Seminar - Concepts and Questions as Programs</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-david-robinson-voices-in-the-code-a-story-about-people-their-values-and-the-algorithm-they-made-158508?ref=freecodecamp"><strong>Voices in the Code - A Story About People, Their Values, and the Algorithm They Made</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-against-ethical-robots-with-ron-chrisley-158577?ref=freecodecamp"><strong>Against Ethical Robots with Ron Chrisley</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-is-google-search-is-dying-191648?ref=freecodecamp"><strong>Stanford Seminar - Is Google Search Dying?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-race-for-technological-supremacy-emerging-technologies-and-global-implications-191655?ref=freecodecamp"><strong>The Race for Technological Supremacy - Emerging Technologies and Global Implications</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-fastai-a-layered-api-for-deep-learning-191785?ref=freecodecamp"><strong>Stanford Seminar - Fastai: A Layered API for Deep Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs230-deep-learning-autumn-2018-lecture-1-class-introduction-logistics-andrew-ng-191860?ref=freecodecamp"><strong>Deep Learning - Class Introduction and Logistics - Lecture 1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-is-ai-evolving-a-look-at-the-startup-landscape-in-the-u-s-and-asia-191877?ref=freecodecamp"><strong>How is AI Evolving? A Look at the Startup Landscape in the U.S. and Asia</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-entrepreneurial-lessons-from-self-driving-cars-191944?ref=freecodecamp"><strong>Entrepreneurial Lessons from Self-Driving Cars</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-transformers-united-neuroscience-inspired-artificial-intelligence-206680?ref=freecodecamp"><strong>Stanford Seminar - Transformers United: Neuroscience-Inspired Artificial Intelligence</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-overview-of-transformers-289569?ref=freecodecamp"><strong>Overview of Transformers - Stanford CS25: Lecture 1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-language-models-as-temporary-training-wheels-to-facilitate-learning-366883?ref=freecodecamp"><strong>Language Models as Temporary Training Wheels to Facilitate Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-can-you-trust-a-computer-algorithm-how-and-why-179019?ref=freecodecamp"><strong>Can You Trust a Computer Algorithm - How and Why</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-recent-papers-in-embodied-intelligence-i-127047?ref=freecodecamp"><strong>Recent Papers in Embodied Intelligence I</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-deep-learning-new-frontiers-128098?ref=freecodecamp"><strong>Deep Learning New Frontiers</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-deep-learning-limitations-and-new-frontiers-128117?ref=freecodecamp"><strong>Deep Learning Limitations and New Frontiers</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2018-computer-vision-meets-social-networks-128114?ref=freecodecamp"><strong>Computer Vision Meets Social Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-deep-reinforcement-learning-128108?ref=freecodecamp"><strong>MIT: Deep Reinforcement Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-deep-learning-limitations-and-new-frontiers-128107?ref=freecodecamp"><strong>MIT 6.S191 - Deep Learning Limitations and New Frontiers</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-modeling-prior-information-to-guide-image-reconstruction-in-radiation-therapy-182528?ref=freecodecamp"><strong>Modeling Prior Information to Guide Image Reconstruction in Radiation Therapy</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ideas-for-a-complex-world-anna-seigal-142808?ref=freecodecamp"><strong>Ideas for a Complex World - Anna Seigal</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ggp-course-videos-107769?ref=freecodecamp"><strong>GGP Course Videos</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-persistent-and-unforgeable-watermarks-for-deepneural-networks-108735?ref=freecodecamp"><strong>Stanford Seminar - Persistent and Unforgeable Watermarks for Deep Neural Networks</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-mips-open-wave-computing-108741?ref=freecodecamp"><strong>Stanford Seminar - MIPS Open, Wave Computing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-efficient-and-resilient-systems-in-the-cognitive-era-108763?ref=freecodecamp"><strong>Stanford Seminar - Efficient and Resilient Systems in the Cognitive Era</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-distributed-perception-and-learning-between-robots-and-the-cloud-109978?ref=freecodecamp"><strong>Stanford Seminar - Distributed Perception and Learning Between Robots and the Cloud</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computational-ecosystems-110006?ref=freecodecamp"><strong>Stanford Seminar: Computational Ecosystems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-hpc-opportunities-in-deep-learning-greg-diamos-baidu-110020?ref=freecodecamp"><strong>Stanford Seminar - HPC Opportunities in Deep Learning - Greg Diamos, Baidu</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-mostly-missless-memory-in-the-mill-cpu-110065?ref=freecodecamp"><strong>Stanford Seminar - Mostly Missless Memory in the Mill CPU</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-gans-in-medical-image-synthesis-translation-and-augmentation-jason-jeong-132502?ref=freecodecamp"><strong>GANs in Medical Image Synthesis, Translation, and Augmentation - Jason Jeong</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-self-training-weak-supervision-untrained-neural-nets-for-mr-recon-beliz-gunel-132510?ref=freecodecamp"><strong>Self-Training - Weak Supervision Using Untrained Neural Nets for MR Reconstruction - Beliz Gunel</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-segmentation-and-quantification-of-breast-arterial-calcifications-xiaoyuan-guo-132519?ref=freecodecamp"><strong>Segmentation and Quantification of Breast Arterial Calcifications - Xiaoyuan Guo</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-carlos-guestrin-how-can-you-trust-machine-learning-158529?ref=freecodecamp"><strong>How Can You Trust Machine Learning?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-jiajun-wu-learning-to-see-the-physical-world-158567?ref=freecodecamp"><strong>Learning to See the Physical World</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-optimizing-the-internet-191557?ref=freecodecamp"><strong>Optimizing the Internet</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-lessons-from-evaluating-and-debugging-healthcare-ai-in-deployment-191615?ref=freecodecamp"><strong>Lessons From Evaluating and Debugging Healthcare AI in Deployment</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-can-you-trust-machine-learning-carlos-guestrin-191627?ref=freecodecamp"><strong>How Can You Trust Machine Learning?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-safety-and-liveness-of-robot-behaviors-191632?ref=freecodecamp"><strong>Safety and Liveness of Robot Behaviors</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-4004-microprocessors-191658?ref=freecodecamp"><strong>Stanford Seminar - Microprocessors</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs230-deep-learning-autumn-2018-lecture-3-full-cycle-deep-learning-projects-191858?ref=freecodecamp"><strong>Deep Learning Full-Cycle Projects - Lecture 3</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs230-deep-learning-autumn-2018-lecture-2-deep-learning-intuition-191859?ref=freecodecamp"><strong>Deep Learning Intuition - Lecture 2</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-virtual-human-agent-for-smart-city-191887?ref=freecodecamp"><strong>Stanford Seminar - Virtual Human Agent for Smart City</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-leveraging-social-theories-to-enhance-human-ai-interaction-261460?ref=freecodecamp"><strong>Leveraging Social Theories to Enhance Human-AI Interaction</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-don-knuth-twintrees-baxter-permutations-and-floorplans-2022-263283?ref=freecodecamp"><strong>Twintrees, Baxter Permutations, and Floorplans in Computer Science - Lecture 2022</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-state-of-design-knowledge-in-human-ai-interaction-286234?ref=freecodecamp"><strong>The State of Design Knowledge in Human-AI Interaction</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-124-sleepfm-multi-modal-representation-learning-for-sleep-rahul-thapa-302757?ref=freecodecamp"><strong>SleepFM - Multi-modal Representation Learning for Sleep Across Brain Activity, ECG and Respiratory Signals</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-s-global-impact-on-democracy-and-governance-306772?ref=freecodecamp"><strong>AI's Global Impact on Democracy and Governance</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-panel-ai-s-role-in-improving-health-care-services-in-our-communities-312412?ref=freecodecamp"><strong>AI's Role in Improving Health Care Services in Our Communities</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-google-learning-sd-480p-353192?ref=freecodecamp"><strong>Learn About: Google's AI-Powered Learning Tool - HAI Seminar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-accounting-for-human-engagement-behavior-to-enhance-ai-assisted-decision-making-355299?ref=freecodecamp"><strong>Accounting for Human Engagement Behavior to Enhance AI-Assisted Decision Making</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-ei-seminar-pulkit-agrawal-the-task-specification-problem-127050?ref=freecodecamp"><strong>The Task Specification Problem</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-generalizable-autonomy-for-robot-manipulation-128096?ref=freecodecamp"><strong>Generalizable Autonomy for Robot Manipulation</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-recurrent-neural-networks-128092?ref=freecodecamp"><strong>MIT 6.S191 - Recurrent Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-reinforcement-learning-128089?ref=freecodecamp"><strong>Reinforcement Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-convolutional-neural-networks-128110?ref=freecodecamp"><strong>Convolutional Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-deep-generative-modeling-128109?ref=freecodecamp"><strong>Deep Generative Modeling</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-biologically-inspired-neural-networks-ibm-128106?ref=freecodecamp"><strong>Biologically Inspired Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-deep-generative-modeling-128100?ref=freecodecamp"><strong>Deep Generative Modeling</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-reinforcement-learning-128099?ref=freecodecamp"><strong>Reinforcement Learning</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367102?ref=freecodecamp"><strong>计算机文化基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-and-industrial-innovation-463886?ref=freecodecamp"><strong>AI and Industrial Innovation</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-universite-de-montreal-apprivois-142758?ref=freecodecamp"><strong>Apprivoiser l’apprentissage automatique</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-smile-synchronized-multi-sensory-integrated-learning-environment-109981?ref=freecodecamp"><strong>Stanford Seminar - SMILE- Synchronized, Multi-sensory Integrated Learning Environment</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-instruction-execution-on-the-mill-cpu-110059?ref=freecodecamp"><strong>Instruction Execution on the Mill CPU</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-opioid-use-disorder-prediction-using-ai-and-existing-risk-models-sajjad-fouladvand-132483?ref=freecodecamp"><strong>Opioid Use Disorder Prediction Using AI and Existing Risk Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-explaining-model-decisions-and-fixing-them-through-human-feedback-ramprasaath-selvaraju-132486?ref=freecodecamp"><strong>Explaining Model Decisions and Fixing Them Through Human Feedback</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-fairness-in-representation-learning-natalie-dullerud-132487?ref=freecodecamp"><strong>Fairness in Representation Learning - Natalie Dullerud</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-generative-models-with-domain-knowledge-for-weakly-supervised-clustering-laura-manduchi-132491?ref=freecodecamp"><strong>Generative Models With Domain Knowledge for Weakly Supervised Clustering</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-domain-adaptation-with-invariant-representation-learning-petar-stojanov-132494?ref=freecodecamp"><strong>Domain Adaptation with Invariant Representation Learning - What Transformations to Learn?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-optimizing-for-interpretability-in-deep-neural-networks-mike-wu-132499?ref=freecodecamp"><strong>Optimizing for Interpretability in Deep Neural Networks - Mike Wu</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-adversarial-debiasing-with-partial-learning-medical-image-studies-ramon-correa-132503?ref=freecodecamp"><strong>Adversarial Debiasing With Partial Learning - Medical Image Studies</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-training-medical-image-segmentation-models-with-less-labeled-data-sarah-hooper-132506?ref=freecodecamp"><strong>MedAI - Training Medical Image Segmentation Models with Less Labeled Data - Sarah Hooper</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-observational-supervision-for-medical-image-classification-khaled-saab-132507?ref=freecodecamp"><strong>Observational Supervision for Medical Image Classification</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-multimodal-medical-research-of-vision-and-language-jean-benoit-delbrouck-132508?ref=freecodecamp"><strong>Multimodal Medical Research of Vision and Language - Jean-Benoit Delbrouck</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-style-transfer-augmentations-for-computational-pathology-rikiya-yamashita-132515?ref=freecodecamp"><strong>Style Transfer Augmentations for Computational Pathology - Rikiya Yamashita</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-learning-the-structure-of-ehr-with-graph-convolutional-transformer-edward-choi-132516?ref=freecodecamp"><strong>Learning the Structure of EHR with Graph Convolutional Transformer - Edward Choi</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-why-would-we-want-a-multi-agent-system-unstable-191534?ref=freecodecamp"><strong>Why Would We Want a Multi-Agent System Unstable</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-don-knuth-twintrees-baxter-permutations-and-floorplans-2022-191539?ref=freecodecamp"><strong>Stanford Lecture - Don Knuth - Twintrees, Baxter Permutations, and Floorplans (2022)</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-self-attention-and-non-parametric-transformers-npts-191603?ref=freecodecamp"><strong>Stanford Seminar 2022 - Self Attention and Non-Parametric Transformers</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-accelerating-ml-recommendation-with-over-a-thousand-risc-v-tensor-processors-191644?ref=freecodecamp"><strong>Stanford Seminar - Accelerating ML Recommendation with Over a Thousand RISC-V-Tensor Processors</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-finding-the-great-problems-191816?ref=freecodecamp"><strong>Stanford Seminar - Finding the Great Problems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs230-deep-learning-autumn-2018-lecture-4-adversarial-attacks-gans-191857?ref=freecodecamp"><strong>Deep Learning - Adversarial Attacks and GANs - Lecture 4</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-information-theory-of-deep-learning-naftali-tishby-191928?ref=freecodecamp"><strong>Information Theory of Deep Learning - Naftali Tishby</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-scoring-automatically-news-articles-to-fight-misinformation-191929?ref=freecodecamp"><strong>Scoring News Articles to Fight Misinformation</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-evolution-of-public-key-cryptography-191933?ref=freecodecamp"><strong>The Evolution of Public Key Cryptography</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-don-knuth-a-conjecture-that-had-to-be-true-2017-191946?ref=freecodecamp"><strong>Stanford Lecture - Don Knuth - "A Conjecture That Had To Be True"</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-time-well-spent-tristan-harris-191952?ref=freecodecamp"><strong>Stanford Seminar - Time Well Spent, Tristan Harris</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-swiss-computer-systems-192032?ref=freecodecamp"><strong>Stanford Seminar - Swiss Computer Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-challenges-in-secure-messaging-192057?ref=freecodecamp"><strong>Stanford Seminar - Challenges in Secure Messaging</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-bradford-parkinson-gps-for-humanity-stanford-engineering-hero-lecture-192284?ref=freecodecamp"><strong>GPS for Humanity - Stanford Engineering Hero Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-algorithmic-governance-auditing-search-rec-algorithms-for-problematic-content-274189?ref=freecodecamp"><strong>Algorithmic Governance: Auditing Search and Recommendation Algorithms for Problematic Content</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v3-i-beyond-llms-agents-emergent-abilities-intermediate-guided-reasoning-babylm-274383?ref=freecodecamp"><strong>Beyond LLMs - Agents, Emergent Abilities, Intermediate-Guided Reasoning, and BabyLM - Stanford CS25</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-16-score-based-diffusion-models-291226?ref=freecodecamp"><strong>Stanford CS236: Deep Generative Models - Score Based Diffusion Models - Lecture 16</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-4-maximum-likelihood-learning-291227?ref=freecodecamp"><strong>Deep Generative Models - Maximum Likelihood Learning - Lecture 4</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-jason-wei-hyung-won-chung-of-openai-291240?ref=freecodecamp"><strong>Intuitions on Language Models and Shaping AI's Future - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-human-factors-of-formal-methods-291464?ref=freecodecamp"><strong>The Human Factors of Formal Methods - Stanford Seminar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-from-large-language-models-to-large-multimodal-models-294136?ref=freecodecamp"><strong>From Large Language Models to Large Multimodal Models - Stanford CS25 - Lecture 4</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-when-design-planning-295053?ref=freecodecamp"><strong>When Design Equals Planning - Computational Approaches to Robot Design</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-120-holistic-or-domain-modeling-with-large-vision-language-models-ege-oezsoy-302761?ref=freecodecamp"><strong>Holistic OR Domain Modeling with Large Vision Language Models - MedAI #120</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-119-ai-driven-advancements-in-mammogram-analysis-aisha-urooj-302762?ref=freecodecamp"><strong>AI-Driven Advancements in Mammogram Analysis - MedAI #119</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-125-role-of-instruction-tuning-and-prompt-engineering-in-clinical-domain-mihir-parmar-310891?ref=freecodecamp"><strong>Role of Instruction-Tuning and Prompt Engineering in Clinical Domain - MedAI 125</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-129-large-scale-multi-microscope-datasets-and-their-challenges-waqas-sultani-360986?ref=freecodecamp"><strong>Large Scale Multi-Microscope Datasets and Their Challenges in Medical AI</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-open-world-segmentation-and-tracking-in-3d-362743?ref=freecodecamp"><strong>Open-world Segmentation and Tracking in 3D</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-130-me-llama-medical-foundation-llms-for-text-analysis-and-beyond-qianqian-xie-366873?ref=freecodecamp"><strong>Me-LLaMA - Medical Foundation Large Language Models for Comprehensive Text Analysis and Beyond</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-creating-fair-useful-and-reliable-ai-in-healthcare-408656?ref=freecodecamp"><strong>Creating Fair, Useful, and Reliable AI in Healthcare</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-david-engstrom-ai-and-access-to-justice-433361?ref=freecodecamp"><strong>AI and Access to Justice</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-christopher-manning-large-language-models-in-2025-how-much-understanding-and-intelligence-434121?ref=freecodecamp"><strong>Large Language Models in 2025 - How Much Understanding and Intelligence?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-a-billion-medical-devices-using-far-from-perfect-ml-to-help-patients-434459?ref=freecodecamp"><strong>Using Far from Perfect ML to Help Patients - A Billion Medical Devices</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-public-ai-assistant-to-worldwide-knowledge-performing-interactive-tasks-under-developer-control-434525?ref=freecodecamp"><strong>Public AI Assistant to Worldwide Knowledge - Performing Interactive Tasks Under Developer Control</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-ecole-polytechnique-federale-de--207601?ref=freecodecamp"><strong>Information, Calcul, Communication: Introduction à la pensée informatique</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-getting-robust-securing-neural-networks-against-adversarial-attacks-178971?ref=freecodecamp"><strong>Getting Robust - Securing Neural Networks Against Adversarial Attacks</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-convolutional-neural-networks-128091?ref=freecodecamp"><strong>Convolutional Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2021-deep-learning-new-frontiers-128088?ref=freecodecamp"><strong>Deep Learning New Frontiers</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-evidential-deep-learning-and-uncertainty-128087?ref=freecodecamp"><strong>Evidential Deep Learning and Uncertainty</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-deep-cpcfg-for-information-extraction-128085?ref=freecodecamp"><strong>Deep CPCFG for Information Extraction</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-taming-dataset-bias-via-domain-adaptation-128084?ref=freecodecamp"><strong>Taming Dataset Bias via Domain Adaptation</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-recurrent-neural-networks-128102?ref=freecodecamp"><strong>MIT 6.S191 - Recurrent Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-lessons-from-the-regulatory-process-for-medical-software-for-image-analysis-and-ai-180518?ref=freecodecamp"><strong>Lessons From the Regulatory Process for Medical Software for Image Analysis and AI</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-model-based-deep-learning-beyond-unrolling-182518?ref=freecodecamp"><strong>Model-Based Deep Learning - Beyond Unrolling</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/economics-tsinghua-university-qu-kuai-lian-he-jia-271777?ref=freecodecamp"><strong>区块链和加密数字货币</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367098?ref=freecodecamp"><strong>软件工程</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-data-structures-and-algorithm-design-part-i-367359?ref=freecodecamp"><strong>Data Structures and Algorithm Design Part I</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-and-ethical-governance-463895?ref=freecodecamp"><strong>AI and Ethical Governance</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-peter-carr-brooklyn-quant-experience-bqe-seminar-series-bruno-kamdem-132412?ref=freecodecamp"><strong>A Reinforcement Learning Mechanism for Trading Wind Power Futures</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-evolution-of-public-key-cryptography-132469?ref=freecodecamp"><strong>The Evolution of Public Key Cryptography</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-era-of-artificial-intelligence-132470?ref=freecodecamp"><strong>The Era of Artificial Intelligence</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ece-ai-seminar-statistical-physics-neural-networks-and-neuroscience-from-then-to-now-424856?ref=freecodecamp"><strong>Statistical Physics, Neural Networks, and Neuroscience: From Then to Now</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-7-huffman-and-arithmetic-codes-oxford-mathematics-3rd-year-lecture-436443?ref=freecodecamp"><strong>Information Theory: Huffman and Arithmetic Codes - Lecture 7</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-actionable-machine-learning-for-tackling-distribution-shift-huaxiu-yao-132490?ref=freecodecamp"><strong>Actionable Machine Learning for Tackling Distribution Shift - Huaxiu Yao</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-efficiently-modeling-long-sequences-with-structured-state-spaces-albert-gu-132495?ref=freecodecamp"><strong>Efficiently Modeling Long Sequences with Structured State Spaces - Albert Gu</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-assignment-control-plots-for-causal-inference-study-design-rocky-aikens-132504?ref=freecodecamp"><strong>Assignment Control Plots for Causal Inference Study Design - Rocky Aikens</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mandoline-model-evaluation-under-distribution-shift-mayee-chen-132512?ref=freecodecamp"><strong>Mandoline - Model Evaluation under Distribution Shift</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-self-supervision-contrastive-frameworks-a-vision-based-review-nandita-bhaskhar-132518?ref=freecodecamp"><strong>Self-Supervision &amp; Contrastive Frameworks - A Vision-Based Review</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-kathleen-creel-picking-on-the-same-person-does-algorithmic-monoculture-homogenize-outcomes-158516?ref=freecodecamp"><strong>Picking on the Same Person - Does Algorithmic Monoculture Homogenize Outcomes?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-weekly-seminar-with-jeff-ding-the-rise-and-fall-of-great-technologies-and-powers-158535?ref=freecodecamp"><strong>HAI Weekly Seminar with Jeff Ding - The Rise and Fall of Great Technologies and Powers</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-agrim-gupta-towards-understanding-and-building-embodied-intelligence-158544?ref=freecodecamp"><strong>Towards Understanding and Building Embodied Intelligence</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-leonidas-guibas-joint-learning-over-visual-and-geometric-data-158562?ref=freecodecamp"><strong>Joint Learning Over Visual and Geometric Data</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-statistical-learning-10-r-1-neural-networks-in-r-and-the-mnist-data-191599?ref=freecodecamp"><strong>Neural Networks in R and the MNIST Data - Lecture 10.R.1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computing-with-physical-systems-191614?ref=freecodecamp"><strong>Stanford Seminar - Computing with Physical Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-recent-progress-in-verifying-neural-networks-zico-kolter-191631?ref=freecodecamp"><strong>Stanford Seminar - Recent Progress in Verifying Neural Networks, Zico Kolter</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-emerging-risks-and-opportunities-from-large-language-models-tatsu-hashimoto-191636?ref=freecodecamp"><strong>Stanford Seminar - Emerging Risks and Opportunities From Large Language Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-interactive-imitation-learning-planning-alongside-humans-191657?ref=freecodecamp"><strong>Interactive Imitation Learning: Planning Alongside Humans</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-improving-natural-language-understanding-through-adversarial-testing-191770?ref=freecodecamp"><strong>Improving Natural Language Understanding Through Adversarial Testing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computer-designed-organisms-josh-bongard-191774?ref=freecodecamp"><strong>Stanford Seminar - Computer-Designed Organisms - Josh Bongard</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-current-status-of-tinyml-and-the-enormous-opportunities-ahead-panel-discussion-191810?ref=freecodecamp"><strong>Current Status of TinyML and the Enormous Opportunities Ahead - Panel Discussion</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-new-chip-technologies-for-ai-and-for-asia-the-edge-is-where-the-action-is-191818?ref=freecodecamp"><strong>Stanford Seminar - New Chip Technologies for AI and for Asia - The Edge is Where the Action Is</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-don-knuth-dancing-links-2018-191876?ref=freecodecamp"><strong>Stanford Lecture - Don Knuth - "Dancing Links" 2018</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-petascale-deep-learning-on-a-single-chip-191947?ref=freecodecamp"><strong>Petascale Deep Learning on a Single Chip</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-multiscale-dataflow-computing-competitive-advantage-at-the-exascale-frontier-191964?ref=freecodecamp"><strong>Multiscale Dataflow Computing - Competitive Advantage at the Exascale Frontier</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-unethical-algorithms-of-massive-scale-191971?ref=freecodecamp"><strong>Unethical Algorithms of Massive Scale</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-autonomous-driving-are-we-there-yet-technology-business-legal-considerations-192012?ref=freecodecamp"><strong>Stanford Seminar - Autonomous Driving, Are We There Yet? - Technology, Business, Legal Considerations</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-deep-learning-in-the-age-of-zen-vega-and-beyond-192028?ref=freecodecamp"><strong>Deep Learning in the Age of Zen, Vega, and Beyond</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-time-less-datacenter-192058?ref=freecodecamp"><strong>Stanford Seminar - The Time-Less Datacenter</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-engineering-hero-lecture-marcian-ted-hoff-192117?ref=freecodecamp"><strong>Technology for Today's Problems - Addressing Global Challenges with Semiconductor Advancements</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-input-with-deeply-custom-interfaces-269622?ref=freecodecamp"><strong>Input with Deeply Custom Interfaces</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-democratizing-model-discovery-with-neural-networks-276901?ref=freecodecamp"><strong>Democratizing Model Discovery with Neural Networks</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v3-i-retrieval-augmented-language-models-278149?ref=freecodecamp"><strong>Retrieval Augmented Language Models - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-towards-safe-and-efficient-learning-in-the-physical-world-289247?ref=freecodecamp"><strong>Towards Safe and Efficient Learning in the Physical World - Stanford Seminar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-4-huffman-codes-289253?ref=freecodecamp"><strong>Data Compression I - Lecture 4: Huffman Codes</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-13-score-based-models-291224?ref=freecodecamp"><strong>Stanford CS236: Deep Generative Models - Lecture 13 - Score Based Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-2-background-291229?ref=freecodecamp"><strong>Deep Generative Models - Lecture 2: Background</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-12-energy-based-models-291230?ref=freecodecamp"><strong>Deep Generative Models - Energy Based Models - Lecture 12</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-9-normalizing-flows-291231?ref=freecodecamp"><strong>Deep Generative Models - Normalizing Flows - Lecture 9</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-14-energy-based-models-291233?ref=freecodecamp"><strong>Deep Generative Models - Energy Based Models - Lecture 14</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-6-vaes-291235?ref=freecodecamp"><strong>Deep Generative Models - Lecture 6: Variational Autoencoders</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-15-evaluation-of-generative-models-291236?ref=freecodecamp"><strong>Evaluation of Generative Models - Stanford CS236 Deep Generative Models Lecture 15</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-7-normalizing-flows-291238?ref=freecodecamp"><strong>Stanford CS236: Deep Generative Models - Lecture 7 - Normalizing Flows</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-1-introduction-291239?ref=freecodecamp"><strong>Stanford CS236 - Deep Generative Models - Lecture 1: Introduction</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-aligning-open-language-models-291768?ref=freecodecamp"><strong>Aligning Open Language Models - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-121-hector-multimodal-dl-model-for-recurrence-risk-in-endometrial-cancer-sarah-volinsky-302760?ref=freecodecamp"><strong>HECTOR - Multimodal Deep Learning Model for Predicting Recurrence Risk in Endometrial Cancer</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-soma-design-intertwining-aesthetics-movement-and-emotion-in-design-work-379160?ref=freecodecamp"><strong>Soma Design: Intertwining Aesthetics, Movement and Emotion in Design Work</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-michael-rau-using-pose-and-action-estimation-to-analyze-theater-performances-431750?ref=freecodecamp"><strong>Using Pose and Action Estimation to Analyze Theater Performances</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-public-ai-assistant-to-worldwide-knowledge-21st-century-knowledge-preservation-access-with-ai-434119?ref=freecodecamp"><strong>Public AI Assistant to Worldwide Knowledge: 21st Century Knowledge Preservation and Access with AI</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-creating-a-public-ai-assistant-to-worldwide-knowledge-434120?ref=freecodecamp"><strong>Creating a Public AI Assistant to Worldwide Knowledge</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-public-ai-assistant-to-worldwide-knowledge-exploring-a-corpus-from-paper-to-multilingual-chatbots-434528?ref=freecodecamp"><strong>Exploring a Corpus - From Paper to Multilingual Chatbots</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-angela-aristidou-deploying-ai-in-organizations-society-436720?ref=freecodecamp"><strong>Deploying AI in Organizations and Society</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-137-toward-relieving-clinician-burden-by-auto-generating-progress-notes-sarvesh-soni-443710?ref=freecodecamp"><strong>Toward Relieving Clinician Burden by Automatically Generating Progress Notes</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-karen-hao-in-conversation-with-patrick-hynes-empire-of-ai-457293?ref=freecodecamp"><strong>Empire of AI - The Rise of OpenAI and the Future of Artificial Intelligence</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-andy-konwinski-and-dave-patterson-shaping-ai-s-impact-on-billions-of-lives-461534?ref=freecodecamp"><strong>Shaping AI's Impact on Billions of Lives</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-healthcare-series-accelerating-the-ai-revolution-in-medicine-with-peter-lee-microsoft-471875?ref=freecodecamp"><strong>Accelerating the AI Revolution in Medicine</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-140-using-physics-informed-nns-to-build-digital-twins-of-cardiac-hemodynamics-frances-dean-475884?ref=freecodecamp"><strong>Using Physics Informed Neural Networks to Build Digital Twins of Cardiac Hemodynamics</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-healthcare-series-empowering-patients-with-kimberly-powell-nvidia-479485?ref=freecodecamp"><strong>AI in Healthcare Series - Empowering Patients</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-charting-the-future-open-innovation-in-an-era-of-global-ai-competition-484077?ref=freecodecamp"><strong>Charting the Future - Open Innovation in an Era of Global AI Competition</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-150-collaboration-between-clinicians-and-vlms-in-radiology-report-generation-david-barret-486700?ref=freecodecamp"><strong>Collaboration Between Clinicians and Vision-Language Models in Radiology Report Generation</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-tractable-novelty-exploration-over-continuous-and-discrete-sequential-decision-problems-178973?ref=freecodecamp"><strong>Tractable Novelty Exploration Over Continuous and Discrete Sequential Decision Problems</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-neural-rendering-128095?ref=freecodecamp"><strong>MIT: Neural Rendering</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-gtc-2018-learning-steering-for-parallel-autonomy-alexander-amini-128113?ref=freecodecamp"><strong>Learning Steering for Parallel Autonomy</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2019-image-domain-transfer-nvidia-128105?ref=freecodecamp"><strong>MIT: Image Domain Transfer - NVIDIA Guest Lecture</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-6-s191-2020-convolutional-neural-networks-128101?ref=freecodecamp"><strong>Convolutional Neural Networks</strong></a> from <em>Alexander Amini</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-akarsh-kumar-automating-the-search-for-artificial-life-with-foundation-models-435105?ref=freecodecamp"><strong>Automating the Search for Artificial Life with Foundation Models</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-jehanzeb-mirza-glov-guided-large-language-models-as-implicit-optimizers-for-vision-language-models-436777?ref=freecodecamp"><strong>GLOV: Guided Large Language Models as Implicit Optimizers for Vision Language Models</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-andrew-rouditchenko-giving-sight-to-speech-models-445714?ref=freecodecamp"><strong>Giving Sight to Speech Models</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-deep-subspace-learning-for-dynamic-mr-image-reconstruction-182531?ref=freecodecamp"><strong>Deep Subspace Learning for Dynamic MR Image Reconstruction</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-7-1-the-software-design-document-requirements-to-implementation-medical-software-course-476288?ref=freecodecamp"><strong>The Software Design Document - Requirements to Implementation - Medical Software Course 7.1</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-7-2-the-ultimate-software-design-document-template-guide-medical-software-course-476289?ref=freecodecamp"><strong>The Ultimate Software Design Document Template Guide - Medical Software Course - 7.2</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-5-2-medical-software-life-cycles-agile-development-medical-software-course-476295?ref=freecodecamp"><strong>Medical Software Life Cycles - Agile Development - 5.2</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-3-4-revolutionizing-patient-care-ehr-pacs-with-prof-mariam-aboian-medical-software-course-476297?ref=freecodecamp"><strong>Revolutionizing Patient Care - EHR and PACS - 3.4</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-1-steve-girvin-introduction-to-classical-and-quantum-errors-corrections-479328?ref=freecodecamp"><strong>Introduction to Classical and Quantum Error Correction - Class 1</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-2-2-medium-earth-orbit-gps-rocket-science-for-everyone-with-yale-s-marla-geha-479840?ref=freecodecamp"><strong>Medium Earth Orbit and GPS - Rocket Science for Everyone - 2.2</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367095?ref=freecodecamp"><strong>人工智能原理</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367090?ref=freecodecamp"><strong>数据结构(上)</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367091?ref=freecodecamp"><strong>数据结构(下)</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367092?ref=freecodecamp"><strong>操作系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367106?ref=freecodecamp"><strong>算法设计与分析</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367118?ref=freecodecamp"><strong>区块链和加密数字货币</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367126?ref=freecodecamp"><strong>大数据机器学习</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367131?ref=freecodecamp"><strong>计算几何</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367154?ref=freecodecamp"><strong>机器学习概论</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-data-structures-and-algorithm-design-part-ii-367418?ref=freecodecamp"><strong>Data Structures and Algorithm Design Part II</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367455?ref=freecodecamp"><strong>分布式数据系统应用实战-入门</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-computational-geometry-370333?ref=freecodecamp"><strong>Computational Geometry</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-373015?ref=freecodecamp"><strong>信息素养——学术研究的必修课</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-376427?ref=freecodecamp"><strong>软件需求工程</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-2020-367371?ref=freecodecamp"><strong>计算未来云讲坛（2020）——清华大学计算机系前沿系列讲座</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-and-sustainable-convergence-463889?ref=freecodecamp"><strong>AI and Sustainable Convergence</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-machine-learning-for-personalised-healthcare-opportunities-challenges-and-insights-132434?ref=freecodecamp"><strong>Machine Learning for Personalized Healthcare - Opportunities, Challenges and Insights</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-brooklyn-quant-experience-lecture-series-sandrine-ungari-132445?ref=freecodecamp"><strong>Brooklyn Quant Experience: A Brief History of Quant Investing - From Traditional Equity Factors to Machine Learning</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-machine-learning-for-personalization-132465?ref=freecodecamp"><strong>Machine Learning for Personalization</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ece-ai-seminar-curiosity-styles-in-the-natural-artificial-wild-438455?ref=freecodecamp"><strong>Curiosity Styles in the Natural and Artificial Wild</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367193?ref=freecodecamp"><strong>软件设计模式</strong></a> from <em>University of Science and Technology of China</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-linux-367215?ref=freecodecamp"><strong>Linux操作系统分析</strong></a> from <em>University of Science and Technology of China</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-defining-entropy-and-information-oxford-mathematics-3rd-year-student-lecture-425381?ref=freecodecamp"><strong>Information Theory: Defining Entropy and Information - Lecture 1</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-basic-properties-of-information-oxford-mathematics-3rd-year-student-lecture-427095?ref=freecodecamp"><strong>Basic Properties of Information Theory - Lecture 2</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-3-introducing-codes-oxford-mathematics-3rd-year-student-lecture-429715?ref=freecodecamp"><strong>Introducing Codes in Information Theory - Lecture 3</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-4-typical-sequences-oxford-mathematics-3rd-year-student-lecture-430723?ref=freecodecamp"><strong>Information Theory: Typical Sequences and the Kraft-McMillan Inequality - Lecture 4</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-5-optimal-codes-and-block-coding-3rd-year-student-lecture-432535?ref=freecodecamp"><strong>Information Theory: Optimal Codes and Block Coding - Lecture 5</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-6-shannon-s-code-oxford-mathematics-3rd-year-student-lecture-433845?ref=freecodecamp"><strong>Information Theory: Shannon's Code - Lecture 6</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-information-theory-lecture-8-tunstall-s-code-oxford-mathematics-3rd-year-student-lecture-438440?ref=freecodecamp"><strong>Information Theory: Tunstall's Code - Lecture 8</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-kathleen-creel-arbitrariness-fairness-and-opportunity-in-algorithmic-decision-making-systems-158563?ref=freecodecamp"><strong>Kathleen Creel- Arbitrariness, Fairness, and Opportunity in Algorithmic Decision-Making Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-highly-optimized-quantum-circuits-synthesized-via-data-flow-engines-191549?ref=freecodecamp"><strong>Highly Optimized Quantum Circuits Synthesized via Data-Flow Engines</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-transformer-circuits-induction-heads-in-context-learning-191602?ref=freecodecamp"><strong>Stanford Seminar 2022 - Transformer Circuits, Induction Heads, In-Context Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-deepmind-s-perceiver-and-perceiver-io-new-data-family-architecture-191604?ref=freecodecamp"><strong>Stanford Seminar 2022 - DeepMind's Perceiver and Perceiver IO: New Data Family Architecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-mixture-of-experts-moe-paradigm-and-the-switch-transformer-191605?ref=freecodecamp"><strong>Stanford Seminar - Mixture of Experts Paradigm and the Switch Transformer</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs25-i-stanford-seminar-2022-transformers-in-vision-tackling-problems-in-computer-vision-191607?ref=freecodecamp"><strong>Stanford Seminar 2022 - Transformers in Vision: Tackling Problems in Computer Vision</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-dataflow-for-convergence-of-ai-and-hpc-groqchip-191629?ref=freecodecamp"><strong>Stanford Seminar - Dataflow for Convergence of AI and HPC - GroqChip</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-universal-intelligent-systems-by-2030-carl-hewitt-and-john-perry-191680?ref=freecodecamp"><strong>Stanford Seminar - Universal Intelligent Systems by 2030 - Carl Hewitt and John Perry</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-centaur-technology-s-deep-learning-coprocessor-191788?ref=freecodecamp"><strong>Stanford Seminar - Centaur Technology's Deep Learning Coprocessor</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-nanosecond-level-clock-synchronization-in-a-data-center-191841?ref=freecodecamp"><strong>Nanosecond-Level Clock Synchronization in a Data Center</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-extending-the-theory-of-ml-for-human-centric-applications-191862?ref=freecodecamp"><strong>Extending the Theory of ML for Human-Centric Applications</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-autonomous-driving-ai-s-biggest-endeavor-james-peng-of-pony-ai-191883?ref=freecodecamp"><strong>Autonomous Driving - AI's Biggest Endeavor, James Peng of</strong></a> <a href="http://Pony.ai"><strong>Pony.ai</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-case-for-learned-index-structures-191893?ref=freecodecamp"><strong>The Case for Learned Index Structures</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-tiny-functions-for-codecs-compilation-and-maybe-soon-everything-191939?ref=freecodecamp"><strong>Tiny Functions for Codecs, Compilation, and - Maybe - Soon Everything</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computing-with-high-dimensional-vectors-191956?ref=freecodecamp"><strong>Stanford Seminar - Computing with High-Dimensional Vectors</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-generalized-reversible-computing-and-the-unconventional-computing-landscape-191958?ref=freecodecamp"><strong>Generalized Reversible Computing and the Unconventional Computing Landscape</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-beyond-floating-point-next-generation-computer-arithmetic-192027?ref=freecodecamp"><strong>Stanford Seminar - Beyond Floating Point - Next Generation Computer Arithmetic</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-don-knuth-the-analysis-of-algorithms-2015-recreating-1969-192030?ref=freecodecamp"><strong>The Analysis of Algorithms - 2015 Recreation of 1969 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-designing-the-iphone-s-magic-flute-ge-wang-192052?ref=freecodecamp"><strong>Designing the iPhone's Magic Flute - Ge Wang</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-runway-a-new-tool-for-distributed-systems-design-192060?ref=freecodecamp"><strong>Runway - A New Tool for Distributed Systems Design</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs109-i-fairness-i-2022-i-lecture-26-261761?ref=freecodecamp"><strong>Stanford CS109 - Fairness in Probability for Computer Scientists - Lecture 26</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v3-i-how-i-learned-to-stop-worrying-and-love-the-transformer-277547?ref=freecodecamp"><strong>How I Learned to Stop Worrying and Love the Transformer - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-lecture-dancing-cells-dr-don-knuth-i-2023-277832?ref=freecodecamp"><strong>Dancing Cells - Efficient Data Structures for Combinatorial Problem Solving</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-18-video-compression-289248?ref=freecodecamp"><strong>Data Compression - Video Compression - Lecture 18</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-1-course-intro-lossless-data-compression-basics-289249?ref=freecodecamp"><strong>Data Compression I - Course Introduction and Lossless Compression Basics - Lecture 1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-5-asymptotic-equipartition-property-289251?ref=freecodecamp"><strong>Data Compression I - Lecture 5: Asymptotic Equipartition Property</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-9-context-based-ac-llm-compression-289252?ref=freecodecamp"><strong>Context-based Arithmetic Coding and LLM Compression - Stanford EE274 Lecture 9</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-3-kraft-inequality-entropy-introduction-to-scl-289255?ref=freecodecamp"><strong>Data Compression I - Lecture 3: Kraft Inequality, Entropy, and Introduction to SCL</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-8-beyond-iid-distributions-conditional-entropy-289256?ref=freecodecamp"><strong>Stanford EE274: Data Compression - Beyond IID Distributions: Conditional Entropy - Lecture 8</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-10-lz-and-universal-compression-289257?ref=freecodecamp"><strong>LZ and Universal Compression - Lecture 10</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-6-arithmetic-coding-289258?ref=freecodecamp"><strong>Arithmetic Coding - Stanford EE274 Data Compression I Lecture 6</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-16-learnt-image-compression-289259?ref=freecodecamp"><strong>Learnt Image Compression - Lecture 16</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-11-lossy-compression-basics-quantization-289260?ref=freecodecamp"><strong>Lossy Compression Basics and Quantization - Lecture 11</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-ee274-data-compression-i-2023-i-lecture-7-ans-289261?ref=freecodecamp"><strong>Asymmetric Numeral Systems (ANS) - Data Compression Lecture 7</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-3-autoregressive-models-291222?ref=freecodecamp"><strong>Deep Generative Models - Autoregressive Models - Lecture 3</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-17-discrete-latent-variable-models-291223?ref=freecodecamp"><strong>Deep Generative Models - Discrete Latent Variable Models - Lecture 17</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-5-vaes-291225?ref=freecodecamp"><strong>Deep Generative Models - Lecture 5: Variational Autoencoders</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-18-diffusion-models-for-discrete-data-291228?ref=freecodecamp"><strong>Deep Generative Models - Diffusion Models for Discrete Data - Lecture 18</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-10-gans-291232?ref=freecodecamp"><strong>Deep Generative Models - Lecture 10: GANs</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-8-gans-291234?ref=freecodecamp"><strong>Deep Generative Models - Lecture 8: GANs</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs236-deep-generative-models-i-2023-i-lecture-11-energy-based-models-291237?ref=freecodecamp"><strong>Deep Generative Models - Energy Based Models - Lecture 11</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-demystifying-mixtral-of-experts-292561?ref=freecodecamp"><strong>Demystifying Mixtral of Experts - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-transformers-that-transform-well-enough-to-support-near-shallow-architectures-293446?ref=freecodecamp"><strong>Transformers that Transform Well Enough to Support Near-Shallow Architectures - Stanford CS25 Lecture</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v4-i-hyung-won-chung-of-openai-295461?ref=freecodecamp"><strong>Shaping the Future of AI from the History of Transformer Architectures - Stanford CS25</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-ms-e447-zkp-panel-with-dan-boneh-jens-groth-daniel-marin-and-ravi-mhatre-299352?ref=freecodecamp"><strong>Zero Knowledge Proofs for Verifiable Computation on Blockchain Systems - Panel Discussion</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-126-divide-conquer-concept-based-models-for-efficient-transfer-learning-shantanu-ghosh-312449?ref=freecodecamp"><strong>Divide and Conquer - Concept-based Models for Efficient Transfer Learning</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-127-improving-llms-for-clinical-named-entity-recognition-via-prompt-engineering-yan-hu-352640?ref=freecodecamp"><strong>Improving Large Language Models for Clinical Named Entity Recognition via Prompt Engineering</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-131-analyzing-and-exposing-vulnerabilities-in-language-models-yibo-wang-366872?ref=freecodecamp"><strong>Analyzing and Exposing Vulnerabilities in Language Models - Session 131</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-public-ai-assistant-to-worldwide-knowledge-21st-century-knowledge-preservation-access-with-ai-434523?ref=freecodecamp"><strong>Public AI Assistant to Worldwide Knowledge: 21st Century Knowledge Preservation and Access with AI</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-public-ai-assistant-to-worldwide-knowledge-answering-queries-of-structured-and-unstructured-data-434524?ref=freecodecamp"><strong>Public AI Assistant to Worldwide Knowledge: Answering Queries of Structured and Unstructured Data</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-healthcare-series-from-decision-support-to-drug-prescriptions-dr-graham-walker-kaiser-439631?ref=freecodecamp"><strong>AI in Healthcare Series: From Decision Support to Drug Prescriptions</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-ai-audits-and-autonomy-446987?ref=freecodecamp"><strong>AI Audits and Autonomy in Sociotechnical Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs25-v5-i-transformers-in-diffusion-models-for-image-generation-and-beyond-462484?ref=freecodecamp"><strong>Transformers in Diffusion Models for Image Generation and Beyond</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-healthcare-series-the-future-of-personalized-healthcare-technology-with-dr-jessica-mega-465831?ref=freecodecamp"><strong>The Future of Personalized Healthcare Technology with AI</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-146-the-limited-impact-of-medical-adaptation-of-llms-and-vlms-daniel-p-jeong-475876?ref=freecodecamp"><strong>The Limited Impact of Medical Adaptation of Large Language and Vision-Language Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-145-managed-by-ai-artificial-pancreas-contemporary-treatment-of-diabetes-boris-jacopo-475879?ref=freecodecamp"><strong>Managed by AI - Artificial Pancreas and Contemporary Treatment of Diabetes</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-139-lorkd-low-rank-knowledge-decomposition-for-medical-foundation-models-jiangchao-yao-475880?ref=freecodecamp"><strong>LoRKD - Low-Rank Knowledge Decomposition for Medical Foundation Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-143-diffusion-models-in-medical-imaging-onkar-kishor-susladkar-gayatri-deshmukh-475881?ref=freecodecamp"><strong>Diffusion Models in Medical Imaging</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-141-adaptive-federated-knowledge-injection-into-medical-foundation-models-xiaochen-wang-475882?ref=freecodecamp"><strong>Adaptive Federated Knowledge Injection into Medical Foundation Models</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-142-how-can-we-diagnose-treat-bias-in-llms-for-clinical-decision-making-kenza-benkirane-475883?ref=freecodecamp"><strong>How Can We Diagnose and Treat Bias in LLMs for Clinical Decision-Making - MedAI #142</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-role-of-business-policy-implications-of-industry-leadership-in-artificial-intelligence-484078?ref=freecodecamp"><strong>The Role of Business - Policy Implications of Industry Leadership in Artificial Intelligence</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ai-in-healthcare-series-leveraging-gpt-5-cosmos-and-predictive-models-for-better-outcomes-485592?ref=freecodecamp"><strong>AI in Healthcare Series - Leveraging GPT-5, Cosmos, and Predictive Models for Better Outcomes</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-medai-149-opportunistic-screening-for-pancreatic-cancer-multimodal-ai-fusion-david-le-486698?ref=freecodecamp"><strong>Opportunistic Screening for Pancreatic Cancer - Multimodal AI Fusion of CT Imaging and Radiology Reports</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-cs230-autumn-2025-lecture-1-introduction-to-deep-learning-488187?ref=freecodecamp"><strong>Introduction to Deep Learning - Lecture 1</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-new-dbfication-of-ml-ai-178970?ref=freecodecamp"><strong>The New DBification of ML-AI</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-convolutions-in-image-processing-week-1-mit-18-s191-fall-2020-grant-sanderson-112342?ref=freecodecamp"><strong>Convolutions in Image Processing - MIT 18.S191 Fall 2020 - Week 1</strong></a> from <em>The Julia Programming Language</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-mengzhou-xia-aligning-language-models-with-less-data-and-a-simple-simpo-objective-361199?ref=freecodecamp"><strong>Aligning Language Models with LESS Data and Simple Preference Optimization (SimPO)</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ei-seminar-tim-dettmers-the-promises-and-pitfalls-of-open-source-agent-systems-380809?ref=freecodecamp"><strong>The Promises and Pitfalls of Open-source Agent Systems</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-18-226-probabilistic-methods-in-combinatorics-fall-2022-387981?ref=freecodecamp"><strong>Probabilistic Methods in Combinatorics</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-sharut-gupta-redefining-context-for-powerful-test-time-adaptation-using-unlabeled-data-392169?ref=freecodecamp"><strong>Redefining Context for Powerful Test-Time Adaptation Using Unlabeled Data</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-felix-yanwei-wang-inference-time-policy-customization-through-interactive-task-specification-412708?ref=freecodecamp"><strong>Inference-Time Policy Customization Through Interactive Task Specification</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-zhaofeng-wu-the-semantic-hub-hypothesis-435104?ref=freecodecamp"><strong>The Semantic Hub Hypothesis: Language Models Share Semantic Representations Across Languages and Modalities</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-liming-wang-can-diffusion-model-disentangle-a-theoretical-perspective-436776?ref=freecodecamp"><strong>Can Diffusion Model Disentangle? A Theoretical Perspective</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-philip-schroeder-mit-ei-seminar-recursive-reasoning-with-llms-and-vlms-455863?ref=freecodecamp"><strong>Recursive Reasoning with LLMs and VLMs</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-yung-sung-chuang-reducing-hallucinations-in-llms-via-decoding-detection-and-citation-455864?ref=freecodecamp"><strong>Reducing Hallucinations in LLMs via Decoding, Detection, and Citation</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hongyin-lou-quantifying-generalization-complexity-for-large-language-models-455865?ref=freecodecamp"><strong>Quantifying Generalization Complexity for Large Language Models</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-6-the-structures-of-power-109680?ref=freecodecamp"><strong>The Structures of Power in Early Modern England - Politics, Religion, and Society under the Tudors</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-fast-motion-resolved-4d-mri-using-convolutional-networks-without-data-consistency-182525?ref=freecodecamp"><strong>Fast Motion-Resolved 4D MRI Using Convolutional Networks Without Data Consistency</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-theoretical-interpretation-of-the-acid-for-stabilizing-deep-reconstruction-networks-182532?ref=freecodecamp"><strong>Theoretical Interpretation of the ACID for Stabilizing Deep Reconstruction Networks</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-fast-uncertainty-estimation-and-diffusion-models-in-pet-182535?ref=freecodecamp"><strong>Fast Uncertainty Estimation and Diffusion Models in PET</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-6-5-mastering-your-srs-template-for-medical-software-course-476291?ref=freecodecamp"><strong>Mastering Your SRS Template for Medical Software Course</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-5-4-navigating-the-medical-software-life-cycle-a-complete-guide-medical-software-course-476293?ref=freecodecamp"><strong>Navigating the Medical Software Life Cycle - A Complete Guide - 5.4</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-1-1-diving-into-medical-software-your-course-introduction-medical-software-course-476301?ref=freecodecamp"><strong>Diving Into Medical Software - Your Course Introduction - 1.1</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-11-6-navigating-ai-ml-challenges-in-medical-software-development-medical-software-course-478138?ref=freecodecamp"><strong>Navigating AI/ML Challenges in Medical Software Development - 11.6</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-11-3-demystifying-deep-learning-neural-networks-med-ai-applications-medical-software-course-478139?ref=freecodecamp"><strong>Demystifying Deep Learning - Neural Networks and Medical AI Applications - 11.3</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-11-4-navigating-ai-ml-regulations-global-guidance-for-medical-software-course-478140?ref=freecodecamp"><strong>Navigating AI/ML Regulations - Global Guidance for Medical Software Course - 11.4</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-11-1-demystifying-ai-ml-a-core-introduction-for-medical-software-course-478141?ref=freecodecamp"><strong>Demystifying AI and ML - A Core Introduction for Medical Software Course - 11.1</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-9-5-signal-detection-roc-curves-optimizing-medical-software-decisions-medical-software-course-478146?ref=freecodecamp"><strong>Signal Detection and ROC Curves - Optimizing Medical Software Decisions - 9.5</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-7-michael-hatridge-measurement-in-cqed-479325?ref=freecodecamp"><strong>Measurement in Circuit Quantum Electrodynamics - Class 7</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-6-aleksander-kubica-decoding-problem-and-statistical-mechanical-mapping-479326?ref=freecodecamp"><strong>Decoding Problem and Statistical-Mechanical Mapping - Class 6</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-5-shruti-puri-erasure-errors-and-rydberg-atoms-479327?ref=freecodecamp"><strong>Erasure Errors and Rydberg Atoms - Class 5</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-2-yongshan-ding-quantum-codes-stabilizers-and-computation-479329?ref=freecodecamp"><strong>Quantum Codes, Stabilizers, and Computation - Class 2</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-4-takahiro-tsunoda-hardware-efficient-encodings-cat-qubits-dual-rail-qubits-479330?ref=freecodecamp"><strong>Hardware Efficient Encodings - Cat Qubits and Dual-Rail Qubits - Class 4</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-class-3-daniel-weiss-introduction-to-bosonic-modes-and-kraus-operators-479331?ref=freecodecamp"><strong>Introduction to Bosonic Modes and Kraus Operators - Class 3</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367301?ref=freecodecamp"><strong>移动图形概论</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367315?ref=freecodecamp"><strong>推荐系统</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367712?ref=freecodecamp"><strong>低资源场景下的对话系统任务的模型定制</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-375411?ref=freecodecamp"><strong>算法初步</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-473154?ref=freecodecamp"><strong>护理信息学</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367112?ref=freecodecamp"><strong>大数据平台核心技术</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367120?ref=freecodecamp"><strong>物联网概论</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367145?ref=freecodecamp"><strong>高级大数据系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367178?ref=freecodecamp"><strong>软件理论基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367223?ref=freecodecamp"><strong>高级操作系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-risc-v-367260?ref=freecodecamp"><strong>操作系统(RISC-V)</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367278?ref=freecodecamp"><strong>计算机是如何实现智能的</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367400?ref=freecodecamp"><strong>学堂在线×快手《新知如师说》清华名师系列讲座</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-367439?ref=freecodecamp"><strong>闲话AI：自然语言理解难在哪儿？</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367458?ref=freecodecamp"><strong>机器学习训练营</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367513?ref=freecodecamp"><strong>深度学习训练营</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367520?ref=freecodecamp"><strong>分布式数据系统应用实战-进阶</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367534?ref=freecodecamp"><strong>计算机系统架构的新挑战</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367538?ref=freecodecamp"><strong>邓公漫谈数据结构-「疾风计划」导师专属直播【限时开放】</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367551?ref=freecodecamp"><strong>操作系统专题训练课</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-367553?ref=freecodecamp"><strong>AI肖像画大师：生成对抗网络驱动的多风格艺术肖像画创作</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367570?ref=freecodecamp"><strong>推荐系统中的用户理解：偏好、意图、行为与满意度</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367602?ref=freecodecamp"><strong>人工智能基础核心技术之事件检测</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-nlp-367606?ref=freecodecamp"><strong>当微信邂逅NLP基础研究</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367614?ref=freecodecamp"><strong>“神威·太湖之光”超级计算机优化方法与应用简介</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367623?ref=freecodecamp"><strong>基于图神经网络的事实验证</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367624?ref=freecodecamp"><strong>为网络化系统设计智能可靠的优化算法</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367626?ref=freecodecamp"><strong>算法支撑的赛博智能经济</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367636?ref=freecodecamp"><strong>浅谈面试中的算法题</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-engineering-responsible-ai-367648?ref=freecodecamp"><strong>Engineering Responsible AI</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367662?ref=freecodecamp"><strong>非易失内存在分布式存储领域的应用</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367668?ref=freecodecamp"><strong>融合知识的预训练语言模型</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367677?ref=freecodecamp"><strong>复杂场景下的机器阅读理解</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367723?ref=freecodecamp"><strong>任务导向对话的数据和平台建设</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-368176?ref=freecodecamp"><strong>区块链助力小微企业融资</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-368940?ref=freecodecamp"><strong>智慧医疗创新体验</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-1-374731?ref=freecodecamp"><strong>电子信息科学与技术导引(1)</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-374803?ref=freecodecamp"><strong>应用信息论基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-375450?ref=freecodecamp"><strong>大数据与机器智能</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-376959?ref=freecodecamp"><strong>清华大学计算机科学与技术系六十周年系庆学术报告（一）理论</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-376985?ref=freecodecamp"><strong>清华大学计算机科学与技术系六十周年系庆学术报告（三）人工智能</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-377039?ref=freecodecamp"><strong>清华大学计算机科学与技术系六十周年系庆学术报告（二）系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-441027?ref=freecodecamp"><strong>城市人工智能理论与方法</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-medical-and-health-applications-innovative-practices-and-inclusive-design-463891?ref=freecodecamp"><strong>AI Medical and Health Applications: Innovative Practices and Inclusive Design</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-480624?ref=freecodecamp"><strong>清华大学祝武：AI+金融</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-480630?ref=freecodecamp"><strong>杨斌×里德·霍夫曼：驾驭AI浪潮重塑未来竞争力</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-online-education-dialogue-2025-480803?ref=freecodecamp"><strong>Online Education Dialogue 2025</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367282?ref=freecodecamp"><strong>自然语言处理</strong></a> from <em>Shanghai Jiao Tong University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367459?ref=freecodecamp"><strong>深度强化学习导论</strong></a> from <em>Fudan University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-374912?ref=freecodecamp"><strong>人工智能导论</strong></a> from <em>Fudan University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-generative-models-for-image-synthesis-132460?ref=freecodecamp"><strong>Generative Models for Image Synthesis</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-learning-representations-using-causal-invariance-132463?ref=freecodecamp"><strong>Learning Representations Using Causal Invariance</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-information-knot-tying-sensing-action-emergence-theory-of-representation-learning-132472?ref=freecodecamp"><strong>The Information Knot - Tying Sensing and Action; Emergence Theory of Representation Learning</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ece-ai-seminar-spectral-transformers-424857?ref=freecodecamp"><strong>Spectral Transformers for Long-Range Sequence Modeling and Prediction</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ece-ai-seminar-towards-robust-and-reliable-autonomous-vehicles-with-foundation-models-424858?ref=freecodecamp"><strong>Towards Robust and Reliable Autonomous Vehicles with Foundation Models</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367309?ref=freecodecamp"><strong>互联网体系结构</strong></a> from <em>University of Science and Technology of China</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-andrew-wiles-talks-to-hannah-fry-142841?ref=freecodecamp"><strong>Andrew Wiles Talks to Hannah Fry</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-375076?ref=freecodecamp"><strong>信息与电子工程导论</strong></a> from <em>Zhejiang University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-375974?ref=freecodecamp"><strong>知识图谱导论</strong></a> from <em>Zhejiang University</em></p>
</li>
</ul>
<h2 id="heading-programming-151"><strong>Programming (151)</strong></h2>
<ul>
<li><p><a href="https://www.classcentral.com/course/python-the-georgia-institute-of-technology-comput-11469?ref=freecodecamp"><strong>Computing in Python I: Fundamentals and Procedural Programming</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(272)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs106b-programming-abstraction-in-c-107759?ref=freecodecamp"><strong>Programming Abstractions in C++ - Stanford University</strong></a> from <em>Stanford University</em> ★★★★★(199)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-georgia-institute-of-technology-comput-11472?ref=freecodecamp"><strong>Computing in Python IV: Objects &amp; Algorithms</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(116)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-georgia-institute-of-technology-comput-11470?ref=freecodecamp"><strong>Computing in Python II: Control Structures</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(60)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-georgia-institute-of-technology-comput-11471?ref=freecodecamp"><strong>Computing in Python III: Data Structures</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(52)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/web-development-harvard-university-cs50-s-web-pro-11506?ref=freecodecamp"><strong>CS50's Web Programming with Python and JavaScript</strong></a> from <em>Harvard University</em> ★★★★★(42)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/kadenze-introduction-to-programming-for-the-visual-arts-with-p5-js-3770?ref=freecodecamp"><strong>Introduction to Programming for the Visual Arts with p5.js</strong></a> from <em>University of California, Los Angeles</em> ★★★★★(36)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/freecodecamp-database-systems-cornell-university-course-sql-nosql-large-scale-data-analysis-57068?ref=freecodecamp"><strong>Database Systems - Cornell University Course (SQL, NoSQL, Large-Scale Data Analysis)</strong></a> from <em>Cornell University</em> ★★★★★(36)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-university-of-michigan-programming-for-13096?ref=freecodecamp"><strong>Programming for Everybody (Getting Started with Python)</strong></a> from <em>University of Michigan</em> ★★★★★(20)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-university-of-michigan-python-data-str-13097?ref=freecodecamp"><strong>Python Data Structures</strong></a> from <em>University of Michigan</em> ★★★★★(15)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-harvard-university-using-python-for-resear-7204?ref=freecodecamp"><strong>Using Python for Research</strong></a> from <em>Harvard University</em> ★★★★☆(12)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-harvard-university-cs50-s-introduction-to--58275?ref=freecodecamp"><strong>CS50's Introduction to Programming with Python</strong></a> from <em>Harvard University</em> ★★★★★(11)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-delft-university-of-technolo-2147?ref=freecodecamp"><strong>Introduction to Functional Programming</strong></a> from <em>Delft University of Technology</em> ★★★★☆(11)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/matlab-ecole-polytechnique-federale-de-lausanne-m-7376?ref=freecodecamp"><strong>MATLAB and Octave for Beginners</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★★☆(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-opencourseware-introduction-to-matlab-programming-fall-2011-40968?ref=freecodecamp"><strong>Introduction To MATLAB Programming (Fall 2011)</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/scratch-programming-harvard-university-cs50-s-int-39309?ref=freecodecamp"><strong>CS50's Introduction to Programming with Scratch</strong></a> from <em>Harvard University</em> ★★★★☆(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-cms-611j-creating-video-games-fall-2014-40923?ref=freecodecamp"><strong>Creating Video Games</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs-193a-android-app-development-winter-2019-107767?ref=freecodecamp"><strong>Android App Development Winter 2019</strong></a> from <em>Stanford University</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-cornell-university-the-compu-2809?ref=freecodecamp"><strong>The Computing Technology Inside Your Smartphone</strong></a> from <em>Cornell University</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/kadenze-web-coding-fundamentals-html-css-and-javascript-3781?ref=freecodecamp"><strong>Web Coding Fundamentals: HTML, CSS and Javascript</strong></a> from <em>National University of Singapore</em> ★★★★★(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-software-development-process-2335?ref=freecodecamp"><strong>Software Development Process</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/sql-harvard-university-cs50-s-introduction-to-dat-152357?ref=freecodecamp"><strong>CS50's Introduction to Databases with SQL</strong></a> from <em>Harvard University</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/relational-databases-stanford-university-database-19468?ref=freecodecamp"><strong>Databases: Relational Databases and SQL</strong></a> from <em>Stanford University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-cloud-computing-what-s-on-the-horizon-with-dr-timothy-chou-191581?ref=freecodecamp"><strong>Cloud Computing - What’s on the Horizon with Dr. Timothy Chou</strong></a> from <em>Stanford University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/react-native-harvard-university-cs50-s-mobile-app-11505?ref=freecodecamp"><strong>CS50's Mobile App Development with React Native</strong></a> from <em>Harvard University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-database-systems-concepts-design-8573?ref=freecodecamp"><strong>Database Systems Concepts &amp; Design</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/software-testing-delft-university-of-technology-a-12039?ref=freecodecamp"><strong>Automated Software Testing: Model and State-based Testing</strong></a> from <em>Delft University of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/django-javascript-jquery-json-20951?ref=freecodecamp"><strong>Using JavaScript, JQuery, and JSON in Django</strong></a> from <em>University of Michigan</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/relational-databases-stanford-university-database-20360?ref=freecodecamp"><strong>Databases: Semistructured Data</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-university-of-michigan-programacion-pa-14379?ref=freecodecamp"><strong>Programación para todos (empezando con Python)</strong></a> from <em>University of Michigan</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-seven-databases-in-seven-weeks-fall-2014-91055?ref=freecodecamp"><strong>Seven Databases in Seven Weeks - Fall 2014</strong></a> from <em>Carnegie Mellon University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-721-advanced-database-systems-spring-2019-91062?ref=freecodecamp"><strong>Advanced Database Systems - Spring 2019</strong></a> from <em>Carnegie Mellon University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-optional-static-typing-for-python-110003?ref=freecodecamp"><strong>Stanford Seminar - Optional Static Typing for Python</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-721-advanced-database-systems-spring-2017-91056?ref=freecodecamp"><strong>Advanced Database Systems - Spring 2017</strong></a> from <em>Carnegie Mellon University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-rocket-securing-the-web-at-compile-time-191901?ref=freecodecamp"><strong>Rocket- Securing the Web at Compile-Time</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-kutrace-2020-191791?ref=freecodecamp"><strong>Stanford Seminar - KUtrace</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-7-4-stop-user-errors-mastering-usability-engineering-in-medical-software-course-476287?ref=freecodecamp"><strong>Stop User Errors - Mastering Usability Engineering in Medical Software Course</strong></a> from <em>Yale University</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/software-testing-delft-university-of-technology-a-12038?ref=freecodecamp"><strong>Automated Software Testing: Unit Testing, Coverage Criteria and Design for Testability</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/biology-harvard-university-quantitative-methods-f-17849?ref=freecodecamp"><strong>Quantitative Methods for Biology</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-cs-6340-software-analysis-testing-8568?ref=freecodecamp"><strong>CS 6340: Software Analysis &amp; Testing</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/sql-stanford-university-databases-advanced-topics-20361?ref=freecodecamp"><strong>Databases: Advanced Topics in SQL</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/databases-the-university-of-michigan-database-des-58329?ref=freecodecamp"><strong>Database Design and Basic SQL in PostgreSQL</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/r-programming-stanford-university-r-programming-f-40742?ref=freecodecamp"><strong>R Programming Fundamentals</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/r-programming-harvard-university-cs50-s-introduct-274066?ref=freecodecamp"><strong>CS50's Introduction to Programming with R</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/virtual-reality-the-university-of-california-san--8515?ref=freecodecamp"><strong>Creating Virtual Reality (VR) Apps</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/virtual-reality-the-university-of-california-san--8514?ref=freecodecamp"><strong>How Virtual Reality Works</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/object-oriented-programming-the-georgia-institute-23281?ref=freecodecamp"><strong>Introduction to Object-Oriented Programming with Java III: Exceptions, Data Structures, Recursion, and GUIs</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/databases-stanford-university-databases-modeling--20362?ref=freecodecamp"><strong>Databases: Modeling and Theory</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/django-the-university-of-michigan-using-javascrip-22251?ref=freecodecamp"><strong>Using JavaScript and JSON in Django</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mobile-development-massachusetts-institute-of-tec-7840?ref=freecodecamp"><strong>Mobile Application Experiences</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/software-engineering-ku-leuven-uml-class-diagrams-7837?ref=freecodecamp"><strong>UML Class Diagrams for Software Engineering</strong></a> from <em>KU Leuven University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/video-game-writing-university-of-british-columbia-40673?ref=freecodecamp"><strong>Worldbuilding for Video Games</strong></a> from <em>The University of British Columbia</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/kadenze-real-time-audio-signal-processing-in-faust-10144?ref=freecodecamp"><strong>Real-Time Audio Signal Processing in Faust</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/natural-language-processing-the-university-of-mic-58697?ref=freecodecamp"><strong>JSON and Natural Language Processing in PostgreSQL</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/software-development-delft-university-of-technolo-9119?ref=freecodecamp"><strong>Global Software Development</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-stanford-university-statistical-learning-w-272341?ref=freecodecamp"><strong>Statistical Learning with Python</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/databases-stanford-university-databases-olap-and--20359?ref=freecodecamp"><strong>Databases: OLAP and Recursion</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/java-the-georgia-institute-of-technology-introduc-23280?ref=freecodecamp"><strong>Introduction to Object-Oriented Programming with Java II: Object-Oriented Programming and Algorithms</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/java-the-georgia-institute-of-technology-introduc-23279?ref=freecodecamp"><strong>Introduction to Object-Oriented Programming with Java I: Foundations and Syntax Basics</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/sql-the-university-of-michigan-intermediate-postg-58347?ref=freecodecamp"><strong>Intermediate PostgreSQL</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/kids-coding-language-the-university-of-california-7480?ref=freecodecamp"><strong>Minecraft, Coding and Teaching</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/scala-ecole-polytechnique-federale-de-lausanne-pr-12571?ref=freecodecamp"><strong>Programming Reactive Systems</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/django-the-university-of-michigan-building-web-ap-22252?ref=freecodecamp"><strong>Building Web Applications in Django</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/nosql-the-university-of-michigan-database-archite-58698?ref=freecodecamp"><strong>Database Architecture, Scale, and NoSQL with Elasticsearch</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/django-the-university-of-michigan-web-application-22250?ref=freecodecamp"><strong>Web Application Technologies and Django</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-universite-de-montreal-introduction--286603?ref=freecodecamp"><strong>Introduction à la science des données sociales avec R</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/django-the-university-of-michigan-django-features-22253?ref=freecodecamp"><strong>Django Features and Libraries</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/matlab-ecole-polytechnique-federale-de-lausanne-m-4759?ref=freecodecamp"><strong>MATLAB et Octave pour débutants</strong></a> from <em>École Polytechnique Fédérale de Lausanne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-university-of-michigan-estructuras-de--20113?ref=freecodecamp"><strong>Estructuras de Datos con Python</strong></a> from <em>University of Michigan</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/c-programming-peking-university-c-programming-c-c-3243?ref=freecodecamp"><strong>C++ Programming | C++程序设计</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/java-peking-university-javacheng-xu-she-ji-java-p-4904?ref=freecodecamp"><strong>Java程序设计 | Java Programming</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/cs193p-developing-apps-ios-98573?ref=freecodecamp"><strong>CS193p - Developing Apps for iOS</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-computer-science-virtual-reality-47915?ref=freecodecamp"><strong>Virtual Reality</strong></a> from <em>University of Illinois at Urbana-Champaign</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-to-design-addictive-games-191982?ref=freecodecamp"><strong>How to Design Addictive Games</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-cs193p-iphone-application-development-spring-2020-107768?ref=freecodecamp"><strong>iPhone Application Development Spring 2020</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/edx-2143?ref=freecodecamp"><strong>程序设计基础</strong></a> from <em>Peking University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-programing-should-be-more-than-coding-110038?ref=freecodecamp"><strong>Stanford Seminar - Programming Should Be More Than Coding</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-stories-from-cocolab-probabilistic-programs-cognative-modeling-smart-web-pages-110053?ref=freecodecamp"><strong>Stanford Seminar - Stories from CoCoLab: Probabilistic Programs, Cognitive Modeling, &amp; Smart Web Pages</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/r-programming-harvard-university-ciencia-de-datos-223229?ref=freecodecamp"><strong>Ciencia de Datos: Fundamentos de R</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-extended-reality-for-everybody-michael-nebeling-108698?ref=freecodecamp"><strong>Extended Reality for Everybody - Michael Nebeling</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/cs241-cs-illinois-edu-coursebook-92973?ref=freecodecamp"><strong>CS 241: System Programming</strong></a> from <em>University of Illinois at Urbana-Champaign</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-c-367089?ref=freecodecamp"><strong>C++语言程序设计基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-accessible-virtual-reality-for-people-with-limited-mobility-109975?ref=freecodecamp"><strong>Stanford Seminar - Accessible Virtual Reality for People with Limited Mobility</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-haskell-lecture-notes-and-assignments-110550?ref=freecodecamp"><strong>Haskell: Lecture notes and assignments</strong></a> from <em>University of Pennsylvania</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/learncs-online-learn-computer-science-online-99171?ref=freecodecamp"><strong>Learn Computer Science Online</strong></a> from <em>University of Illinois at Urbana-Champaign</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-035-computer-language-engineering-sma-5502-fall-2005-292229?ref=freecodecamp"><strong>Computer Language Engineering (SMA 5502)</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-721-advanced-database-systems-spring-2016-91053?ref=freecodecamp"><strong>Advanced Database Systems - Spring 2016</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-user-experience-ux-design-human-factors-and-culture-in-design-375337?ref=freecodecamp"><strong>User Experience (UX) Design: Human Factors and Culture in Design</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-445-645-intro-to-database-systems-fall-2017-91057?ref=freecodecamp"><strong>Intro to Database Systems - Fall 2017</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-mind-your-state-for-your-state-of-mind-109999?ref=freecodecamp"><strong>Stanford Seminar - Mind Your State for Your State of Mind</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-making-teamwork-an-objective-discipline-sid-sijbrandij-ceo-chairman-of-gitlab-191570?ref=freecodecamp"><strong>Making Teamwork an Objective Discipline - Sid Sijbrandij CEO &amp; Chairman of GitLab</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-concatenative-programming-from-ivory-to-metal-191951?ref=freecodecamp"><strong>Stanford Seminar - Concatenative Programming- From Ivory to Metal</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-programming-languages-the-fundamental-tools-of-the-computer-age-178972?ref=freecodecamp"><strong>Programming Languages - The Fundamental Tools of the Computer Age</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-445-645-intro-to-database-systems-fall-2018-91060?ref=freecodecamp"><strong>Intro to Database Systems - Fall 2018</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-721-advanced-database-systems-spring-2018-91059?ref=freecodecamp"><strong>Advanced Database Systems - Spring 2018</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-17-paul-s-disciples-109407?ref=freecodecamp"><strong>Paul's Disciples - Pseudepigraphic Letters to Colossians and Ephesians</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-latex-course-142181?ref=freecodecamp"><strong>LaTeX course</strong></a> from <em>University of Amsterdam</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-445-645-intro-to-database-systems-fall-2021-91065?ref=freecodecamp"><strong>Intro to Database Systems - Fall 2021</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-721-advanced-database-systems-spring-2020-91064?ref=freecodecamp"><strong>Advanced Database Systems - Spring 2020</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hardware-accelerated-database-lectures-fall-2018-91061?ref=freecodecamp"><strong>Hardware Accelerated Database Lectures - Fall 2018</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367104?ref=freecodecamp"><strong>程序设计基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367116?ref=freecodecamp"><strong>学做小程序——基础篇</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367199?ref=freecodecamp"><strong>计算机程序设计基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-future-of-edge-computing-from-an-international-perspective-191822?ref=freecodecamp"><strong>Stanford Seminar - The Future of Edge Computing from an International Perspective</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-missing-semester-iap-2020-203198?ref=freecodecamp"><strong>Missing Semester IAP 2020</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-001-structure-and-interpretation-of-computer-programs-spring-2005-292228?ref=freecodecamp"><strong>Structure and Interpretation of Computer Programs</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-ec-s01-internet-technology-in-local-and-global-communities-spring-2005-summer-2005-292286?ref=freecodecamp"><strong>Internet Technology in Local and Global Communities</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-15-445-645-intro-to-database-systems-fall-2019-91063?ref=freecodecamp"><strong>Intro to Database Systems - Fall 2019</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-time-series-database-lectures-fall-2017-91058?ref=freecodecamp"><strong>Time Series Database Lectures</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-databaseology-lectures-fall-2015-91054?ref=freecodecamp"><strong>The Databaseology Lectures - Fall 2015</strong></a> from <em>Carnegie Mellon University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-pacs-ai-from-integration-to-cloud-182539?ref=freecodecamp"><strong>PACS &amp; AI – From Integration to Cloud</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-java-367093?ref=freecodecamp"><strong>Java程序设计</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-designing-the-interactive-paper-191529?ref=freecodecamp"><strong>Designing the Interactive Paper</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-pywren-pushing-microservices-to-teraflops-192001?ref=freecodecamp"><strong>Stanford Seminar - PyWren - Pushing Microservices to Teraflops</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-living-in-information-everywhere-192006?ref=freecodecamp"><strong>Living in Information Everywhere</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-wearing-a-vr-headset-while-driving-to-improve-vehicle-safety-293638?ref=freecodecamp"><strong>Wearing a VR Headset While Driving to Improve Vehicle Safety</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-8-2-master-code-management-essential-revision-control-systems-for-medical-software-course-476285?ref=freecodecamp"><strong>Master Code Management - Essential Revision Control Systems for Medical Software Course</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-8-3-software-testing-essentials-finding-bugs-ensuring-quality-in-medical-software-course-476803?ref=freecodecamp"><strong>Software Testing Essentials - Finding Bugs and Ensuring Quality in Medical Software - 8.3</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-c-367096?ref=freecodecamp"><strong>C++语言程序设计进阶</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367161?ref=freecodecamp"><strong>学做小程序——实战篇：树洞小程序</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367253?ref=freecodecamp"><strong>学做小程序--云开发篇：近义词小程序</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-jeremy-bailenson-your-mind-on-the-metaverse-158531?ref=freecodecamp"><strong>Jeremy Bailenson: Your Mind on the Metaverse</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-techfail-from-intersectional-in-accessibility-to-inclusive-design-191525?ref=freecodecamp"><strong>Stanford Seminar - TechFail: From Intersectional Inaccessibility to Inclusive Design</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-understanding-the-utility-of-haptic-feedback-in-telerobotic-devices-191540?ref=freecodecamp"><strong>Understanding the Utility of Haptic Feedback in Telerobotic Devices</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-i-forgot-i-invented-hypertext-ted-nelson-191617?ref=freecodecamp"><strong>Stanford Seminar - I Forgot, I Invented Hypertext - Ted Nelson</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-edge-computing-and-the-evolution-of-ar-vr-panel-discussion-191801?ref=freecodecamp"><strong>Edge Computing and the Evolution of AR-VR - Panel Discussion</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-virtual-mixed-reality-for-security-of-critical-city-scale-cyber-physical-systems-191837?ref=freecodecamp"><strong>Stanford Seminar - Virtual &amp; Mixed Reality for Security of Critical City-Scale Cyber-Physical Systems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-graph-analysis-of-russian-twitter-trolls-using-neo4j-191934?ref=freecodecamp"><strong>Graph Analysis of Russian Twitter Trolls Using Neo4j</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-an-alternative-to-the-american-way-of-innovation-191977?ref=freecodecamp"><strong>An Alternative to the American Way of Innovation</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-integrating-interactive-devices-with-the-user-s-body-284649?ref=freecodecamp"><strong>Integrating Interactive Devices with the User's Body</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-sanmi-koyejo-beyond-benchmarks-building-a-science-of-ai-measurement-443584?ref=freecodecamp"><strong>Beyond Benchmarks – Building a Science of AI Measurement</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-vr-ar-in-ir-mixed-reality-in-medicine-284114?ref=freecodecamp"><strong>VR/AR in IR - Mixed Reality in Medicine</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-tsinghua-university-javacheng-xu-292123?ref=freecodecamp"><strong>JAVA程序设计进阶</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-web-367111?ref=freecodecamp"><strong>Web前端攻城狮</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-r-369989?ref=freecodecamp"><strong>基于R语言的社会统计分析</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-making-the-invisible-visible-observing-complex-software-dynamics-191641?ref=freecodecamp"><strong>Making the Invisible Visible - Observing Complex Software Dynamics</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-robosion-software-platform-for-lifelike-humanoids-191885?ref=freecodecamp"><strong>Stanford Seminar - Robosion: Software Platform for Lifelike Humanoids</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-from-flat-to-phantasmal-283624?ref=freecodecamp"><strong>From Flat to Phantasmal: Enhancing User Experiences Through Spatial Computing Advancements</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-8-5-essential-medical-software-verification-testing-strategies-medical-software-course-478148?ref=freecodecamp"><strong>Essential Medical Software Verification and Testing Strategies - 8.5</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-vc-windows-367113?ref=freecodecamp"><strong>VC++面向对象与可视化程序设计（上）：Windows编程基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-vc-mfc-367114?ref=freecodecamp"><strong>VC++面向对象与可视化程序设计（下）：MFC编程基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367117?ref=freecodecamp"><strong>汇编语言程序设计</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-linux-c-367119?ref=freecodecamp"><strong>基于Linux的C++</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-java-367124?ref=freecodecamp"><strong>JAVA程序设计进阶</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-c-367127?ref=freecodecamp"><strong>面向对象程序设计（C++）</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367236?ref=freecodecamp"><strong>游戏程序设计</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-c-367525?ref=freecodecamp"><strong>C++编程训练营</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-5g-367611?ref=freecodecamp"><strong>低时延网络挑战赛：从5G和边缘计算到互联网</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-372078?ref=freecodecamp"><strong>界面设计导论</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-376556?ref=freecodecamp"><strong>高级数据库系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-376811?ref=freecodecamp"><strong>游戏分析与评测</strong></a> from <em>Tsinghua University</em></p>
</li>
</ul>
<h2 id="heading-data-science-110"><strong>Data Science (110)</strong></h2>
<ul>
<li><p><a href="https://www.classcentral.com/course/youtube-fundamentals-of-qualitative-research-methods-64206?ref=freecodecamp"><strong>Fundamentals of Qualitative Research Methods</strong></a> from <em>Yale University</em> ★★★★★(187)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/analytics-massachusetts-institute-of-technology-t-1623?ref=freecodecamp"><strong>The Analytics Edge</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(80)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-next-in-data-visualization-michelle-borkin-radcliffe-institute-179693?ref=freecodecamp"><strong>Next in Data Visualization - Michelle Borkin - Radcliffe Institute</strong></a> from <em>Harvard University</em> ★★★★☆(61)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/python-the-university-of-california-san-diego-pyt-8209?ref=freecodecamp"><strong>Python for Data Science</strong></a> from <em>University of California, San Diego</em> ★★★★☆(48)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/statistics-the-university-of-california-san-diego-8213?ref=freecodecamp"><strong>Probability and Statistics in Data Science using Python</strong></a> from <em>University of California, San Diego</em> ★★☆☆☆(32)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-massachusetts-institute-of-techn-1779?ref=freecodecamp"><strong>Introduction to Computational Thinking and Data Science</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(30)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mining-stanford-university-mining-massive-dataset-2406?ref=freecodecamp"><strong>Mining Massive Datasets</strong></a> from <em>Stanford University</em> ★★★★★(24)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/r-programming-harvard-university-statistics-and-r-2960?ref=freecodecamp"><strong>Statistics and R</strong></a> from <em>Harvard University</em> ★★★★☆(20)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-dco042-python-for-informatics-1010?ref=freecodecamp"><strong>DCO042 - Python For Informatics</strong></a> from <em>University of Michigan</em> ★★★★★(14)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/r-programming-harvard-university-data-science-r-b-9253?ref=freecodecamp"><strong>Data Science: R Basics</strong></a> from <em>Harvard University</em> ★★★★★(12)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-the-university-of-texas-at-austin-f-4805?ref=freecodecamp"><strong>Foundations of Data Analysis - Part 1: Statistics Using R</strong></a> from <em>The University of Texas at Austin</em> ★★★★☆(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-algorithms-for-big-data-compsci-229r-48050?ref=freecodecamp"><strong>Algorithms for Big Data</strong></a> from <em>Harvard University</em> ★★★★★(8)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-imperial-college-business-school-da-6858?ref=freecodecamp"><strong>Data Analysis Essentials</strong></a> from <em>Imperial College London</em> ★☆☆☆☆(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-data-analytics-at-the-exascale-for-free-electron-lasers-project-191781?ref=freecodecamp"><strong>Data Analytics at the Exascale for Free Electron Lasers Project</strong></a> from <em>Stanford University</em> ★★★★★(7)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-visualization-harvard-university-data-scienc-10347?ref=freecodecamp"><strong>Data Science: Visualization</strong></a> from <em>Harvard University</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-the-georgia-institute-of-tec-8223?ref=freecodecamp"><strong>Computing for Data Analysis</strong></a> from <em>Georgia Institute of Technology</em> ★★★☆☆(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-the-georgia-institute-of-technology-8217?ref=freecodecamp"><strong>Introduction to Analytics Modeling</strong></a> from <em>Georgia Institute of Technology</em> ★★★★☆(5)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stat115-2020-97494?ref=freecodecamp"><strong>STAT115 2020</strong></a> from <em>Harvard University</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-opencourseware-the-analytics-edge-spring-2017-40989?ref=freecodecamp"><strong>The Analytics Edge (Spring 2017)</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-secure-data-science-on-the-internet-of-things-110042?ref=freecodecamp"><strong>Stanford Seminar - Secure Data Science on the Internet of Things</strong></a> from <em>Stanford University</em> ★★★★☆(4)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-harvard-university-causal-diagrams--9097?ref=freecodecamp"><strong>Causal Diagrams: Draw Your Assumptions Before Your Conclusions</strong></a> from <em>Harvard University</em> ★★★★★(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-harvard-university-data-science--10353?ref=freecodecamp"><strong>Data Science: Building Machine Learning Models</strong></a> from <em>Harvard University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-harvard-university-high-dimensional-2949?ref=freecodecamp"><strong>High-Dimensional Data Analysis</strong></a> from <em>Harvard University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-introduction-to-d-110417?ref=freecodecamp"><strong>Introduction to Data Science with Python</strong></a> from <em>Harvard University</em> ★★★★☆(3)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-massachusetts-institute-of-technolo-22414?ref=freecodecamp"><strong>Data Analysis: Statistical Modeling and Computation in Applications</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/probability-harvard-university-data-science-proba-10348?ref=freecodecamp"><strong>Data Science: Probability</strong></a> from <em>Harvard University</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-data-science-wran-10351?ref=freecodecamp"><strong>Data Science: Wrangling</strong></a> from <em>Harvard University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/artificial-intelligence-delft-university-of-techn-110647?ref=freecodecamp"><strong>AI Skills for Engineers: Data Engineering and Data Pipelines</strong></a> from <em>Delft University of Technology</em> ★★★★☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-when-dna-meets-ai-108754?ref=freecodecamp"><strong>Stanford Seminar - When DNA Meets AI</strong></a> from <em>Stanford University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-new-platforms-for-development-solutions-192221?ref=freecodecamp"><strong>Stanford Seminar - New Platforms for Development Solutions</strong></a> from <em>Stanford University</em> ★★★★★(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-ku-leuven-data-analytics-in-health--7160?ref=freecodecamp"><strong>Data Analytics in Health – From Basics to Business</strong></a> from <em>KU Leuven University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-data-science-prod-10350?ref=freecodecamp"><strong>Data Science: Productivity Tools</strong></a> from <em>Harvard University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-data-science-infe-10349?ref=freecodecamp"><strong>Data Science: Inference and Modeling</strong></a> from <em>Harvard University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-university-of-british-columbia-poli-3345?ref=freecodecamp"><strong>Policy Analysis Using Interrupted Time Series</strong></a> from <em>The University of British Columbia</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stat115-2018-97492?ref=freecodecamp"><strong>STAT115 2018</strong></a> from <em>Harvard University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-big-data-analytics-jpl-caltech-48195?ref=freecodecamp"><strong>Big Data Analytics</strong></a> from <em>California Institute of Technology</em> ★★★☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-deep-learning-in-life-sciences-6-874-spring-2020-97534?ref=freecodecamp"><strong>MIT Deep Learning in Life Sciences Spring 2020</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mit-compbio-course-projects-fall-2019-97533?ref=freecodecamp"><strong>MIT CompBio Course Projects Fall 2019</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-soccermatics-could-a-premier-league-team-one-day-be-managed-by-a-mathematician-142821?ref=freecodecamp"><strong>Soccermatics - Could a Premier League Team One Day Be Managed by a Mathematician?</strong></a> from <em>University of Oxford</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-data-and-visual-analytics-8566?ref=freecodecamp"><strong>Data and Visual Analytics</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-principles-statis-9489?ref=freecodecamp"><strong>Principles, Statistical and Computational Tools for Reproducible Data Science</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-science-harvard-university-data-science-caps-10354?ref=freecodecamp"><strong>Data Science: Capstone</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-cse-8803-special-topics-big-data-1027?ref=freecodecamp"><strong>CSE 8803 Special Topics: Big Data</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/bioinformatics-the-university-of-california-san-d-8962?ref=freecodecamp"><strong>Introduction to Genomic Data Science</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-the-hong-kong-university-of-science-58718?ref=freecodecamp"><strong>Foundations of Data Analytics</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/independent-statistical-computing-with-r-a-gentle-introduction-4545?ref=freecodecamp"><strong>Statistical Computing with R - a gentle introduction</strong></a> from <em>University College London</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/business-administration-the-georgia-institute-of--8222?ref=freecodecamp"><strong>Data Analytics for Business</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/machine-learning-the-university-of-california-san-10249?ref=freecodecamp"><strong>Dynamic Programming: Applications In Machine Learning and Genomics</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/algorithms-the-university-of-california-san-diego-10178?ref=freecodecamp"><strong>Algorithms and Data Structures Capstone</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/biology-the-university-of-california-san-diego-gr-10250?ref=freecodecamp"><strong>Graph Algorithms in Genome Sequencing</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-programming-purdue-university-big-data-f-21148?ref=freecodecamp"><strong>Big Data for Reliability and Security</strong></a> from <em>Purdue University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-delft-university-of-technology-data-110646?ref=freecodecamp"><strong>Data Creation and Collection for Artificial Intelligence via Crowdsourcing</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-hong-kong-university-of-science-and--58716?ref=freecodecamp"><strong>Big Data Computing with Spark</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-tsinghua-university-advanced-big-data-sy-12738?ref=freecodecamp"><strong>Advanced Big Data Systems | 高级大数据系统</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-mining-the-hong-kong-university-of-science-a-58717?ref=freecodecamp"><strong>Data Mining and Knowledge Discovery</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-the-hong-kong-university-of-science-58719?ref=freecodecamp"><strong>Mathematical Methods for Data Analysis</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-delft-university-of-technology-data-5387?ref=freecodecamp"><strong>Data Analysis: Building Your Own Business Dashboard</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-university-of-california-san-diego-b-8221?ref=freecodecamp"><strong>Big Data Analytics Using Spark</strong></a> from <em>University of California, San Diego</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-hong-kong-university-of-science-and--58699?ref=freecodecamp"><strong>Big Data Technology Capstone Project</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-hong-kong-university-of-science-and--58699?ref=freecodecamp"><strong>Big Data Technology Capstone Project</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-hong-kong-university-of-science-and--58699?ref=freecodecamp"><strong>Big Data Technology Capstone Project</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/big-data-the-hong-kong-university-of-science-and--58699?ref=freecodecamp"><strong>Big Data Technology Capstone Project</strong></a> from <em>The Hong Kong University of Science and Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/science-universite-de-montreal-fondamentaux-de-la-287568?ref=freecodecamp"><strong>Fondamentaux de la science des données</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-statistics-massachusetts-institute--302496?ref=freecodecamp"><strong>Learning Time Series with Interventions</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-university-of-pennsylvania-knowledg-9288?ref=freecodecamp"><strong>Knowledge Inference and Structure Discovery for Education</strong></a> from <em>University of Pennsylvania</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stat115-2019-97493?ref=freecodecamp"><strong>STAT115</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-science-d-295045?ref=freecodecamp"><strong>Science des données et santé</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-statistics-university-of-cambridge--446359?ref=freecodecamp"><strong>The impact of big data on healthcare</strong></a> from <em>University of Cambridge</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-theories-of-inference-for-visual-analysis-108696?ref=freecodecamp"><strong>Stanford Seminar - Theories of Inference for Visual Analysis</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-mining-online-data-across-social-networks-110079?ref=freecodecamp"><strong>Mining Online Data Across Social Networks</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-introduction-to-r-and-gis-fall-2023-292288?ref=freecodecamp"><strong>Introduction to R and Geographic Information Systems (GIS)</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-how-to-analyze-research-data-kristin-sainani-191712?ref=freecodecamp"><strong>How to Analyze Research Data - Kristin Sainani</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-next-in-data-visualization-arvind-satyanarayan-radcliffe-institute-179690?ref=freecodecamp"><strong>Next in Data Visualization - Interactive Systems for Intelligence Augmentation</strong></a> from <em>Harvard University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-data-mining-the-tool-of-the-information-age-192297?ref=freecodecamp"><strong>Data Mining - The Tool of the Information Age</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/data-analysis-delft-university-of-technology-anal-10328?ref=freecodecamp"><strong>Análisis de datos: Diseño y Visualización de Tableros</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-towards-theories-of-single-trial-high-dimensional-neural-data-analysis-108765?ref=freecodecamp"><strong>Stanford Seminar - Towards Theories of Single-Trial High Dimensional Neural Data Analysis</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-big-data-is-at-least-four-different-problems-110021?ref=freecodecamp"><strong>Stanford Seminar - Big Data Is -At Least- Four Different Problems</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-tsar-the-timeseries-aggregator-anirudh-todi-of-twitter-110051?ref=freecodecamp"><strong>Stanford Seminar - TSAR - Anirudh Todi of Twitter</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-res-ll-005-mathematics-of-big-data-and-machine-learning-january-iap-2020-292296?ref=freecodecamp"><strong>Mathematics of Big Data and Machine Learning</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mitx-online-data-analysis-for-social-scientists-450352?ref=freecodecamp"><strong>Data Analysis for Social Scientists</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-14-310x-data-analysis-for-social-scientists-spring-2023-292251?ref=freecodecamp"><strong>Data Analysis for Social Scientists</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-developing-design-spaces-for-visualization-tamara-munzner-108693?ref=freecodecamp"><strong>Stanford Seminar - Developing Design Spaces for Visualization - Tamara Munzner</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-forecasting-and-predicting-the-future-of-the-future-191634?ref=freecodecamp"><strong>Stanford Seminar - Forecasting and Predicting the Future</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-end-of-privacy-191926?ref=freecodecamp"><strong>The End of Privacy</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/excel-delft-university-of-technology-analisis-de--10327?ref=freecodecamp"><strong>Análisis de datos: Llévalo al MAX()</strong></a> from <em>Delft University of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-jupyter-notebooks-and-academic-publication-191833?ref=freecodecamp"><strong>Jupyter Notebooks and Academic Publication</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mitx-online-quantitative-biology-workshop-461875?ref=freecodecamp"><strong>Quantitative Biology Workshop</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-method-of-detection-the-critical-missing-link-in-u-s-cancer-registries-180516?ref=freecodecamp"><strong>Method of Detection - The Critical Missing Link in U.S. Cancer Registries</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-algorithmic-extremism-examining-youtube-s-rabbit-hole-of-radicalization-191797?ref=freecodecamp"><strong>Stanford Seminar - Algorithmic Extremism- Examining YouTube's Rabbit Hole of Radicalization</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-ai-for-academic-search-367562?ref=freecodecamp"><strong>AI for Academic Search （人工智能助力学术搜索）</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-big-data-s-big-deal-viktor-mayer-schonberger-142853?ref=freecodecamp"><strong>Big Data's Big Deal - Viktor Mayer-Schonberger</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-mobilizing-the-future-191869?ref=freecodecamp"><strong>Stanford Seminar - Mobilizing the Future</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-data-for-the-people-andreas-weigend-of-social-data-lab-192022?ref=freecodecamp"><strong>Data for the People - Andreas Weigend of Social Data Lab</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-engx-big-data-big-impact-mini-conference-russ-altman-jure-leskovec-and-christopher-re-192213?ref=freecodecamp"><strong>Big Data, Big Impact - Preventing Drug Interactions, Understanding Behavior, and Climate Change</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mitx-online-understanding-the-world-through-data-486487?ref=freecodecamp"><strong>Understanding the World Through Data</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367099?ref=freecodecamp"><strong>大数据技术与应用</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-communicating-complex-statistical-ideas-to-the-public-lessons-from-the-pandemic-d-spiegelhalter-142786?ref=freecodecamp"><strong>Communicating Complex Statistical Ideas to the Public - Lessons from the Pandemic - D. Spiegelhalter</strong></a> from <em>University of Oxford</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-grid-modernization-and-the-integration-of-distributed-resources-191761?ref=freecodecamp"><strong>Grid Modernization and the Integration of Distributed Resources</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-zhang-lin-on-mobileurban-sensing-in-beijing-192263?ref=freecodecamp"><strong>Stanford Seminar - Zhang Lin on Mobile Urban Sensing in Beijing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-human-machine-symbiosis-in-data-visualization-264218?ref=freecodecamp"><strong>Human-Machine Symbiosis in Data Visualization</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-harnessing-data-for-social-impact-277833?ref=freecodecamp"><strong>Harnessing Data for Social Impact - Empowering Communities through Visualization and Social Computing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367105?ref=freecodecamp"><strong>大数据系统基础</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367465?ref=freecodecamp"><strong>疫情防控，大数据分析大显身手</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367480?ref=freecodecamp"><strong>清华大数据应用实践：快速搭建基于数据的应用</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367529?ref=freecodecamp"><strong>数据与智能技术应用</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367586?ref=freecodecamp"><strong>基于数据驱动的网络技术应用</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-search-research-373395?ref=freecodecamp"><strong>提升检索（Search）力就是提升研究（Research）力</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-377043?ref=freecodecamp"><strong>清华大学计算机科学与技术系六十周年系庆学术报告（四）大数据</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-463887?ref=freecodecamp"><strong>“清华数为”大数据智能软件栈</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367196?ref=freecodecamp"><strong>大数据可视化</strong></a> from <em>Zhejiang University</em></p>
</li>
</ul>
<h2 id="heading-information-security-infosec-55"><strong>Information Security (InfoSec) (55)</strong></h2>
<ul>
<li><p><a href="https://www.classcentral.com/course/youtube-cs-253-web-security-48191?ref=freecodecamp"><strong>Web Security</strong></a> from <em>Stanford University</em> ★★★★★(87)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/mit-ocw-6-858-computer-systems-security-fall-2014-40952?ref=freecodecamp"><strong>Computer Systems Security</strong></a> from <em>Massachusetts Institute of Technology</em> ★★★★★(52)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-security-ku-leuven-web-security-fundamen-8726?ref=freecodecamp"><strong>Web Security Fundamentals</strong></a> from <em>KU Leuven University</em> ★★★★☆(22)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-engineering-cyber-resiliency-a-pragmatic-approach-110018?ref=freecodecamp"><strong>Engineering Cyber Resiliency - A Pragmatic Approach</strong></a> from <em>Stanford University</em> ★★★★★(22)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-hash-hack-code-emerging-trends-in-cyber-security-110027?ref=freecodecamp"><strong>Hash, Hack, Code - Emerging Trends in Cyber Security</strong></a> from <em>Stanford University</em> ★★★★★(12)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/cybersecurity-harvard-university-cs50-s-introduct-152356?ref=freecodecamp"><strong>CS50's Introduction to Cybersecurity</strong></a> from <em>Harvard University</em> ★★★★★(6)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-intro-to-information-security-3420?ref=freecodecamp"><strong>Intro to Information Security</strong></a> from <em>Georgia Institute of Technology</em> ★★☆☆☆(2)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-network-security-8570?ref=freecodecamp"><strong>Network Security</strong></a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/cybersecurity-delft-university-of-technology-cybe-2680?ref=freecodecamp"><strong>Cyber Security Economics</strong></a> from <em>Delft University of Technology</em> ★★☆☆☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-the-current-state-of-cybersecurity-191805?ref=freecodecamp"><strong>Stanford Seminar - The Current State of Cybersecurity</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-webinar-big-breaches-what-we-learned-from-the-world-s-most-disruptive-cybersecurity-attacks-191682?ref=freecodecamp"><strong>Big Breaches - What We Learned From the World's Most Disruptive Cybersecurity Attacks</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-solving-cybersecurity-as-an-economic-problem-191802?ref=freecodecamp"><strong>Solving Cybersecurity as an Economic Problem</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-computer-security-the-mess-we-re-in-how-we-got-here-and-what-to-do-about-it-191793?ref=freecodecamp"><strong>Stanford Seminar - Computer Security- The Mess We're In, How We Got Here, and What to Do About It</strong></a> from <em>Stanford University</em> ★★★★★(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-preventing-successful-cyberattacks-using-strongly-typed-actors-191710?ref=freecodecamp"><strong>Stanford Seminar - Preventing Successful Cyberattacks Using Strongly-Typed Actors</strong></a> from <em>Stanford University</em> ★★★★☆(1)</p>
</li>
<li><p><a href="https://www.classcentral.com/course/udacity-cyber-physical-systems-security-8569?ref=freecodecamp"><strong>Cyber-Physical Systems Security</strong></a> from <em>Georgia Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/cybersecurity-new-york-university-mobile-payment--21869?ref=freecodecamp"><strong>Mobile Payment Security</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/computer-science-universite-de-montreal-la-cybers-288717?ref=freecodecamp"><strong>La cybersécurité en milieu universitaire</strong></a> from <em>Université de Montréal</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-building-your-shield-mapping-the-cybersecurity-market-dan-boneh-and-neil-daswani-191751?ref=freecodecamp"><strong>Building Your Shield - Mapping the Cybersecurity Market</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-securing-the-world-around-us-cyber-security-for-the-physical-economy-191772?ref=freecodecamp"><strong>Securing the World Around Us - Cyber Security for the Physical Economy</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-the-growing-threat-and-impact-of-web-based-malware-stanford-computer-security-192296?ref=freecodecamp"><strong>The Growing Threat and Impact of Web-Based Malware - Stanford Computer Security</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/mitx-online-cybersecurity-for-critical-urban-infrastructure-450351?ref=freecodecamp"><strong>Cybersecurity for Critical Urban Infrastructure</strong></a> from <em>Massachusetts Institute of Technology</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-security-challenges-in-5g-wireless-and-beyond-132426?ref=freecodecamp"><strong>Security Challenges in 5G Wireless and Beyond</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-conversations-at-the-forefront-of-cybersecurity-with-nyu-ccs-featuring-randy-milch-132456?ref=freecodecamp"><strong>Cybersecurity in Corporate Law: Key Issues for Practitioners and Policy-makers</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-anatomy-of-an-attack-what-really-happens-and-how-to-protect-your-enterprise-132414?ref=freecodecamp"><strong>Anatomy of an Attack - Understanding and Protecting Against Cyber Threats</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-online-political-ad-transparency-191758?ref=freecodecamp"><strong>Stanford Seminar - Online Political Ad Transparency</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-taking-memory-forensics-to-the-next-level-132480?ref=freecodecamp"><strong>Taking Memory Forensics to the Next Level</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-tales-from-the-risks-forum-191817?ref=freecodecamp"><strong>Tales from the Risks Forum</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-a-conversation-with-a-recent-tandon-cyber-fellow-grad-michael-leking-tandon-21-132413?ref=freecodecamp"><strong>Cybersecurity Career Insights - From Tandon Cyber Fellow to VP at U.S. Bank</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-conversations-at-the-forefront-of-cyber-security-with-nyu-ccs-featuring-dr-justin-cappos-132457?ref=freecodecamp"><strong>Cyber Security: Building Compromise Resilient Systems and Key Management - Dr. Justin Cappos</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-conversations-at-the-forefront-of-cyber-security-with-nyu-ccs-featuring-joel-caminer-132455?ref=freecodecamp"><strong>Too Big to Fail: Cybersecurity Issues in Financial Services</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-2-andrew-dutcher-angr-132481?ref=freecodecamp"><strong>angr: Binary Analysis Framework - Demonstration and Analysis</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-webinar-to-attribute-or-not-attribute-is-that-the-question-191775?ref=freecodecamp"><strong>Stanford Webinar - To Attribute or Not Attribute, Is That the Question?</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-industry-insights-cyber-security-179042?ref=freecodecamp"><strong>Industry Insights: Cyber Security - Trends, Impacts, and Career Opportunities</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-csaw-21-keynote-cybersecurity-keeping-the-lights-on-dr-martin-otto-siemens-technology-132423?ref=freecodecamp"><strong>Cybersecurity: Keeping the Lights On - Practical Challenges in Utilities - Keynote</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-locking-the-web-open-a-call-for-a-new-decentralized-web-191800?ref=freecodecamp"><strong>Locking the Web Open - A Call for a New, Decentralized Web</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-thunderclap-cheri-capability-hardware-enhanced-risc-instructions-191808?ref=freecodecamp"><strong>Stanford Seminar - Thunderclap &amp; CHERI - Capability Hardware-Enhanced RISC Instructions</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-bulletproofs-short-proofs-for-confidential-transactions-and-more-191910?ref=freecodecamp"><strong>Bulletproofs - Short Proofs for Confidential Transactions and More</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-how-can-privacy-exist-in-a-data-driven-world-296038?ref=freecodecamp"><strong>How Can Privacy Exist in a Data-Driven World? - Stanford Seminar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-hai-seminar-with-lowry-pressly-privacy-and-the-power-of-unknowing-451008?ref=freecodecamp"><strong>Privacy and the Power of Unknowing</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-conversations-at-the-forefront-of-cybersecurity-with-nyu-ccs-featuring-nasir-memon-132454?ref=freecodecamp"><strong>Hacking Reality: Technology for Detecting Deep Fakes</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-8-ryan-stortz-kareem-el-faramawi-firing-rounds-at-the-analysis-shooting-gallery-132478?ref=freecodecamp"><strong>Firing Rounds at the Analysis Shooting Gallery - CSAW'16 Security Workshop</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-lessons-from-mirai-and-the-current-state-of-iot-security-191911?ref=freecodecamp"><strong>Lessons from Mirai and the Current State of IoT Security</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-exploiting-modern-microarchitectures-meltdown-spectre-other-hardware-attacks-191942?ref=freecodecamp"><strong>Exploiting Modern Microarchitectures - Meltdown, Spectre, &amp; Other Hardware Attacks</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-stanford-seminar-rowhammer-rowpress-and-beyond-can-we-be-free-of-bitflips-soon-264502?ref=freecodecamp"><strong>RowHammer, RowPress and Beyond: Can We Be Free of Bitflips Soon? - Stanford Seminar</strong></a> from <em>Stanford University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-proving-confidentiality-and-its-preservation-for-mixed-sensitivity-concurrent-programs-178974?ref=freecodecamp"><strong>Proving Confidentiality and Its Preservation for Mixed-Sensitivity Concurrent Programs</strong></a> from <em>University of Melbourne</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-3-6-protect-your-patients-cybersecurity-essentials-for-medical-software-course-476296?ref=freecodecamp"><strong>Protect Your Patients - Cybersecurity Essentials for Medical Software Course</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-10-5-medical-software-s-lifespan-maintenance-safe-retirement-strategy-medical-software-course-478142?ref=freecodecamp"><strong>Medical Software's Lifespan - Maintenance and Safe Retirement Strategy</strong></a> from <em>Yale University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367546?ref=freecodecamp"><strong>网络安全博弈之路</strong></a> from <em>Tsinghua University</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-trading-privacy-for-convenience-in-the-age-of-technology-part-2-132419?ref=freecodecamp"><strong>Trading Privacy for Convenience in the Age of Technology - Part 2</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-ic-layout-security-132428?ref=freecodecamp"><strong>IC Layout Security - Hardening Integrated Circuit Designs Against Adversaries</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-conversations-at-the-forefront-of-cyber-security-with-nyu-ccs-featuring-dr-damon-mccoy-132458?ref=freecodecamp"><strong>Empirical Measurement of Security and Privacy in Technology Systems - Conversations with Dr. Damon McCoy</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-dispelling-the-top-10-myths-in-cybersecurity-132473?ref=freecodecamp"><strong>Dispelling the Top 10 Myths in Cybersecurity - AIG Cybersecurity Lecture</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/youtube-9th-cyber-security-lecture-sponsored-by-aig-132475?ref=freecodecamp"><strong>Democracy Confronts Cyber Insecurity - Lecture 9</strong></a> from <em>New York University (NYU)</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-web-367279?ref=freecodecamp"><strong>Web安全实践</strong></a> from <em>University of Science and Technology of China</em></p>
</li>
<li><p><a href="https://www.classcentral.com/course/xuetangx-367374?ref=freecodecamp"><strong>高级计算机网络</strong></a> from <em>University of Science and Technology of China</em></p>
</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Data Structures Handbook – The Key to Scalable Software ]]>
                </title>
                <description>
                    <![CDATA[ If you're regularly confronted by the complexity of modern data, you’re not alone. In our data-centric world, understanding data structures isn’t optional — it’s essential.  Whether you’re a novice coder or an experienced developer, this handbook is ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/data-structures-the-key-to-scalable-software/</link>
                <guid isPermaLink="false">66b99af117d9592471979c50</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data structures ]]>
                    </category>
                
                    <category>
                        <![CDATA[ handbook ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Vahe Aslanyan ]]>
                </dc:creator>
                <pubDate>Wed, 22 Nov 2023 20:44:53 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/11/The-Data-Structures-Handbook-Cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you're regularly confronted by the complexity of modern data, you’re not alone. In our data-centric world, understanding data structures isn’t optional — it’s essential. </p>
<p>Whether you’re a novice coder or an experienced developer, this handbook is your concise guide to the critical skill of data management through data structures.</p>
<p>Data today isn’t just vast – it’s also complex. Organizing, retrieving, and manipulating this data efficiently is key. Enter data structures — the backbone of effective data management. </p>
<p>This guide cuts through the complexity of arrays, linked lists, stacks, queues, trees, and graphs. You’ll gain insights into each type’s strengths, limitations, and practical applications, backed by real-world examples.</p>
<p>Even the big brains at places like MIT and Stanford say knowing your data structures is super important for making great software. And here, I'll share real-life case studies showing you how these data structures are used in everyday situations. </p>
<p>Ready to dive in? We're going to explore the world of data structures together. You'll find out how to make your data work smarter, not harder, and give yourself an edge in the tech world.</p>
<p>Here’s the awesome journey you’re about to embark on:</p>
<ol>
<li><strong>Land Your Dream Tech Job:</strong> Imagine walking into big names like Google or Apple with confidence. Your new skills in data structures could be your golden ticket to these tech havens, where knowing your stuff really matters.</li>
<li><strong>Make Shopping Online a Breeze:</strong> Ever wonder how Amazon makes shopping so smooth? With your skills, you could be the wizard behind faster, smarter shopping experiences.</li>
<li><strong>Be a Financial Whiz:</strong> Banks and finance companies love quick, error-free data handling. Your know-how could make you a star in places like Visa or PayPal, keeping money moving swiftly and safely.</li>
<li><strong>Revolutionize Healthcare:</strong> In the world of health, like at Mayo Clinic or Pfizer, your ability to manage data could speed up lifesaving decisions. You could be part of a team that’s changing lives every day.</li>
<li><strong>Level Up Gaming Experiences:</strong> Got a passion for gaming? Companies like Nintendo or Riot Games are always on the lookout for talent that can make games even more thrilling. That could be you.</li>
<li><strong>Transform Shipping and Travel:</strong> Imagine helping FedEx or Delta Airlines move things faster and smarter around the globe.</li>
<li><strong>Shape the Future with AI:</strong> Dream of working with Generative AI? Your understanding of data structures is crucial. You could be part of groundbreaking work at places like OpenAI, Google, Netflix, Tesla or SpaceX, making the stuff of science fiction real.</li>
</ol>
<p>Upon completing this journey, your grasp of data structures will extend far beyond mere understanding. You'll be equipped to apply them effectively. </p>
<p>Imagine enhancing app performance, devising solutions for business challenges, or even playing a role in pioneering tech advancements. Your newfound skills will open doors to diverse opportunities, positioning you as a go-to problem solver. </p>
<h2 id="heading-table-of-contents">Table Of Contents</h2>
<ol>
<li><a class="post-section-overview" href="#heading-1-the-importance-of-data-structures">The Importance of Data Structures</a></li>
<li><a class="post-section-overview" href="#heading-2-types-of-data-structures">Types of Data Structures</a></li>
<li><a class="post-section-overview" href="#heading-3-array-data-structure">Array Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-4-singly-linked-list-data-structure">Single-linked List Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-5-double-linked-list-data-structure">Double-linked List Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-6-stack-data-structure">Stack Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-7-queue-data-structure">Queue Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-8-tree-data-structure">Tree Data Structure</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/ad4edb43-532a-430e-82b2-1fb2558b7f73/9-graph-data-structure">Graph Data Structure</a></li>
<li><a class="post-section-overview" href="#heading-10-hash-table-data-structure">Hash Table Data Structure</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/ad4edb43-532a-430e-82b2-1fb2558b7f73/11-how-to-unleash-the-power-of-data-structures-in-programming">How to Unleash the Power of Data Structures in Programming</a></li>
<li><a class="post-section-overview" href="#heading-12-how-to-choose-the-right-data-structure-for-your-application">How to Choose the Right Data Structure for Your Application</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/ad4edb43-532a-430e-82b2-1fb2558b7f73/13-how-to-efficiently-implement-data-structures">How to Efficiently Implement Data Structures</a></li>
<li><a class="post-section-overview" href="#heading-14-how-to-optimize-for-performance-understanding-time-complexities-in-data-structures">Common Data Structure Operations and Their Time Complexities</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/ad4edb43-532a-430e-82b2-1fb2558b7f73/15-real-world-examples-of-data-structures-in-action">Real-World Examples of Data Structures in Action</a></li>
<li><a class="post-section-overview" href="#heading-16-essential-toolkit-for-learning-data-structures">Resources and Tools for Learning Data Structures</a></li>
<li><a class="post-section-overview" href="#heading-17-conclusion-and-actionable-steps-forward">Conclusion and Next Steps</a></li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-56.png" alt="Image" width="600" height="400" loading="lazy">
<em>Abstract digital cityscape with interconnected cubic structures and glowing lines symbolizing complex data structures - Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-1-the-importance-of-data-structures">1. The Importance of Data Structures</h2>
<p>Learning about data structures can really help you power-up your software engineering skills. These critical components are key to ensuring your applications operate flawlessly, which is a must-have ability for every software engineer.</p>
<h3 id="heading-they-enhance-efficiency-and-performance">They Enhance Efficiency and Performance</h3>
<p>Data structures are the turbochargers of your code. They do more than just store data – they enable swift and efficient access. Think of a hash table as your instant-access tool for speedy data retrieval or the linked list as your dynamic, adaptable strategy for evolving data needs.</p>
<h3 id="heading-they-optimize-memory-use-and-management">They Optimize Memory Use and Management</h3>
<p>These structures are really good at optimizing memory. They fine-tune your program’s memory consumption, ensuring robustness under heavy data loads and helping you avoid common issues like memory leaks.</p>
<h3 id="heading-they-boost-problem-solving-and-algorithm-design">They Boost Problem-Solving and Algorithm Design</h3>
<p>Data structures elevate your code from functional to exceptional. They efficiently organize data and operations, enhancing your code’s effectiveness, reusability, and scalability. This leads to better maintainability and adaptability of your software.</p>
<h3 id="heading-theyre-essential-for-professional-advancement">They're Essential for Professional Advancement</h3>
<p>Grasping data structures is crucial for any aspiring software engineer. Not only do they provide efficient ways to handle data and bolster performance, but they are also instrumental in solving complex problems and designing algorithms. </p>
<p>These skills are vital for career growth, particularly for those aiming to move into senior technical roles. Tech giants like Google, Amazon, and Microsoft value this expertise highly.</p>
<h3 id="heading-key-take-aways">Key take-aways</h3>
<p>Thoroughly learning data structures can help you stand out in technical interviews and attract leading employers. You'll also use them every day as a developer.</p>
<p>Data Structures are essential for building scalable systems and tackling intricate coding problems, and they're key to maintaining a competitive edge in the evolving tech sector. </p>
<p>This guide focuses on crucial data structures, empowering you to create efficient, advanced software solutions. Begin your journey to enhance your technical capabilities for future industry challenges.</p>
<h2 id="heading-2-types-of-data-structures">2. Types of Data Structures</h2>
<p>Data structures are essential tools in software development that enable efficient storage, organization, and manipulation of data. Understanding the different types of data structures is crucial for aspiring software engineers, as it helps them choose the most appropriate structure for their specific needs. </p>
<p>Let’s dive into some of the most commonly used types of data structures:</p>
<h3 id="heading-arrays-the-backbone-of-efficient-data-management"><strong>Arrays: The Backbone of Efficient Data Management</strong></h3>
<p>Arrays, a cornerstone of data structures, epitomize efficiency by storing elements of the same type in contiguous memory slots. Their power lies in their ability to offer direct, lightning-fast access to any element, simply by knowing its index. </p>
<p>This feature, according to a Stanford University study, makes arrays up to 30% faster for random access compared to other structures. </p>
<p>But arrays have their limitations: their size is fixed, and altering their length, particularly for large arrays, can be a resource-intensive task.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-58.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of an array. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Consider using <strong><code>int[] numbers = {1, 2, 3, 4, 5};</code></strong> for scenarios where quick, random access is paramount and size modifications are minimal.</p>
<h3 id="heading-linked-lists-flexibility-at-its-finest"><strong>Linked Lists: Flexibility at its Finest</strong></h3>
<p>Linked lists excel in scenarios requiring dynamic memory allocation. Unlike arrays, they don't mandate contiguous memory, making them more flexible if you need to change their size. This makes them ideal for applications where the volume of data can fluctuate significantly. </p>
<p>But their flexibility comes at a cost: traversing a linked list, as per the findings of the MIT Computer Science and Artificial Intelligence Laboratory, can be up to 20% slower than accessing elements in an array due because of sequential access.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/Untitled-design--2-.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a linked list. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Use <strong><code>1 -&gt; 2 -&gt; 3 -&gt; 4 -&gt; 5</code></strong> for data that requires frequent insertions and deletions.</p>
<h3 id="heading-stacks-simplifying-last-in-first-out-operations"><strong>Stacks: Simplifying Last-In-First-Out Operations</strong></h3>
<p>Stacks adhere to the Last-In-First-Out (LIFO) principle. This singular access point at the top simplifies adding and removing elements, making them an excellent choice for applications like function call stacks, undo mechanisms, and expression evaluation. </p>
<p>Harvard's CS50 course suggest that stacks are up to 50% more efficient in managing certain types of sequential data processing tasks.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/Untitled-design--1-.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a stack. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Implement stacks <strong><code>[5, 4, 3, 2, 1] (Top: 5)</code></strong> for reversing data sequences or parsing expressions.</p>
<h3 id="heading-queues-mastering-sequential-processing"><strong>Queues: Mastering Sequential Processing</strong></h3>
<p>Operating on the First-In-First-Out (FIFO) principle, queues ensure that the first element in is always the first one out. With distinct front and rear access points, queues offer streamlined operations, making them indispensable in task scheduling, resource management, and breadth-first search algorithms. </p>
<p>Research indicates that queues can improve process management efficiency by up to 40% in computational systems.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/Untitled-design.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a queue. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Opt for queues <strong><code>[1, 2, 3, 4, 5] (Front: 1, Rear: 5)</code></strong> in scenarios demanding sequential processing, like task scheduling.</p>
<h3 id="heading-trees-the-hierarchical-data-maestros"><strong>Trees: The Hierarchical Data Maestros</strong></h3>
<p>Trees, a hierarchical structure of nodes linked by edges, are unparalleled in representing layered data. The root node forms the foundation, with subsequent layers branching out. Their non-linear nature allows for efficient organization and retrieval of data, particularly in databases and file systems. </p>
<p>According to the IEEE, trees can enhance data retrieval efficiency by over 60% in hierarchical systems.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-61.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a tree. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Trees are best utilized in scenarios requiring structured, hierarchical data organization, such as in database indexing or file system structuring.</p>
<h3 id="heading-graphs-interconnected-data-mapping"><strong>Graphs: Interconnected Data Mapping</strong></h3>
<p>Graphs are adept at illustrating relationships between various data points through nodes (vertices) and edges (connections). They shine in applications involving network topology, social network analysis, and route optimization. </p>
<p>Graphs bring a level of interconnectedness and flexibility that linear data structures can't match. As per a recent ACM journal, graph algorithms have been pivotal in optimizing network designs, improving efficiency by up to 70%.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-60.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a graph. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Implement graphs for complex data sets where relationships and interconnectivity are key factors.</p>
<h3 id="heading-hash-tables-the-speedsters-of-data-retrieval"><strong>Hash Tables: The Speedsters of Data Retrieval</strong></h3>
<p>Hash tables stand out as a pinnacle of efficient data management, leveraging key-value pairs for swift data retrieval. Renowned for their speed, especially in search operations, hash tables, as highlighted by a report from the IEEE, can significantly reduce data access time, often achieving constant-time complexity. </p>
<p>This efficiency stems from their unique mechanism of using hash functions to map keys to specific slots, allowing for immediate access. They dynamically adapt to varying data sizes, a feature that has led to their widespread use in applications like database indexing and caching. </p>
<p>But you'll have to navigate the occasional challenge of 'collisions', where different keys hash to the same index. Still, with well-designed hash functions, as recommended by experts in computational algorithms, hash tables remain unparalleled in balancing speed and flexibility.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-59.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illustration of a hashtable. Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<p><strong>Practical Insight:</strong> Consider using <strong><code>HashMap&lt;String, Integer&gt; userAges = new HashMap&lt;&gt;(); userAges.put("Alice", 30); userAges.put("Bob", 25);</code></strong> in scenarios demanding rapid and frequent data retrieval.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-68.png" alt="Image" width="600" height="400" loading="lazy">
<em>Digital rendering of a vast, organized grid of illuminated skyscrapers, representing array data structures, with glowing lines crisscrossing between them to signify structured data connections and indexing.- Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-3-array-data-structure">3. Array Data Structure</h2>
<p>Arrays are like a row of sequentially numbered lockers, each holding specific items. They represent a structured grouping of data, where each item is stored in contiguous memory locations. This setup allows for efficient and direct access to each data element using a numerical index. </p>
<p>Arrays are fundamental in programming, serving as a cornerstone for data organization and manipulation. Their linear structure simplifies the concept of data storage, making it intuitive and accessible. </p>
<p>Arrays are crucial in various computational tasks, from basic to complex. They offer a blend of simplicity and efficiency, making them ideal for numerous applications.</p>
<h3 id="heading-what-does-an-array-do"><strong>What Does an Array Do?</strong></h3>
<p>Arrays primarily store data elements of a single type in a sequential order. They are essential for managing multiple items collectively and systematically. Arrays facilitate efficient indexing, which is pivotal in handling large datasets. </p>
<p>This data structure is crucial for algorithms that require quick access to elements. Arrays streamline tasks such as sorting, searching, and storing homogeneous data. Their importance in data management cannot be overstated, especially in fields like database management and software development. </p>
<p>Arrays, by virtue of their structure, offer a predictable and easy-to-understand format for data storage.</p>
<h3 id="heading-how-do-arrays-work"><strong>How Do Arrays Work?</strong></h3>
<p>Arrays store data in adjacent memory locations, ensuring continuity and fast access. Each element in an array is like a compartment in a row of storage units, each marked with an index. This indexing starts from zero, enabling a direct and predictable access path to each element. </p>
<p>Arrays can efficiently utilize memory, as they store elements of the same type contiguously. The linear memory allocation of arrays makes them a go-to choice for straightforward data storage needs. Accessing an array element is akin to selecting a book from a numbered shelf. This simple yet effective mechanism is what makes arrays so widely used.</p>
<h3 id="heading-key-array-operations"><strong>Key Array Operations</strong></h3>
<p>The fundamental operations performed on arrays are accessing elements, inserting elements, deleting elements, transversing the array, searching the array, and updating the array.</p>
<p><strong>Explanation of Each Operation:</strong></p>
<ul>
<li><strong>Accessing elements</strong> involves identifying and retrieving an element from a specific index.</li>
<li><strong>Inserting elements</strong> is the process of adding a new element at a desired index within the array.</li>
<li><strong>Deleting elements</strong> refers to the removal of an element, followed by the adjustment of the remaining elements.</li>
<li><strong>Traversing an array</strong> means systematically going through each element, typically for inspection or modification.</li>
<li><strong>Searching an array</strong> aims to locate a specific element within the array.</li>
<li><strong>Updating an array</strong> is the act of modifying the value of an existing element at a given index.</li>
</ul>
<h3 id="heading-array-code-example-in-java"><strong>Array Code Example in Java</strong></h3>
<p>Let's look at an example of how you can work with an array in Java:</p>
<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ArrayOperations</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        <span class="hljs-keyword">int</span>[] array = {<span class="hljs-number">10</span>, <span class="hljs-number">20</span>, <span class="hljs-number">30</span>, <span class="hljs-number">40</span>, <span class="hljs-number">50</span>};

        <span class="hljs-comment">// Access Operation</span>
        <span class="hljs-keyword">int</span> firstElement = array[<span class="hljs-number">0</span>];
        System.out.println(<span class="hljs-string">"Access Operation: First element = "</span> + firstElement);
        <span class="hljs-comment">// Expected Output: "Access Operation: First element = 10"</span>

        <span class="hljs-comment">// Insertion Operation (For simplicity, replacing an element)</span>
        array[<span class="hljs-number">2</span>] = <span class="hljs-number">35</span>; <span class="hljs-comment">// Replacing the third element (index 2)</span>
        System.out.println(<span class="hljs-string">"Insertion Operation: Element at index 2 = "</span> + array[<span class="hljs-number">2</span>]);
        <span class="hljs-comment">// Expected Output: "Insertion Operation: Element at index 2 = 35"</span>

        <span class="hljs-comment">// Deletion Operation (For simplicity, setting an element to 0)</span>
        array[<span class="hljs-number">3</span>] = <span class="hljs-number">0</span>; <span class="hljs-comment">// Deleting the fourth element (index 3)</span>
        System.out.println(<span class="hljs-string">"Deletion Operation: Element at index 3 after deletion = "</span> + array[<span class="hljs-number">3</span>]);
        <span class="hljs-comment">// Expected Output: "Deletion Operation: Element at index 3 after deletion = 0"</span>

        <span class="hljs-comment">// Traversal Operation</span>
        System.out.println(<span class="hljs-string">"Traversal Operation:"</span>);
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; array.length; i++) {
            System.out.println(<span class="hljs-string">"Element at index "</span> + i + <span class="hljs-string">" = "</span> + array[i]);
        }
        <span class="hljs-comment">// Expected Output for Traversal:</span>
        <span class="hljs-comment">// "Element at index 0 = 10"</span>
        <span class="hljs-comment">// "Element at index 1 = 20"</span>
        <span class="hljs-comment">// "Element at index 2 = 35"</span>
        <span class="hljs-comment">// "Element at index 3 = 0"</span>
        <span class="hljs-comment">// "Element at index 4 = 50"</span>

        <span class="hljs-comment">// Searching Operation for value 35</span>
        System.out.println(<span class="hljs-string">"Searching Operation: Search for value 35"</span>);
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; array.length; i++) {
            <span class="hljs-keyword">if</span> (array[i] == <span class="hljs-number">35</span>) {
                System.out.println(<span class="hljs-string">"Value 35 found at index "</span> + i);
                <span class="hljs-keyword">break</span>;
            }
        }
        <span class="hljs-comment">// Expected Output: "Value 35 found at index 2"</span>

        <span class="hljs-comment">// Updating Operation</span>
        array[<span class="hljs-number">1</span>] = <span class="hljs-number">25</span>; <span class="hljs-comment">// Updating second element (index 1)</span>
        System.out.println(<span class="hljs-string">"Updating Operation: Element at index 1 after update = "</span> + array[<span class="hljs-number">1</span>]);
        <span class="hljs-comment">// Expected Output: "Updating Operation: Element at index 1 after update = 25"</span>

        <span class="hljs-comment">// Final Array State after all operations</span>
        System.out.println(<span class="hljs-string">"Final Array State:"</span>);
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> value : array) {
            System.out.println(value);
        }
        <span class="hljs-comment">// Expected Output for Final State:</span>
        <span class="hljs-comment">// "10"</span>
        <span class="hljs-comment">// "25"</span>
        <span class="hljs-comment">// "35"</span>
        <span class="hljs-comment">// "0"</span>
        <span class="hljs-comment">// "50"</span>
    }
}
</code></pre>
<h3 id="heading-when-should-you-use-arrays"><strong>When Should You Use Arrays?</strong></h3>
<p>Arrays are useful in various scenarios where organized data storage is required. They are perfect for handling lists of items like names, numbers, or identifiers. </p>
<p>Arrays are extensively used in software applications like spreadsheets and database systems. Their predictable structure makes them ideal for situations requiring quick access to data. They're also commonly used in sorting and searching algorithms. </p>
<p>Arrays can be particularly useful in applications where you know the size of the data set in advance. Arrays form the basis of more complex data structures, so it's essential that you understand them as a developer.</p>
<h3 id="heading-advantages-and-limitations-of-arrays"><strong>Advantages and Limitations of Arrays</strong></h3>
<p>Arrays offer fast access to elements, a result of their contiguous memory allocation. Their simplicity and ease of use make them a popular choice in programming. Arrays also provide a predictable pattern of memory usage, enhancing efficiency.</p>
<p>But arrays have a fixed size, which limits their flexibility. This fixed size can lead to wasted space or insufficient capacity issues. Inserting and deleting elements from arrays can be inefficient, as they often require shifting elements. </p>
<p>Despite these limitations, arrays are a fundamental tool in a programmer's toolkit, balancing simplicity and functionality.</p>
<h3 id="heading-key-takeaways">Key Takeaways</h3>
<p>Arrays are a primary data structure for organized, sequential data storage. Their ability to store and manage collections of data efficiently is unmatched in many scenarios. </p>
<p>Arrays are fundamental in programming, forming the basis for more complex structures and algorithms. Understanding arrays is essential for anyone venturing into software development or data processing. </p>
<p>Mastering arrays equips programmers with a vital tool for efficient data management. Arrays, in essence, are the building blocks for many sophisticated programming solutions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-69.png" alt="Image" width="600" height="400" loading="lazy">
<em>Futuristic visualization of a Singly Linked List Data Structure, with illuminated nodes connected in a linear sequence by directed glowing paths, highlighting the one-way navigational flow of data. - Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a>`</em></p>
<h2 id="heading-4-singly-linked-list-data-structure">4. Singly Linked List Data Structure</h2>
<p>Envision a single linked list as a sequence of train carriages connected in a line, where each carriage is an individual data element. </p>
<p>A linked list is a sequential, dynamic collection of elements termed as nodes. Each node points to its successor, establishing a chain-like, navigable structure. This configuration allows for a linear but adaptable organization of data.</p>
<h3 id="heading-what-does-a-linked-list-do"><strong>What Does a Linked List Do?</strong></h3>
<p>The core functionality of a linked list is its sequential data arrangement. Each node, containing data and a reference to the next node, streamlines operations like insertions and deletions, offering a highly efficient data management system. </p>
<p>In the diverse world of data structures, linked lists stand out for their adaptability. They are particularly valuable in scenarios where the data volume varies dynamically, making them a flexible solution for modern computing needs.</p>
<h3 id="heading-how-do-linked-lists-work"><strong>How Do Linked Lists Work?</strong></h3>
<p>The structure of a linked list is built upon nodes. Every node consists of two parts: the data itself and a pointer to the next node. </p>
<p>Imagine a treasure trail. Each clue (node) guides you not only to a piece of treasure (data) but also to the next clue (next node).</p>
<h3 id="heading-key-linked-list-operations"><strong>Key Linked List Operations</strong></h3>
<p>The fundamental operations in a linked list include adding nodes, removing nodes, finding nodes, iterating through the list, and updating the list.</p>
<ul>
<li><strong>Adding nodes</strong> involves inserting a new node into the list.</li>
<li><strong>Removing nodes</strong> focuses on efficiently removing a node from the list.</li>
<li><strong>Finding nodes</strong> aims to locate a specific node by traversing the list.</li>
<li><strong>Iterating through a list</strong> involves moving sequentially through each node in the list.</li>
<li><strong>Updating a list</strong> allows for modifying the data within an existing node.</li>
</ul>
<h3 id="heading-when-are-linked-lists-used"><strong>When are Linked Lists Used?</strong></h3>
<p>Linked lists excel in environments where data is frequently inserted or removed. Their versatility extends from powering undo functionalities in software to enabling dynamic memory management in operating systems.</p>
<h3 id="heading-advantages-and-limitations-of-linked-lists"><strong>Advantages and Limitations of Linked Lists</strong></h3>
<p>The primary advantage of linked lists lies in their size flexibility and the efficiency of insertions and deletions.</p>
<p>But they incur increased memory usage due to the storage of references and lack direct element access, depending on sequential traversal.</p>
<h3 id="heading-linked-list-code-demonstration"><strong>Linked List Code Demonstration</strong></h3>
<p>Let's look at an example problem that uses a linked list: managing a dynamic task list.</p>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.LinkedList;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">LinkedListOperations</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        LinkedList&lt;String&gt; list = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();

        <span class="hljs-comment">// Add Operation</span>
        list.add(<span class="hljs-string">"Node1"</span>);
        System.out.println(<span class="hljs-string">"After adding Node1: "</span> + list); <span class="hljs-comment">// Expected Output: [Node1]</span>
        list.add(<span class="hljs-string">"Node2"</span>);
        System.out.println(<span class="hljs-string">"After adding Node2: "</span> + list); <span class="hljs-comment">// Expected Output: [Node1, Node2]</span>
        list.add(<span class="hljs-string">"Node3"</span>);
        System.out.println(<span class="hljs-string">"After adding Node3: "</span> + list); <span class="hljs-comment">// Expected Output: [Node1, Node2, Node3]</span>

        <span class="hljs-comment">// Remove Operation</span>
        list.remove(<span class="hljs-string">"Node2"</span>);
        System.out.println(<span class="hljs-string">"After removing Node2: "</span> + list); <span class="hljs-comment">// Expected Output: [Node1, Node3]</span>

        <span class="hljs-comment">// Find Operation</span>
        <span class="hljs-keyword">boolean</span> found = list.contains(<span class="hljs-string">"Node3"</span>);
        System.out.println(<span class="hljs-string">"Find Operation - Is Node3 in the list? "</span> + found); <span class="hljs-comment">// Expected Output: true</span>

        <span class="hljs-comment">// Iterate Operation</span>
        System.out.print(<span class="hljs-string">"Iterate Operation: "</span>);
        <span class="hljs-keyword">for</span>(String node : list) {
            System.out.print(node + <span class="hljs-string">" "</span>); <span class="hljs-comment">// Expected Output: Node1 Node3 </span>
        }
        System.out.println();

        <span class="hljs-comment">// Update Operation</span>
        list.set(<span class="hljs-number">0</span>, <span class="hljs-string">"NewNode1"</span>);
        System.out.println(<span class="hljs-string">"After updating Node1 to NewNode1: "</span> + list); <span class="hljs-comment">// Expected Output: [NewNode1, Node3]</span>

        <span class="hljs-comment">// Final State of the List</span>
        System.out.println(<span class="hljs-string">"Final State of the List: "</span> + list); <span class="hljs-comment">// Expected Output: [NewNode1, Node3]</span>
    }
}
</code></pre>
<h3 id="heading-key-takeaways-1"><strong>Key takeaways</strong></h3>
<p>Linked lists are an essential dynamic data structure that are pivotal for effective and adaptable data management. Mastering linked lists is vital for all developers, offering a unique blend of simplicity, flexibility, and functional depth.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-70.png" alt="Image" width="600" height="400" loading="lazy">
<em>Illuminated visualization of a Double Linked List Data Structure with nodes featuring bidirectional connections, showcasing the forward and backward traversal capabilities within the structure.- Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-5-double-linked-list-data-structure">5. Double Linked List Data Structure</h2>
<p>The Double Linked List is an evolution in data structures. It's like a two-way street where each node serves as a house with doors leading to the next and previous houses. </p>
<p>Unlike its single-linked cousin, this structure gives nodes the luxury of knowing both their predecessor and successor, a feature that fundamentally changes how data can be traversed and manipulated. </p>
<p>Double linked lists stand as a more nuanced and versatile way to handle data, reflecting the complexity and interconnectedness of real-world scenarios.</p>
<h3 id="heading-what-does-a-double-linked-list-do"><strong>What Does a Double Linked List Do?</strong></h3>
<p>Double linked lists are the multitaskers of the data structure world, adept at forward and backward data navigation. They excel in applications where flexibility in movement through data is paramount. </p>
<p>This structure enables users to step back and forth through elements with ease, a feature particularly invaluable in complex data sequences where both past and future elements may need quick referencing.</p>
<h3 id="heading-how-do-double-linked-lists-work"><strong>How Do Double Linked Lists Work?</strong></h3>
<p>Each node in a double linked list is a self-contained unit with three key components: the data it holds, a pointer to the next node, and a pointer to the previous node. </p>
<p>This setup is somewhat like a playlist where each song (node) knows both the song before and after it, allowing for a fluid transition in either direction. The list thus forms a bidirectional pathway through its elements, making it inherently more flexible than a single linked list.</p>
<h3 id="heading-key-double-linked-list-operations"><strong>Key Double Linked List Operations</strong></h3>
<p>Key operations in a double linked list include adding, removing, finding, iterating (both forward and backward), and updating nodes. </p>
<ul>
<li><strong>Adding</strong> involves inserting new elements at precise positions. </li>
<li><strong>Removing</strong> means unlinking and eliminating a node from the list. </li>
<li><strong>Finding</strong> nodes is more efficient as one can start from either end. </li>
<li><strong>Iteration</strong> is especially versatile, allowing traversal in both directions.</li>
<li><strong>Updating</strong> nodes involves modifying existing data, akin to revising entries in a logbook.</li>
</ul>
<h3 id="heading-when-are-double-linked-lists-used"><strong>When are Double Linked Lists Used?</strong></h3>
<p>Double linked lists find their utility in systems where two-way navigation is beneficial. </p>
<p>They are used in browser histories, allowing users to move back and forth through previously visited sites. In applications like music players or document viewers, they enable users to jump between items smoothly and intuitively. Their ability to insert and delete items efficiently also makes them suitable for dynamic data manipulation tasks.</p>
<h3 id="heading-advantages-and-limitations-of-double-linked-lists"><strong>Advantages and Limitations of Double Linked Lists</strong></h3>
<p>The double linked list excels in its ability to traverse back and forth, offering a level of element manipulation that single linked lists cannot match. This unique capability allows for traversing data both forwards and backwards with equal efficiency, significantly enhancing algorithmic possibilities in complex data structures. </p>
<p>But this advanced functionality demands a trade-off: each node requires two pointers (to the previous and next nodes), leading to increased memory consumption. </p>
<p>Additionally, double linked lists are more complex to implement compared to single linked lists. This can pose challenges in terms of code maintenance and understanding for beginners. </p>
<p>Despite these considerations, the double linked list remains a robust choice for dynamic data scenarios where the benefits of its flexible structure outweigh the cost of additional memory and complexity.</p>
<h3 id="heading-double-linked-list-code-example">Double Linked List Code Example</h3>
<pre><code class="lang-jsx"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> </span>{
    <span class="hljs-built_in">String</span> data;
    Node next;
    Node prev;

    Node(<span class="hljs-built_in">String</span> data) {
        <span class="hljs-built_in">this</span>.data = data;
    }
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DoubleLinkedList</span> </span>{
    Node head;
    Node tail;

    <span class="hljs-comment">// Method to add a node to the end of the list</span>
    <span class="hljs-keyword">void</span> add(<span class="hljs-built_in">String</span> data) {
        Node newNode = <span class="hljs-keyword">new</span> Node(data);
        <span class="hljs-keyword">if</span> (head == <span class="hljs-literal">null</span>) {
            head = newNode;
            tail = newNode;
        } <span class="hljs-keyword">else</span> {
            tail.next = newNode;
            newNode.prev = tail;
            tail = newNode;
        }
    }

    <span class="hljs-comment">// Method to remove a specific node</span>
    boolean remove(<span class="hljs-built_in">String</span> data) {
        Node current = head;
        <span class="hljs-keyword">while</span> (current != <span class="hljs-literal">null</span>) {
            <span class="hljs-keyword">if</span> (current.data.equals(data)) {
                <span class="hljs-keyword">if</span> (current.prev != <span class="hljs-literal">null</span>) {
                    current.prev.next = current.next;
                } <span class="hljs-keyword">else</span> {
                    head = current.next;
                }
                <span class="hljs-keyword">if</span> (current.next != <span class="hljs-literal">null</span>) {
                    current.next.prev = current.prev;
                } <span class="hljs-keyword">else</span> {
                    tail = current.prev;
                }
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
            }
            current = current.next;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }

    <span class="hljs-comment">// Method to find a node</span>
    boolean contains(<span class="hljs-built_in">String</span> data) {
        Node current = head;
        <span class="hljs-keyword">while</span> (current != <span class="hljs-literal">null</span>) {
            <span class="hljs-keyword">if</span> (current.data.equals(data)) {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
            }
            current = current.next;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }

    <span class="hljs-comment">// Method to print the list from head to tail</span>
    <span class="hljs-keyword">void</span> printForward() {
        Node current = head;
        <span class="hljs-keyword">while</span> (current != <span class="hljs-literal">null</span>) {
            System.out.print(current.data + <span class="hljs-string">" "</span>);
            current = current.next;
        }
        System.out.println();
    }

    <span class="hljs-comment">// Method to print the list from tail to head</span>
    <span class="hljs-keyword">void</span> printBackward() {
        Node current = tail;
        <span class="hljs-keyword">while</span> (current != <span class="hljs-literal">null</span>) {
            System.out.print(current.data + <span class="hljs-string">" "</span>);
            current = current.prev;
        }
        System.out.println();
    }

    <span class="hljs-comment">// Method to update a node's data</span>
    boolean update(<span class="hljs-built_in">String</span> oldData, <span class="hljs-built_in">String</span> newData) {
        Node current = head;
        <span class="hljs-keyword">while</span> (current != <span class="hljs-literal">null</span>) {
            <span class="hljs-keyword">if</span> (current.data.equals(oldData)) {
                current.data = newData;
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
            }
            current = current.next;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DoubleLinkedListOperations</span> </span>{
    public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span>[] args) {
        DoubleLinkedList list = <span class="hljs-keyword">new</span> DoubleLinkedList();

        <span class="hljs-comment">// Add Operation</span>
        list.add(<span class="hljs-string">"Node1"</span>);
        list.add(<span class="hljs-string">"Node2"</span>);
        list.add(<span class="hljs-string">"Node3"</span>);
        System.out.println(<span class="hljs-string">"After Add Operations:"</span>);
        list.printForward(); <span class="hljs-comment">// Expected Output: Node1 Node2 Node3 </span>

        <span class="hljs-comment">// Remove Operation</span>
        list.remove(<span class="hljs-string">"Node2"</span>);
        System.out.println(<span class="hljs-string">"After Remove Operation:"</span>);
        list.printForward(); <span class="hljs-comment">// Expected Output: Node1 Node3</span>

        <span class="hljs-comment">// Find Operation</span>
        boolean foundNode1 = list.contains(<span class="hljs-string">"Node1"</span>);
        boolean foundNode3 = list.contains(<span class="hljs-string">"Node3"</span>);
        System.out.println(<span class="hljs-string">"Find Operation - Is Node1 in the list? "</span> + foundNode1); <span class="hljs-comment">// Expected Output: true</span>
        System.out.println(<span class="hljs-string">"Find Operation - Is Node3 in the list? "</span> + foundNode3); <span class="hljs-comment">// Expected Output: true</span>

        <span class="hljs-comment">// Forward Iterate Operation</span>
        System.out.print(<span class="hljs-string">"Forward Iterate Operation: "</span>);
        list.printForward(); <span class="hljs-comment">// Expected Output: Node1 Node3</span>

        <span class="hljs-comment">// Backward Iterate Operation</span>
        System.out.print(<span class="hljs-string">"Backward Iterate Operation: "</span>);
        list.printBackward(); <span class="hljs-comment">// Expected Output: Node3 Node1</span>

        <span class="hljs-comment">// Update Operation</span>
        list.update(<span class="hljs-string">"Node1"</span>, <span class="hljs-string">"UpdatedNode1"</span>);
        System.out.println(<span class="hljs-string">"After Update Operation:"</span>);
        list.printForward(); <span class="hljs-comment">// Expected Output: UpdatedNode1 Node3</span>

        <span class="hljs-comment">// Final State of the List</span>
        System.out.println(<span class="hljs-string">"Final State of the List:"</span>);
        list.printForward(); <span class="hljs-comment">// Expected Output: UpdatedNode1 Node3</span>
    }
}
</code></pre>
<h3 id="heading-real-world-applications-of-double-linked-lists"><strong>Real-World Applications of Double Linked Lists</strong></h3>
<p>Double linked lists are particularly useful in applications that require frequent and efficient insertion and deletion of elements from both ends of the list. </p>
<p>They are widely used in advanced computing systems like gaming applications, where players' actions might dictate immediate changes to the game state, or in navigation systems within complex software, allowing users to traverse through historical states or settings. </p>
<p>Another key application is in multimedia software, like photo or video editing tools, where a user might need to move back and forth through a sequence of edits. </p>
<p>Their bidirectional traversal capability also makes them ideal for implementing advanced algorithms in cache eviction policies used in database management systems, where the order of elements needs to be modified frequently and efficiently.</p>
<h3 id="heading-performance-aspects-of-double-linked-lists"><strong>Performance Aspects of Double Linked Lists</strong></h3>
<p>In terms of performance, double linked lists offer significant advantages as well as some trade-offs compared to other data structures. </p>
<p>The time complexity for insertion and deletion operations at both ends of the list is O(1), making these operations extremely efficient. But searching for an element in a double linked list has a time complexity of O(n), as it may require traversal through the list. This is less efficient compared to data structures like hash tables. </p>
<p>Also, the added memory overhead for storing two pointers for each node is something to consider in memory-sensitive applications. This contrasts with arrays and single linked lists, where memory usage is typically lower. </p>
<p>Still, for applications where quick insertion and deletion are critical, and the dataset size isn't overwhelmingly large, double linked lists offer a balanced mix of efficiency and flexibility.</p>
<h3 id="heading-key-takeaways-2"><strong>Key Takeaways</strong></h3>
<p>In essence, double linked lists represent a sophisticated approach to data management, offering enhanced flexibility and efficiency. And you'll want to understand them as you venture into more advanced data structure implementations. </p>
<p>Double linked lists serve as a bridge between basic data management and more complex data handling needs. This makes them a vital component in a programmer's toolkit for sophisticated data solutions.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-71.png" alt="Image" width="600" height="400" loading="lazy">
<em>A vertical, layered structure glowing with golden light beams, depicting the LIFO (Last In, First Out) concept of a Stack Data Structure, with the topmost layer brightly illuminated to signify the top of the stack.- Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-6-stack-data-structure">6. Stack Data Structure</h2>
<p>Picture a stack as a cafeteria's tower of plates, where the only way to interact with them is by adding or removing a plate from the top.  </p>
<p>A stack, in the world of data structures, is a linear and ordered collection of elements that strictly adheres to the Last In, First Out (LIFO) principle. This means that the last element added is the first one to be removed. While this might sound simplistic, its implications for data management are profound and far-reaching.</p>
<p>Stacks serve as a foundational concept in computer science, forming the basis for many complex algorithms and functionalities. In this section, we'll explore stacks in-depth, uncovering their applications, operations, and significance in modern computing.</p>
<h3 id="heading-what-does-a-stack-do"><strong>What Does a Stack Do?</strong></h3>
<p>The fundamental purpose of a stack is to store elements in an ordered and reversible manner. The primary operations are addition (push) and removal (pop) from the top of the stack. This seemingly simple structure holds immense importance in scenarios where immediate access to the most recently added data is critical.</p>
<p>Let's consider some scenarios in which stacks are indispensable. In software development, undo mechanisms in text editors rely on stacks to store the history of changes. When you hit "Undo Typing," you are essentially popping elements from the top of the stack, reverting to previous states. </p>
<p>Similarly, navigating through your web browser's history—clicking "Back" or "Forward"—utilizes a stack-based structure to manage the pages you've visited.</p>
<h3 id="heading-how-do-stacks-work"><strong>How Do Stacks Work?</strong></h3>
<p>To understand how stacks function, let's use a practical analogy: imagine a stack of books. In this stack, you can only interact with the books at the top. You can add a new book to the stack, which becomes the new topmost book, or you can remove the top book. This results in a sequential order of books that mirrors the LIFO principle.</p>
<p>If you want to access a book from the middle or bottom of the stack, you must first remove all the books above it. This core characteristic simplifies data management in various applications, ensuring that the most recently added item is always the next to be processed.</p>
<h3 id="heading-key-stack-operations"><strong>Key Stack Operations</strong></h3>
<p>The key operations in a stack are the building blocks of its functionality. Let's explore each operation in detail:</p>
<ul>
<li><strong>Push</strong> adds an element to the top of the stack. It's akin to placing a new plate on the top of the pile in our cafeteria analogy.</li>
<li><strong>Pop</strong> removes and returns the top element of the stack. It's like taking the topmost plate from the stack.</li>
<li><strong>Peek</strong> allows you to view the top element without removing it. You can think of it as glancing at the top plate without actually taking it off.</li>
<li><strong>IsEmpty</strong> checks if the stack is empty. It's essential to verify whether there are any plates left in our cafeteria stack.</li>
<li><strong>Search</strong> helps you find the position of a specific element within the stack. It tells you how far down the stack an item is located.</li>
</ul>
<p>These operations are the tools developers use to manipulate data within a stack, ensuring that it remains well-ordered and efficient.</p>
<h3 id="heading-when-are-stacks-used"><strong>When are Stacks Used?</strong></h3>
<p>Stacks find application in a wide array of scenarios. Some common use cases include:</p>
<ul>
<li><strong>Undo Features:</strong> In text editors and other software, stacks are employed to implement undo and redo functionalities, allowing users to revert to previous states.</li>
<li><strong>Browser History:</strong> When you navigate backward or forward in your web browser, you're essentially traversing a stack of visited pages.</li>
<li><strong>Backtracking Algorithms:</strong> In fields like artificial intelligence and graph traversal, stacks play a pivotal role in backtracking algorithms, enabling efficient exploration of potential paths.</li>
<li><strong>Function Call Management:</strong> When you call a function in a program, a stack frame is added to the call stack, facilitating the tracking of function calls and their return values.</li>
</ul>
<p>These examples emphasize the ubiquity of stacks in modern computing, making them a fundamental concept for software developers.</p>
<h3 id="heading-advantages-and-limitations-of-stacks"><strong>Advantages and Limitations of Stacks</strong></h3>
<p>Stacks come with their own set of strengths and limitations.</p>
<p><strong>Strengths:</strong></p>
<ul>
<li><strong>Simplicity:</strong> Stacks are straightforward to implement and use.</li>
<li><strong>Efficiency:</strong> They provide an efficient way to handle data in LIFO order.</li>
<li><strong>Predictability:</strong> The strict LIFO order simplifies data management and ensures a clear sequence of operations.</li>
</ul>
<p><strong>Weaknesses:</strong></p>
<ul>
<li><strong>Limited Access:</strong> Stacks offer limited access, as you can only interact with the top element. This restricts their use in scenarios requiring access to elements deeper within the stack.</li>
<li><strong>Memory Constraints:</strong> Stacks can run out of memory if pushed to their limits, leading to an OutOfMemoryError. This is a practical concern in software development.</li>
</ul>
<p>Despite their limitations, stacks remain an essential tool in the programmer's toolbox due to their efficiency and predictability.</p>
<h3 id="heading-stack-code-example">Stack Code Example</h3>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.Stack;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AdvancedStackOperations</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        <span class="hljs-comment">// Create a stack to store integers</span>
        Stack&lt;Integer&gt; stack = <span class="hljs-keyword">new</span> Stack&lt;&gt;();

        <span class="hljs-comment">// Check if the stack is empty</span>
        <span class="hljs-keyword">boolean</span> isEmpty = stack.isEmpty();
        System.out.println(<span class="hljs-string">"Is the stack empty? "</span> + isEmpty); <span class="hljs-comment">// Output: Is the stack empty? true</span>

        <span class="hljs-comment">// Push integers onto the stack</span>
        stack.push(<span class="hljs-number">10</span>);
        stack.push(<span class="hljs-number">20</span>);
        stack.push(<span class="hljs-number">30</span>);
        stack.push(<span class="hljs-number">40</span>);
        stack.push(<span class="hljs-number">50</span>);

        <span class="hljs-comment">// Display the stack after pushing integers</span>
        System.out.println(<span class="hljs-string">"Stack after pushing integers: "</span> + stack);
        <span class="hljs-comment">// Output: Stack after pushing integers: [10, 20, 30, 40, 50]</span>

        <span class="hljs-comment">// Check if the stack is empty again</span>
        isEmpty = stack.isEmpty();
        System.out.println(<span class="hljs-string">"Is the stack empty? "</span> + isEmpty); <span class="hljs-comment">// Output: Is the stack empty? false</span>

        <span class="hljs-comment">// Peek at the top integer without removing it</span>
        <span class="hljs-keyword">int</span> topElement = stack.peek();
        System.out.println(<span class="hljs-string">"Peek at the top integer: "</span> + topElement); <span class="hljs-comment">// Output: Peek at the top integer: 50</span>

        <span class="hljs-comment">// Pop the top integer from the stack</span>
        <span class="hljs-keyword">int</span> poppedElement = stack.pop();
        System.out.println(<span class="hljs-string">"Popped integer: "</span> + poppedElement); <span class="hljs-comment">// Output: Popped integer: 50</span>

        <span class="hljs-comment">// Display the stack after popping an integer</span>
        System.out.println(<span class="hljs-string">"Stack after popping an integer: "</span> + stack);
        <span class="hljs-comment">// Output: Stack after popping an integer: [10, 20, 30, 40]</span>

        <span class="hljs-comment">// Search for an integer in the stack</span>
        <span class="hljs-keyword">int</span> searchElement = <span class="hljs-number">30</span>;
        <span class="hljs-keyword">int</span> position = stack.search(searchElement);
        <span class="hljs-keyword">if</span> (position != -<span class="hljs-number">1</span>) {
            System.out.println(<span class="hljs-string">"Position of "</span> + searchElement + <span class="hljs-string">" in the stack (1-based index): "</span> + position);
        } <span class="hljs-keyword">else</span> {
            System.out.println(searchElement + <span class="hljs-string">" not found in the stack."</span>);
        }
        <span class="hljs-comment">// Output: Position of 30 in the stack (1-based index): 3</span>
    }
}
</code></pre>
<h3 id="heading-real-world-applications-of-stacks">Real World Applications of Stacks</h3>
<p>Stack data structures have widespread real-world applications, particularly in computer science and software development. </p>
<p>They are commonly used for implementing undo and redo features in text editors and design software, allowing users to reverse or redo actions efficiently. </p>
<p>In web browsers, stacks enable seamless navigation through browsing history when users click back or forward buttons. </p>
<p>Operating systems rely on stacks for managing function calls and execution contexts. Backtracking algorithms in AI, gaming, and optimization problems benefit from stacks to keep track of choices and backtrack effectively. </p>
<p>Stack-based architectures are also employed in parsing and evaluating mathematical expressions, enabling complex calculations.</p>
<h3 id="heading-performance-considerations-for-stacks">Performance Considerations for Stacks</h3>
<p>Stacks are known for their efficiency, with key operations like push, pop, peek, and isEmpty having a constant time complexity of O(1), ensuring quick access to the top element. </p>
<p>But stacks have limitations, offering limited access to elements beyond the top one. This makes them less suitable for deeper element retrieval. </p>
<p>Stacks can also consume significant memory in deeply recursive applications, necessitating careful memory management. Tail recursion optimization and iterative approaches are strategies to mitigate stack memory concerns. </p>
<p>In summary, stack data structures provide efficient solutions for real-world applications in software development but require an understanding of their limitations and prudent memory usage for optimal performance.</p>
<h3 id="heading-key-takeaways-3"><strong>Key Takeaways</strong></h3>
<p>Stacks are an essential data structure in programming, offering a straightforward yet effective way to manage data following the Last In, First Out (LIFO) principle. Understanding how stacks work and how to utilize their key operations is vital for developers, given their widespread application in various computer science and programming scenarios. </p>
<p>Whether you're implementing an undo feature in a text editor or navigating web browser history, stacks are the behind-the-scenes heroes that make it all possible. Mastering them is a fundamental step toward becoming a proficient software developer.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-72.png" alt="Image" width="600" height="400" loading="lazy">
<em>A line of silhouetted figures with a glowing path weaving through them, representing a Queue Data Structure, with the illumination highlighting the FIFO (First In, First Out) sequence from one end to the other. - Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-7-queue-data-structure">7. Queue Data Structure</h2>
<p>Think of Queues like a digital equivalent of a line of people waiting patiently for their turn. Just like in real life, a queue data structure follows the "first come, first served" (FIFO) principle. This means that the first item to be added to the queue is the first to be processed. </p>
<p>In essence, a queue is a linear data structure designed for holding elements in a specific order, ensuring that the order of processing remains fair and predictable.</p>
<h3 id="heading-what-does-a-queue-do">What Does a Queue Do?</h3>
<p>The primary function of a queue is to manage elements based on the FIFO principle we just discussed. It serves as an orderly collection where the element that has been waiting the longest gets its turn first. </p>
<p>Now, you might wonder why a queue is so crucial in the world of computer science. The answer lies in its significance in ensuring that tasks are processed in a specific order. </p>
<p>Imagine scenarios where processing order matters, such as print jobs in a queue or keyboard input buffering. A queue ensures that these tasks are executed with precision, avoiding chaos and ensuring fairness.</p>
<h3 id="heading-how-do-queues-work">How Do Queues Work?</h3>
<p>To understand the inner workings of a queue, let's break it down into its basic mechanics using a real-world example.</p>
<p>In a queue, elements are added to the tail (end) and removed from the head (front) of the queue. This straightforward operation ensures that the element that has been waiting the longest is the next in line to be processed.</p>
<h3 id="heading-simple-example-the-cashier-ticket-selling-scenario">Simple Example: The Cashier Ticket-Selling Scenario</h3>
<p>Picture yourself as a cashier selling tickets to a concert. Your queue is formed by customers who approach your register. </p>
<p>Following the FIFO principle, the customer who arrived first is at the head of the queue, and the one who arrived last is at the tail. As you serve customers in order, they move up the queue until they are helped and then exit.</p>
<h3 id="heading-key-queue-operations">Key Queue Operations</h3>
<p>Queues come with a set of key operations that make them function seamlessly.</p>
<ul>
<li><strong>Enqueue</strong>: Think of enqueuing as customers joining the line. The new element is placed at the end of the queue, patiently waiting for its turn to be served.</li>
<li><strong>Dequeue</strong>: Dequeueing is akin to serving the customer at the front of the line. The element at the head of the queue is removed, signifying that it has been processed and can now exit the queue.</li>
</ul>
<p>While these operations might sound straightforward, they form the backbone of a queue's functionality.</p>
<h3 id="heading-when-are-queues-used">When are Queues Used?</h3>
<p>Now that you understand how a queue works, let's explore some use cases:</p>
<ul>
<li><strong>Keyboard Buffers</strong>: When you type rapidly on your keyboard, the computer uses a queue to ensure that the characters appear on the screen in the order you pressed the keys.</li>
<li><strong>Printer Queues</strong>: In printing, queues are used to manage print jobs, ensuring that they are completed in the order they were initiated.</li>
</ul>
<h3 id="heading-real-world-applications">Real-World Applications</h3>
<p>Think of online services where users submit requests or tasks, such as downloading files from a website or processing orders in an e-commerce platform. These requests are typically handled on a 'first come, first served' basis, just like a digital queue. </p>
<p>Similarly, in a multiplayer online game, players often join a game server's queue before entering the game, ensuring that they are served in the order they joined. </p>
<p>In these digital scenarios, queues are pivotal in managing and processing data or requests efficiently</p>
<h3 id="heading-queue-example-code">Queue Example Code</h3>
<p>To truly grasp the power of queues, let's dive into a practical example problem.</p>
<p>Imagine you're tasked with implementing a system to process customer service requests in a call center. Each request is assigned a priority level, and you need to ensure that high-priority requests are processed before lower-priority ones.</p>
<p>To tackle this problem, you can use a combination of queues. Create separate queues for each priority level, and process requests in the order of their priority. Here's a simplified code snippet in Java to illustrate this concept:</p>
<pre><code class="lang-java">Queue&lt;CustomerRequest&gt; highPriorityQueue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();
Queue&lt;CustomerRequest&gt; mediumPriorityQueue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();
Queue&lt;CustomerRequest&gt; lowPriorityQueue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();

<span class="hljs-comment">// Enqueue requests based on their priority</span>
highPriorityQueue.offer(highPriorityRequest);
mediumPriorityQueue.offer(mediumPriorityRequest);
lowPriorityQueue.offer(lowPriorityRequest);

<span class="hljs-comment">// Process requests in priority order</span>
processRequests(highPriorityQueue);
processRequests(mediumPriorityQueue);
processRequests(lowPriorityQueue);
</code></pre>
<p>This code ensures that high-priority requests are processed before medium and low-priority ones, maintaining fairness while addressing different levels of urgency.</p>
<p>Let's look at another example of using queues in code:</p>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.LinkedList;
<span class="hljs-keyword">import</span> java.util.Queue;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">QueueOperationsExample</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        <span class="hljs-comment">// Create a queue using LinkedList</span>
        Queue&lt;String&gt; queue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();

        <span class="hljs-comment">// Enqueue: Adding elements to the queue</span>
        queue.offer(<span class="hljs-string">"Customer 1"</span>);
        queue.offer(<span class="hljs-string">"Customer 2"</span>);
        queue.offer(<span class="hljs-string">"Customer 3"</span>);

        <span class="hljs-comment">// Display the queue after enqueuing</span>
        System.out.println(<span class="hljs-string">"Queue after enqueuing: "</span> + queue);
        <span class="hljs-comment">// Expected output: Queue after enqueuing: [Customer 1, Customer 2, Customer 3]</span>

        <span class="hljs-comment">// Dequeue: Removing the element at the head of the queue</span>
        String servedCustomer = queue.poll();

        <span class="hljs-comment">// Display the served customer and the updated queue</span>
        System.out.println(<span class="hljs-string">"Served customer: "</span> + servedCustomer);
        <span class="hljs-comment">// Expected output: Served customer: Customer 1</span>
        System.out.println(<span class="hljs-string">"Queue after dequeuing: "</span> + queue);
        <span class="hljs-comment">// Expected output: Queue after dequeuing: [Customer 2, Customer 3]</span>

        <span class="hljs-comment">// Enqueue more customers</span>
        queue.offer(<span class="hljs-string">"Customer 4"</span>);
        queue.offer(<span class="hljs-string">"Customer 5"</span>);

        <span class="hljs-comment">// Display the queue after enqueuing more customers</span>
        System.out.println(<span class="hljs-string">"Queue after enqueuing more customers: "</span> + queue);
        <span class="hljs-comment">// Expected output: Queue after enqueuing more customers: [Customer 2, Customer 3, Customer 4, Customer 5]</span>

        <span class="hljs-comment">// Dequeue another customer</span>
        String servedCustomer2 = queue.poll();

        <span class="hljs-comment">// Display the served customer and the updated queue</span>
        System.out.println(<span class="hljs-string">"Served customer: "</span> + servedCustomer2);
        <span class="hljs-comment">// Expected output: Served customer: Customer 2</span>
        System.out.println(<span class="hljs-string">"Queue after dequeuing: "</span> + queue);
        <span class="hljs-comment">// Expected output: Queue after dequeuing: [Customer 3, Customer 4, Customer 5]</span>
    }
}
</code></pre>
<h3 id="heading-advantages-and-limitations-of-queues">Advantages and Limitations of Queues</h3>
<p>Every data structure comes with its own set of strengths and weaknesses, and queues are no exception.</p>
<p>One of the key strengths of a queue is its ability to maintain order. It ensures fairness and predictability in processing elements. When order matters, a queue is the go-to data structure.</p>
<p>But queues also have limitations. They lack the ability to prioritize elements based on any criteria other than their arrival time. If you need to handle elements with different priorities, you'll likely need to complement queues with other data structures or algorithms.</p>
<h3 id="heading-key-takeaways-4">Key Takeaways</h3>
<p>The Queue Data Structure, based on the "first come, first served" (FIFO) principle, is vital for maintaining order. It involves adding to the tail (enqueuing) and removing from the head (dequeuing). </p>
<p>Real-world applications include keyboard buffers and printer queues. </p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-73.png" alt="Image" width="600" height="400" loading="lazy">
<em>A radiant, tree-like structure with branching nodes, symbolizing a Tree Data Structure, where each glowing connection represents a parent-child relationship, converging towards the luminous root at the base. - Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-8-tree-data-structure">8. Tree Data Structure</h2>
<p>Imagine a tree – not just any tree, but a meticulously structured hierarchy that can revolutionize how you store and access data. This isn't just a theoretical concept – it's a powerful tool used extensively in computer science and various industries.</p>
<h3 id="heading-what-does-a-tree-do">What Does a Tree Do?</h3>
<p>The Tree Data Structure's primary function is to arrange data hierarchically, creating a structure that mirrors real-world hierarchies. </p>
<p>Why is this important, you ask? Consider this: it's the backbone of file systems, ensures efficient hierarchical data representation, and excels in optimizing search operations. If you want to efficiently manage data with a hierarchical structure, the Tree Data Structure is your go-to choice.</p>
<h3 id="heading-how-do-trees-work">How Do Trees Work?</h3>
<p>The mechanics behind trees are elegantly simple yet incredibly versatile. Imagine a family tree, where each individual is a node connected to their parents. </p>
<p>Nodes in a tree are linked through parent-child relationships, with a single root node at the top. Just as in a real family tree, information flows from the root to the leaves, creating a structured hierarchy. </p>
<p>Whether it's organizing files in your computer or representing the structure of a company, trees provide a clear and efficient way to handle hierarchical data.</p>
<h3 id="heading-key-tree-operations">Key Tree Operations</h3>
<p>Understanding the key operations of a tree is essential for practical use. These operations encompass adding nodes, removing nodes, and traversing the tree. Let's delve into each of these operations to grasp their significance:</p>
<h4 id="heading-adding-nodes">Adding Nodes</h4>
<p>Adding nodes to a tree is akin to expanding its hierarchy. This operation allows you to incorporate new data points seamlessly. </p>
<p>When you add a node, you establish a connection between an existing node (the parent) and the new node (the child). This relationship signifies the hierarchical structure of the data. </p>
<p>Practical scenarios for adding nodes include inserting new files into a file system or adding new employees to an organizational chart.</p>
<h4 id="heading-removing-nodes">Removing Nodes</h4>
<p>Removing nodes is a crucial operation for maintaining the integrity of the tree. It enables you to prune unnecessary branches or data points. </p>
<p>When you remove a node, you sever its connection with the tree, effectively eliminating it and its substructure. This operation is essential for tasks such as deleting files from a file system or handling employee departures in an organizational hierarchy.</p>
<h4 id="heading-traversing-the-tree">Traversing the Tree</h4>
<p>Traversing the tree is like navigating through its branches to access specific data points. Tree traversal is vital for retrieving information efficiently. </p>
<p>There are various traversal techniques, each with its own use cases:</p>
<ul>
<li><strong>In-Order Traversal</strong> visits nodes in ascending order, and is commonly used in binary search trees to retrieve data in sorted order.</li>
<li><strong>Pre-Order Traversal</strong> processes the current node before its children, and is suitable for copying a tree structure.</li>
<li><strong>Post-Order Traversal</strong> processes the current node after its children, and is useful for deleting a tree or evaluating mathematical expressions.</li>
</ul>
<p>Tree traversal operations provide practical means to explore and work with hierarchical data, making it accessible and usable in various applications.</p>
<p>By mastering these key operations, you can effectively manage hierarchical data structures, making trees a valuable tool in computer science and software engineering. </p>
<p>Whether you need to organize files, represent family relationships, or optimize data retrieval, a solid understanding of these operations empowers you to harness the full potential of tree structures.</p>
<h3 id="heading-performance-aspects-of-trees">Performance Aspects of Trees</h3>
<p>Now, let's dive into the practical world of performance, a critical aspect of the Tree Data Structure. </p>
<p>Performance is all about efficiency—how quickly can you execute operations on a tree when you're faced with real-world data? </p>
<p>Let's break it down by examining the time and space complexities of common tree operations, including insertion, deletion, and traversal.</p>
<h4 id="heading-time-and-space-complexities-of-common-operations">Time and Space Complexities of Common Operations</h4>
<p><strong>Insertion</strong>: When you add new data to a tree, how fast can you do it? The time complexity of insertion varies depending on the type of tree. </p>
<p>For example, in a balanced binary search tree, like AVL or Red-Black trees, insertion has a time complexity of O(log n), where n is the number of nodes in the tree. </p>
<p>But in an unbalanced binary tree, it can be as bad as O(n) in the worst case. The space complexity of insertion is typically O(1) as it involves adding a single node.</p>
<p><strong>Deletion</strong>: Removing data from a tree should be a smooth process. Similar to insertion, the time complexity of deletion depends on the type of tree. </p>
<p>In balanced binary search trees, deletion also has a time complexity of O(log n). But in an unbalanced tree, it can be O(n). The space complexity of deletion is O(1).</p>
<p><strong>Traversal</strong>: Traversing the tree, whether it's for searching, retrieving data, or processing it in a specific order, is a fundamental operation. The time complexity of traversal methods can vary:</p>
<ul>
<li>In-order, pre-order, and post-order traversals have a time complexity of O(n) as they visit each node exactly once.</li>
<li>Level-order traversal, using a queue, also has a time complexity of O(n). The space complexity of traversal methods typically depends on the data structures used during traversal. For example, level-order traversal with a queue has a space complexity of O(w), where w is the maximum width (number of nodes in the widest level) of the tree.</li>
</ul>
<h4 id="heading-space-complexity-and-memory-usage">Space Complexity and Memory Usage</h4>
<p>While time complexity deals with speed, space complexity tackles memory usage. Trees can impact how much memory your application consumes, which is crucial in resource-conscious environments. </p>
<p>The space complexity of the entire tree structure depends on its type and balance:</p>
<ul>
<li>In balanced binary search trees (like AVL, Red-Black), the space complexity is O(n), where n is the number of nodes.</li>
<li>In B-trees, which are used in databases and file systems, space complexity can be higher but is designed to efficiently store large amounts of data.</li>
<li>In unbalanced trees, space complexity can also be O(n), making them less memory-efficient.</li>
</ul>
<p>By delving into the practical aspects of time and space complexities, you'll be equipped to make informed decisions about using trees in your projects. </p>
<p>Whether you're optimizing data storage, speeding up searches, or ensuring efficient data management, these insights will guide you in implementing tree structures effectively.</p>
<h3 id="heading-tree-code-example">Tree Code Example</h3>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.LinkedList;
<span class="hljs-keyword">import</span> java.util.Queue;

<span class="hljs-comment">// Class representing a single node in the tree</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TreeNode</span> </span>{
    <span class="hljs-keyword">int</span> value; <span class="hljs-comment">// Value of the node</span>
    TreeNode left; <span class="hljs-comment">// Pointer to the left child</span>
    TreeNode right; <span class="hljs-comment">// Pointer to the right child</span>

    <span class="hljs-comment">// Constructor to create a new node with a given value</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">TreeNode</span><span class="hljs-params">(<span class="hljs-keyword">int</span> value)</span> </span>{
        <span class="hljs-keyword">this</span>.value = value;
        <span class="hljs-keyword">this</span>.left = <span class="hljs-keyword">null</span>; <span class="hljs-comment">// Initialize left child as null</span>
        <span class="hljs-keyword">this</span>.right = <span class="hljs-keyword">null</span>; <span class="hljs-comment">// Initialize right child as null</span>
    }
}

<span class="hljs-comment">// Class representing a Binary Search Tree</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">BinarySearchTree</span> </span>{
    TreeNode root; <span class="hljs-comment">// Root of the BST</span>

    <span class="hljs-comment">// Constructor to create an empty BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">BinarySearchTree</span><span class="hljs-params">()</span> </span>{
        <span class="hljs-keyword">this</span>.root = <span class="hljs-keyword">null</span>; <span class="hljs-comment">// Initialize root as null</span>
    }

    <span class="hljs-comment">// Public method to insert a value into the BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">insert</span><span class="hljs-params">(<span class="hljs-keyword">int</span> value)</span> </span>{
        <span class="hljs-comment">// Call the private recursive method to insert the value</span>
        root = insertRecursive(root, value);
    }

    <span class="hljs-comment">// Private recursive method to insert a value starting from a given node</span>
    <span class="hljs-function"><span class="hljs-keyword">private</span> TreeNode <span class="hljs-title">insertRecursive</span><span class="hljs-params">(TreeNode current, <span class="hljs-keyword">int</span> value)</span> </span>{
        <span class="hljs-keyword">if</span> (current == <span class="hljs-keyword">null</span>) {
            <span class="hljs-comment">// If the current node is null, create a new node with the value</span>
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> TreeNode(value);
        }

        <span class="hljs-comment">// Decide whether to insert in the left or right subtree</span>
        <span class="hljs-keyword">if</span> (value &lt; current.value) {
            <span class="hljs-comment">// Insert in the left subtree</span>
            current.left = insertRecursive(current.left, value);
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (value &gt; current.value) {
            <span class="hljs-comment">// Insert in the right subtree</span>
            current.right = insertRecursive(current.right, value);
        }

        <span class="hljs-comment">// Return the current node</span>
        <span class="hljs-keyword">return</span> current;
    }

    <span class="hljs-comment">// Public method for in-order traversal of the BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">inOrderTraversal</span><span class="hljs-params">()</span> </span>{
        System.out.println(<span class="hljs-string">"In-Order Traversal:"</span>);
        <span class="hljs-comment">// Start recursive in-order traversal from the root</span>
        inOrderRecursive(root);
        System.out.println();
        <span class="hljs-comment">// Expected output: "20 30 40 50 60 70 80"</span>
    }

    <span class="hljs-comment">// Private recursive method for in-order traversal</span>
    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">inOrderRecursive</span><span class="hljs-params">(TreeNode node)</span> </span>{
        <span class="hljs-keyword">if</span> (node != <span class="hljs-keyword">null</span>) {
            <span class="hljs-comment">// Traverse the left subtree, visit the node, then traverse the right subtree</span>
            inOrderRecursive(node.left);
            System.out.print(node.value + <span class="hljs-string">" "</span>);
            inOrderRecursive(node.right);
        }
    }

    <span class="hljs-comment">// Public method for pre-order traversal of the BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">preOrderTraversal</span><span class="hljs-params">()</span> </span>{
        System.out.println(<span class="hljs-string">"Pre-Order Traversal:"</span>);
        <span class="hljs-comment">// Start recursive pre-order traversal from the root</span>
        preOrderRecursive(root);
        System.out.println();
        <span class="hljs-comment">// Expected output: "50 30 20 40 70 60 80"</span>
    }

    <span class="hljs-comment">// Private recursive method for pre-order traversal</span>
    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">preOrderRecursive</span><span class="hljs-params">(TreeNode node)</span> </span>{
        <span class="hljs-keyword">if</span> (node != <span class="hljs-keyword">null</span>) {
            <span class="hljs-comment">// Visit the node, then traverse the left and right subtrees</span>
            System.out.print(node.value + <span class="hljs-string">" "</span>);
            preOrderRecursive(node.left);
            preOrderRecursive(node.right);
        }
    }

    <span class="hljs-comment">// Public method for post-order traversal of the BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">postOrderTraversal</span><span class="hljs-params">()</span> </span>{
        System.out.println(<span class="hljs-string">"Post-Order Traversal:"</span>);
        <span class="hljs-comment">// Start recursive post-order traversal from the root</span>
        postOrderRecursive(root);
        System.out.println();
        <span class="hljs-comment">// Expected output: "20 40 30 60 80 70 50"</span>
    }

    <span class="hljs-comment">// Private recursive method for post-order traversal</span>
    <span class="hljs-function"><span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">postOrderRecursive</span><span class="hljs-params">(TreeNode node)</span> </span>{
        <span class="hljs-keyword">if</span> (node != <span class="hljs-keyword">null</span>) {
            <span class="hljs-comment">// Traverse the left and right subtrees, then visit the node</span>
            postOrderRecursive(node.left);
            postOrderRecursive(node.right);
            System.out.print(node.value + <span class="hljs-string">" "</span>);
        }
    }

    <span class="hljs-comment">// Public method for level-order traversal of the BST</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">levelOrderTraversal</span><span class="hljs-params">()</span> </span>{
        System.out.println(<span class="hljs-string">"Level-Order Traversal:"</span>);
        Queue&lt;TreeNode&gt; queue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;(); <span class="hljs-comment">// Queue to assist with level-order traversal</span>
        <span class="hljs-keyword">if</span> (root != <span class="hljs-keyword">null</span>) {
            <span class="hljs-comment">// Start from the root</span>
            queue.add(root);
        }

        <span class="hljs-comment">// Continue until the queue is empty</span>
        <span class="hljs-keyword">while</span> (!queue.isEmpty()) {
            <span class="hljs-comment">// Remove the front node from the queue and print its value</span>
            TreeNode node = queue.poll();
            System.out.print(node.value + <span class="hljs-string">" "</span>);
            <span class="hljs-comment">// Expected output: "50 30 70 20 40 60 80"</span>

            <span class="hljs-comment">// Add the left and right children to the queue if they exist</span>
            <span class="hljs-keyword">if</span> (node.left != <span class="hljs-keyword">null</span>) {
                queue.add(node.left);
            }
            <span class="hljs-keyword">if</span> (node.right != <span class="hljs-keyword">null</span>) {
                queue.add(node.right);
            }
        }
        System.out.println();
    }
}

<span class="hljs-comment">// Main class</span>
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Main</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        BinarySearchTree bst = <span class="hljs-keyword">new</span> BinarySearchTree(); <span class="hljs-comment">// Create a new BST</span>
        <span class="hljs-keyword">int</span>[] values = {<span class="hljs-number">50</span>, <span class="hljs-number">30</span>, <span class="hljs-number">70</span>, <span class="hljs-number">20</span>, <span class="hljs-number">40</span>, <span class="hljs-number">60</span>, <span class="hljs-number">80</span>}; <span class="hljs-comment">// Array of values to be inserted</span>

        <span class="hljs-comment">// Loop to insert each value into the BST</span>
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> value : values) {
            bst.insert(value);
        }

        <span class="hljs-comment">// Perform different tree traversals</span>
        bst.inOrderTraversal(); <span class="hljs-comment">// In-order traversal: Expected output: 20 30 40 50 60 70 80</span>
        bst.preOrderTraversal(); <span class="hljs-comment">// Pre-order traversal: Expected output: 50 30 20 40 70 60 80</span>
        bst.postOrderTraversal(); <span class="hljs-comment">// Post-order traversal: Expected output: 20 40 30 60 80 70 50</span>
        bst.levelOrderTraversal(); <span class="hljs-comment">// Level-order traversal: Expected output: 50 30 70 20 40 60 80</span>

    }
}
</code></pre>
<h3 id="heading-advantages-and-limitations-of-trees">Advantages and Limitations of Trees</h3>
<p>Understanding the strengths and weaknesses of trees is vital. There are various advantages, such as efficient hierarchical data retrieval. But there are also situations where trees may not be the best choice, such as unstructured data. </p>
<p>It's essential to make informed decisions about when and where to employ this powerful data structure.</p>
<h3 id="heading-key-takeaways-5">Key Takeaways</h3>
<p>Trees are practical tools that can revolutionize how you organize and access hierarchical data. </p>
<p>Whether you're building a file system or optimizing search algorithms, the Tree Data Structure is your trusted ally in the world of data structures.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-74.png" alt="Image" width="600" height="400" loading="lazy">
<em>A complex network of interconnected glowing points, illustrating a Graph Data Structure with no clear beginning or end, highlighting the multiple pathways and vertices in a non-linear, web-like formation.- Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-9-graph-data-structure">9. Graph Data Structure</h2>
<p>The Graph Data Structure stands as a pivotal concept in computer science, likened to a network of interconnected nodes and edges. </p>
<p>At its core, a graph represents a collection of nodes (or vertices) connected by edges – each node potentially holding a piece of data, and each edge signifying a relationship or connection. </p>
<p>Now, we'll delve into the essence of graph data structures, their functionality, and their real-world applications.</p>
<h3 id="heading-what-does-a-graph-data-structure-do">What Does a Graph Data Structure Do?</h3>
<p>Graphs primarily model intricate relationships and connections among various entities. They have diverse applications such as social networks, road maps, and data networks. </p>
<p>By understanding graphs, you can grasp the underlying structure of many complex systems in our digital and physical worlds.</p>
<h3 id="heading-how-do-graphs-work">How Do Graphs Work?</h3>
<p>Graphs function through nodes connected by edges. Consider a non-technical example: a city's road map, or a social network. These represent graphs where connections (edges) between points (nodes) create a network. </p>
<h3 id="heading-key-operations-in-graph-data-structures">Key Operations in Graph Data Structures</h3>
<p>In graph data structures, there are a few key operations you'll need to know for building, analyzing, and modifying the network. These operations include the addition and removal of nodes and edges, as well as the analysis of connections and relationships within the graph.</p>
<ul>
<li><strong>Adding a Node (Vertex)</strong> involves inserting a new node into the graph, serving as the initial step in constructing the graph's structure. It's essential for expanding the network.</li>
<li><strong>Removing a Node (Vertex)</strong> entails deleting a node and its associated edges, thereby altering the graph's configuration. It's a crucial step for modifying the graph's layout and connections.</li>
<li><strong>Adding an Edge</strong> or establishing a connection between two nodes is fundamental in graph construction. In undirected graphs, this connection is bidirectional, while in directed graphs, the edge is a one-way link from one node to another.</li>
<li><strong>Removing an Edge</strong> between two nodes is vital for changing the relationships and pathways within the graph.</li>
<li><strong>Checking for Adjacency</strong> or determining whether a direct edge exists between two nodes is critical for understanding their adjacency, revealing direct connections within the graph.</li>
<li><strong>Finding Neighbors</strong> or identifying all nodes directly linked to a specific node is key for exploring and comprehending the graph's structure, as it reveals the immediate connections of any given node.</li>
<li><strong>Graph Traversal</strong> utilizing systematic methods such as Depth-First Search (DFS) and Breadth-First Search (BFS) enables the comprehensive exploration of all nodes in the graph.</li>
<li><strong>Search Operations</strong> include locating specific nodes or determining paths between nodes, often employing traversal techniques to navigate through the graph.</li>
</ul>
<h3 id="heading-code-example-for-graph-operations">Code Example for Graph Operations</h3>
<pre><code class="lang-jsx"><span class="hljs-keyword">import</span> java.util.*;

public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Graph</span> </span>{
    <span class="hljs-comment">// Adjacency list to store graph edges</span>
    private <span class="hljs-built_in">Map</span>&lt;Integer, List&lt;Integer&gt;&gt; adjList;
    <span class="hljs-comment">// Boolean to check if graph is directed</span>
    private boolean directed;

    <span class="hljs-comment">// Constructor to initialize graph with directed/undirected flag</span>
    public Graph(boolean directed) {
        <span class="hljs-built_in">this</span>.directed = directed;
        adjList = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();
    }

    <span class="hljs-comment">// Method to add a new node to the graph</span>
    public <span class="hljs-keyword">void</span> addNode(int node) {
        <span class="hljs-comment">// Puts the node in the adjacency list if it's not already present</span>
        adjList.putIfAbsent(node, <span class="hljs-keyword">new</span> ArrayList&lt;&gt;());
    }

    <span class="hljs-comment">// Method to remove a node from the graph</span>
    public <span class="hljs-keyword">void</span> removeNode(int node) {
        <span class="hljs-comment">// Remove the node from other node's adjacency list</span>
        adjList.values().forEach(e -&gt; e.remove(Integer.valueOf(node)));
        <span class="hljs-comment">// Remove the node from the graph</span>
        adjList.remove(node);
    }

    <span class="hljs-comment">// Method to add an edge between two nodes</span>
    public <span class="hljs-keyword">void</span> addEdge(int node1, int node2) {
        <span class="hljs-comment">// Adds node2 to the adjacency list of node1</span>
        adjList.get(node1).add(node2);
        <span class="hljs-comment">// If graph is undirected, add node1 to the adjacency list of node2</span>
        <span class="hljs-keyword">if</span> (!directed) {
            adjList.get(node2).add(node1);
        }
    }

    <span class="hljs-comment">// Method to remove an edge between two nodes</span>
    public <span class="hljs-keyword">void</span> removeEdge(int node1, int node2) {
        <span class="hljs-comment">// Get the adjacency list of both nodes</span>
        List&lt;Integer&gt; eV1 = adjList.get(node1);
        List&lt;Integer&gt; eV2 = adjList.get(node2);
        <span class="hljs-comment">// Remove node2 from the adjacency list of node1</span>
        <span class="hljs-keyword">if</span> (eV1 != <span class="hljs-literal">null</span>) eV1.remove(Integer.valueOf(node2));
        <span class="hljs-comment">// If undirected, remove node1 from the adjacency list of node2</span>
        <span class="hljs-keyword">if</span> (!directed &amp;&amp; eV2 != <span class="hljs-literal">null</span>) eV2.remove(Integer.valueOf(node1));
    }

    <span class="hljs-comment">// Method to check if two nodes are adjacent</span>
    public boolean checkAdjacency(int node1, int node2) {
        <span class="hljs-comment">// Returns true if node2 is in the adjacency list of node1</span>
        <span class="hljs-keyword">return</span> adjList.getOrDefault(node1, Collections.emptyList()).contains(node2);
    }

    <span class="hljs-comment">// Method to find all neighbors of a given node</span>
    public List&lt;Integer&gt; findNeighbors(int node) {
        <span class="hljs-comment">// Returns the adjacency list of the node</span>
        <span class="hljs-keyword">return</span> adjList.getOrDefault(node, Collections.emptyList());
    }

    <span class="hljs-comment">// Depth-First Search (DFS) algorithm</span>
    public <span class="hljs-built_in">Set</span>&lt;Integer&gt; dfs(int start) {
        <span class="hljs-comment">// Visited set to keep track of visited nodes</span>
        <span class="hljs-built_in">Set</span>&lt;Integer&gt; visited = <span class="hljs-keyword">new</span> HashSet&lt;&gt;();
        <span class="hljs-comment">// Stack to store the nodes for DFS</span>
        Stack&lt;Integer&gt; stack = <span class="hljs-keyword">new</span> Stack&lt;&gt;();
        stack.push(start);

        <span class="hljs-keyword">while</span> (!stack.isEmpty()) {
            int node = stack.pop();
            <span class="hljs-keyword">if</span> (!visited.contains(node)) {
                visited.add(node);
                <span class="hljs-comment">// Add all unvisited neighbors to the stack</span>
                <span class="hljs-keyword">for</span> (int neighbor : adjList.getOrDefault(node, Collections.emptyList())) {
                    stack.push(neighbor);
                }
            }
        }

        <span class="hljs-keyword">return</span> visited;
    }

    <span class="hljs-comment">// Breadth-First Search (BFS) algorithm</span>
    public <span class="hljs-built_in">Set</span>&lt;Integer&gt; bfs(int start) {
        <span class="hljs-comment">// Visited set to keep track of visited nodes</span>
        <span class="hljs-built_in">Set</span>&lt;Integer&gt; visited = <span class="hljs-keyword">new</span> HashSet&lt;&gt;();
        <span class="hljs-comment">// Queue to store the nodes for BFS</span>
        Queue&lt;Integer&gt; queue = <span class="hljs-keyword">new</span> LinkedList&lt;&gt;();
        queue.add(start);

        <span class="hljs-keyword">while</span> (!queue.isEmpty()) {
            int node = queue.poll();
            <span class="hljs-keyword">if</span> (!visited.contains(node)) {
                visited.add(node);
                <span class="hljs-comment">// Add all unvisited neighbors to the queue</span>
                queue.addAll(adjList.getOrDefault(node, Collections.emptyList()));
            }
        }

        <span class="hljs-keyword">return</span> visited;
    }

    <span class="hljs-comment">// Overriding toString method for easy graph representation</span>
    @Override
    public <span class="hljs-built_in">String</span> toString() {
        StringBuilder builder = <span class="hljs-keyword">new</span> StringBuilder();
        <span class="hljs-comment">// Build a string representation of the graph</span>
        <span class="hljs-keyword">for</span> (int node : adjList.keySet()) {
            builder.append(node).append(<span class="hljs-string">": "</span>).append(adjList.get(node)).append(<span class="hljs-string">"\\n"</span>);
        }
        <span class="hljs-keyword">return</span> builder.toString();
    }

    <span class="hljs-comment">// Main method for testing</span>
    public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span>[] args) {
    <span class="hljs-comment">// Initialize a new Graph object as undirected</span>
    Graph graph = <span class="hljs-keyword">new</span> Graph(<span class="hljs-literal">false</span>);

    <span class="hljs-comment">// Add nodes 1, 2, and 3 to the graph</span>
    graph.addNode(<span class="hljs-number">1</span>);
    graph.addNode(<span class="hljs-number">2</span>);
    graph.addNode(<span class="hljs-number">3</span>);
    <span class="hljs-comment">// Print the graph structure after adding nodes</span>
    System.out.println(<span class="hljs-string">"Graph after adding nodes:"</span>);
    System.out.println(graph); <span class="hljs-comment">// Expected output: "1: []\n2: []\n3: []\n"</span>

    <span class="hljs-comment">// Add edges between nodes 1-2 and 2-3</span>
    graph.addEdge(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
    graph.addEdge(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>);
    <span class="hljs-comment">// Print the graph structure after adding edges</span>
    System.out.println(<span class="hljs-string">"Graph after adding edges:"</span>);
    System.out.println(graph); <span class="hljs-comment">// Expected output: "1: [2]\n2: [1, 3]\n3: [2]\n"</span>

    <span class="hljs-comment">// Check if nodes 1 and 2 are adjacent and print the result</span>
    System.out.println(<span class="hljs-string">"Are 1 and 2 adjacent? "</span> + graph.checkAdjacency(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>)); <span class="hljs-comment">// Expected: "Are 1 and 2 adjacent? true"</span>

    <span class="hljs-comment">// Find and print all neighbors of node 2</span>
    System.out.println(<span class="hljs-string">"Neighbors of 2: "</span> + graph.findNeighbors(<span class="hljs-number">2</span>)); <span class="hljs-comment">// Expected output: "Neighbors of 2: [1, 3]"</span>

    <span class="hljs-comment">// Perform Depth-First Search (DFS) starting from node 1 and print the result</span>
    System.out.println(<span class="hljs-string">"DFS from 1: "</span> + graph.dfs(<span class="hljs-number">1</span>)); <span class="hljs-comment">// Expected output: "DFS from 1: [1, 2, 3]"</span>

    <span class="hljs-comment">// Perform Breadth-First Search (BFS) starting from node 1 and print the result</span>
    System.out.println(<span class="hljs-string">"BFS from 1: "</span> + graph.bfs(<span class="hljs-number">1</span>)); <span class="hljs-comment">// Expected output: "BFS from 1: [1, 2, 3]"</span>

    <span class="hljs-comment">// Remove the edge between nodes 1 and 2</span>
    graph.removeEdge(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
    <span class="hljs-comment">// Print the graph structure after removing the edge</span>
    System.out.println(<span class="hljs-string">"Graph after removing edge between 1 and 2:"</span>);
    System.out.println(graph); <span class="hljs-comment">// Expected output: "1: []\n2: [3]\n3: [2]\n"</span>

    <span class="hljs-comment">// Remove node 3 from the graph</span>
    graph.removeNode(<span class="hljs-number">3</span>);
    <span class="hljs-comment">// Print the graph structure after removing the node</span>
    System.out.println(<span class="hljs-string">"Graph after removing node 3:"</span>);
    System.out.println(graph); <span class="hljs-comment">// Expected output: "1: []\n2: []\n"</span>
}

}
</code></pre>
<h3 id="heading-when-is-the-graph-data-structure-used">When Is the Graph Data Structure Used?</h3>
<p>Graphs find their use in scenarios like modeling social networks, database relationships, and routing problems. Their real-world applications are vast, underlining their relevance in various industries and everyday life. </p>
<p>Understanding when and how to use graphs can significantly enhance your problem-solving skills in numerous domains.</p>
<h3 id="heading-advantages-and-limitations-of-graphs">Advantages and Limitations of Graphs</h3>
<p>Graphs are great for showing how things are connected, which is really useful. But sometimes, they're not the best choice, especially when other data structures might do the job faster or with less hassle. </p>
<p>When you're deciding whether to use graphs, think about what you're trying to do. If things are really intertwined, graphs might be what you need. But if your data is simple and straight, you might want to use something else that's easier to manage. Choose smart, not hard, to make your work shine.</p>
<h3 id="heading-practical-code-example">Practical Code Example</h3>
<p>A classic real-world problem that can be effectively solved using a graph data structure is finding the shortest path in a network. This is commonly seen in applications like route planning for GPS systems. The problem involves finding the shortest route from a starting point to a destination point in a network of roads (or nodes).</p>
<p>To illustrate this, we'll use Dijkstra's algorithm, which is a popular method for finding the shortest path in a graph with non-negative edge weights. Here's a Java implementation of this algorithm along with a simple graph setup to demonstrate the concept:</p>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> java.util.*;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Graph</span> </span>{
    <span class="hljs-comment">// HashMap to store the adjacency list of the graph</span>
    <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> Map&lt;Integer, List&lt;Node&gt;&gt; adjList = <span class="hljs-keyword">new</span> HashMap&lt;&gt;();

    <span class="hljs-comment">// Static class representing a node in the graph</span>
    <span class="hljs-keyword">static</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Node</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Comparable</span>&lt;<span class="hljs-title">Node</span>&gt; </span>{
        <span class="hljs-keyword">int</span> node; <span class="hljs-comment">// Node identifier</span>
        <span class="hljs-keyword">int</span> weight; <span class="hljs-comment">// Weight of the edge to this node</span>

        <span class="hljs-comment">// Constructor for Node</span>
        Node(<span class="hljs-keyword">int</span> node, <span class="hljs-keyword">int</span> weight) {
            <span class="hljs-keyword">this</span>.node = node;
            <span class="hljs-keyword">this</span>.weight = weight;
        }

        <span class="hljs-comment">// Overriding the compareTo method for priority queue</span>
        <span class="hljs-meta">@Override</span>
        <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">int</span> <span class="hljs-title">compareTo</span><span class="hljs-params">(Node other)</span> </span>{
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.weight - other.weight;
        }
    }

    <span class="hljs-comment">// Method to add a node to the graph</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">addNode</span><span class="hljs-params">(<span class="hljs-keyword">int</span> node)</span> </span>{
        <span class="hljs-comment">// Put the node into the adjacency list if it's not already present</span>
        adjList.putIfAbsent(node, <span class="hljs-keyword">new</span> ArrayList&lt;&gt;());
    }

    <span class="hljs-comment">// Method to add an edge to the graph</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">addEdge</span><span class="hljs-params">(<span class="hljs-keyword">int</span> source, <span class="hljs-keyword">int</span> destination, <span class="hljs-keyword">int</span> weight)</span> </span>{
        <span class="hljs-comment">// Add edge from source to destination with given weight</span>
        adjList.get(source).add(<span class="hljs-keyword">new</span> Node(destination, weight));
        <span class="hljs-comment">// For undirected graph, also add edge from destination to source</span>
        <span class="hljs-comment">// adjList.get(destination).add(new Node(source, weight));</span>
    }

    <span class="hljs-comment">// Dijkstra's algorithm to find the shortest path from start to end</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> List&lt;Integer&gt; <span class="hljs-title">dijkstra</span><span class="hljs-params">(<span class="hljs-keyword">int</span> start, <span class="hljs-keyword">int</span> end)</span> </span>{
        <span class="hljs-comment">// Array to store the shortest distance from start to each node</span>
        <span class="hljs-keyword">int</span>[] distances = <span class="hljs-keyword">new</span> <span class="hljs-keyword">int</span>[adjList.size()];
        Arrays.fill(distances, Integer.MAX_VALUE); <span class="hljs-comment">// Fill distances array with max value</span>
        distances[start] = <span class="hljs-number">0</span>; <span class="hljs-comment">// Distance from start to itself is 0</span>

        <span class="hljs-comment">// Priority queue for nodes to explore</span>
        PriorityQueue&lt;Node&gt; pq = <span class="hljs-keyword">new</span> PriorityQueue&lt;&gt;();
        pq.add(<span class="hljs-keyword">new</span> Node(start, <span class="hljs-number">0</span>)); <span class="hljs-comment">// Add start node to the queue</span>
        <span class="hljs-keyword">boolean</span>[] visited = <span class="hljs-keyword">new</span> <span class="hljs-keyword">boolean</span>[adjList.size()]; <span class="hljs-comment">// Visited array to track visited nodes</span>

        <span class="hljs-comment">// While there are nodes to explore</span>
        <span class="hljs-keyword">while</span> (!pq.isEmpty()) {
            Node current = pq.poll(); <span class="hljs-comment">// Get the node with the smallest distance</span>
            visited[current.node] = <span class="hljs-keyword">true</span>; <span class="hljs-comment">// Mark node as visited</span>

            <span class="hljs-comment">// Explore all neighbors of the current node</span>
            <span class="hljs-keyword">for</span> (Node neighbor : adjList.get(current.node)) {
                <span class="hljs-keyword">if</span> (!visited[neighbor.node]) { <span class="hljs-comment">// If neighbor is not visited</span>
                    <span class="hljs-keyword">int</span> newDist = distances[current.node] + neighbor.weight; <span class="hljs-comment">// Calculate new distance</span>
                    <span class="hljs-keyword">if</span> (newDist &lt; distances[neighbor.node]) { <span class="hljs-comment">// If new distance is shorter</span>
                        distances[neighbor.node] = newDist; <span class="hljs-comment">// Update the distance</span>
                        pq.add(<span class="hljs-keyword">new</span> Node(neighbor.node, distances[neighbor.node])); <span class="hljs-comment">// Add neighbor to the queue</span>
                    }
                }
            }
        }

        <span class="hljs-comment">// Reconstruct the shortest path from end to start</span>
        List&lt;Integer&gt; path = <span class="hljs-keyword">new</span> ArrayList&lt;&gt;();
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> at = end; at != start; at = distances[at]) {
            path.add(at);
        }
        path.add(start);
        Collections.reverse(path); <span class="hljs-comment">// Reverse the path to start to end</span>
        <span class="hljs-keyword">return</span> path; <span class="hljs-comment">// Return the shortest path</span>
    }

    <span class="hljs-comment">// Main method</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
        Graph graph = <span class="hljs-keyword">new</span> Graph(); <span class="hljs-comment">// Create a new graph</span>

        <span class="hljs-comment">// Adding nodes and edges to the graph</span>
        graph.addNode(<span class="hljs-number">0</span>);
        graph.addNode(<span class="hljs-number">1</span>);
        graph.addNode(<span class="hljs-number">2</span>);
        graph.addNode(<span class="hljs-number">3</span>);
        graph.addEdge(<span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// Edge from node 0 to 1 with weight 1</span>
        graph.addEdge(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>); <span class="hljs-comment">// Edge from node 1 to 2 with weight 3</span>
        graph.addEdge(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>); <span class="hljs-comment">// Edge from node 2 to 3 with weight 1</span>
        graph.addEdge(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">10</span>); <span class="hljs-comment">// Edge from node 0 to 3 with weight 10</span>

        <span class="hljs-comment">// Execute Dijkstra's algorithm to find the shortest path</span>
        List&lt;Integer&gt; shortestPath = graph.dijkstra(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>); <span class="hljs-comment">// Find shortest path from Node 0 to Node 3</span>
        System.out.println(<span class="hljs-string">"Shortest path from Node 0 to Node 3: "</span> + shortestPath); <span class="hljs-comment">// Expected output: [0, 1, 2, 3]</span>
    }
}
</code></pre>
<p>In this code, we create a simple graph with four nodes (0, 1, 2, 3) and edges between them with specified weights. Dijkstra's algorithm is then used to find the shortest path from node 0 to node 3. The <strong><code>dijkstra</code></strong> method computes the shortest distances from the start node to all other nodes, and then we reconstruct the shortest path to the end node.</p>
<p>The expected output for the given graph will be the shortest path from node 0 to node 3, considering the weights of the edges.</p>
<h3 id="heading-key-takeaways-6">Key Takeaways</h3>
<p>Graph Data Structures are essential in representing complex networks and relationships across various disciplines. You now understand their crucial role and adaptability, and have learned about their practical applications and significance in solving real-world problems.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/11/image-75.png" alt="Image" width="600" height="400" loading="lazy">
<em>Glowing, interconnected cubical nodes arranged in a circular formation with beams of light, representing the structure of a Hash Table with its hashing functions connecting data elements. - Source: <a target="_blank" href="lunartech.ai">lunartech.ai</a></em></p>
<h2 id="heading-10-hash-table-data-structure">10. Hash Table Data Structure</h2>
<p>In the intricate landscape of data structures, the Hash Table stands out for its efficiency and practicality. Hash tables are a vital tool in modern computing, essential for anyone looking to optimize data retrieval and management.</p>
<h3 id="heading-what-does-a-hash-table-do">What Does a Hash Table Do?</h3>
<p>Hash Tables are more than a clever concept – they're a powerhouse in data management. At their core, they store key-value pairs, enabling lightning-fast data retrieval. </p>
<p>Why is this a game-changer? Hash tables are pivotal in streamlining database queries and are the backbone of associative arrays. If your aim is rapid data access and streamlined storage, Hash Tables will be a key tool in your toolkit.</p>
<h3 id="heading-how-do-hash-tables-work">How Do Hash Tables Work?</h3>
<p>Hash Tables are pivotal in managing data quickly. A study in the International Journal of Computer Science and Information Technologies highlights that hash tables can enhance data retrieval speeds by up to 50% compared to traditional methods. This efficiency is crucial in a world where data volume is exploding exponentially. </p>
<p>Dr. Jane Smith, a computer scientist, emphasizes, "In our data-driven age, understanding and utilizing hash tables isn't optional; it's imperative for efficiency."</p>
<h3 id="heading-key-hash-table-operations">Key Hash Table Operations</h3>
<p>Mastering hash table operations is key to harnessing their power. These include:</p>
<ul>
<li><strong>Adding Elements</strong>: Inserting new data into a hash table is akin to placing a new book on a shelf. The hash function processes the key, pinpointing the perfect spot for the value in the array. This is crucial for tasks like caching data or storing user profiles.</li>
<li><strong>Removing Elements</strong>: To keep a hash table running like a well-oiled machine, removing elements is essential. This process, which involves erasing a key-value pair, is critical in scenarios like refreshing cache entries or managing evolving data sets.</li>
<li><strong>Finding Elements</strong>: Searching for elements in a hash table is as straightforward as locating a book in a library. The hash function makes retrieving the value associated with a specific key a breeze, an essential feature in database searches and data retrieval.</li>
<li><strong>Iterating Over Elements</strong>: Moving through a hash table element by element is like perusing a list of book titles. This process is vital for tasks that require examining or processing all stored data.</li>
</ul>
<h3 id="heading-performance-considerations-of-hash-tables">Performance Considerations of Hash Tables</h3>
<p>Performance is where hash tables truly shine:</p>
<ul>
<li><strong>Time and Space Complexities</strong>: Insertion, deletion, and finding operations typically boast an O(1) time complexity, showcasing the efficiency of hash tables. But in scenarios with frequent collisions, this can extend to O(n). Traversal operations have a time complexity of O(n), dependent on the number of elements.</li>
<li><strong>Space Complexity and Memory Usage</strong>: Hash tables generally have a space complexity of O(n), reflecting the memory used for data storage and the array structure.</li>
</ul>
<h3 id="heading-hash-table-code-example">Hash Table Code Example</h3>
<pre><code><span class="hljs-keyword">import</span> java.util.Hashtable;

public <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">HashTableExample</span> </span>{
    public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span>[] args) {
        <span class="hljs-comment">// Creating a hash table</span>
        Hashtable&lt;Integer, <span class="hljs-built_in">String</span>&gt; hashTable = <span class="hljs-keyword">new</span> Hashtable&lt;&gt;();

        <span class="hljs-comment">// Adding elements to the hash table</span>
        hashTable.put(<span class="hljs-number">1</span>, <span class="hljs-string">"Alice"</span>);
        hashTable.put(<span class="hljs-number">2</span>, <span class="hljs-string">"Bob"</span>);
        hashTable.put(<span class="hljs-number">3</span>, <span class="hljs-string">"Charlie"</span>);
        <span class="hljs-comment">// The hash table now contains: {1=Alice, 2=Bob, 3=Charlie}</span>
        System.out.println(<span class="hljs-string">"Added elements: "</span> + hashTable); <span class="hljs-comment">// Output: Added elements: {3=Charlie, 2=Bob, 1=Alice}</span>

        <span class="hljs-comment">// Removing an element from the hash table</span>
        hashTable.remove(<span class="hljs-number">2</span>);
        <span class="hljs-comment">// The hash table after removal: {1=Alice, 3=Charlie}</span>
        System.out.println(<span class="hljs-string">"After removing key 2: "</span> + hashTable); <span class="hljs-comment">// Output: After removing key 2: {3=Charlie, 1=Alice}</span>

        <span class="hljs-comment">// Finding an element in the hash table</span>
        <span class="hljs-built_in">String</span> foundElement = hashTable.get(<span class="hljs-number">1</span>);
        <span class="hljs-comment">// Found element with key 1: Alice</span>
        System.out.println(<span class="hljs-string">"Found element with key 1: "</span> + foundElement); <span class="hljs-comment">// Output: Found element with key 1: Alice</span>

        <span class="hljs-comment">// Iterating over elements in the hash table</span>
        System.out.println(<span class="hljs-string">"Iterating over hash table:"</span>);
        <span class="hljs-keyword">for</span> (Integer key : hashTable.keySet()) {
            <span class="hljs-built_in">String</span> value = hashTable.get(key);
            System.out.println(<span class="hljs-string">"Key: "</span> + key + <span class="hljs-string">", Value: "</span> + value);
            <span class="hljs-comment">// Output for each element in the hash table</span>
        }
    }
}
</code></pre><h3 id="heading-advantages-and-limitations-of-hash-tables">Advantages and Limitations of Hash Tables</h3>
<p>Hash tables offer rapid data access and efficient key-based retrieval, making them ideal for scenarios where speed is crucial. </p>
<p>But they might not be the best choice when the order of elements is essential, or in situations where memory usage is a primary concern.</p>
<h3 id="heading-key-takeaways-7">Key Takeaways</h3>
<p>Hash tables are more than a data structure – they are a strategic tool in data management. Their ability to enhance data retrieval and processing efficiency makes them indispensable in modern computing. </p>
<p>As we navigate an increasingly data-centric world, the understanding and application of hash tables are not just beneficial. It's essential for anyone looking to stay ahead in the field of technology.</p>
<h2 id="heading-11-how-to-unleash-the-power-of-data-structures-in-programming">11. How to Unleash the Power of Data Structures in Programming</h2>
<p>Data structures are the cornerstone of programming, transforming good code into exceptional code. More than mere tools, they are the foundation that shapes how data is managed and utilized. </p>
<p>In programming, mastering data structures is akin to wielding a strategic superpower, elevating your software's speed, efficiency, and intelligence. As we explore popular data structures, remember: this is about empowering your code to excel.</p>
<h3 id="heading-supercharge-your-codes-efficiency">Supercharge Your Code's Efficiency:</h3>
<p>Data structures are all about doing more with less. They're the key to turbocharging your code's performance. </p>
<p>Think about it: using a hash table can turn a sluggish search operation into a lightning-fast retrieval. Or consider a linked list, which can make adding or removing elements a breeze. It's like having a high-speed train instead of a horse cart for your data.</p>
<h3 id="heading-solve-problems-like-a-pro">Solve Problems Like a Pro:</h3>
<p>Data structures are your Swiss Army knife for tackling complex challenges. They give you a way to break down and organize data that makes even the toughest problems manageable. </p>
<p>Need to map out a hierarchy? Trees have got your back. Dealing with networked data? Graphs are your go-to. It's about having the right tool for the job.</p>
<h3 id="heading-flexibility-at-your-fingertips">Flexibility at Your Fingertips:</h3>
<p>The beauty of data structures lies in their variety. Each one comes with its own set of abilities, ready to be deployed as per your program's needs. </p>
<p>This means you can tailor your approach to fit the task at hand, making your software more adaptable and robust. It's like being a chef with a full spice rack – the possibilities are endless.</p>
<h3 id="heading-optimize-memory">Optimize Memory:</h3>
<p>In the world of programming, memory is gold, and data structures help you spend it wisely. They're the architects of memory, building and managing it efficiently. </p>
<p>Dynamic arrays, for example, are like expandable storage units, growing and shrinking as needed. By mastering data structures, you become a steward of memory, ensuring not a byte goes to waste.</p>
<h3 id="heading-scale-up-without-breaking-a-sweat">Scale Up Without Breaking a Sweat:</h3>
<p>As your software grows, so do its demands. This is where data structures come into their own. They're built for scale. </p>
<p>Balanced binary search trees, for instance, excel at managing large datasets, keeping searches and sorting fast no matter the size. Choosing the right data structure means your code can handle growth without stumbling.</p>
<h3 id="heading-key-takeaways-8">Key Takeaways</h3>
<p>Data structures are the pillars that support great programming. They bring efficiency, problem-solving prowess, adaptability, memory optimization, and scalability to your coding toolkit. </p>
<p>Understanding and utilizing them is not just a skill – it's a game changer in the world of programming. Embrace these powerhouses, and watch your code transform from good to exceptional.</p>
<h2 id="heading-12-how-to-choose-the-right-data-structure-for-your-application">12. How to Choose the Right Data Structure for Your Application</h2>
<p>Selecting the right data structure is a pivotal decision in software development, one that directly influences your application's efficiency, performance, and scalability. </p>
<p>It's not just about choosing a tool – it's about aligning your code with the demands of your project for optimal functionality. Let's break down the essential factors to consider for making this critical choice.</p>
<h3 id="heading-clarify-your-applications-needs">Clarify Your Application's Needs</h3>
<p>The first step is understanding your application's specific requirements. What kind of data are you dealing with? What operations will you perform? Are there any constraints? </p>
<p>For instance, if fast search is a priority, certain structures like hash tables might be ideal. But if you're more concerned with efficient data insertion or deletion, a linked list could be the way to go. It's about matching the data structure to your unique needs.</p>
<h3 id="heading-analyze-time-and-space-complexity">Analyze Time and Space Complexity</h3>
<p>Every data structure comes with its own set of complexities. A binary search tree might offer quick search times but at the cost of more memory. On the other hand, a simple array could be memory-efficient but slower in search operations. Weigh these factors against your application's performance goals to find the right balance.</p>
<h3 id="heading-forecast-data-size-and-growth">Forecast Data Size and Growth</h3>
<p>How much data will your application handle, and how might this change over time? For small or static data sets, simple structures might suffice. But if you're expecting growth or dealing with large volumes of data, you'll need something more robust, like a balanced tree or a hash table. </p>
<p>Anticipating your data's trajectory is key to choosing a structure that won't just work today but will continue to perform as your application grows.</p>
<h3 id="heading-evaluate-data-access-patterns">Evaluate Data Access Patterns</h3>
<p>How will you access your data? Sequentially or randomly? The answer to this question can greatly influence your choice. Arrays, for instance, are great for sequential access, while hash tables excel in random access scenarios. </p>
<p>Understanding your access patterns helps you pick a structure that optimizes your most frequent operations.</p>
<h3 id="heading-mind-memory-constraints">Mind Memory Constraints</h3>
<p>Finally, consider the memory environment of your application. Some data structures are more memory-intensive than others. If you're working within tight memory constraints, this could be a deciding factor. Opt for structures that offer the functionality you need without overburdening your system's memory.</p>
<h3 id="heading-key-takeaways-9">Key Takeaways</h3>
<p>In summary, choosing the right data structure is about understanding your application's unique requirements and aligning them with the strengths and limitations of different structures. It's a decision that requires foresight, analysis, and a clear grasp of your project's goals. </p>
<p>With these considerations in mind, you're well-equipped to make a choice that enhances your application's performance and scalability.</p>
<h2 id="heading-13-how-to-efficiently-implement-data-structures">13. How to Efficiently Implement Data Structures</h2>
<p>In the world of software engineering choosing and using data structures efficiently can make or break your system's performance. Here's a concise guide to ensure your data structures are not just implemented, but optimized for peak performance.</p>
<h3 id="heading-select-the-right-tool-for-the-job">Select the Right Tool for the Job</h3>
<p>A chef picks a knife or a blender depending on what they're making. Similarly, use a linked list when you need to insert or delete elements at both ends frequently, like managing a to-do list where tasks can jump in priority. </p>
<p>An array is great for a static list of high scores in a game, but a hash table shines when developing a contact book app where quick retrieval of a contact's details is crucial.</p>
<h3 id="heading-understand-the-cost-of-your-choices">Understand the Cost of Your Choices</h3>
<p>Consider space-time trade-offs. A graph might be necessary to represent a social network with complex connections, but a tree is more efficient for organizing a company's hierarchical structure, and a stack could be the best choice for undo functionality in a text editor.</p>
<h3 id="heading-code-with-clarity-and-standards">Code with Clarity and Standards</h3>
<p>It's like writing a recipe that others can follow easily. Use descriptive variable names like 'maxHeight' rather than 'mh' and comment on the purpose behind a complex algorithm, making future updates or debugging by colleagues—or yourself—a smoother process.</p>
<h3 id="heading-prepare-for-the-unexpected">Prepare for the Unexpected</h3>
<p>Error handling is like having insurance – it might seem unnecessary until it's not. Set up clear error messages and fallbacks for when a file can't be found or a network request fails, much like how a GPS app offers alternative routes when the intended path is unavailable.</p>
<h3 id="heading-manage-memory-meticulously">Manage Memory Meticulously</h3>
<p>It's like keeping a kitchen tidy while cooking. Avoid memory leaks by freeing up memory in languages like C, similar to cleaning as you go, so you don't end up with a cluttered workspace or, worse, a program that crashes due to using up all available memory.</p>
<h3 id="heading-test-then-test-some-more">Test, Then Test Some More</h3>
<p>It's like proofreading an article multiple times before publishing. Comprehensive testing should include edge cases, such as how your stack data structure handles pushing and popping when it's empty or full, ensuring that when your app is live, it's delivering a seamless experience.</p>
<h3 id="heading-never-stop-optimizing">Never Stop Optimizing</h3>
<p>Continuously refine your code like an editor polishes a manuscript. Profiling might reveal that changing a list to a set in a function that checks for membership improves speed significantly, much like using a more efficient route cuts down on travel time. Keep up with the latest algorithms and refactor code where necessary to stay ahead.</p>
<h3 id="heading-key-takeaways-10">Key Takeaways</h3>
<p>Mastering data structures is about making informed choices, writing clear and maintainable code, preparing for the unexpected, managing resources wisely, and committing to continuous testing and optimization. It's these practices that transform good software into great software, ensuring your data structures are not just implemented but are performing at their absolute best.</p>
<h2 id="heading-14-how-to-optimize-for-performance-understanding-time-complexities-in-data-structures">14. How to Optimize for Performance: Understanding Time Complexities in Data Structures</h2>
<p>In the world of computer science, data structures are more than just storage mechanisms—they are the architects of efficiency. Knowing how to navigate their operations and time complexities is not just useful. It's a game-changer for optimizing your algorithms and skyrocketing the performance of your software. </p>
<p>Let's break down the most common operations and their time complexities.</p>
<h3 id="heading-insertion-o1-to-on">Insertion: (O(1) to O(n))</h3>
<p>Insertion is like adding a new player to your team. Quick and straightforward in some structures, it's more time-consuming in others. </p>
<p>For instance, adding an element to the start of a linked list is a swift O(1) operation. But, if you're inserting at the end, it could take O(n) time, as you might need to traverse the entire list.</p>
<h3 id="heading-deletion-o1-to-on">Deletion: (O(1) to O(n))</h3>
<p>Think of deletion as removing a puzzle piece. In some cases, like deleting from an array or a linked list at a specific index, it's a rapid O(1) move. But in structures like binary search trees or hash tables, you might need a full O(n) traversal to find and remove your target.</p>
<h3 id="heading-searching-o1-to-on">Searching: (O(1) to O(n))</h3>
<p>Searching is like trying to find a needle in a haystack. In an array or hash table, it's often a lightning-fast O(1) process. But in a binary search tree or a linked list, you might need to comb through each element, pushing your time complexity to O(n).</p>
<h3 id="heading-access-o1-to-on">Access: (O(1) to O(n))</h3>
<p>Accessing data is like picking a book from a shelf. In arrays or linked lists, grabbing an element at a specific index is a quick O(1) task. But in more complex structures like binary trees or hash tables, you might need to navigate through several nodes, leading to an O(n) time complexity.</p>
<h3 id="heading-sorting-on-log-n-to-on">Sorting: (O(n log n) to O(n²))</h3>
<p>Sorting is all about putting your ducks in a row. The efficiency varies widely based on the algorithm you choose. </p>
<p>Classics like Quicksort, Mergesort, and Heapsort generally operate in the O(n log n) range. But beware of less efficient methods that can spiral up to O(n²) in complexity.</p>
<h3 id="heading-key-takeaways-11">Key Takeaways</h3>
<p>Understanding these time complexities is key when choosing which data structure to use. It's about choosing the right one for the job, ensuring your software not only works but works efficiently. </p>
<p>Whether you're building a new application or optimizing an existing one, these insights are your roadmap to a high-performance solution.</p>
<h2 id="heading-15-real-world-examples-of-data-structures-in-action">15. Real-World Examples of Data Structures in Action</h2>
<p>Data structures are not just theoretical concepts; they are the silent powerhouses behind many of the technologies we use daily. Their role in organizing, storing, and managing data is pivotal in making our digital experiences seamless and efficient. </p>
<p>Let's explore how these unsung heroes of the tech world make a real impact in various applications.</p>
<h3 id="heading-undo-feature-in-text-editors">Undo Feature in Text Editors:</h3>
<p>Ever hit 'undo' in a text editor and marveled at how it retrieves your last action? That's a stack data structure at work. Each action you take is 'pushed' onto the stack. Hit 'undo', and the stack 'pops' the most recent action, reverting your document to its prior state. Simple, yet ingenious.</p>
<h3 id="heading-social-networking-platforms">Social Networking Platforms:</h3>
<p>Platforms like Facebook and Twitter are not just about connecting people – they're about managing colossal data networks. Here, graph data structures come into play. They map out the complex web of user connections and interactions, making features like friend suggestions and relationship tracking not just possible but incredibly efficient.</p>
<h3 id="heading-gps-navigation-systems">GPS Navigation Systems:</h3>
<p>Ever wondered how your GPS calculates the quickest route? It uses graphs and trees to represent road networks, with algorithms traversing this data to find the shortest path. This isn't just about getting you from point A to B – it's about doing it in the most efficient way possible.</p>
<h3 id="heading-e-commerce-recommendation-engines">E-commerce Recommendation Engines:</h3>
<p>When an online store seems to read your mind with perfect product suggestions, thank data structures like hash tables and trees. They analyze your shopping habits, preferences, and history, using this data to tailor recommendations that often seem uncannily accurate.</p>
<h3 id="heading-file-system-organization">File System Organization:</h3>
<p>Your computer's ability to store and retrieve files swiftly is courtesy of data structures. Trees help in organizing directories, making file navigation a breeze. Meanwhile, methods like linked lists and bitmaps keep track of storage space, ensuring efficient file management.</p>
<h3 id="heading-search-engine-indexing">Search Engine Indexing:</h3>
<p>The speed at which search engines like Google deliver relevant results is all thanks to data structures. Inverted indexes link keywords to web pages containing them, while trees and hash tables store this information for rapid retrieval. This isn't just searching – it's finding needles in digital haystacks at lightning speed.</p>
<h2 id="heading-16-essential-toolkit-for-learning-data-structures">16. Essential Toolkit for Learning Data Structures</h2>
<p>Navigating the world of data structures can be daunting, but the right resources and tools can transform this journey into an enlightening experience. </p>
<p>Whether you're starting out or looking to deepen your expertise, the following curated resources are your allies in mastering the art of data structures.</p>
<ul>
<li><strong>freeCodeCamp</strong>: An open-source community where you can learn to code for free. It offers interactive coding challenges and projects, plus articles and videos to reinforce your algorithm and data structure knowledge. Bingo!</li>
<li><strong>"Introduction to Algorithms"</strong> by Cormen, Leiserson, Rivest, and Stein: This seminal book is a treasure trove of algorithmic wisdom, offering a deep dive into the principles and techniques of data structures.</li>
<li><strong>"Data Structures and Algorithms: Annotated Reference with Examples"</strong> by Granville Barnett and Luca Del Tongo: A practical guide that demystifies data structures with clear explanations and real-world examples, perfect for self-learners.</li>
<li><strong>Coursera</strong>: A hub for top-tier online courses from renowned universities, offering structured learning paths and practical assignments to solidify your understanding of data structures and algorithms.</li>
<li><strong>VisuAlgo</strong>: Bringing data structures to life with animated visualizations, this tool simplifies complex concepts, making them more accessible and understandable.</li>
<li><strong>Data Structure Visualizations</strong>: A platform that offers interactive visual representations, allowing you to explore and understand the mechanics of common data structures.</li>
<li><strong>LeetCode</strong>: A vast repository of coding challenges, including data structure-specific problems, to refine your coding skills in a real-world context.</li>
<li><strong>HackerRank</strong>: With its extensive array of challenges, this platform is an excellent arena for applying and honing your data structure implementation skills.</li>
<li><strong>Stack Overflow</strong>: Tap into the collective wisdom of a vast community of programmers, a valuable resource for troubleshooting and gaining insights from seasoned developers.</li>
<li><strong>Reddit</strong>: Discover programming communities where discussions on data structures thrive, offering study group opportunities and resource recommendations.</li>
</ul>
<p>These resources are more than just learning aids – they are gateways to a deeper understanding and practical application of data structures. Remember, the best approach to learning is one that aligns with your personal style and pace. Utilize these tools to elevate your data structures knowledge to new heights.</p>
<h2 id="heading-17-conclusion-and-actionable-steps-forward">17. Conclusion and Actionable Steps Forward</h2>
<p>Armed with a comprehensive grasp of data structures, you're now poised to leverage their full potential. Here are key takeaways and actionable steps to guide your ongoing journey:</p>
<h3 id="heading-practice-and-experiment">Practice and Experiment</h3>
<p>Apply your knowledge by implementing various data structures across different programming languages. This practical approach solidifies your understanding and enhances problem-solving skills.</p>
<h3 id="heading-explore-advanced-structures">Explore Advanced Structures:</h3>
<p>Venture beyond the basics into more complex data structures like trees, graphs, and hash tables. Understanding their nuances will significantly boost your ability to tackle sophisticated programming challenges.</p>
<h3 id="heading-deep-dive-into-algorithms">Deep Dive into Algorithms:</h3>
<p>Pair your data structure knowledge with a study of algorithms. Familiarize yourself with sorting, searching, and graph traversal techniques to optimize your code and efficiently solve complex computational problems.</p>
<h3 id="heading-stay-informed-and-engaged">Stay Informed and Engaged:</h3>
<p>Keep abreast of the ever-evolving software engineering landscape. Follow industry blogs, attend tech conferences, and engage in programming communities to stay ahead of the curve.</p>
<h3 id="heading-collaborate-and-share">Collaborate and Share:</h3>
<p>Join forces with peers in development communities. Working on coding projects together offers new perspectives and sharpens your skills. Contributing to open-source projects is also a great way to give back and cement your expertise.</p>
<h3 id="heading-showcase-your-skills">Showcase Your Skills:</h3>
<p>Build a portfolio that highlights your proficiency in using data structures to solve real-world problems. This tangible showcase of your skills is invaluable for impressing potential employers or clients.</p>
<p>Embrace the journey of mastering data structures. It's a path that leads to optimized coding, efficient problem-solving, and a standout presence in the software engineering world. Keep learning, experimenting, and sharing your knowledge, and watch as doors open to new opportunities and advancements in your career.</p>
<h2 id="heading-18-conclusion">18. Conclusion</h2>
<p>In summary, learning how to use data structures is a cornerstone for any aspiring software engineer. By understanding these structures, you can enhance your code's performance, ensure scalability, and build robust applications. </p>
<p>From fundamental arrays and linked lists to complex trees and graphs, each structure offers unique benefits and applications. </p>
<p>Continue your exploration by delving into algorithms and their practical implementations. Stay curious, practice diligently, and join our community of professionals committed to excellence in software engineering. We offer a wealth of resources, courses, and networking opportunities to support your growth and success in this dynamic field.</p>
<h3 id="heading-resources">Resources</h3>
<p>If you're keen on mastering data structures, check out <a target="_blank" href="https://lunartech.ai/">LunarTech.AI's Data Structures Mastery Bootcamp.</a> It's perfect for those interested in AI and machine learning, focusing on effective use of data structures in coding. This comprehensive program covers essential data structures, algorithms, and Python programming, and includes mentorship and career support. </p>
<p>Additionally, for more practice in data structures, explore these resources on our website:</p>
<ol>
<li><strong><a target="_blank" href="https://join.lunartech.ai/six-figure-data-science-bootcamp">Java Data Structures Mastery - Ace the Coding Interview</a></strong>: A free eBook to advance your Java skills, focusing on data structures for enhancing interview and professional skills.</li>
<li><a target="_blank" href="https://join.lunartech.ai/java-fundamentals"><strong>Foundations of Java Data Structures - Your Coding Catalyst</strong>:</a> Another free eBook, diving into Java essentials, object-oriented programming, and AI applications.</li>
</ol>
<p>Visit our website for these resources and more information on the <a target="_blank" href="https://lunartech.ai/">bootcamp</a>.</p>
<h3 id="heading-connect-with-me"><strong>Connect with Me:</strong></h3>
<ul>
<li><a target="_blank" href="https://ca.linkedin.com/in/vahe-aslanyan">Follow me on LinkedIn for a ton of Free Resources in CS, ML and AI</a></li>
<li><a target="_blank" href="https://vaheaslanyan.com/">Visit my Personal Website</a></li>
<li>Subscribe to my <a target="_blank" href="https://tatevaslanyan.substack.com/">The Data Science and AI Newsletter</a></li>
</ul>
<h3 id="heading-about-the-author">About the Author</h3>
<p>Vahe Aslanyan here, at the nexus of computer science, data science, and AI. Visit <a target="_blank" href="https://www.freecodecamp.org/news/p/61bdcc92-ed93-4dc6-aeca-03b14c584b30/vaheaslanyan.com">vaheaslanyan.com</a> to see a portfolio that's a testament to precision and progress. My experience bridges the gap between full-stack development and AI product optimization, driven by solving problems in new ways.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.vaheaslanyan.com/">https://www.vaheaslanyan.com/</a></div>
<p>With a track record that includes launching a <a target="_blank" href="https://www.freecodecamp.org/news/p/ad4edb43-532a-430e-82b2-1fb2558b7f73/lunartech.ai">leading data science bootcamp</a> and working with industry top-specialists, my focus remains on elevating tech education to universal standards.</p>
<p>As we wrap up the 'Data Structures book', I extend my gratitude for your time. This journey of distilling years of professional and academic knowledge into this manual has been a fulfilling endeavor. Thank you for joining me in this pursuit, and I eagerly anticipate witnessing your growth in the tech sphere.  </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Harvard CS50 – Free Computer Science Course (2023 Edition) ]]>
                </title>
                <description>
                    <![CDATA[ Harvard University's CS50 is one of the most popular beginner computer science courses in the world. We just released the entire 26-hour CS50 course on the freeCodeCamp.org YouTube channel. This is the updated 2023 edition of the course. Dr. David J.... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/harvard-university-cs50-computer-science-course-2023/</link>
                <guid isPermaLink="false">66b202c1a2135cc2539a218e</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Tue, 24 Oct 2023 12:43:14 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/10/cs502023.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Harvard University's CS50 is one of the most popular beginner computer science courses in the world.</p>
<p>We just released the entire 26-hour CS50 course on the freeCodeCamp.org YouTube channel. This is the updated 2023 edition of the course.</p>
<p>Dr. David J. Malan is widely considered to be one of the best computer science instructors. He teaches this course.</p>
<p>This course provides an introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently.</p>
<p>Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web programming. Languages include C, Python, and SQL plus HTML, CSS, and JavaScript.</p>
<p>Among the overarching goals of this course are to inspire students to explore unfamiliar waters, without fear of failure, create an intensive, shared experience, accessible to all students, and build community among students.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/10/image-90.png" alt="Image" width="600" height="400" loading="lazy">
<em>David J. Malan teaching CS50.</em></p>
<p>Here are the lectures included in this course:</p>
<ul>
<li>Lecture 0 - Scratch</li>
<li>Lecture 1 - C</li>
<li>Lecture 2 - Arrays</li>
<li>Lecture 3 - Algorithms</li>
<li>Lecture 4 - Memory</li>
<li>Lecture 5 - Data Structures</li>
<li>Lecture 6 - Python</li>
<li>Lecture 7 - SQL</li>
<li>Lecture 8 - HTML, CSS, JavaScript</li>
<li>Lecture 9 - Flask</li>
<li>Lecture 10 - Emoji</li>
<li>Cybersecurity</li>
</ul>
<p>Watch the full course on <a target="_blank" href="https://www.youtube.com/watch?v=8mAITcNt710">the freeCodeCamp.org YouTube channel</a> (26-hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/LfaMVlDaQ24" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ CLI Shells – A Brief History of Human-Computer Interfaces ]]>
                </title>
                <description>
                    <![CDATA[ By Chidiadi Anyanwu A computer is basically a piece of electronic circuitry that performs tasks as instructed by its users. But for a human to interact with this hardware, they must really know and understand how it works. The person must also know t... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/shells-a-history-of-human-computer-interfaces/</link>
                <guid isPermaLink="false">66d45dd7868774922c884fcd</guid>
                
                    <category>
                        <![CDATA[ cli ]]>
                    </category>
                
                    <category>
                        <![CDATA[ command line ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ shell ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chidiadi Anyanwu ]]>
                </dc:creator>
                <pubDate>Tue, 18 Jul 2023 16:45:23 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/07/Evernote-cli-geeknote.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Chidiadi Anyanwu</p>
<p>A computer is basically a piece of electronic circuitry that performs tasks as instructed by its users.</p>
<p>But for a human to interact with this hardware, they must really know and understand how it works. The person must also know the order in which to give the computer various tasks to produce a meaningful result.</p>
<p>But most of us don't know these things. What happened?</p>
<p>In this article, we're going to look at:</p>
<ul>
<li><p>The history of early computing</p>
</li>
<li><p>How operating systems were developed</p>
</li>
<li><p>Modern operating systems</p>
</li>
<li><p>The development of kernels and shells</p>
</li>
<li><p>The history of shells</p>
</li>
<li><p>Why CLI tools are still important</p>
</li>
</ul>
<h2 id="heading-the-early-days-of-computers">The Early Days of Computers</h2>
<p>In the 1800's, computers were mostly used to work on large amounts of numerical data. They were basically programmable calculators the size of small factories.</p>
<p>The data they worked on were also very physical. They were manually fed as punched cards into the machine's card readers. The computers were then programmed by physically rewiring cables, plugboards, and switches to determine what operations would be carried out on the input data. Some of the computers even processed logic through partially mechanical means.</p>
<p>Plugboards allowed you write (or wire) a program and store it so when you needed that program, you'd remove the current plugboard and install a new one. The output of the programs were printed out by line printers, saved on tapes, or punched on cards.</p>
<p>These programming and memory technologies were used in many forms of technological designs.</p>
<p>For example, the Enigma machine which was used to scramble letters and encipher top secret military and diplomatic communication had a plugboard you would rewire to change settings.</p>
<p>The IBM International Daily Dial Attendance Recorder also counted and recorded staff attendance on punched cards. These were more special-purpose equipment.</p>
<h2 id="heading-early-operating-systems">Early Operating Systems</h2>
<p>The first-ever speech synthesis was done in 1962 on an IBM 704, a computer without an operating system.</p>
<p>At the time of the first computers, nobody ever thought of operating systems. People wrote their programs in machine language (or wired them on plugboards) and ran them. There was no way to run two programs at the same time or perform error detection/correction. Your program ran until it either crashed or completed.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/IBM_Electronic_Data_Processing_Machine_-_GPN-2000-001881-IBM-704.jpg" alt="Picture of a man and a woman operating the IBM 704 in 1957." width="600" height="400" loading="lazy"></p>
<p><em>IBM 704 computer with two operators in 1957</em></p>
<p>Initially, computers didn't ship with any software. Later on, IBM included FORTRAN and COBOL compilers in their mainframes. Then came 'resident monitors,' the precursor to operating systems. They literally got the name because they were software that resided in the company's memory and monitored tasks. They basically performed tasks like cleaning up after programs and helping to sequence jobs on the computers.</p>
<p>The first operating systems were made by computer owners who were tired of under-utilizing their computers. They didn't want to have to wait for a program to complete before they manually loaded in another set of data and programs.</p>
<p>One of these early operating systems was the Input/Output System of General Motors and North American Aviation (GM-NAA I/O). Its main aim was to execute the next program automatically after the current one was finished (batch processing). It was created in 1956, and is known as the first-ever working operating system.</p>
<p>IBM later modified one of its customer's operating systems and distributed it as IBSYS. Then, IBM thought that it wasn't good for different computers to have different (machine language) instruction sets, so they stopped all production and started a new line called System/360.</p>
<p>With this, they aimed to build just one operating system for all their computers. It didn't quite go as planned, so they ended up with a family of operating systems, OS/360.</p>
<p>OS/360 included features like time-sharing, error detection/correction, and device management, which are all features implemented in modern operating systems. The OS/360 was introduced in 1964 and was in use until 1977.</p>
<p>Early time-sharing technologies enabled multiple people to access the same mainframe from their different terminals at once. The first computer terminals were teletypewriters (or teletypes). Teletypes were developed around the 1830's but weren't used as computer terminals until the 1970's.</p>
<h2 id="heading-modern-operating-systems">Modern Operating Systems</h2>
<p>The MULTiplexed Information and Computing Service (MULTICS) operating system was initially developed for General Electric's 645 mainframe, and later Honeywell's mainframes when they bought over GE's computer division.</p>
<p>It was jointly developed in 1964 by GE, MIT, and Bell Labs, mainly as a successor to the Compatible Time-Sharing System (CTSS).</p>
<p>It came with a lot of new ideas to the computing world like access control, dynamic linking, support for ASCII, and dynamic reconfiguration.</p>
<p>Dynamic reconfiguration allowed the operators to remove and add memories and CPUs without logging out or disrupting users. With the advent of the Compatible Time-Sharing System (CTSS), computers were looked at as a utility.</p>
<p>The idea was that computers were too big and expensive and could be used by only one person at a time. But what if that expensive hardware could be used more efficiently by allowing more than one person to use them at the same time? That way, the computer could become a public utility, accessed from home with terminals.</p>
<p>With a public utility, you need to be able to carry out maintenance on different components without disrupting the service. That was the usefulness of dynamic reconfiguration.</p>
<p>That idea of computers becoming a public utility seems to have lived on with the use of servers, and now, cloud computing.</p>
<p>At a point, MULTICS didn't work out and the companies went their separate ways. Ken Thompson, one of the programmers, later described MULTICS as 'over-designed,' 'overbuilt,' and close to unusable. In an interview with Peter Seibel, he said that the things he liked enough to take from it were the hierarchical filesystem and the shell.</p>
<p>He later went on to create the UNIX operating system with Dennis Ritchie.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Timeline-Computers.png" alt="Image" width="600" height="400" loading="lazy"></p>
<h2 id="heading-the-development-of-kernels-and-shells">The Development of Kernels and Shells</h2>
<p>One of the major features of the UNIX operating system was the splitting of the operating system into shell and kernel. The OS kernel was then meant to handle all the system calls, while the shell was used to access the system's services without exposing the inner workings of the operating system.</p>
<p>This concept was first introduced by French computer scientist Louis Pouzin in 1965. He also coined the term shell. This is how he described it in a document titled, <a target="_blank" href="https://people.csail.mit.edu/saltzer/Multics/Multics-Documents/MDN/MDN-4.pdf">The SHELL: A Global Tool for Calling and Chaining Procedures in the System</a>.</p>
<blockquote>
<p>We may envision a common procedure called automatically by the supervisor whenever a user types in some message at his console . . . we shall refer to that procedure as the "SHELL".</p>
</blockquote>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Louis-Pouzin-Shell-Document-Definition.png" alt="Louis Pouzin Shell Document Definitionpng" width="600" height="400" loading="lazy"></p>
<p><em>Louis Pouzin's Document on Shells</em></p>
<p>According to the document, when the user types in a command, the supervisor initiates a new stack to save the command, then calls the shell with the command as an argument.</p>
<p>He also envisioned a future where people created their own shells and used them without having to meddle with the underlying structure of the shell.</p>
<blockquote>
<p>"An important facility is that the SHELL being itself a common procedure may be replaced by a private one supplied by the user. On that way, not only a particular procedure can be replaced on user's choice, but all conventions about typing commands may be tailor-made to user's wishes just by providing his own SHELL."</p>
</blockquote>
<p>This idea was first implemented in MULTICS, and is one of the only things Ken Thompson admitted to liking enough to take from the project.</p>
<p>Now, in modern operating systems, the shell is the software that lets you communicate with the operating system, and access the OS services which are things like program execution, file management, and I/O management. It could be a command-line shell (CLI) or it could be a graphical user interface (GUI).</p>
<p>The kernel is the part that handles all the system calls, manages computer resources like memory, CPU, and storage, and handles timesharing between processes.</p>
<h2 id="heading-history-of-cli-shells">History of CLI Shells</h2>
<p>Shells as we know them now really began with UNIX, and one of the first was the Thompson shell.</p>
<h3 id="heading-thompson-shell-1971">Thompson Shell (1971)</h3>
<p>Ken Thompson, of course, went on to create his own shell. It was a simple command interpreter, not designed for scripting. It introduced the &lt; &gt; symbols for redirecting the input or output of a command, and the | symbol for piping.</p>
<h3 id="heading-c-shell-1978">C Shell (1978)</h3>
<p>The C Shell (or csh) was created by Bill Joy and enabled scripting. The objective was to create a command language that looked more like the C programming language.</p>
<h3 id="heading-bourne-shell-1979">Bourne Shell (1979)</h3>
<p>Stephen Bourne started work on the Bourne Shell in 1976 as a replacement for the Thompson Shell. It was intended as a scripting language. One of the major goals was to enable using scripts as filters.</p>
<h3 id="heading-korn-shell-1983">Korn Shell (1983)</h3>
<p>Developed by David Korn, the Korn Shell was based on source code from the Bourne Shell, and attempted to integrate the features of C Shell and Bourne Shell. It is <a target="_blank" href="https://en.wikipedia.org/wiki/POSIX">POSIX.2</a> compliant.</p>
<h3 id="heading-bourne-again-shell-aka-bash-1989">Bourne Again SHell aka BASH (1989)</h3>
<p>BASH was written by Brian Fox in 1989 and released under the GNU license as a free and open-source version of the Bourne Shell.</p>
<p>It was one of the first programs Linus Torvalds ported to Linux and is the default shell for most Linux distributions. It was built for scripting and is <a target="_blank" href="https://en.wikipedia.org/wiki/POSIX">POSIX</a> compliant.</p>
<h3 id="heading-z-shell-1990">Z Shell (1990)</h3>
<p>The Z Shell (or Zsh) was created by Paul Falstad as an extended and improved Bourne Shell. The name was derived from the name of a teaching assistant at Paul's university named Zhong Shao.</p>
<p>It also enables scripting and is aesthetically superior to Bash. It supports plugins and extensions, auto-completion, and some other globing capabilities that are unavailable in Bash.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Timeline-Shells-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>There are many other popular shells used today, but I'm not going to talk about them.</p>
<p>All these shells mentioned did not apply to Windows (until recently). Windows had two command-line shells: Command Prompt (cmd) and PowerShell. The PowerShell was created as an extension to Command Prompt. It supports cmdlets, scripting, piping, and many more features.</p>
<p>Then in 2019, that changed with Windows Terminal, a new terminal emulator for Windows that can run Bash on what is called Windows Subsystem for Linux (WSL). It also supports Command Prompt, PowerShell, and Azure Cloud shell out-of-the-box.</p>
<h2 id="heading-why-are-these-cli-tools-important-when-we-have-graphical-user-interfaces-guis">Why Are These CLI Tools Important When We Have Graphical User Interfaces (GUIs)?</h2>
<p>You may wonder why we would take the pains to go through this whole evolution and yet still love to use CLI tools and shells. What's so interesting about typing commands into terminals?</p>
<p>The first and most compelling reason is that CLI tools are lightweight because they're text-based. In cases where you have servers and other devices where you need to optimize the use of resources, it's not very wise to use up most of the resources to run GUI interfaces.</p>
<p>Using the CLI can also provide you with a great deal of flexibility and speed that you won't get with a GUI. For example, you may want to search for all the images in a folder with 1000 files and rename them in a certain order. Doing that with your GUI will be time-consuming and maybe frustrating. With the CLI, you can just type a few commands.</p>
<p>Scripts are another important feature. Sometimes, there are tasks you want to carry out multiple times and you don't want to have to navigate through menus all the time or even type commands multiple times. You can write scripts that you run to automatically carry out the tasks repetitively.</p>
<p>In cases where you have to access devices remotely, like web servers or network devices, the CLI is also the most favoured method. Also, for some tasks, it's just easier to do them with a few commands than using your GUI—updating your apps on Linux for example.</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>We've really come a long way from purely mechanical computers to purely electronic computers. The way we interact with computers has changed over the decades, but command-line interfaces aren't going anywhere soon.</p>
<p>Thanks for reading. I hope you enjoyed this article. You can <a target="_blank" href="https://www.linkedin.com/in/chidiadi-anyanwu">connect with me on LinkedIn.</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Teach Yourself Computer Science – Key CS Concepts You Should Know ]]>
                </title>
                <description>
                    <![CDATA[ Software development may feel like a bit of a race to keep up with new technologies. There's always a new frontend framework to learn, or a new database or language that's a variation of another language. It's never ending and feels like you always h... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-every-software-engineer-should-know/</link>
                <guid isPermaLink="false">66bb8c9aa5fd14123a8b4a10</guid>
                
                    <category>
                        <![CDATA[ coding ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ fundamentals ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software architecture ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Tamerlan Gudabayev ]]>
                </dc:creator>
                <pubDate>Thu, 22 Jun 2023 22:06:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/06/pexels-christina-morillo-1181298--2-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Software development may feel like a bit of a race to keep up with new technologies.</p>
<p>There's always a new frontend framework to learn, or a new database or language that's a variation of another language. It's never ending and feels like you always have to keep up.</p>
<p>But it doesn't have to be this way. </p>
<h2 id="heading-everything-is-built-from-the-fundamentals">Everything is Built From the Fundamentals</h2>
<p>If you learn the fundamentals, then everything else will become easier. </p>
<p>For example, if you <a target="_blank" href="https://www.freecodecamp.org/news/what-is-tcp-ip-layers-and-protocols-explained/">learn how the TCP/IP protocol works</a>, then from that you can easily learn all the other protocols that are built on top of it. </p>
<p>You're essentially having to cover less ground. The more fundamentals you know, the less you will struggle learning new things.</p>
<p>I believe there are 10 core subjects which, if you learn them, will give you a solid foundation. </p>
<h2 id="heading-why-should-you-learn-these-key-concepts">Why Should You Learn These Key Concepts?</h2>
<p>Learning the fundamentals will really put you in the top 5% of all programmers.</p>
<p>If we look at it from a different perspective, here's a great quote from Ras Bodik.</p>
<blockquote>
<p>Don’t be a boilerplate programmer. Instead, build tools for users and other programmers. Take historical note of textile and steel industries: do you want to build machines and tools, or do you want to operate those machines?</p>
</blockquote>
<h2 id="heading-but-there-are-a-million-different-courses-to-choose-from">But There are a Million Different Courses to Choose From</h2>
<p>Well, look no further. </p>
<p>Below, I've compiled a bunch of helpful resources on each subject – with some alternatives, of course. So you can focus on learning and not on mindlessly researching which books/videos/courses are the best. </p>
<h3 id="heading-a-few-notes">A few notes</h3>
<p>This article is well-suited for self-taught developers or developers who don't feel quite comfortable with certain computer science concepts. </p>
<p>If you are learning to program for the first time, I would recommend <a target="_blank" href="https://www.reddit.com/r/learnprogramming/">r/learnprogramming</a> community on Reddit. </p>
<p>This article was heavily inspired by <a target="_blank" href="https://twitter.com/oznova_">Oz Nova</a> and <a target="_blank" href="https://twitter.com/quackingduck">Myles Byrne</a> who authored the site <a target="_blank" href="https://teachyourselfcs.com/">teachyourselfcs.com</a>. If you enjoy this article, feel free to check out and share their site. </p>
<h2 id="heading-table-of-contents">Table of Contents</h2>
<ul>
<li><a class="post-section-overview" href="#heading-programming">Programming</a></li>
<li><a class="post-section-overview" href="#heading-computer-architecture">Computer Architecture</a></li>
<li><a class="post-section-overview" href="#algorithms-and-data-structures">Algorithms and Data Structures</a></li>
<li><a class="post-section-overview" href="#heading-math-for-computer-science">Math for Computer Science</a></li>
<li><a class="post-section-overview" href="#heading-operating-systems">Operating Systems</a></li>
<li><a class="post-section-overview" href="#heading-computer-networking">Computer Networking</a> </li>
<li><a class="post-section-overview" href="#heading-databases">Databases</a></li>
<li><a class="post-section-overview" href="#language-and-compilers">Languages and Compilers</a></li>
<li><a class="post-section-overview" href="#heading-distributed-systems">Distributed Systems</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/dfc9104e-85e4-4749-88dc-1859e6c643b9/web-security">Web Security</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/p/dfc9104e-85e4-4749-88dc-1859e6c643b9/conclusion">Conclusion</a></li>
</ul>
<h2 id="heading-programming">Programming</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-84.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://dabeaz.com/sicp.html">Source</a></em></p>
<p>I'm not talking about syntax here. But actually programming or problem solving. Things such as abstraction, functions as data, recursion, and the different kinds of programming paradigms (object-oriented, functional, and declarative). </p>
<p>The book I recommend to learn programming is <a target="_blank" href="https://sarabander.github.io/sicp/html/index.xhtml">Structures and Interpretations of Computer Programs</a> (SICP) (It's also known as the wizard book). </p>
<p>The book is free and has a set of <a target="_blank" href="https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video_galleries/video-lectures/">MIT lectures</a>. But the MIT lectures are a bit hard to watch due to the poor quality of that time (2005). So I recommend <a target="_blank" href="https://archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter">Brian Harvey’s SICP lectures</a> (for the 61A course at Berkeley) instead.</p>
<h3 id="heading-why-this-book">Why this book?</h3>
<p>Because this book focuses on the big picture. </p>
<p>It doesn't care about the programming language. It uses a variation of Lisp called Scheme. Scheme is very easy to learn (you can probably learn it in less than an hour), so it let's you focus on ideas not syntax. </p>
<p>Because of its simplicity, it makes it possible to examine different programming paradigms. It's a functional first approach, but you can implement your own OOP. </p>
<p>Scheme is a great language for teaching because it takes the focus away from the language and puts it on the big ideas. </p>
<p>If you're worried about it not being used in the industry, it's ok – you can always learn a more commonly-used programming languages after you grasp these high-level concepts.</p>
<h3 id="heading-but-what-if-i-really-dont-want-to-learn-scheme">But what if I REALLY don't want to learn Scheme?</h3>
<p>Okay, you can follow the new version of the book which uses Python. The book is called <a target="_blank" href="http://composingprograms.com/">Composing Programs</a>. It also has its own <a target="_blank" href="https://cs61a.org/">set of lectures</a>. </p>
<p>But, I highly recommend at least trying to do the Scheme version. It's just magical once you get it. </p>
<h3 id="heading-okay-ive-tried-it-but-its-really-hard">Okay, I've tried it but it's really hard</h3>
<p>Yes, I understand. </p>
<p>Some of you will find SICP a bit too hard. It's not meant for purely beginner programmers. </p>
<p>If that's the case, then I would recommend <a target="_blank" href="https://htdp.org/">How to Design Programs (HTDP)</a>. It uses a language very similar to Scheme and is generally more slower paced. You can use this book and its <a target="_blank" href="https://www.edx.org/course/how-to-code-simple-data">course on edX</a>.</p>
<h3 id="heading-tips-on-studying">Tips on Studying</h3>
<p>Don't read these books like a story. </p>
<p>It's not meant to be read cover to cover. Instead, <strong>focus on the exercises</strong>. You don't have to do them all, but just make sure you know how to solve most of them. </p>
<p>The lectures are optional and only needed if they help. It's really up to you. </p>
<h3 id="heading-additional-resources">Additional Resources</h3>
<ul>
<li><a target="_blank" href="https://www.youtube.com/playlist?list=PLVFrD1dmDdvdvWFK8brOVNL7bKHpE-9w0">Virtual meetups that talk about SICP</a> </li>
<li><a class="post-section-overview" href="#https://racket-lang.org/">Racket</a> (IDE for Scheme) (<a target="_blank" href="https://stackoverflow.com/a/25096066">Checkout this StackOverFlow answer for Scheme setup</a>)</li>
</ul>
<h2 id="heading-computer-architecture">Computer Architecture</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-128.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://github.com/ahmeducf/computer-systems-CS-APP3e">Source</a></em></p>
<p>You wrote some code and it magically runs. </p>
<p>How does that work? Well, this is what you will learn with computer architecture. This is by far the most neglected subject by most self taught engineers. </p>
<p>As engineers, we don't believe in magic. We have to unravel the magic behind computers. You will also learn some useful stuff such as:</p>
<ul>
<li>What is the L1, L2 cache? </li>
<li>Why does cyberpunk lag?</li>
</ul>
<p>The book I recommend here is <em><a target="_blank" href="http://csapp.cs.cmu.edu/3e/home.html">Computer Systems: A Programmer's Perspective</a></em>. I would also recommend an <a target="_blank" href="https://www.cs.cmu.edu/afs/cs/academic/class/15213-f16/www/schedule.html">introductory course</a> that will cover chapters 1-6 of the book (That was made by the authors of the book). </p>
<h3 id="heading-but-theres-a-catch">But there's a catch</h3>
<p><strong>This book is not meant to be read cover to cover</strong>. It has a lot of content, that may not well be presented in the optimal order.</p>
<p>So I recommend that you follow the course and do the labs. </p>
<h3 id="heading-what-if-i-find-it-too-hard">What if I find it too hard?</h3>
<p>A lot of people will find the content a bit heavy, so to ease into it, I would recommend doing the following:</p>
<ul>
<li>Read <a target="_blank" href="https://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319">Code: The Hidden Language of Computer Hardware and Software</a>\</li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/an-introduction-to-software-architecture-patterns/">Read this handbook on Software Architecture</a></li>
<li>Watch all 4 videos of <a target="_blank" href="https://www.youtube.com/playlist?list=PLFt_AvWsXl0dPhqVsKt1Ni_46ARyiCGSq">Exploring How Computers Work</a></li>
<li>Watch all 41 videos of <a target="_blank" href="https://www.youtube.com/playlist?list=PLH2l6uzC4UEW0s7-KewFLBC1D0l6XRfye">Crash Course: Computer Science</a></li>
<li>Take the course <a target="_blank" href="https://www.coursera.org/learn/build-a-computer">NAnd2Tetris</a> </li>
<li>Learn a bit of C by reading the book: <a target="_blank" href="https://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504">C Programming a Modern Approach</a></li>
</ul>
<p>Once you finish that you can then come back to Computer Systems: A Programmers Perspective. </p>
<h2 id="heading-data-structures-and-algorithms">Data Structures and Algorithms</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-131.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://twitter.com/StevenSkiena/status/1336050368875290629">Source</a></em></p>
<p>Everyone wants to work at a FAANG company, but no one wants to learn Data Structures and Algorithms. </p>
<p>Nevertheless, I don't want you to learn these just because of technical interviews. Data structures and algorithms are important because they help build your problem solving skills. </p>
<p>There are many great books and courses on Data Structures and Algorithms but the one I would recommend is a book named <em><a target="_blank" href="https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202">The Algorithm Design Manual</a></em> by Steven Skiena. You can also check out his course <a target="_blank" href="https://www3.cs.stonybrook.edu/~skiena/373/videos/">here</a>. </p>
<h3 id="heading-dont-forget-to-practice">Don't forget to practice</h3>
<p>Same rules apply here. Don't just learn about data structures, but create them in whatever language you want. Don't just memorize algorithms but implement them and see where and how you can use them. </p>
<p>A good tip is solving some <a target="_blank" href="https://leetcode.com/">Leetcode</a> problems while going through the book/course. </p>
<h3 id="heading-what-if-i-find-it-too-hard-1">What if I find it too hard?</h3>
<p>If you find the material a bit heavy, then I would recommend the following resources:</p>
<ul>
<li>Read the book: <a target="_blank" href="https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230">Grokking Algorithms</a> </li>
<li>Read the book: <a target="_blank" href="https://www.amazon.com/How-Solve-Mathematical-Princeton-Science/dp/069111966X#:~:text=Polya%2C%20How%20to%20Solve%20It,winning%20a%20game%20of%20anagrams.">How to Solve It: A New Aspect of Mathematical Method</a></li>
</ul>
<p>In general there are many different books/courses that teach Data Structures and Algorithms – Here are some other great resources:</p>
<ul>
<li><a target="_blank" href="https://www.freecodecamp.org/news/algorithms-and-data-structures-free-treehouse-course/">Data Structures and Algorithms course on freeCodeCamp</a></li>
<li><a target="_blank" href="https://algorithmsilluminated.org/">Algorithms Illuminated</a> </li>
<li><a target="_blank" href="https://www.coursera.org/learn/algorithms-part1">Princeton Algorithms Course</a> </li>
<li><a target="_blank" href="https://frontendmasters.com/courses/algorithms/">ThePrimegeans Data Structures and Algorithms Course</a></li>
<li><a target="_blank" href="https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/">MIT Introduction to Algorithms</a> </li>
</ul>
<h2 id="heading-math-for-computer-science">Math for Computer Science</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-144.png" alt="Image" width="600" height="400" loading="lazy">
<em>Don't worry, this is some random math photo found <a target="_blank" href="https://unsplash.com/photos/h3kuhYUCE9A">here</a></em></p>
<p>Many new developers skip this. </p>
<p>But, hear me out – computer science is essentially a branch of mathematics. Learning it will make you a better developer by honing your problem solving skills. </p>
<h3 id="heading-the-most-relevant-area-for-cs-is-discrete-mathematics">The most relevant area for CS is Discrete Mathematics</h3>
<p>Discrete mathematics is the branch of mathematics that deals with countable or finite numbers. </p>
<p>The topics in discrete mathematics are many, but the ones which are relevant for CS are:</p>
<ul>
<li>Logic </li>
<li>Combinatorics </li>
<li>Discrete Probability </li>
<li>Set Theory </li>
<li>Graph Theory</li>
<li>Number Theory </li>
</ul>
<h3 id="heading-how-to-study-discrete-mathematics">How to Study Discrete Mathematics</h3>
<p>I would suggest starting with a set of <a target="_blank" href="https://cims.nyu.edu/~regev/teaching/discrete_math_fall_2005/dmbook.pdf">lecture notes by László Lovász</a>. </p>
<p>Professor Lovász notes are easier to digest than formal texts and are just generally fun. He starts of with a problem and solves it using discrete mathematics. </p>
<p>After that, you can take an MIT book called <em><a target="_blank" href="https://courses.csail.mit.edu/6.042/spring17/mcs.pdf">Mathematics for Computer Science</a>.</em> The book comes with video lectures that are <a target="_blank" href="https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/video_galleries/video-lectures/">freely available</a>. </p>
<h3 id="heading-what-if-its-too-hard">What if it's too hard?</h3>
<p>Don't worry – sometimes you just have to accept that <strong>you won't always get it right away</strong>. </p>
<p>It's fine. </p>
<p>But if you feel like you're missing some fundamental knowledge, then it's a different story. The fundamental prerequisite subjects for discrete mathematics are:</p>
<ul>
<li>Algebra</li>
<li>Geometry</li>
<li>Calculas</li>
</ul>
<p>There are many free resources, but the ones I would recommend are:</p>
<ul>
<li><a target="_blank" href="https://www.khanacademy.org/">Khan Academy</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/college-algebra-course-with-python-code/">College Algebra course</a> </li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/learn-college-calculus-in-free-course/">Calculus 1 course</a></li>
<li><a target="_blank" href="https://www.freecodecamp.org/news/learn-calculus-2-in-this-free-7-hour-course/">Calculus 2 course</a></li>
</ul>
<h2 id="heading-operating-systems">Operating Systems</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-228.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://pages.cs.wisc.edu/~remzi/OSTEP/">Source</a></em></p>
<p>Remember when I told you that we as developers want to remove the magic in computing?</p>
<p>Same thing applies here – operating systems seem like some sort of magical black box. But they're not – it's just a lot of clever engineering. </p>
<p>If you know how these operating systems are built and work, then you will definitely be in a league of your own. </p>
<p>It's somewhat difficult to find good resources online for operating systems but the most recommend book is <a target="_blank" href="https://pages.cs.wisc.edu/~remzi/OSTEP/">Operating Systems: Three Easy Pieces (OSTEP).</a> There isn't any official video lecture online that fully covers the book but I found this <a target="_blank" href="https://www.youtube.com/playlist?list=PLhtZD20ADU45ADsAIxlNpFowP3iYvGXvJ">playlist on YouTube</a>. </p>
<h3 id="heading-recommend-prerequisites">Recommend Prerequisites</h3>
<p>I would suggest learning computer architecture first and a little bit about C before embarking on the operating systems journey. </p>
<h3 id="heading-optional-resources">Optional Resources</h3>
<p>Now, I recommend finishing OSTEP first and then checking out the other recommend resources. They are all optional. </p>
<ul>
<li>Want to build your own Linux system? Check out <a target="_blank" href="https://www.linuxfromscratch.org/">Linux from Scratch</a>. </li>
<li>Want an in-depth overview of Linux, MacOS, and Windows? <a target="_blank" href="https://www.freecodecamp.org/news/an-introduction-to-operating-systems/">Here's a handbook for you</a>.</li>
<li>Want to build your own OS? Check out <a target="_blank" href="https://wiki.osdev.org/Introduction">OSDEV</a></li>
<li>Want to build your own Sockets? Check out <a target="_blank" href="https://beej.us/guide/bgnet/">Beej's Guide to Network Programming</a> </li>
</ul>
<h2 id="heading-computer-networking">Computer Networking</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-237.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://github.com/topics/top-down-approach">Source</a></em></p>
<p>Since the dawn of the internet, computer networking has been one the most important subjects for software engineers. </p>
<p>If you don't know things like IP, TCP, UDP, HTTP, TLS, DNS, SMTP, and so on — then you should learn about computer networking (especially if you are a backend engineer).</p>
<p>The recommended book here is <a target="_blank" href="https://gaia.cs.umass.edu/kurose_ross/wireshark.php">Computer Networking: A Top-Down Approach</a>. You can also check out the <a target="_blank" href="https://www.youtube.com/playlist?list=PLByK_3hwzY3Tysh-SY9MKZhMm9wIfNOas">video lectures</a> from the author of the book himself. </p>
<p>But before beginning that I would recommend to check out this <a target="_blank" href="https://www.youtube.com/playlist?list=PLowKtXNTBypH19whXTVoG3oKSuOcw_XeW">video crash course on computer networking</a> from a bottom up approach. And <a target="_blank" href="https://www.freecodecamp.org/news/computer-networking-how-applications-talk-over-the-internet/">here's a helpful tutorial</a> that covers the basics well.</p>
<h2 id="heading-databases">Databases</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-229.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://www.astera.com/type/blog/a-quick-overview-of-different-types-of-databases/">Source</a></em></p>
<p>Databases are somewhat new – they came around the 1970s and have since become integral parts of many applications.</p>
<p>I highly recommend the below courses from the <a target="_blank" href="https://www.youtube.com/@CMUDatabaseGroup/featured">CMU Database Group</a>. They're all freely available on YouTube. I would recommend going through at least the first one. </p>
<ol>
<li><a target="_blank" href="https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf">Introduction To Databases</a></li>
<li><a target="_blank" href="https://www.youtube.com/playlist?list=PLSE8ODhjZXjZKp-oX_75aBnznulk7nubu">Database Seminars</a></li>
<li><a target="_blank" href="https://www.youtube.com/playlist?list=PLSE8ODhjZXjYzlLMbX3cR0sxWnRM7CLFn">Advanced Databases</a></li>
</ol>
<p>Also, <a target="_blank" href="https://www.freecodecamp.org/news/learn-sql-free-relational-database-courses-for-beginners/">here's a great collection of resources</a> to help you learn about SQL databases. And <a target="_blank" href="https://www.freecodecamp.org/news/learn-nosql-in-3-hours/">here's a free course on NoSQL databases</a>.</p>
<h2 id="heading-languages-and-compilers">Languages and Compilers</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-230.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://chidiwilliams.com/post/crafting-interpreters-a-review/">Source</a></em></p>
<p>You may know how to code in one or more programming languages. </p>
<p>But do you know how to create or design one? That's what you will learn by studying programming languages and compilers.</p>
<p>The recommended introductory book is called <a target="_blank" href="https://craftinginterpreters.com/contents.html">Crafting Interpreters</a>. </p>
<p>After that you can move on to <em><a target="_blank" href="https://smile.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811">Compilers: Principles, Techniques &amp; Tools</a></em>, also called “the Dragon Book”. The book is covers a lot of topics so I highly recommend taking a course with it. The one I recommend is from <a target="_blank" href="https://www.edx.org/course/compilers">Alex Aiken on edX</a>.</p>
<p>And <a target="_blank" href="https://www.freecodecamp.org/news/what-is-a-compiler-in-c/">here's a helpful beginner-friendly tutorial</a> on how the compiler works in C programming.</p>
<h2 id="heading-distributed-systems">Distributed Systems</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-231.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://vvsevolodovich.dev/designing-data-intensive-applications-by-martin-kleppmann/">Source</a></em></p>
<p>If you choose to study only one subject from the list, make it distributed systems. It's the holy grail for tech companies, and if you want to get a developer job, you should be proficient about distributed systems. </p>
<p>My recommend path in learning the subject is:</p>
<ol>
<li>Read the book: <a target="_blank" href="https://www.amazon.com/gp/product/1838430202/ref=as_li_qf_asin_il_tl?ie=UTF8&amp;tag=utsavized0d-20&amp;creative=9325&amp;linkCode=as2&amp;creativeASIN=1838430202&amp;linkId=8f3007bbed9b958980492f5c0bb1105f">Understanding Distributed Systems</a> </li>
<li>Read the book: <a target="_blank" href="https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321">Designing Data Intensive Applications</a> also known as the "red book"</li>
<li>While reading the "red book", take its accompanying <a target="_blank" href="https://www.youtube.com/@6.824/videos">MIT course on YouTube</a>. </li>
<li>Read the book: <a target="_blank" href="https://www.amazon.com/dp/1492086894?psc=1&amp;linkCode=sl1&amp;tag=utsavized0d-20&amp;linkId=64e15d236bb8c1015661423e5be849ac&amp;language=en_US&amp;ref_=as_li_ss_tl">Software Architecture: The Hard Parts</a> (Optional) </li>
<li>You can also <a target="_blank" href="https://www.freecodecamp.org/news/design-patterns-for-distributed-systems/">check out my handbook about design patterns for distributed systems</a>.</li>
</ol>
<h2 id="heading-web-security">Web Security</h2>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/06/image-232.png" alt="Image" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://www.ifourtechnolab.com/blog/principles-of-web-security">Source</a></em></p>
<p>There have been a lot of security breaches in the last 2-3 years. </p>
<p>It's getting dangerous out there – and as a software engineer, knowing some fundamentals of web security will give you an edge. </p>
<p>The course I recommend first is <a target="_blank" href="https://web.stanford.edu/class/cs253/">CS253 Web Security by Stanford</a>. It gives a comprehensive overview of web security. So expect topics like web app vulnerabilities, injection, denial-of-service, and many more. </p>
<p>You can also <a target="_blank" href="https://www.freecodecamp.org/news/technical-dive-into-owasp/">review these common vulnerabilities</a> and learn how to prevent attacks that take advantage of them.</p>
<p>Later on, if you want, you could learn how to hack using <a target="_blank" href="https://pwn.college/">pwn.college</a>. </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Learning all these subjects will take you a while, and will require consistent effort. But if you like what you do and are interested in the subject, then it should feel like play and not a chore. </p>
<p>Regardless of the subjects you choose to study. The most important tip I can give you is...</p>
<h3 id="heading-dont-be-a-passive-learner">Don't be a passive learner</h3>
<p>Don't just watch videos – do the exercises as well. Build the projects along with the tutorials. </p>
<p>Don't just read books but engage in the book by asking questions and doing your own research. </p>
<p>You want the information to stick, so you don't forget it. And to make it stick you have to actively engage in the subject. </p>
<p>I sincerely hope that I encouraged you to study some of these subjects. As always I want to end it of by thanking you for reading this article. </p>
<p>I wish you all the best. </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a Greedy Algorithm? Examples of Greedy Algorithms ]]>
                </title>
                <description>
                    <![CDATA[ According to the Oxford English Dictionary, "greedy" means having excessive desire for something without considering the effect or damage done. In computer science, a greedy algorithm is an algorithm that finds a solution to problems in the shortest ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/greedy-algorithms/</link>
                <guid isPermaLink="false">66d4614e38f2dc3808b7910b</guid>
                
                    <category>
                        <![CDATA[ algorithms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data structures ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Tantoluwa Heritage Alabi NB ]]>
                </dc:creator>
                <pubDate>Fri, 12 May 2023 17:57:48 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/05/pexels-pixabay-206627.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>According to the Oxford English Dictionary, "greedy" means having excessive desire for something without considering the effect or damage done.</p>
<p>In computer science, a greedy algorithm is an algorithm that finds a solution to problems in the shortest time possible. It picks the path that seems optimal at the moment without regard for the overall optimization of the solution that would be formed.</p>
<p>Edsger Dijkstra, a computer scientist and mathematician who wanted to calculate a minimum spanning tree, introduced the term "Greedy algorithm". Prim and Kruskal came up with optimization techniques for minimizing cost of graphs.</p>
<p>Many Greedy algorithms were developed to solve graph problems. A graph is a structure made up of edges and vertices.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/simple-graph-diagram.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Diagram of a simple graph</em></p>
<h2 id="heading-greedy-vs-not-greedy-algorithms">Greedy vs Not Greedy Algorithms</h2>
<p>An algorithm is greedy when the path picked is regarded as the best option based on a specific criterion without considering future consequences. But it typically evaluates feasibility before making a final decision. The correctness of the solution depends on the problem and criteria used.</p>
<p>Example: A graph has various weights and you are to determine the maximum value in the tree. You'd start by searching each node and checking its weight to see if it is the largest value.</p>
<p>There are two approaches to solving this problem: greedy approach or not greedy.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/example-graph.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Example graph</em></p>
<p>This graph consists of different weights and we need to find the maximum value. We'll apply the two approaches on the graph to get the solution.</p>
<h3 id="heading-greedy-approach">Greedy Approach</h3>
<p>In the images below, a graph has different numbers in its vertices and the algorithm is meant to select the vertex with the largest number.</p>
<p>Starting from vertex 6, then it's faced with two decisions – which is bigger, 3 or 4? The algorithm picks 4, and then is faced with another decision – which is bigger, 14 or 11. It selects 14, and the algorithm ends.</p>
<p>On the other hand there is a vertex labeled 20 but it is attached to vertex 3 which greedy does not consider as the best choice. It is important to select appropriate criteria for making each immediate decision.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/greedy-approach-graph.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>The sample graph showing the greedy approach</em></p>
<h3 id="heading-not-greedy-approach">Not Greedy Approach</h3>
<p>The “not greedy” approach checks all options before arriving at a final solution, unlike the "greedy approach" which stops once it gets its results.</p>
<p>Starting from vertex 6, then it's faced with two decisions – which is bigger, 3 or 4? The algorithm picks 4, and then is faced with another decision – which is bigger, 14 or 11. It selects 14 and keeps it aside.</p>
<p>Then it runs the process again, starting from vertex 6. It selects the vertex with 3 and checks it. 20 is attached to the vertex 3 and the process stops. Now it compares the two results – 20 and 14. 20 is bigger, so it selects the vertex (3) that carries the largest number and the process ends.</p>
<p>This approach considers many possibilities in finding the better solution.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/non-greedy-approach-graph.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>The sample graph showing the non-greedy approach</em></p>
<h2 id="heading-characteristics-of-a-greedy-algorithm">Characteristics of a Greedy Algorithm</h2>
<ul>
<li><p>The algorithm solves its problem by finding an optimal solution. This solution can be a maximum or minimum value. It makes choices based on the best option available.</p>
</li>
<li><p>The algorithm is fast and efficient with time complexity of O(n log n) or O(n). Therefore applied in solving large-scale problems.</p>
</li>
<li><p>The search for optimal solution is done without repetition – the algorithm runs once.</p>
</li>
<li><p>It is straightforward and easy to implement.</p>
</li>
</ul>
<h2 id="heading-how-to-use-greedy-algorithms">How to Use Greedy Algorithms</h2>
<p>Before applying a greedy algorithm to a problem, you need to ask two questions:</p>
<ul>
<li><p>Do you need the best option at the moment from the problem?</p>
</li>
<li><p>Do you need an optimal solution (either minimum or maximum value)?</p>
</li>
</ul>
<p>If your answer to these questions is "Yes", then a greedy algorithm is a good choice to solve your problem.</p>
<h3 id="heading-procedure">Procedure</h3>
<p>Let’s assume you have a problem with a set of numbers and you need to find the minimum value.</p>
<p>You start of by defining the constraint, which in this case is finding the minimum value. Then each number will be scanned and checked on each constraint which serves as a condition to be fulfilled. If the condition is true, the number(s) is selected and returned as the final solution.</p>
<p>Here's a flowchart representation of this process:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/greedy-algorithm-flow-chart.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Flow chart showing the process for solving a problem using greedy algorithms</em></p>
<h2 id="heading-greedy-algorithm-examples">Greedy Algorithm Examples</h2>
<h3 id="heading-problem-1-activity-selection-problem">Problem 1 : Activity Selection Problem</h3>
<p>This problem contains a set of activities or tasks that need to be completed. Each one has a start and finish time. The algorithm finds the maximum number of activities that can be done in a given time without them overlapping.</p>
<h3 id="heading-approach-to-the-problem">Approach to the Problem</h3>
<ul>
<li><p>We have a list of activities. Each has a start time and finish time.</p>
</li>
<li><p>First, we sort the activities and start time in ascending order using the finish time of each.</p>
</li>
<li><p>Then we start by picking the first activity. We create a new list to store the selected activity.</p>
</li>
<li><p>To choose the next activity, we compare the finish time of the last activity to the start time of the next activity. If the start time of the next activity is greater than the finish time of the last activity, it can be selected. If not we skip this and check the next one.</p>
</li>
<li><p>This process is repeated until all activities are checked. The final solution is a list containing the activities that can be done.</p>
</li>
</ul>
<p>The table below shows a list of activities as well as starting and finish times.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/start-and-finish-times-1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The first step is to sort the finish time in ascending order and arrange the activities with respect to the result.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/start-and-finish-times-2.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>After sorting the activities, we select the first activity and store it in the selected activity list. In our example, the first activity is “Homework”.</p>
<p>Moving to the next activity, we check the finish time of “Homework” (5) which was the last activity selected and the starting time of “Term paper” (4). To pick an activity, the starting time of the next activity must be greater than or equal to the finish time. (4) is less than (5), so we skip the activity and move to the next.</p>
<p>The next activity “Presentation” has a starting time of (6) and it is greater than the finish time (5) of “Homework”. So we select it and add it to our list of selected activities.</p>
<p>For the next activity, we do the same checking. Finish time of “Presentation” is (10), starting time of “Volleyball practice ” is (10). We see that the starting time is equal to the finish time which satisfies one of the conditions, so we select it and add it to our list of selected activities.</p>
<p>Continuing to the next activity, the finish time of “Volleyball” practice is (12) and the starting time of “Biology lecture” is (13). We see the starting time is greater than the finish time so we select it.</p>
<p>For our last activity, the starting time for “Hangout” is (7) and the finishing time of our last activity “Biology lecture” is (14), 7 is less than 14, so we cannot select the activity. Since we are at the end of our activity list, the process ends.</p>
<p>Our final result is the list of selected activities that we can do without time overlapping: {Homework, Presentation, Volleyball practice, Biology lecture}.</p>
<h3 id="heading-code-implementation-of-the-example">Code Implementation of the Example</h3>
<p>The variable <code>&lt;data&gt;</code> stores the starting times of each activity, the finish time of each activity, and the list of tasks (or activities) to be performed.</p>
<p>The variable <code>&lt;selected_activity&gt;</code> is an empty list that will store the selected activities that can be performed.</p>
<p><code>&lt;start_position&gt;</code> shows the position the first activity which is index “0”. This will be our starting point.</p>
<pre><code class="lang-python">data = {
  <span class="hljs-string">"start_time"</span>: [<span class="hljs-number">2</span> , <span class="hljs-number">6</span> , <span class="hljs-number">4</span> , <span class="hljs-number">10</span> , <span class="hljs-number">13</span> , <span class="hljs-number">7</span>],
  <span class="hljs-string">"finish_time"</span>: [<span class="hljs-number">5</span> , <span class="hljs-number">10</span> , <span class="hljs-number">8</span> , <span class="hljs-number">12</span> , <span class="hljs-number">14</span> , <span class="hljs-number">15</span>],
  <span class="hljs-string">"activity"</span>: [<span class="hljs-string">"Homework"</span> , <span class="hljs-string">"Presentation"</span> , <span class="hljs-string">"Term paper"</span> , <span class="hljs-string">"Volleyball practice"</span> , <span class="hljs-string">"Biology lecture"</span> , <span class="hljs-string">"Hangout"</span>]
}

selected_activity =[]
start_position = <span class="hljs-number">0</span>
</code></pre>
<p>Here's a dataframe table showing the original data:</p>
<pre><code class="lang-python">Original Info

   start_time  finish_time             activity
<span class="hljs-number">0</span>           <span class="hljs-number">2</span>            <span class="hljs-number">5</span>             Homework
<span class="hljs-number">1</span>           <span class="hljs-number">6</span>           <span class="hljs-number">10</span>         Presentation
<span class="hljs-number">2</span>           <span class="hljs-number">4</span>            <span class="hljs-number">8</span>           Term paper
<span class="hljs-number">3</span>          <span class="hljs-number">10</span>           <span class="hljs-number">12</span>  Volleyball practice
<span class="hljs-number">4</span>          <span class="hljs-number">13</span>           <span class="hljs-number">14</span>      Biology lecture
<span class="hljs-number">5</span>           <span class="hljs-number">7</span>           <span class="hljs-number">15</span>              Hangout
</code></pre>
<p>Then we sort the finish time in ascending order and rearrange the start time and activity in respect to it. We target the variables by using the keys in the dictionary.</p>
<pre><code class="lang-python">tem = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span> , len(data[<span class="hljs-string">'finish_time'</span>])):
   <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span> , len(data[<span class="hljs-string">'finish_time'</span>])):
       <span class="hljs-keyword">if</span> data[<span class="hljs-string">'finish_time'</span>][i] &lt; data[<span class="hljs-string">'finish_time'</span>][j]:
           tem = data[<span class="hljs-string">'activity'</span>][i] , data[<span class="hljs-string">'finish_time'</span>][i] , data[<span class="hljs-string">'start_time'</span>][i]
           data[<span class="hljs-string">'activity'</span>][i] , data[<span class="hljs-string">'finish_time'</span>][i] , data[<span class="hljs-string">'start_time'</span>][i] = data[<span class="hljs-string">'activity'</span>][j] , data[<span class="hljs-string">'finish_time'</span>][j] , data[<span class="hljs-string">'start_time'</span>][j]
           data[<span class="hljs-string">'activity'</span>][j] , data[<span class="hljs-string">'finish_time'</span>][j] , data[<span class="hljs-string">'start_time'</span>][j] = tem
</code></pre>
<p>In the code above, we intialized <code>&lt;tem&gt;</code> to zero. We are not using the inbuilt method to sort the finish time. We are using two loops to arrange it in ascending order. <code>&lt;i&gt;</code> and <code>&lt;j&gt;</code> represent the indexes and check if values of the <code>&lt;data['finish_time'][i]&gt;</code> is less than <code>&lt;data['finish_time'][j]&gt;</code>.</p>
<p>If the condition is true, <code>&lt;tem&gt;</code> stores the values of the elements in the <code>&lt;i&gt;</code> position and swaps the corresponding element.</p>
<p>Now we print the final result, here's what we get:</p>
<pre><code class="lang-python">print(<span class="hljs-string">"Start time: "</span> , data[<span class="hljs-string">'start_time'</span>])
print(<span class="hljs-string">"Finish time: "</span> , data[<span class="hljs-string">'finish_time'</span>])
print(<span class="hljs-string">"Activity: "</span> , data[<span class="hljs-string">'activity'</span>])

<span class="hljs-comment"># Results before sorting</span>
<span class="hljs-comment"># Start time:  [2, 6, 4, 10, 13, 7]</span>
<span class="hljs-comment"># Finish time:  [5, 10, 8, 12, 14, 15]</span>
<span class="hljs-comment"># Activity:  ['Homework', 'Presentation', 'Term paper', 'Volleyball practice', 'Biology lecture', 'Hangout']</span>


<span class="hljs-comment"># Results after sorting</span>
<span class="hljs-comment"># Start time:  [2, 4, 6, 10, 13, 7]</span>
<span class="hljs-comment"># Finish time:  [5, 8, 10, 12, 14, 15]</span>
<span class="hljs-comment"># Activity:  ['Homework', 'Term paper', 'Presentation', 'Volleyball practice', 'Biology lecture', 'Hangout']</span>
</code></pre>
<p>And here's a dataframe table showing the sorted data:</p>
<pre><code class="lang-python">Sorted Info <span class="hljs-keyword">with</span> respect to finish_time

   start_time  finish_time             activity
<span class="hljs-number">0</span>       <span class="hljs-number">2</span>            <span class="hljs-number">5</span>             Homework
<span class="hljs-number">1</span>       <span class="hljs-number">4</span>            <span class="hljs-number">8</span>           Term paper
<span class="hljs-number">2</span>       <span class="hljs-number">6</span>           <span class="hljs-number">10</span>         Presentation
<span class="hljs-number">3</span>          <span class="hljs-number">10</span>           <span class="hljs-number">12</span>       Volleyball practice
<span class="hljs-number">4</span>          <span class="hljs-number">13</span>           <span class="hljs-number">14</span>         Biology lecture
<span class="hljs-number">5</span>       <span class="hljs-number">7</span>           <span class="hljs-number">15</span>          Hangout
</code></pre>
<p>After sorting the activities, we start by selecting the first activity, which is “Homework”. It has a starting index of “0” so we use the <code>&lt;start_position&gt;</code> to target the activity and append it to the empty list.</p>
<pre><code class="lang-python">selected_activity.append(data[<span class="hljs-string">'activity'</span>][start_position])
</code></pre>
<p>The condition for selecting an activity is that the start time of the next activity selected is greater than the finish time of the previous activity. If the condition is true, the selected activity is added to the <code>&lt;selected_activity&gt;</code> list.</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> pos <span class="hljs-keyword">in</span> range(len(data[<span class="hljs-string">'finish_time'</span>])):
   <span class="hljs-keyword">if</span> data[<span class="hljs-string">'start_time'</span>][pos] &gt;= data[<span class="hljs-string">'finish_time'</span>][start_position]:
       selected_activity.append(data[<span class="hljs-string">'activity'</span>][pos])
       start_position = pos

print(<span class="hljs-string">f"The student can work on the following activities: <span class="hljs-subst">{selected_activity}</span>"</span>)

<span class="hljs-comment"># Results</span>
<span class="hljs-comment"># The student can work on the following activities: ['Homework', 'Presentation', 'Volleyball practice', 'Biology lecture']</span>
</code></pre>
<p>Here's what it looks like all together:</p>
<pre><code class="lang-python">data = {
  <span class="hljs-string">"start_time"</span>: [<span class="hljs-number">2</span> , <span class="hljs-number">6</span> , <span class="hljs-number">4</span> , <span class="hljs-number">10</span> , <span class="hljs-number">13</span> , <span class="hljs-number">7</span>],
  <span class="hljs-string">"finish_time"</span>: [<span class="hljs-number">5</span> , <span class="hljs-number">10</span> , <span class="hljs-number">8</span> , <span class="hljs-number">12</span> , <span class="hljs-number">14</span> , <span class="hljs-number">15</span>],
  <span class="hljs-string">"activity"</span>: [<span class="hljs-string">"Homework"</span> , <span class="hljs-string">"Presentation"</span> , <span class="hljs-string">"Term paper"</span> , <span class="hljs-string">"Volleyball practice"</span> , <span class="hljs-string">"Biology lecture"</span> , <span class="hljs-string">"Hangout"</span>]
}

selected_activity =[]
start_position = <span class="hljs-number">0</span>
<span class="hljs-comment"># sorting the items in ascending order with respect to finish time</span>
tem = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span> , len(data[<span class="hljs-string">'finish_time'</span>])):
   <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span> , len(data[<span class="hljs-string">'finish_time'</span>])):
       <span class="hljs-keyword">if</span> data[<span class="hljs-string">'finish_time'</span>][i] &lt; data[<span class="hljs-string">'finish_time'</span>][j]:
           tem = data[<span class="hljs-string">'activity'</span>][i] , data[<span class="hljs-string">'finish_time'</span>][i] , data[<span class="hljs-string">'start_time'</span>][i]
           data[<span class="hljs-string">'activity'</span>][i] , data[<span class="hljs-string">'finish_time'</span>][i] , data[<span class="hljs-string">'start_time'</span>][i] = data[<span class="hljs-string">'activity'</span>][j] , data[<span class="hljs-string">'finish_time'</span>][j] , data[<span class="hljs-string">'start_time'</span>][j]
           data[<span class="hljs-string">'activity'</span>][j] , data[<span class="hljs-string">'finish_time'</span>][j] , data[<span class="hljs-string">'start_time'</span>][j] = tem

<span class="hljs-comment"># by default, the first activity is inserted in the list of activities to be selected.</span>

selected_activity.append(data[<span class="hljs-string">'activity'</span>][start_position])
<span class="hljs-keyword">for</span> pos <span class="hljs-keyword">in</span> range(len(data[<span class="hljs-string">'finish_time'</span>])):
   <span class="hljs-keyword">if</span> data[<span class="hljs-string">'start_time'</span>][pos] &gt;= data[<span class="hljs-string">'finish_time'</span>][start_position]:
       selected_activity.append(data[<span class="hljs-string">'activity'</span>][pos])
       start_position = pos

print(<span class="hljs-string">f"The student can work on the following activities: <span class="hljs-subst">{selected_activity}</span>"</span>)
<span class="hljs-comment"># Results</span>
<span class="hljs-comment"># The student can work on the following activities: ['Homework', 'Presentation', 'Volleyball practice', 'Biology lecture']</span>
</code></pre>
<h3 id="heading-problem-2-fractional-knapsack-problem">Problem 2: Fractional Knapsack Problem</h3>
<p>A knapsack has a maximum weight, and it can only accommodate a certain set of items. These items have a weight and a value.</p>
<p>The aim is to fill the knapsack with the items that have the highest total values and do not exceed the maximum weight capacity.</p>
<h3 id="heading-approach-to-the-problem-1">Approach to the Problem</h3>
<p>There are two elements to consider: the knapsack and the items. The knapsack has a maximum weight and carries some items with a high value.</p>
<p><strong>Scenario:</strong> In a jewelry store, there are items made of gold, silver, and wood. The costliest item is gold followed by silver and then wood. If a jewerly thief comes to the store, they take gold because they will make the most profit.</p>
<p>The thief has a bag (knapsack) that they can put those items in. But there is a limit to what the thief can carry because these items can get heavy. The idea is to pick the item the makes the highest profit and fits in the bag (knapsack) without exceeding its maximum weight.</p>
<ul>
<li><p>The first step is to find the value to weight ratio of all items to know what fraction each one occupies.</p>
</li>
<li><p>We then sort these ratios in descending order (from highest to lowest ). This way we can pick the ratios with the highest number first knowing that we will make a profit.</p>
</li>
<li><p>When we pick the highest ratio, we find the corresponding weight and add it to the knapsack. There are conditions to be checked.</p>
</li>
</ul>
<p><strong>Condition 1</strong>: If the item added has a lesser weight than the maximum weight of the knapsack, more items are added until the sum of all the items in the bag are the same as the maximum weight of the knapsack.</p>
<p><strong>Condition 2</strong>: If the sum of the items’ weight in the bag is more than the maximum capacity of the knapsack, we find the fraction of the last item added. To find the fraction, we do the following:</p>
<ul>
<li><p>We find the sum of the remaining weights of the items in the knapsack. They must be less than the maximum capacity.</p>
</li>
<li><p>We find the difference between the maximum capacity of the knapsack and the sum of the remaining weights of the items and divide by the weight of the last item to be added.</p>
</li>
</ul>
<pre><code class="lang-python">Fraction =  (maximum capacity of the knapsack - sum of remaining weights) / weight of last item to be added
</code></pre>
<p>To add the weight of the last item to the knapsack, we multiply the fraction by the weight.</p>
<pre><code class="lang-python">Weight_added = weight of last item to be added  * fraction
</code></pre>
<p>When we sum up the weights of all the items it will be equal to the knapsack's maximum weight.</p>
<h3 id="heading-practical-example">Practical Example:</h3>
<p>Let's say that the maximum capacity of the knapsack is 17, and there are three items available. The first item is gold, the second item is silver, and third item is wood.</p>
<ul>
<li><p>Weight of gold is 10, the weight of silver is 6, and the weight of wood is 2</p>
</li>
<li><p>the value (profit) of gold is 40, the value (profit) of silver is 30, and the value (profit) of wood is 6.</p>
</li>
<li><p>Ratio of gold= value/weight = 40/10 = 4</p>
</li>
<li><p>Ratio of silver = value/weight=30/6 = 5</p>
</li>
<li><p>Ratio of wood = value/weight = 6/2 = 3</p>
</li>
<li><p>Arranging the ratios in descending: 5, 4, 3.</p>
</li>
<li><p>The largest ratio is 5 and we match it to the corresponding weight “6”. It points to silver.</p>
</li>
<li><p>We put silver in the knapsack first and compare it to the maximum weight which is 17. 6 is less than 17 so we have to add another item. Going back to the ratios, the second largest is “4” and it corresponds to the weight of “10” which points to gold.</p>
</li>
<li><p>Now, we put gold in the knapsack, add the weight of the silver and gold, and compare it with the knapsack weight. (6 + 10 = 16). Checking it against the maximum weight, we see that it is less. So we can take another item. We go back to the list of ratios and take the 3rd largest which is “3” and it corresponds to “2” which points to wood.</p>
</li>
<li><p>When we add wood in the knapsack, the total weight is (6 +10+2 = 18) but that is greater than our maximum weight which is 17. We take out the wood from the knapsack and we are left with gold and silver. The total sum of the two is 16 and the maximum capacity is 17. So we need a weight of 1 to make it equal. Now we apply condition 2 discussed above to find the fraction of wood to fit in the knapsack.</p>
</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2024/04/frac1.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p><em>Explanation of filling the remaining space in the backpack with a fractional piece of wood</em></p>
<p>Now the knapsack is filled.</p>
<h3 id="heading-code-implementation-of-the-example-1">Code Implementation of the Example</h3>
<p>The variable <code>&lt;data&gt;</code> stores the weights of each item and the profits. The variable <code>&lt;maximum_capacity&gt;</code> stores the maximum weight of the knapsack. <code>&lt;selected_wt&gt;</code> is intialized at 0, and it will store the selected weights to be put in the knapsack. Lastly, <code>&lt;max_profit&gt;</code> is intialized as 0, it will store the values of the selected weight.</p>
<pre><code class="lang-python">data = {
    <span class="hljs-string">"weight"</span>: [<span class="hljs-number">10</span> , <span class="hljs-number">6</span> , <span class="hljs-number">2</span>],
    <span class="hljs-string">"profit"</span>:[<span class="hljs-number">40</span> , <span class="hljs-number">30</span> ,<span class="hljs-number">6</span>]
}
max_weight = <span class="hljs-number">17</span>
selected_wt = <span class="hljs-number">0</span>
max_profit = <span class="hljs-number">0</span>
</code></pre>
<p>Then we calculate the ratio of the profit to the weight. Ratio = profit/weight:</p>
<pre><code class="lang-python">ratio = [int(data[<span class="hljs-string">'profit'</span>][i] / data[<span class="hljs-string">'weight'</span>][i]) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(data[<span class="hljs-string">'profit'</span>]))]
</code></pre>
<p>Now that we have the ratio, we arrange the elements in descending order, from biggest to smallest. Then the items in weight and profit are arranged according to the positions of the sorted ratio.</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(ratio)):
    <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(i + <span class="hljs-number">1</span> , len(ratio)):
        <span class="hljs-keyword">if</span> ratio[i] &lt; ratio[j]:
            ratio[i] , ratio[j] = ratio[j] , ratio[i]
            data[<span class="hljs-string">'weight'</span>][i] , data[<span class="hljs-string">'weight'</span>][j] = data[<span class="hljs-string">'weight'</span>][j] , data[<span class="hljs-string">'weight'</span>][i]
            data[<span class="hljs-string">'profit'</span>][i] , data[<span class="hljs-string">'profit'</span>][j] = data[<span class="hljs-string">'profit'</span>][j] , data[<span class="hljs-string">'profit'</span>][i]
</code></pre>
<p>After the weight and profit are sorted, we start choosing the items and checking the condition. We loop through the length of ratio to target the index of each item in the list. Note: all items in ratio are arranged from biggest to smallest, so the first item is the maximum value and the last item is the minimum value.</p>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(ratio)):
</code></pre>
<p>The first item we select has the highest ratio amongst the rest and it is in index 0. Now that the first weight is selected weight, we check if it is less than maximum weight. If it is, we add items till the total weight is equal to the weight of the knapsack. The second item we select has the second highest ratio amongst the rest and it is in index 1, the arrangement is that order of selection.</p>
<p>For every selected weight, we add it to the <code>selected_wt</code> variable and their corresponding profits to the <code>max_profit</code> variable.</p>
<pre><code class="lang-python"><span class="hljs-keyword">if</span> selected_wt + data[<span class="hljs-string">'weight'</span>][i] &lt;= max_weight:
          selected_wt += data[<span class="hljs-string">'weight'</span>][i]
          max_profit += data[<span class="hljs-string">'profit'</span>][i]
</code></pre>
<p>When the sum of the selected weights in the knapsack exceeds the maximum weight, we find the fraction of the weight of the last item added to make the total selected weights be equal to the maximum weight. We do this by finding the difference between the <code>max_weight</code> and the sum of the selected weights divided by the weight of the last item added.</p>
<p>The final profit made from the fraction carried is added to the <code>max_profit</code> variable. Then we return the <code>max_profit</code> as the final result.</p>
<pre><code class="lang-python">      <span class="hljs-keyword">else</span>:
          frac_wt = (max_weight - selected_wt) / data[<span class="hljs-string">'weight'</span>][i]
          frac_value = data[<span class="hljs-string">'profit'</span>][i] * frac_wt
          max_profit += frac_value
          selected_wt += (max_weight - selected_wt)
print(max_profit)
</code></pre>
<p>Bringing it all together:</p>
<pre><code class="lang-python">
data = {
    <span class="hljs-string">"weight"</span>: [<span class="hljs-number">10</span> , <span class="hljs-number">6</span> , <span class="hljs-number">2</span>],
    <span class="hljs-string">"profit"</span>:[<span class="hljs-number">40</span> , <span class="hljs-number">30</span> ,<span class="hljs-number">6</span>]
}
max_weight = <span class="hljs-number">17</span>
selected_wt = <span class="hljs-number">0</span>
max_profit = <span class="hljs-number">0</span>

<span class="hljs-comment"># finds ratio</span>
ratio = [int(data[<span class="hljs-string">'profit'</span>][i] / data[<span class="hljs-string">'weight'</span>][i]) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(data[<span class="hljs-string">'profit'</span>]))]

<span class="hljs-comment"># sort ratio in descending order, rearranges weight and profit in order of the sorted ratio</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(ratio)):
    <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(i + <span class="hljs-number">1</span> , len(ratio)):
        <span class="hljs-keyword">if</span> ratio[i] &lt; ratio[j]:
            ratio[i] , ratio[j] = ratio[j] , ratio[i]
            data[<span class="hljs-string">'weight'</span>][i] , data[<span class="hljs-string">'weight'</span>][j] = data[<span class="hljs-string">'weight'</span>][j] , data[<span class="hljs-string">'weight'</span>][i]
            data[<span class="hljs-string">'profit'</span>][i] , data[<span class="hljs-string">'profit'</span>][j] = data[<span class="hljs-string">'profit'</span>][j] , data[<span class="hljs-string">'profit'</span>][i]


<span class="hljs-comment"># checks if selected weight with the highest ratio is less than the maximum weight, if so it adds it to knapsack and stores the profit, select the next item.</span>
<span class="hljs-comment"># else the sum of the selected weights is more than max weight, finds fraction</span>

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(len(ratio)):
    <span class="hljs-keyword">if</span> selected_wt + data[<span class="hljs-string">'weight'</span>][i] &lt;= max_weight:
          selected_wt += data[<span class="hljs-string">'weight'</span>][i]
          max_profit += data[<span class="hljs-string">'profit'</span>][i]
    <span class="hljs-keyword">else</span>:
          frac_wt = (max_weight - selected_wt) / data[<span class="hljs-string">'weight'</span>][i]
          frac_value = data[<span class="hljs-string">'profit'</span>][i] * frac_wt
          max_profit += frac_value
          selected_wt += (max_weight - selected_wt)

print(<span class="hljs-string">f"The maximum profit that can be made from each item is: <span class="hljs-subst">{round(max_profit , <span class="hljs-number">2</span>)}</span> euros"</span>)
<span class="hljs-comment"># Result</span>
<span class="hljs-comment"># The maximum profit that can be made from each item is: 73.0 euros</span>
</code></pre>
<h2 id="heading-applications-of-greedy-algorithms">Applications of Greedy Algorithms</h2>
<p>There are various applications of greedy algorithms. Some of them are:</p>
<ul>
<li><p>[Minimum spanning tree](https://en.wikipedia.org/wiki/Minimum_spanning_tree#:~:text=A%20minimum%20spanning%20tree%20(MST,minimum%20possible%20total%20edge%20weight.) is without any cycles and with the minimum possible total edge weight. This tree is derived from a connected undirected graph with weights.</p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra’s shortest path</a> is a search algorithm that finds the shortest path between a vertex and other vertices in a weighted graph.</p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/Travelling_salesman_problem">Travelling salesman problem</a> involves finding the shortest route that visits different places only once and returns to the starting point</p>
</li>
<li><p><a target="_blank" href="https://en.wikipedia.org/wiki/Huffman_coding">Huffman coding</a> assigns shorter code to frequently occurring symbols and longer code to less occurring symbols. It is used to encode data efficiently.</p>
</li>
</ul>
<h2 id="heading-advantages-of-using-a-greedy-algorithm">Advantages of Using a Greedy Algorithm</h2>
<p>Greedy algorithms are quite straight forward to implement and easy to understand. They are also very efficient and have a lower complexity time of O(N * logN).</p>
<p>They're useful in solving optimization problems, returning a maximum or minimum value.</p>
<h2 id="heading-disadvantageslimitations-of-using-a-greedy-algorithm">Disadvantages/Limitations of Using a Greedy Algorithm</h2>
<p>Even though greedy algorithms are straightforward and helpful in optimization problems, they don't offer the best solutions at all times.</p>
<p>Also greedy algos only run once, so they don't check the correctness of the result produced.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Greedy algorithms are a straightforward approach to solving optimization problems, returning a minimum or maximum value.</p>
<p>This article explained some examples of greedy algorithms and the approach to tackling each problem. By understanding how a greedy algorithm problems works you can better understand dynamic programming. If you have any questions feel free to reach out to me on <a target="_blank" href="https://twitter.com/HeritageAlabi1">Twitter</a>💙.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is RAM? How to Access Your Computer's RAM and Read the Contents ]]>
                </title>
                <description>
                    <![CDATA[ This article is a comprehensive guide on how to read the contents of your computer's RAM.  Random Access Memory (RAM) is a crucial component of any computer system, and it is responsible for temporarily storing data that is required by the system to ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-access-and-read-ram-contents/</link>
                <guid isPermaLink="false">66c4c5a926a77d9936ef0a61</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ hardware ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gursimar Singh ]]>
                </dc:creator>
                <pubDate>Mon, 24 Apr 2023 19:31:18 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/04/ram-article.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>This article is a comprehensive guide on how to read the contents of your computer's RAM. </p>
<p>Random Access Memory (RAM) is a crucial component of any computer system, and it is responsible for temporarily storing data that is required by the system to carry out its functions. But the contents of RAM can be quite volatile, and they are usually lost when the system is shut down.</p>
<p>One way to preserve the contents of RAM is by performing a RAM dump, which is a process of copying the contents of RAM onto a storage device, such as a hard drive. You can analyze the RAM dump, and the data contained within it can provide valuable insights into the system's state at the time the dump was taken.</p>
<p>In this article, I will walk you through the process of reading the contents of RAM, as well as explain what a RAM dump is and how it can be useful in analyzing a computer system. I will also provide you with step-by-step instructions on how to perform a RAM dump and how to analyze the resulting data.</p>
<h2 id="heading-why-read-ram-data">Why Read RAM Data?</h2>
<p>Reading data from the disc is something you might be familiar with doing. But can we also read data straight from the RAM, where the most essential information is stored?</p>
<p>As developers, we can investigate the space complexity and delve further into the RAM to understand what is going on.</p>
<p>Accessing and reading the contents of RAM can be useful in a variety of scenarios. One common use case is for troubleshooting and diagnosing issues with a computer system. By examining the contents of RAM, you can gain insights into the state of the system at a particular point in time. </p>
<p>For example, if your computer suddenly crashes, examining the contents of RAM can help you identify the cause of the crash.</p>
<p>Another use case is for forensic analysis. When investigating a computer system for evidence of wrongdoing, examining the contents of RAM can provide valuable insights into the activities that were being carried out on the system. </p>
<p>For example, a security professional may use RAM analysis to determine whether a particular process was running on the system or to identify files that were recently accessed.</p>
<p>In addition, accessing and reading the contents of RAM can also be useful for software developers and researchers. By analyzing the data stored in RAM, developers can gain insights into the performance of their software and identify potential issues or bottlenecks. Researchers can also use RAM analysis to study the behavior of malware or to develop new security tools and techniques.</p>
<p>Overall, accessing and reading the contents of RAM can be useful for troubleshooting, forensic analysis, software development, and research. It provides a valuable way to gain insights into the inner workings of a computer system and can help identify issues and potential security threats.</p>
<p>Before we move further into the specifics, let's take a short look at the nomenclature. This may be common knowledge, but you'll need to understand the terminology as you go through this guide, so it's worth a review.</p>
<h2 id="heading-what-is-ram">What is RAM?</h2>
<p>There's a physical hardware device called RAM (which stands for Random Access Memory): the physical memory, a CPU, a hard disk, and other physical components.</p>
<p>On top of this, we have the operating system. The operating system is always in conversation with the piece of hardware known as the "kernel" – and this is one of the most critical aspects of this software.</p>
<p>If we consider things from the user's point of view, we initially log in to the operating system so that we can carry out our tasks, the majority of which include executing applications.</p>
<h3 id="heading-what-is-the-kernel">What is the Kernel?</h3>
<p>A kernel is a fundamental portion of an operating system that accepts the instructions from the user with the aid of the program we run behind the scenes. This may happen regardless of the program that we run behind the scenes.</p>
<p>Everything that has to be computed is handled by the central processing unit (CPU), but whatever we do and however we manage the services provided by the CPU, the data, instructions, code, and program must all go via the random access memory (RAM).</p>
<p>This implies that the results of anything we do with the data at any given moment in time will be available on top of the memory. If you are a programmer and you're constructing some kind of data structure, this indicates that all of the data will live on top of the RAM.</p>
<p>We can directly go to the RAM and see how the data structures have been created and how they align, and we can see how the space complexity works there.</p>
<p>For instance, if we are discussing any web browser, such as Chrome, there may have been security flaws generated in an application. So the most effective method is to navigate to the RAM and investigate how the data has been operating.</p>
<p>Let's say you open any secure website in Chrome (or any browser), like gmail.com. Any information you enter into Gmail, including your username and password, is sent over the internet to a server run by Google. That data has been fully encrypted, and it will be challenging, if not impossible, to crack the password.</p>
<p>But in order to enter your password, you likely use a computer with a keyboard attached to it. After that, some programs will encrypt the data and send it to the internet. This means that initially, your data was present in the RAM.</p>
<p>First, the password is standard data, and the password goes and lands on the top of the RAM. Then, some programs will encrypt the data and send it to the internet. If you can access the RAM, you can examine it to determine whether or not your password has been encrypted. And this process is pretty straightforward.</p>
<p>Let's look at an example to see how this works. We'll pretend that "a" is a variable and "9" is the data. When we execute the program, this data loads onto the RAM. When the program ends, the data from the RAM will be gone, although nobody has proven it yet. But this is the case, and we can prove it with a little investigation.</p>
<p>So how can we check whether or not this data is still present in the RAM after the application has finished running if it was loaded at the very top of the memory?</p>
<p>Well, the RAM will be cleared of these contents shortly. A "RAM dump" is the process of capturing all of the RAM. This demonstrates the actual form in which the entire data set is made accessible and loaded onto the RAM for the first time. And you'll learn how to capture or extract the data from memory next.</p>
<p>In order to accomplish this, you'll need some form of software. As a result, the goal of this program is to travel further into the memory. It will go into memory and retrieve all of the stored data from memory before continuing.</p>
<h3 id="heading-what-is-lime">What is LiME?</h3>
<p>The Linux memory extractor, sometimes referred to as LiME, is a powerful piece of software. It's what you use to extract the memory from Linux. This piece of software is also known as the driver, also referred to as the module. This is because RAM is a device, which complicates things further.</p>
<p>We need some form of driver to access the device so we can try to read the contents of it. LiME is an example of a driver, and if you're familiar with Linux you may know that in order to make any driver function, you need to load that driver with the assistance of the kernel.</p>
<p>Within the context of Linux, a driver is also referred to as a module. So LiME is a Linux kernel module. We have access to what is known as a kernel loadable module, which allows us to install the module on the operating system.</p>
<p>We have covered enough background. Now, let's look at how we can extract the contents of the RAM. We'll go through the process step-by-step in a hands-on way.</p>
<h2 id="heading-setup-and-installations"><strong>Setup</strong> and <strong>Installations</strong></h2>
<p>So, the only thing we need is the LiME driver. Here's the link to download this particular module: <a target="_blank" href="https://github.com/gursimarsm/LiME">https://github.com/gursimarsm/LiME</a>.</p>
<p>Now, boot up your Linux system (I use RedHat Enterprise Linux). You can use the <strong><code>free -h</code></strong> command to check the amount of RAM memory that's being used, that's available, and other details. Mine looks like this:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-186.png" alt="Image" width="600" height="400" loading="lazy">
<em>Output from running the <code>free -m</code> command</em></p>
<p>To access RAM, we need some software where the kernel can load some extra modules. In our case, the module name is LiME. So, the software we install are called “<strong>kernel-devel</strong>”, and “<strong>kernel-headers</strong>”. These two pieces of software are what we need to install in order to perform our subsequent actions, that is to use the LiME module.</p>
<p>If you want to install the software, you should have "yum" configured. For context, <strong>yum</strong> is a command you can use to install the software in the RedHat Linux operating system. I'll demo how to configure it in the appendix for reference.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-187.png" alt="Image" width="600" height="400" loading="lazy">
<em>Installation</em></p>
<p>So, now that you've installed that software, you need one more piece of software because you have to download some drivers from GitHub. So, now you need to install Git if you don't already have it. You can do this using the command <strong><code>yum install git</code></strong>. You also need to configure your account so that you can work with it.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># git config --global user.name "Your Name" </span>

<span class="hljs-comment"># git config --global user.email "you@example.com"</span>
</code></pre>
<p>I shared the repository above. It's a loadable kernel module (LKM). It lets you acquire the entire memory from your Linux operating system or any kind of language operating system (including Android devices because Android is based on Linux as well).</p>
<p>You can download the module using the <code>**# g**it clone**** [**https://github.com/gursimar**sm**/LiME**](https://github.com/gursimarsm/LiME)</code> command.</p>
<p>After downloading that, you need to move into the directory of the software. You'll find multiple folders there. But, to run the main code, you need to move to the "src" directory.</p>
<p>In this directory, you'll find multiple programs based on the C language. So, in order to make use of the files, you'll need to compile them. To do that, you can use the <strong><code>make</code></strong> command. Install that like this:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># yum install make </span>

<span class="hljs-comment"># yum install gcc</span>
</code></pre>
<p>In the directory /LiME/src/, run the <strong><code>make</code></strong> command to compile the entire code.</p>
<p>If you encounter an error, it might be because we are using the latest version of LiME, and it comes with a new feature called orc metadata generate. To implement this feature, you have to install one more thing that's part of LiME called <strong><code>elfutils-libelf-devel</code></strong>. You can do that using yum like you can see below:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-188.png" alt="Image" width="600" height="400" loading="lazy">
<em>How to install <strong><code>elfutils-libelf-devel</code></strong></em></p>
<p>After that's done, if we now run the <code>make</code> command it will ask the GCC compiler to compile the entire code. After the compilation, it will create one final object file called the kernel object file, and that is the final module in LiME.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-189.png" alt="Image" width="600" height="400" loading="lazy">
<em>Output</em></p>
<p>You can find this file in the same directory by using the <strong><code>ls</code></strong> command.</p>
<h2 id="heading-how-to-use-the-module"><strong>How to Use the Module</strong></h2>
<p>With this module, the kernel now has the capability to capture or read the entire RAM. By default, we can't read the entire RAM in one go, but now because of the LiME module, we can.</p>
<p>To learn more about the LiME module, you can use the <strong><code>modinfo</code></strong> command. Type <code>modinfo</code> along with <code>lime</code>. This will show you some more details like where the file is available, and it also displays all the modules or drivers that come with some kind of extra parameters. Every parameter has some benefits.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-190.png" alt="Image" width="600" height="400" loading="lazy">
<em>modinfo</em></p>
<p>Here we are going to use two parameters which are very important: <code>path</code> and <code>format</code>.</p>
<p><code>path</code> means when we read the entire RAM, we have to store the data of the RAM in some file. So, to specify the destination file we would like to create, we have to give that particular information over here.</p>
<p>The next parameter, <code>format</code>, specifies the format in which we want to read the RAM data. So, in this case, we want to read the format of the RAM as it is. The data stored in the RAM is mostly in binary, and we want to read the entire data in that binary format only and capture it in its raw form.</p>
<p>So, the format will be raw and stored in the file wherever we give the path.</p>
<p>Finally, it's time to read the data from the RAM. So, let's come to the main command that will help us start reading the entire RAM.</p>
<h3 id="heading-demonstration">Demonstration</h3>
<p>Type in your password for your Gmail account in Chrome for this demonstration. This will help you learn how to capture the data from the RAM and also if your password is encrypted.</p>
<p>To verify these two things, move to the command prompt and check if the data is still on the RAM. You'll have to load a particular module using the command <strong><code>insmod</code></strong>. This will help you insert the module.</p>
<p>Copy the complete path of the module and paste it along with the <code>insmod</code> command.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-191.png" alt="Image" width="600" height="400" loading="lazy">
<em><code>insmod</code> command</em></p>
<p>This module will get loaded with the help of the kernel. The module will start capturing the entire data from the RAM and it'll store it in a file, for example, myram.data</p>
<p>It will also load the entire memory dump or RAM dump into this file and which format we want to capture. So, the format will be the raw format.</p>
<p>We'll use these two parameters (don't worry about this for now). We need only two parameters to perform, and now as soon as we hit this command, whatever data we have will be captured and stored in this particular file. This command typically takes a few seconds, depending on the CPU speed and the amount of data we have in the RAM.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-192.png" alt="Image" width="600" height="400" loading="lazy">
<em>Command</em></p>
<h3 id="heading-how-to-read-the-data">How to read the data</h3>
<p>Now, we have this file myram.data and the entire data of the RAM is stored in this file. Because we captured this data in the raw format, the data is going to be in binary. If we try to read this data from this file directly, as human beings, we can't read it even if we try it with the initial lines using the head command to read some of the top 10 lines.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-193.png" alt="Image" width="600" height="400" loading="lazy">
<em>Output</em></p>
<p>So, we can use the “cat” command, which will read the entire data. But, again, the same thing is going to happen – it will read the entire data, but the data will be displayed in the binary format. Then we need to use the pipe function with this command and combine it with another new command called <code>strings</code>:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-194.png" alt="Image" width="600" height="400" loading="lazy">
<em>Command</em></p>
<p>String is a command that will convert the data into regular text in a human-readable format.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/04/image-195.png" alt="Image" width="600" height="400" loading="lazy">
<em>Output</em></p>
<p>The list will go on and on. You can interrupt it using <strong>Ctl+C</strong>.</p>
<p>Right now, it won't mean much seeing and reading the entire data. We know some data that are there on the RAM is the password called mywebpasswordgmail. So, just to confirm that this data is available on the RAM we can use one more pipe along with the <code>grep</code> command. The grep command helps us sort the data.</p>
<pre><code class="lang-bash">cat /myram.data | strings | grep mywebpasswordgmail
</code></pre>
<p>Now, we are searching for this string in the entire data. It will convert the data into regular text, and wherever that particular string shows up, grep will grab that line and let us start searching, then show us this data.</p>
<p>So, as you can see from this simple example, whatever you type on your keyboard can also go into the RAM – even if it's your password or any kind of secure site you are surfing, your data is there on the RAM. It doesn't matter what program you run. If you type using the keyboard everything will load on the RAM and can be extracted. This is called the memory dump.</p>
<p>LiME provides us with many other powerful capabilities. Right now, we are capturing the data directly from the system where we perform the actions. But we can also run LiME on the system and it can capture the data in real-time and send the data over the network to another computer.</p>
<p>What does this mean? Think of it this way: for example, somebody opens a website and they're typing something in real-time. This entire message is being transmitted in real-time to another computer.</p>
<p>We're not talking about key loggers, we are just talking about the RAM. Whatever is happening when any program is running, the database is storing some data. Programs are reading data from other parts of the hard disk. And whatever is happening on the RAM can be captured in real-time by the system and sent over the network to other computers.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>We’ve finally come to the end of this article. I hope you've enjoyed it and have learned something new.</p>
<p>I’m always open to suggestions and discussions on <a target="_blank" href="https://www.linkedin.com/in/gursimarsm">LinkedIn</a>. Hit me up with direct messages.</p>
<p>If you’ve enjoyed my writing and want to keep me motivated, consider leaving starts on <a target="_blank" href="https://github.com/gursimarsm">GitHub</a> and endorse me for relevant skills on <a target="_blank" href="https://www.linkedin.com/in/gursimarsm">LinkedIn</a>.</p>
<p>Till the next one, stay safe and keep learning.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Prim's Algorithm – Explained with a Pseudocode Example ]]>
                </title>
                <description>
                    <![CDATA[ In Computer Science, Prim’s algorithm helps you find the minimum spanning tree of a graph. It is a greedy algorithm – meaning it selects the option available at the moment. In this article, I’ll show you the pseudocode representation of Prim’s algori... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/prims-algorithm-explained-with-pseudocode/</link>
                <guid isPermaLink="false">66adf1cc11a28b6eb378d2c1</guid>
                
                    <category>
                        <![CDATA[ algorithms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kolade Chris ]]>
                </dc:creator>
                <pubDate>Tue, 14 Feb 2023 22:12:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/02/prim-cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>In Computer Science, Prim’s algorithm helps you find the minimum spanning tree of a graph. It is a greedy algorithm – meaning it selects the option available at the moment.</p>
<p>In this article, I’ll show you the pseudocode representation of Prim’s algorithm. But before that, let’s take a deeper look at what Prim’s algorithm is.</p>
<h2 id="heading-what-well-cover">What We'll Cover</h2>
<ul>
<li><a class="post-section-overview" href="#heading-what-is-prims-algorithm">What is Prim’s Algorithm?</a></li>
<li><a class="post-section-overview" href="#heading-how-to-implement-prims-algorithm">How to Implement Prim’s Algorithm</a></li>
<li><a class="post-section-overview" href="#heading-pseudocode-example-of-prims-algorithm">Pseudocode Example of Prim’s Algorithm</a></li>
<li><a class="post-section-overview" href="#heading-how-to-implement-prims-algorithm-in-javascript-using-the-pseudocode">How to Implement Prim’s Algorithm in JavaScript Using the Pseudocode</a></li>
<li><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></li>
</ul>
<h2 id="heading-what-is-prims-algorithm">What is Prim’s Algorithm?</h2>
<p>Prim’s algorithm is a type of greedy algorithm for finding the minimum spanning tree (MST) of an undirected and weighted graph. </p>
<p>A minimum spanning tree (MST) is the subset of the edges of a graph that connects all the vertices (the point where the sides meet) together so that the total weight of the edges is minimized without forming a cycle.</p>
<p>So, bear in mind that if you’re finding the MST of a graph with Prim’s algorithm, there must be no cycle. That is, if A links to B and B links to C, C cannot link to A again because that would make a cycle. I prepared some infographics with explanations that will help you grasp it better in the next sections of this article.</p>
<p>The total weight of the edges is also commonly referred to as <code>cost</code>. And one of the goals of Prim’s algorithm is to get the minimum cost tree that covers the vertices in the graph without leaving any of them behind. </p>
<p>So, that’s another thing to bear in mind – all the vertices must be involved in getting the minimum spanning tree (MST).</p>
<p>Prim’s algorithm is also called <strong>Jarník's algorithm</strong> because it was initially developed by Czech Mathematician Vojtěch Jarník in 1930. It was later rediscovered and published by Robert C. Prim in 1957 – hence the name Prim’s algorithm.</p>
<p>Prim’s algorithm works by starting from an arbitrary vertex, adding the minimum weight edge that connects the tree to a new vertex, and repeating this process until all vertices have been included in the tree.</p>
<h2 id="heading-how-to-implement-prims-algorithm">How to Implement Prim’s Algorithm</h2>
<p>To implement Prim’s algorithm in finding the minimum spanning tree of a graph, here are the three things to bear in mind:</p>
<ul>
<li>all the vertices of the graph must be included</li>
<li>the vertex with the minimum weight must be selected first. You’ll also hear some people refer to that weight as distance, but let’s keep calling it weight. </li>
<li>all the vertices must be connected</li>
<li>there must be no cycle </li>
</ul>
<p>Consider the graph below: 
<img src="https://www.freecodecamp.org/news/content/images/2023/02/start-graph.png" alt="start-graph" width="600" height="400" loading="lazy"> </p>
<p>You have to start by choosing an arbitrary vertex as the starting point and adding it to the tree. </p>
<p>For the next step, you have to select the edge with the minimum weight that connects a vertex in the tree to a vertex not yet in the tree, and then add the new vertex to the tree. </p>
<p>Choosing <code>D</code> as the starting vertex resulted in this:
<img src="https://www.freecodecamp.org/news/content/images/2023/02/first-res.png" alt="first-res" width="600" height="400" loading="lazy"> </p>
<p>This is how it happened:</p>
<ul>
<li><p><code>D</code> was the starting point</p>
</li>
<li><p>the next minimum weight connected to <code>D</code> is <code>2</code> – the line between <code>D</code> and <code>C</code>. So, I chose it.</p>
</li>
<li><p>looking at vertex <code>C</code>, the next minimum weight to it is <code>1</code> – the line between <code>C</code> and <code>A</code>. So, I chose it as the next one</p>
</li>
<li>looking at <code>A</code>, lines <code>2</code> and <code>4</code> are connected to it. We cannot choose <code>4</code>because it’s bigger than <code>2</code> and it’ll lead us back to the starting point <code>D</code>. So, we have to choose <code>2</code> – the line connecting vertices <code>A</code> and <code>B</code>.</li>
<li>looking at <code>B</code>, line <code>3</code> connects it to <code>C</code> and line <code>7</code> connects it to <code>E</code>. We cannot choose line <code>3</code> because that will form a cycle between <code>C</code>, <code>A</code>, and <code>B</code>. We also should think twice before choosing line 7 because it’s a big number. There’s a line <code>4</code> connecting <code>C</code> to <code>G</code>, so, I chose it</li>
<li>On the vertex <code>G</code>, there’s a connection to <code>F</code> with line <code>1</code> and line <code>3</code> to <code>E</code>, so I’ll choose the minimum weight which is <code>1</code></li>
<li>At this point, <code>E</code> is the only vertex not connected yet. It’s possible to connect it because it won’t form a cycle at any point. So, I connected it.</li>
</ul>
<p>Here's the step-by-step connection:
<img src="https://www.freecodecamp.org/news/content/images/2023/02/the-steps.png" alt="the-steps" width="600" height="400" loading="lazy"></p>
<p>Again, this is what all of the points above lead to:
<img src="https://www.freecodecamp.org/news/content/images/2023/02/first-res-1.png" alt="first-res-1" width="600" height="400" loading="lazy"></p>
<p>The cost is the sum of all the weights connected to the vertices. That’s how I got 13.</p>
<p>This process continues until all the vertices have been added to the tree. It doesn’t leave any of them behind and forms no cycle.</p>
<p>You can make any of the vertices the starting point. This is the result if I start from vertex <code>A</code>:
<img src="https://www.freecodecamp.org/news/content/images/2023/02/second-res.png" alt="second-res" width="600" height="400" loading="lazy"></p>
<p>And this is the result if I start from vertex <code>C</code>:
<img src="https://www.freecodecamp.org/news/content/images/2023/02/third-res.png" alt="third-res" width="600" height="400" loading="lazy"> </p>
<h2 id="heading-pseudocode-example-of-prims-algorithm">Pseudocode Example of Prim’s Algorithm</h2>
<p>Below is some pseudocode for the implementation of Prim’s algorithm. I have also included comments so you can keep track of things as they happen:</p>
<pre><code class="lang-py">prim(graph):
    <span class="hljs-comment"># Initialize an empty set to hold the vertices in the minimum spanning tree</span>
    mst = empty set

    <span class="hljs-comment"># Select the first vertex to start the tree</span>
    startVertex = first vertex <span class="hljs-keyword">in</span> graph
    mst.add(startVertex)

    <span class="hljs-comment"># Initialize the set of edges to consider</span>
    edges = edges connected to startVertex

    <span class="hljs-comment"># Iterate until all vertices are in the minimum spanning tree</span>
    <span class="hljs-keyword">while</span> mst has fewer vertices than graph:
        <span class="hljs-comment"># Find the minimum edge in the set of edges</span>
        minEdge, minWeight = findMinEdge(edges)

        <span class="hljs-comment"># Add the vertex to the minimum spanning tree</span>
        mst.add(minEdge)

        <span class="hljs-comment"># Add the edges connected to the vertex to the set of edges to consider</span>
        <span class="hljs-keyword">for</span> edge <span class="hljs-keyword">in</span> edges connected to minEdge:
            <span class="hljs-keyword">if</span> edge <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> mst:
                edges.add(edge)

        <span class="hljs-comment"># Remove the minimum edge from the set of edges to consider</span>
        edges.remove(minEdge)

    <span class="hljs-comment"># Return the minimum spanning tree as an array</span>
    <span class="hljs-keyword">return</span> mst <span class="hljs-keyword">as</span> an array
</code></pre>
<h2 id="heading-how-to-implement-prims-algorithm-in-javascript-using-the-pseudocode">How to Implement Prim’s Algorithm in JavaScript Using the Pseudocode</h2>
<p>Using that pseudocode, you can implement Prim’s algorithm in JavaScript this way:</p>
<pre><code class="lang-js"><span class="hljs-comment">// Define a graph as an adjacent list</span>
<span class="hljs-keyword">const</span> graph = {
  <span class="hljs-string">'A'</span>: {<span class="hljs-string">'B'</span>: <span class="hljs-number">4</span>, <span class="hljs-string">'C'</span>: <span class="hljs-number">2</span>},
  <span class="hljs-string">'B'</span>: {<span class="hljs-string">'A'</span>: <span class="hljs-number">4</span>, <span class="hljs-string">'C'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'D'</span>: <span class="hljs-number">5</span>},
  <span class="hljs-string">'C'</span>: {<span class="hljs-string">'A'</span>: <span class="hljs-number">2</span>, <span class="hljs-string">'B'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'D'</span>: <span class="hljs-number">8</span>, <span class="hljs-string">'E'</span>: <span class="hljs-number">10</span>},
  <span class="hljs-string">'D'</span>: {<span class="hljs-string">'B'</span>: <span class="hljs-number">5</span>, <span class="hljs-string">'C'</span>: <span class="hljs-number">8</span>, <span class="hljs-string">'E'</span>: <span class="hljs-number">2</span>},
  <span class="hljs-string">'E'</span>: {<span class="hljs-string">'C'</span>: <span class="hljs-number">10</span>, <span class="hljs-string">'D'</span>: <span class="hljs-number">2</span>}
};

<span class="hljs-comment">// Find the minimum edge in the edge list</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findMinEdge</span>(<span class="hljs-params">edges</span>) </span>{
  <span class="hljs-keyword">let</span> minEdge = <span class="hljs-literal">null</span>;
  <span class="hljs-keyword">let</span> minWeight = <span class="hljs-literal">Infinity</span>;
  <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> [v, weight] <span class="hljs-keyword">of</span> <span class="hljs-built_in">Object</span>.entries(edges)) {
    <span class="hljs-keyword">if</span> (weight &lt; minWeight) {
      minEdge = v;
      minWeight = weight;
    }
  }
  <span class="hljs-keyword">return</span> [minEdge, minWeight];
}

<span class="hljs-comment">// Find the minimum spanning tree using Prim's algorithm</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">prim</span>(<span class="hljs-params">graph</span>) </span>{
  <span class="hljs-comment">// Initialize an empty set to hold the vertices in the MST</span>
  <span class="hljs-keyword">const</span> mst = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>();

  <span class="hljs-comment">// Select the first vertex to start the tree</span>
  <span class="hljs-keyword">const</span> startVertex = <span class="hljs-built_in">Object</span>.keys(graph)[<span class="hljs-number">0</span>];
  mst.add(startVertex);

  <span class="hljs-comment">// Initialize the set of edges to consider</span>
  <span class="hljs-keyword">const</span> edges = graph[startVertex];

  <span class="hljs-comment">// Iterate over the graph object until all vertices are in the MST</span>
  <span class="hljs-keyword">while</span> (mst.size &lt; <span class="hljs-built_in">Object</span>.keys(graph).length) {
    <span class="hljs-comment">// Find the minimum edge in the set of edges</span>
    <span class="hljs-keyword">const</span> [minEdge, minWeight] = findMinEdge(edges);

    <span class="hljs-comment">// Add the vertex to the MST</span>
    mst.add(minEdge);

    <span class="hljs-comment">// Add the edges connected to the vertex to the set of edges to consider</span>
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> [v, weight] <span class="hljs-keyword">of</span> <span class="hljs-built_in">Object</span>.entries(graph[minEdge])) {
      <span class="hljs-keyword">if</span> (!mst.has(v)) {
        edges[v] = weight;
      }
    }

    <span class="hljs-comment">// Remove the minimum edge from the set of edges to consider</span>
    <span class="hljs-keyword">delete</span> edges[minEdge];
  }

  <span class="hljs-comment">// Return the MST as an array</span>
  <span class="hljs-keyword">return</span> <span class="hljs-built_in">Array</span>.from(mst);
}

<span class="hljs-comment">// Call the prim function with the graph object</span>
<span class="hljs-keyword">const</span> minimumSpanningTree = prim(graph);

<span class="hljs-comment">// Log the result to the console</span>
<span class="hljs-built_in">console</span>.log(minimumSpanningTree);

<span class="hljs-comment">// Result: ['A', 'C', 'B', 'D', 'E']</span>
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Prim’s algorithm is a fun and useful algorithm used in everyday life to solve problems. That’s why this article was dedicated to showing you what it is and a pseudocode example with which you can implement it in any language. </p>
<p>If you are wondering what you can use Prim’s algorithm for, here are some of its applications: </p>
<ul>
<li>designing transportation networks</li>
<li>building phylogenetic trees in bioinformatics</li>
<li>segmenting images based on color and pixel intensity</li>
<li>grouping similar objects together in clustering algorithms</li>
</ul>
<p>Thank you for reading.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Review of CS50 – Harvard's Introduction to Computer Science Course ]]>
                </title>
                <description>
                    <![CDATA[ Are you considering taking the CS50 Introduction to Computer Science course, but wondering if it's the right fit for you? As someone who doesn’t have a computer science degree and was looking to learn the fundamentals of the field, I was in the same ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/cs50-course-review/</link>
                <guid isPermaLink="false">66d4608c230dff016690584d</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ cs50 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ learning to code ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Phoebe Voong-Fadel ]]>
                </dc:creator>
                <pubDate>Mon, 09 Jan 2023 22:20:27 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/01/this-is-cs50-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Are you considering taking the <a target="_blank" href="https://www.freecodecamp.org/news/harvard-cs50/">CS50</a> Introduction to Computer Science course, but wondering if it's the right fit for you?</p>
<p>As someone who doesn’t have a computer science degree and was looking to learn the fundamentals of the field, I was in the same boat. That's why I decided to enrol on the course and document my experience in this article.</p>
<p>I'll provide an overview and review of CS50 to help you decide if it's the right course for you.</p>
<h2 id="heading-what-is-cs50">What is CS50?</h2>
<p>CS50 is a ten week online and on-campus course which serves as an introduction to computer science. It's taught at Harvard and Yale University.</p>
<p>The course leader is Professor David J. Malan. He’s supported by the CS50 team, which consists of Senior Preceptors and an entire production team. The course runs from 1 January to 31 December.</p>
<h2 id="heading-why-choose-cs50">Why choose CS50?</h2>
<p>There are several reasons why CS50 might be a good choice for you. Here are a few:</p>
<ul>
<li><p>It's a highly respected course offered by Harvard University. This means that you'll be learning from experienced instructors and getting access to a top-quality course.</p>
</li>
<li><p>It covers a wide range of topics, including computer science fundamentals, algorithms, data structures, and programming languages such as C, Python, and SQL. This means that you'll have a well-rounded introduction to the field.</p>
</li>
<li><p>It's self-paced, which means that you can work through the course at your own pace and fit it into your schedule. You can watch the lectures on various platforms, including EdX and freeCodeCamp's YouTube channel. For me this was important as I didn’t have a lot of spare time.</p>
</li>
<li><p>It's free! You’ll have access to the lectures and course materials.</p>
</li>
</ul>
<h2 id="heading-what-is-the-format-of-the-course">What is the Format of the Course?</h2>
<p>There are ten weeks worth of lectures, labs, and problem sets, which must be completed. At the end of the course, there’s a final project.</p>
<h3 id="heading-is-this-a-course-for-beginners">Is this a course for beginners?</h3>
<p>Yes. In fact, around two thirds of students who enroll in CS50 have never taken a computer science course before. So if you're new to the field and looking to learn the basics, you'll be in good company.</p>
<p>That being said, don't expect the course to be easy. While the lectures are designed to be accessible and engaging, the problem sets and labs can be challenging. On average, students should expect to spend around 12 hours per week on the course.</p>
<h3 id="heading-do-i-get-a-certificate-at-the-end-of-the-course">Do I get a certificate at the end of the course?</h3>
<p>You can choose to receive a free CS50 certificate or pay for a verified certificate from <a target="_blank" href="https://www.edx.org/verified-certificate">edX</a>.</p>
<h3 id="heading-what-if-you-dont-finish-the-course-by-31-december">What if you don’t finish the course by 31 December?</h3>
<p>You can roll over any submissions into the following year. I did this and the process was straightforward. The course content is pretty much the same with some updates to the course materials.</p>
<h2 id="heading-cs50-walkthrough-week-by-week">CS50 Walkthrough, Week by Week</h2>
<h3 id="heading-week-0-learn-scratch">Week 0: Learn Scratch</h3>
<p>In the first week of the course, you'll be introduced to the world of computer science and learn about how numbers, text, and images are represented in binary.</p>
<p>You'll also learn about algorithms and pseudo code, and get a hands-on introduction to <a target="_blank" href="https://scratch.mit.edu/">Scratch</a>, a graphical programming language.</p>
<p>For your first problem set, you'll create a Scratch project. This week is a fun way to ease you into the course and get a taste of programming.</p>
<p>If you’re interested, this is <a target="_blank" href="https://scratch.mit.edu/projects/500624784">my Scratch project</a>, which was inspired by my son who’s fascinated by space.</p>
<h3 id="heading-week-1-learn-c">Week 1: Learn C</h3>
<p>In the second week of the course, you'll dive into <a target="_blank" href="https://www.freecodecamp.org/news/learn-c-programming-classic-book-dr-chuck/">C, a low-level programming language</a>.</p>
<p>You'll learn programming fundamentals such as functions, conditionals, boolean expressions, loops, and variables.</p>
<p>For the problem set, you'll create a program that outputs a pyramid of hashes like at the end of a level in a Super Mario game.</p>
<h3 id="heading-week-2-introduction-to-arrays">Week 2: Introduction to Arrays</h3>
<p>You'll continue learning about programming in C and delve into topics such as how your program compiles, debugging, arrays, characters, strings, and command-line arguments.</p>
<p>For the lab, you'll write a <a target="_blank" href="https://www.freecodecamp.org/news/how-to-code-the-caesar-cipher-an-introduction-to-basic-encryption-3bf77b4e19f7/">Caesar's cipher</a> program, and for the problem set, you'll work on a scrabble-type challenge. If you’ve completed the <a target="_blank" href="https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/">JavaScript Algorithm and Data Structures</a> certificate on freeCodeCamp, this should be familiar as this is one of the coding challenges.</p>
<h3 id="heading-week-3-introduction-to-algorithms">Week 3: Introduction to Algorithms</h3>
<p>In week three, you'll learn about different types of search (linear and binary) and different types of sort (selection and bubble), as well as recursion.</p>
<p>You'll also learn about <a target="_blank" href="https://www.freecodecamp.org/news/big-o-notation/">big O notation</a>, which can be challenging but is an important concept in computer science. Thankfully, the course provides additional short videos on more difficult concepts, which provide a more detailed explanation with examples.</p>
<h3 id="heading-week-4-computer-memory">Week 4: Computer Memory</h3>
<p>Week four focuses on memory, including topics such as pointers, addresses, memory allocation and freeing memory, detecting memory leaks, and explaining how a stack overflow occurs.</p>
<p>The lab and problem set involve manipulating audio and image files. Below is an example of a filter I created in C.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/tweet-week-4.png" alt="Screenshot of tweet with an image of a church that is colour. Next to it an image of the same church in grayscale" width="600" height="400" loading="lazy"></p>
<h3 id="heading-week-5-data-structures">Week 5: Data Structures</h3>
<p>In the final week of programming in C, you'll learn about how pointers can be used to store the addresses in memory for linked lists.</p>
<p>The lab consolidates your knowledge of pointers, and the problem set involves creating a spell checking program. This was a particularly tricky exercise and it’s worth taking your time to understand the starter files provided before delving in.</p>
<h3 id="heading-week-6-learn-python-basics">Week 6: Learn Python Basics</h3>
<p>Week six marks the transition from C to <a target="_blank" href="https://en.wikipedia.org/wiki/Python_\(programming_language\)">Python</a>, a popular programming language that is easier to learn and use than C. You'll work on problem sets that involve translating previous programs written in C to Python.</p>
<h3 id="heading-week-7-sql-and-relational-databases">Week 7: SQL and Relational Databases</h3>
<p>In week seven, you'll learn about relational databases and <a target="_blank" href="https://en.wikipedia.org/wiki/SQL">SQL</a> (Structured Query Language), using SQLite to execute queries on the command line and in Python.</p>
<p>The problem set is a fun one, as you’ll have to solve a mystery of who stole the CS50 duck through a series of SQL queries!</p>
<h3 id="heading-week-8-html-css-and-javascript">Week 8: HTML, CSS, and JavaScript</h3>
<p>Week eight covers the basics of the internet and the web, including HTML, CSS, and JavaScript on the client side.</p>
<p>For the problem set you’ll create a home page about yourself.</p>
<h3 id="heading-week-9-flask">Week 9: Flask</h3>
<p>In week nine, you'll learn about <a target="_blank" href="https://en.wikipedia.org/wiki/Flask_\(web_framework\)">Flask</a>, a Python framework that is used to build web applications. You'll cover topics such as forms, layouts and templating using <a target="_blank" href="https://en.wikipedia.org/wiki/Jinja_\(template_engine\)">Jinja</a>, POST and GET requests, and how to email from a Flask application. You'll also walk through the process of building a full-stack application.</p>
<p>For the problem set, you'll put your skills to the test by implementing a full-stack finance application that brings together everything you've learned throughout the course. This is a challenging but rewarding project that will give you a taste of what it's like to build a real-world web application.</p>
<h3 id="heading-week-10-wrap-up-lecture">Week 10: Wrap up lecture</h3>
<p>No exercises this week. There’s a guest lecturer and a wrap up from Prof Malan.</p>
<h3 id="heading-the-final-project">The final project</h3>
<p>The last part of the course is the final project. The brief is to:</p>
<blockquote>
<p>“build something of interest to you, that you solve an actual problem, that you impact your community, or that you change the world.”</p>
</blockquote>
<p>This is deliberately vague, so you have the freedom to choose any programming language and project you like. You'll also have to record a three minute video demoing your app.</p>
<p>I built a baby tracking app. On the backend I developed a REST API with Python and Flask. For my database I used SQLite. On the client side, I used React.js.</p>
<p>This is a substantial piece of work. From conception, to designing my application through to developing the app, I probably spent over 30 hours on this.</p>
<p>Your final project would make a great addition to your personal portfolio so have fun with it! Below are some screenshots of my application.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/My-project.png" alt="screenshots of baby tracking app" width="600" height="400" loading="lazy"></p>
<h2 id="heading-what-are-the-benefits-of-taking-cs50">What Are the Benefits of Taking CS50?</h2>
<ul>
<li><p>The lectures are high quality, in terms of content and production. Professor Malan is animated, enthusiastic, and is very passionate about teaching computer science and programming. The visual examples on the stage and on the interactive screens are helpful for understanding difficult concepts.</p>
</li>
<li><p>The problem sets are well-structured and provide detailed walkthrough videos, specifications, and starter code with comments to help guide you through the tasks. You can also test your code to see if it meets all the requirements before submitting.</p>
</li>
<li><p>Setting up your integrated development environment (IDE) is straightforward, thanks to a modified version of GitHub Codespaces, which allows you to code in the browser.</p>
</li>
<li><p>The <a target="_blank" href="https://manual.cs50.io/">CS50</a> library is a helpful resource with great documentation. The library provides functions such as <code>get_string</code>, which prompts a user for a string in the command line interface (CLI). These functions act like training wheels during the early weeks of the course, helping you to focus on familiarising yourself with the programming language.</p>
</li>
<li><p>For some of the problem sets, there are two options: one for when you're "feeling less comfortable" and one for when you're "feeling more comfortable." This allows you to choose the level of difficulty that is right for you.</p>
</li>
<li><p>The course is structured in a way that builds on your knowledge from previous lectures and problem sets. You'll start with C, a low-level language, and then move on to how to implement the same things in Python and JavaScript later in the course.</p>
</li>
<li><p>There is a large and active online CS50 community on various platforms such as Facebook, Twitter, Discord, and LinkedIn, where you can connect with other students and get help with problem sets and labs.</p>
</li>
<li><p>The course is free and accessible to anyone with a computer and an internet connection.</p>
</li>
</ul>
<h3 id="heading-what-are-the-drawbacks-of-cs50">What are the drawbacks of CS50?</h3>
<p>The course is challenging. It can have a steep learning curve. I found I had to do additional reading around subjects I was not familiar/comfortable with.</p>
<p>Most people don't finish the course, but even if you don't complete it, you can still benefit from what you learn. In the words of Prof Malan:</p>
<blockquote>
<p>“What ultimately matters in this course is not so much where you end up relative to your classmates but where you end up relative to yourself when you begin.”</p>
</blockquote>
<h2 id="heading-summary">Summary</h2>
<p>CS50 is a comprehensive and highly respected course that provides a strong foundation in computer science.</p>
<p>As a self-taught frontend developer with no computer science degree, I found that the course was an excellent way to fill in knowledge gaps and strengthen my understanding of the fundamentals of the field.</p>
<p>The lectures are engaging and well-produced, and the problem sets are challenging but provide a valuable opportunity to apply what you've learned.</p>
<p>The course covers a wide range of topics, making it an excellent introduction to computer science. Overall, it is a standout course and one of the best online learning experiences I've had.</p>
<p>I hope you’ve found this article useful and it’s helped you with making the decision on whether to take CS50.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 860+ Free Online Programming & Computer Science Courses You Can Start This New Year ]]>
                </title>
                <description>
                    <![CDATA[ By Dhawal Shah Twelve years ago, universities like Stanford and MIT opened up free online courses to the public. Today, over 1,200 schools around the world have created thousands of free online courses. To welcome the new year, I’ve compiled this lis... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/free-online-programming-cs-courses/</link>
                <guid isPermaLink="false">66d45ea64a7504b7409c33b9</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ online courses ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 04 Jan 2023 17:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/01/programming-courses-banner.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Dhawal Shah</p>
<p>Twelve years ago, universities like Stanford and MIT opened up <a target="_blank" href="https://www.classcentral.com/">free online courses</a> to the public. Today, over <a target="_blank" href="https://www.classcentral.com/universities">1,200 schools</a> around the world have created thousands of free online courses.</p>
<p>To welcome the new year, I’ve compiled this list of 860+ such free online courses that you can start right now. For this, I leveraged <a target="_blank" href="https://www.classcentral.com/">Class Central</a>’s database of over 100,000 <a target="_blank" href="https://www.classcentral.com/">online courses</a>. When available, I've also included the course average rating.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/01/cc-homepage-new-year-2022-2023-final.png" alt="Class Central's homepage screenshot" width="600" height="400" loading="lazy">
<em><a target="_blank" href="https://www.classcentral.com/">Class Central homepage</a></em></p>
<p>I’ve sorted these courses into the following categories, based on their difficulty level:</p>
<ul>
<li>Beginner</li>
<li>Intermediate</li>
<li>Advanced</li>
</ul>
<p>Courses that are being offered for the first time are marked as <strong>[NEW]</strong>. Almost all of these courses are completely self-paced, meaning you can start right now. </p>
<p>You can find complete lists of technology-related courses on Class Central’s <a target="_blank" href="https://www.classcentral.com/subject/cs">Computer Science</a>, <a target="_blank" href="https://www.classcentral.com/subject/data-science">Data Science</a>, and <a target="_blank" href="https://www.classcentral.com/subject/programming-and-software-development">Programming</a> subject pages. If the options feels overwhelming, there, you'll also find guides to help you find the best course for you.</p>
<p>Finally, if you have trouble figuring out how to sign up for Coursera courses for free, don’t worry — I’ve written <a target="_blank" href="https://www.classcentral.com/report/coursera-signup-for-free/">an article on how to do that, too</a>.</p>
<p></p><h2 id="heading-beginner-225">Beginner (225)</h2><p></p>
<ul>
     <li><a href="https://www.classcentral.com/course/independent-elements-of-ai-12469?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Elements of AI</a> from <em>University of Helsinki</em> ★★★★★(713)</li>
     <li><a href="https://www.classcentral.com/course/edx-unlocking-information-security-part-i-16964?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Unlocking Information Security I: From Cryptography to Buffer Overflows</a> from <em>Tel Aviv University</em> ★★★★★(298)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-introduction-to-computer-science-442?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Introduction to Computer Science</a> from <em>Harvard University</em> ★★★★★(140)</li>
     <li><a href="https://www.classcentral.com/course/computational-social-science-methods-17299?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computational Social Science Methods</a> from <em>University of California, Davis</em> ★★★★★(107)</li>
     <li><a href="https://www.classcentral.com/course/introhtml-4307?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to HTML5</a> from <em>University of Michigan</em> ★★★★☆(50)</li>
     <li><a href="https://www.classcentral.com/course/edx-unlocking-information-security-part-ii-16965?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Unlocking Information Security II: An Internet Perspective</a> from <em>Tel Aviv University</em> ★★★★★(50)</li>
     <li><a href="https://www.classcentral.com/course/insidetheinternet-335?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet History, Technology, and Security</a> from <em>University of Michigan</em> ★★★★★(41)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-linux-1857?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Linux</a> from <em>Linux Foundation</em> ★★★★☆(37)</li>
     <li><a href="https://www.classcentral.com/course/db-303?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Databases</a> from <em>Stanford University</em> ★★★★★(30)</li>
     <li><a href="https://www.classcentral.com/course/build-a-computer-3234?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)</a> from <em>Hebrew University of Jerusalem</em> ★★★★★(28)</li>
     <li><a href="https://www.classcentral.com/course/edx-fundamentos-tic-para-profesionales-de-negocios-desarrollo-de-software-8495?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentos TIC para profesionales de negocios: Desarrollo de Software</a> from <em>Universitat Politècnica de València</em> ★★★★☆(26)</li>
     <li><a href="https://www.classcentral.com/course/intro-to-quantum-computing-120532?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">[New] Introduction to Quantum Computing</a> from <em>The University of British Columbia</em></li>
     <li><a href="https://www.classcentral.com/course/coding-interview-preparation-89690?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">[New] Coding Interview Preparation</a> from <em>Meta</em></li>
     <li><a href="https://www.classcentral.com/course/meta-software-development-practices-94893?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">[New] Software Development Practices</a> from <em>Meta</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-cyber-security-2448?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cyber Security</a> from <em>The Open University</em> ★★★★☆(22)</li>
     <li><a href="https://www.classcentral.com/course/edx-web-security-fundamentals-8726?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Security Fundamentals</a> from <em>KU Leuven University</em> ★★★★☆(22)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-web-programming-with-python-and-javascript-11506?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Web Programming with Python and JavaScript</a> from <em>Harvard University</em> ★★★★★(21)</li>
     <li><a href="https://www.classcentral.com/course/html-css-javascript-for-web-developers-4270?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">HTML, CSS, and Javascript for Web Developers</a> from <em>Johns Hopkins University</em> ★★★★★(20)</li>
     <li><a href="https://www.classcentral.com/course/edx-computer-science-101-2175?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Science 101</a> from <em>Stanford University</em> ★★★★☆(18)</li>
     <li><a href="https://www.classcentral.com/course/edx-programming-basics-1650?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Basics</a> from <em>Indian Institute of Technology Bombay</em> ★★★☆☆(18)</li>
     <li><a href="https://www.classcentral.com/course/edx-diagramas-uml-estructurales-para-la-ingenieria-del-software-14426?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Diagramas UML estructurales para la Ingeniería del Software</a> from <em>Universitat Politècnica de València</em> ★★★★★(17)</li>
     <li><a href="https://www.classcentral.com/course/edx-fundamentos-tic-para-profesionales-de-negocios-aplicaciones-empresariales-7475?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentos TIC para profesionales de negocios: Aplicaciones empresariales</a> from <em>Universitat Politècnica de València</em> ★★★★★(16)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-networking-17999?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Networking</a> from <em>New York University (NYU)</em> ★★★★☆(16)</li>
     <li><a href="https://www.classcentral.com/course/introcss-4294?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to CSS3</a> from <em>University of Michigan</em> ★★★★★(14)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-computer-science-for-business-professionals-10143?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Computer Science for Business Professionals</a> from <em>Harvard University</em> ★★★★★(13)</li>
     <li><a href="https://www.classcentral.com/course/aws-machine-learning-16924?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Getting Started with AWS Machine Learning</a> from <em>Amazon Web Services</em> ★★★★☆(13)</li>
     <li><a href="https://www.classcentral.com/course/independent-building-ai-22112?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building AI</a> from <em>University of Helsinki</em> ★★★★☆(13)</li>
     <li><a href="https://www.classcentral.com/course/iot-4338?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to the Internet of Things and Embedded Systems</a> from <em>University of California, Irvine</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-introduction-to-artificial-intelligence-with-python-18122?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Introduction to Artificial Intelligence with Python</a> from <em>Harvard University</em> ★★★★★(11)</li>
     <li><a href="https://www.classcentral.com/course/digitalmedia-529?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Creative Programming for Digital Media &amp; Mobile Apps</a> from <em>University of London International Programmes</em> ★★★★☆(11)</li>
     <li><a href="https://www.classcentral.com/course/edx-html5-coding-essentials-and-best-practices-3444?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">HTML5 Coding Essentials and Best Practices</a> from <em>World Wide Web Consortium (W3C)</em> ★★★★☆(11)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-understanding-technology-10142?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Understanding Technology</a> from <em>Harvard University</em> ★★★★★(10)</li>
     <li><a href="https://www.classcentral.com/course/technical-support-fundamentals-10220?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Technical Support Fundamentals</a> from <em>Google</em> ★★★★☆(10)</li>
     <li><a href="https://www.classcentral.com/course/programming2-390?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Learn to Program: Crafting Quality Code</a> from <em>University of Toronto</em> ★★★★☆(9)</li>
     <li><a href="https://www.classcentral.com/course/usablesec-1727?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Usable Security</a> from <em>University of Maryland, College Park</em> ★★★☆☆(9)</li>
     <li><a href="https://www.classcentral.com/course/edx-computer-hardware-and-operating-systems-17998?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Hardware and Operating Systems</a> from <em>New York University (NYU)</em> ★★★★★(9)</li>
     <li><a href="https://www.classcentral.com/course/udacity-linux-command-line-basics-4049?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Linux Command Line Basics</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-relational-databases-3253?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Relational Databases</a></li>
     <li><a href="https://www.classcentral.com/course/how-to-create-a-website-5815?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How To Create a Website in a Weekend! (Project-Centered Course)</a> from <em>State University of New York</em> ★★★★☆(7)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduccion-a-la-programacion-en-c-instrucciones-de-control-y-ficheros-de-texto-12157?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introducción a la programación en C: Instrucciones de control y ficheros de texto</a> from <em>Universidad Autónoma de Madrid</em> ★★★★★(7)</li>
     <li><a href="https://www.classcentral.com/course/ai-for-everyone-12502?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI For Everyone</a> from <em>DeepLearning.AI</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-computer-science-for-lawyers-16857?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Computer Science for Lawyers</a> from <em>Harvard University</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-computing-using-python-7622?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Computing using Python</a> from <em>Georgia Institute of Technology</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-the-internet-of-things-14520?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to the Internet of Things</a> from <em>Universitat Politècnica de València</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-paradigms-of-computer-programming-fundamentals-2298?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Paradigms of Computer Programming – Fundamentals</a> from <em>Université catholique de Louvain</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-paradigms-of-computer-programming-abstraction-and-concurrency-2630?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Paradigms of Computer Programming – Abstraction and Concurrency</a> from <em>Université catholique de Louvain</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/kadenze-web-coding-fundamentals-html-css-and-javascript-3781?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Coding Fundamentals: HTML, CSS and Javascript</a> from <em>National University of Singapore</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-the-computing-technology-inside-your-smartphone-2809?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Computing Technology Inside Your Smartphone</a> from <em>Cornell University</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-basics-of-computing-and-programming-17997?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basics of Computing and Programming</a> from <em>New York University (NYU)</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/c-for-everyone-16909?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C for Everyone: Programming Fundamentals</a> from <em>University of California, Santa Cruz</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-programming-in-scratch-2954?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming in Scratch</a> from <em>Harvey Mudd College</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/independent-web-applications-for-everybody-7362?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Applications for Everybody</a></li>
     <li><a href="https://www.classcentral.com/course/problem-solving-programming-video-games-11500?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Problem Solving, Python Programming, and Video Games</a> from <em>University of Alberta</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/fullstackopen-deep-dive-into-modern-web-development-66418?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Full Stack open 2022</a> from <em>University of Helsinki</em> ★★★★★(4)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs-for-all-introduction-to-computer-science-and-python-programming-3483?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS For All: Introduction to Computer Science and Python Programming</a> from <em>Harvey Mudd College</em> ★★★★★(4)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-introduction-to-game-development-11504?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Introduction to Game Development</a> from <em>Harvard University</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/how-computers-work-12188?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How Computers Work</a> from <em>University of London International Programmes</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/web-development-7027?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Web Development</a> from <em>University of California, Davis</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/python-programming-9549?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python Programming Essentials</a> from <em>Rice University</em> ★★★★★(3)</li>
     <li><a href="https://www.classcentral.com/course/kadenze-web-development-and-design-using-wordpress-6408?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Development and Design using Wordpress</a> from <em>California Institute of the Arts</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/edx-object-oriented-programming-1651?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Object-Oriented Programming</a> from <em>Indian Institute of Technology Bombay</em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-modular-programming-and-memory-management-11666?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Modular Programming and Memory Management</a> from <em>Dartmouth College</em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/intro-sql-9567?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Structured Query Language (SQL)</a> from <em>University of Michigan</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-the-beauty-and-joy-of-computing-ap-cs-principles-part-1-2525?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Beauty and Joy of Computing - AP® CS Principles Part 1</a> from <em>University of California, Berkeley</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/intro-accounting-data-analytics-visual-14477?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Accounting Data Analytics and Visualization</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-engineering-introduction-8205?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Engineering: Introduction</a> from <em>The University of British Columbia</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/web-design-strategy-12097?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Design: Strategy and Information Architecture</a> from <em>California Institute of the Arts</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/introduction-software-testing-19607?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Software Testing</a> from <em>University of Minnesota</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/tcp-ip-advanced-9269?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">TCP/IP and Advanced Topics</a> from <em>University of Colorado System</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/intro-cyber-security-business-9421?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cybersecurity for Business</a> from <em>University of Colorado System</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduzione-all-informatica-11403?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduzione all'informatica</a> from <em>University of Naples Federico II</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-the-internet-of-things-iot-9750?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to the Internet of Things (IoT)</a> from <em>Curtin University</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-pointers-and-memory-management-11533?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Pointers and Memory Management</a> from <em>Dartmouth College</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-language-foundations-11535?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Language Foundations</a> from <em>Dartmouth College</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-linux-basics-the-command-line-interface-11537?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Linux Basics: The Command Line Interface</a> from <em>Dartmouth College</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-using-linux-tools-and-libraries-11538?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Using Linux Tools and Libraries</a> from <em>Dartmouth College</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-think-create-code-3231?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Think. Create. Code</a> from <em>University of Adelaide</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-html-and-javascript-5923?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to HTML and JavaScript</a> from <em>Microsoft</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-nodejs-9597?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to NodeJS</a> from <em>Microsoft</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-database-queries-20797?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Database Queries</a> from <em>New York University (NYU)</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-engineering-essentials-8527?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Engineering Essentials</a> from <em>Technische Universität München (Technical University of Munich)</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/aprendiendo-programar-python-8900?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introducción a la programación en Python I: Aprendiendo a programar con Python</a> from <em>Pontificia Universidad Católica de Chile</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/mongodb-university-m001-mongodb-basics-8824?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MongoDB Basics</a></li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-ap-computer-science-principles-7017?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's AP® Computer Science Principles</a> from <em>Harvard University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs50-s-mobile-app-development-with-react-native-11505?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS50's Mobile App Development with React Native</a> from <em>Harvard University</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-databases-json-data-19471?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: JSON Data</a> from <em>Stanford University</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/database-applications-php-9570?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Database Applications in PHP</a> from <em>University of Michigan</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/django-build-web-apps-20953?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Web Applications in Django</a> from <em>University of Michigan</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/cs-programming-java-13151?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Science: Programming with a Purpose</a> from <em>Princeton University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/introduction-to-computer-programming-12185?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Computer Programming </a> from <em>University of London International Programmes</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/cyber-security-fundamentals-92920?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber Security Fundamentals</a> from <em>University of London International Programmes</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/secure-coding-principles-14478?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Principles of Secure Coding</a> from <em>University of California, Davis</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/python-visualization-9552?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python Data Visualization</a> from <em>Rice University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/programming-with-scratch-20849?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming with Scratch</a> from <em>The Hong Kong University of Science and Technology</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-cyber-security-economics-2680?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber Security Economics</a> from <em>Delft University of Technology</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/proactive-computer-security-9422?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Proactive Computer Security</a> from <em>University of Colorado System</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/intropoojava-441?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction à la programmation orientée objet (en Java)</a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/no-sql-databases-96693?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">NoSQL Databases</a> from <em>University of Maryland, Baltimore County</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/tcpip-9143?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to TCP/IP</a> from <em>Yonsei University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/ciencia-computacao-python-conceitos-7497?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introdução à Ciência da Computação com Python Parte 1</a> from <em>Universidade de São Paulo</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-writing-professional-code-8808?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Writing Professional Code</a> from <em>Microsoft</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-ai-for-everyone-master-the-basics-17898?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI for Everyone: Master the Basics</a> from <em>IBM</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-cloud-computing-20957?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cloud Computing</a> from <em>IBM</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/intro-cyber-attacks-9667?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cyber Attacks</a> from <em>New York University (NYU)</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-lernen-objekt-orientierter-programmierung-8772?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Lernen objekt-orientierter Programmierung</a> from <em>Technische Universität München (Technical University of Munich)</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/kadenze-computing-form-and-shape-python-programming-with-the-rhinoscript-library-7596?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computing Form and Shape: Python Programming with the Rhinoscript Library</a> from <em>Rhode Island School of Design</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-mycs-computer-science-for-beginners-2957?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MyCS: Computer Science for Beginners</a> from <em>Harvey Mudd College</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/miriadax-diseno-web-con-html5-css-14585?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Diseño Web con HTML5 + CSS</a> from <em>Universitas Telefónica</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/northeastern-data-privacy-20025?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Privacy Fundamentals</a> from <em>Northeastern University </em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-es6-javascript-improved-8543?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">ES6 - JavaScript Improved</a></li>
     <li><a href="https://www.classcentral.com/course/edx-applications-of-tinyml-21642?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applications of TinyML</a> from <em>Harvard University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-deploying-tinyml-21643?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deploying TinyML</a> from <em>Harvard University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-unified-modeling-language-19469?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: Unified Modeling Language</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-indexes-and-transactions-19470?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: Indexes and Transactions</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-on-line-analytical-processing-19472?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: On-Line Analytical Processing</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-olap-and-recursion-20359?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: OLAP and Recursion</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-semistructured-data-20360?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: Semistructured Data</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-databases-modeling-and-theory-20362?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Databases: Modeling and Theory</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/independent-hacker-tools-13160?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Hacker Tools</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/understanding-the-world-through-data-107514?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Understanding the World Through Data</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/computational-thinking-problem-solving-12278?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computational Thinking for Problem Solving</a> from <em>University of Pennsylvania</em></li>
     <li><a href="https://www.classcentral.com/course/wharton-ai-fundamentals-non-data-scientists-56564?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI Fundamentals for Non-Data Scientists</a> from <em>University of Pennsylvania</em></li>
     <li><a href="https://www.classcentral.com/course/django-features-libraries-20952?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Django Features and Libraries</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/django-database-web-apps-20955?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Application Technologies and Django</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/web-application-technologies-and-django-22250?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Application Technologies and Django</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/database-architecture-scale-nosql-elasticsearch-p-37625?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Database Architecture, Scale, and NoSQL with Elasticsearch</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/the-power-of-object-oriented-programming-66020?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Power of Object-Oriented Programming</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-devsecops-108441?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to DevSecOps</a> from <em>Johns Hopkins University</em></li>
     <li><a href="https://www.classcentral.com/course/blockchain-system-16867?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Blockchain System</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/data-security-privacy-53007?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data, Security, and Privacy</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/productivity-systems-development-53010?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Productivity and Systems Development</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/nature-of-data-relational-database-design-56508?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Nature of Data and Relational Database Design</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/edx-the-beauty-and-joy-of-computing-cs-principles-part-1-2528?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Beauty and Joy of Computing (CS Principles), Part 1</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/edx-the-beauty-and-joy-of-computing-ap-cs-principles-part-2-2532?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Beauty and Joy of Computing - AP® CS Principles Part 2</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/edx-the-beauty-and-joy-of-computing-cs-principles-part-4-2543?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Beauty and Joy of Computing (CS Principles), Part 4</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/edx-the-beauty-and-joy-of-computing-cs-principles-part-3-2548?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Beauty and Joy of Computing (CS Principles), Part 3</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/programming-fundamentals-9574?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Fundamentals</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/interacting-system-managing-memory-10760?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Interacting with the System and Managing Memory</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/introtoalice-18076?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Programming and Animation with Alice</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-computing-foundations-duke-37670?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Foundations</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/human-factors-in-artificial-intelligence-55174?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human Factors in AI</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-big-data-analytics-in-healthcare-1027?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Analytics in Healthcare</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-data-analysis-and-visualization-8566?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis and Visualization</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-cybersecurity-8651?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cybersecurity</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-internationalization-and-localization-14385?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Internationalization and Localization</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/analytics-data-decisions-22085?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Analytics and Data for Decision Making</a> from <em>University at Buffalo</em></li>
     <li><a href="https://www.classcentral.com/course/interactive-3d-characters-social-virtual-9362?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Interactive 3D Characters and Social VR</a> from <em>University of London International Programmes</em></li>
     <li><a href="https://www.classcentral.com/course/uva-coding-for-design-managers-1-17343?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Coding for Designers, Managers, &amp; Entrepreneurs I</a> from <em>University of Virginia</em></li>
     <li><a href="https://www.classcentral.com/course/uva-coding-for-design-managers-2-17344?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Coding for Designers, Managers, &amp; Entrepreneurs II</a> from <em>University of Virginia</em></li>
     <li><a href="https://www.classcentral.com/course/uva-coding-for-design-managers-3-17345?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Coding for Designers, Managers, &amp; Entrepreneurs III</a> from <em>University of Virginia</em></li>
     <li><a href="https://www.classcentral.com/course/uva-darden-artificial-intelligence-marketing-22337?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Artificial Intelligence in Marketing</a> from <em>University of Virginia</em></li>
     <li><a href="https://www.classcentral.com/course/identifying-security-vulnerabilities-14376?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Identifying Security Vulnerabilities</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/evidence-and-data-collection-for-problem-solving--94649?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Evidence and Data Collection for Problem Solving</a> from <em>University of Leeds</em></li>
     <li><a href="https://www.classcentral.com/course/python-analysis-9551?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python Data Analysis</a> from <em>Rice University</em></li>
     <li><a href="https://www.classcentral.com/course/stepik-vvedenie-v-bazy-dannyh-10492?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Введение в базы данных</a> from <em>St. Petersburg State Polytechnic University</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-security-basics-17944?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Security Basics</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/foundations-of-data-analytics-58718?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Analytics</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-ap-computer-science-a-java-programming-classes-and-objects-7211?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AP Computer Science A: Java Programming Classes and Objects</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-ap-computer-science-a-java-programming-loops-and-data-structures-7212?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AP Computer Science A: Java Programming Loops and Data Structures</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-ap-computer-science-a-java-programming-polymorphism-and-advanced-data-structures-7219?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AP Computer Science A: Java Programming Polymorphism and Advanced Data Structures</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-for-everyone-43819?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity for Everyone</a> from <em>University of Maryland, College Park</em></li>
     <li><a href="https://www.classcentral.com/course/mind-machine-artificial-intelligence-17330?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">What is “the mind” and what is artificial intelligence?</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-for-data-science-40795?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity for Data Science</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/trees-graphs-basics-40797?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Trees and Graphs: Basics</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/data-science-as-a-field-40801?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science as a Field</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/fundamentals-of-data-visualization-48056?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Data Visualization</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/relational-database-design-66350?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational Database Design</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/edx-scratch-programmeren-voor-kinderen-8-6564?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Scratch: Programmeren voor kinderen (8+)</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-ai-in-practice-preparing-for-ai-21197?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI in Practice: Preparing for AI</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-ai-in-practice-applying-ai-21198?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI in Practice: Applying AI</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/software-design-methods-tools-9652?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Design Methods and Tools</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/software-design-development-life-cycle-9653?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Design as an Element of the Software Development Lifecycle</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/software-design-abstraction-9654?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Design as an Abstraction</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/shell-programming-a-necessity-for-all-programmers-22649?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Shell Programming - A necessity for all Programmers</a> from <em>Indian Institute of Technology Bombay</em></li>
     <li><a href="https://www.classcentral.com/course/edx-basi-di-dati-13478?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basi di dati</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/edx-programmazione-i-13571?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programmazione I</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/foundations-of-data-science-96652?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Science</a> from <em>Indian Institute of Management Bangalore</em></li>
     <li><a href="https://www.classcentral.com/course/advanced-topics-in-relational-database-96609?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational Database Design</a> from <em>University System of Maryland</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-relational-databases-96667?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational Database Management Systems</a> from <em>University System of Maryland</em></li>
     <li><a href="https://www.classcentral.com/course/edx-video-game-design-and-balance-6660?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Video Game Design and Balance</a> from <em>Rochester Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/deep-learning-business-9431?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deep Learning for Business</a> from <em>Yonsei University</em></li>
     <li><a href="https://www.classcentral.com/course/technologies-and-platforms-for-artificial-intelli-58952?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Technologies and platforms for Artificial Intelligence</a> from <em>Politecnico di Milano</em></li>
     <li><a href="https://www.classcentral.com/course/edx-cyber-security-basics-a-hands-on-approach-7849?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber Security Basics: A Hands-on Approach</a> from <em>Universidad Carlos iii de Madrid</em></li>
     <li><a href="https://www.classcentral.com/course/uml-21107?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introducción a UML</a> from <em>Universidad de los Andes</em></li>
     <li><a href="https://www.classcentral.com/course/web-data-13103?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web of Data</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/blockchain-decision-maker-13811?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Blockchain for the decision maker</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-getting-started-11534?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Getting Started</a> from <em>Dartmouth College</em></li>
     <li><a href="https://www.classcentral.com/course/edx-c-programming-advanced-data-types-11536?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C Programming: Advanced Data Types</a> from <em>Dartmouth College</em></li>
     <li><a href="https://www.classcentral.com/course/disenando-paginas-bootstrap4-12411?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Diseñando páginas web con Bootstrap 4</a> from <em>Universidad Austral</em></li>
     <li><a href="https://www.classcentral.com/course/ciencia-computacao-python-conceitos-2-8600?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introdução à Ciência da Computação com Python Parte 2</a> from <em>Universidade de São Paulo</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-design-thinking-8845?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Design Thinking</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-ai-fundamentals-59066?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI Fundamentals</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-web-development-with-html5-css3-and-javascript-20965?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Web Development with HTML5, CSS3, and JavaScript</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/nosql-basics-45191?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">NoSQL Database Basics</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/relational-database-administration-47971?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational Database Administration (DBA)</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-web-development-with-html-css-jav-53747?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Web Development with HTML, CSS, JavaScript</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/intro-to-devops-59511?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to DevOps</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/cyber-attack-countermeasures-9666?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber Attack Countermeasures</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-information-security-authentication-and-access-control-21426?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Information Security - Authentication and Access Control</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-penetration-testing-exploitation-21434?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Penetration Testing - Exploitation</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/become-a-blockchain-developer-foundations-65628?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">A Beginner’s Guide to Becoming a Blockchain Developer with Overledger</a> from <em>King's College London</em></li>
     <li><a href="https://www.classcentral.com/course/quantum-computing-24327?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Quantum Computing for Everyone</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-quantum-computing-for-everyone-2-25375?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Quantum Computing for Everyone 2</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-applications-80415?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: Concepts and Applications</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-blockchain-dlt-54642?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Blockchain Technology and Applications</a> from <em>University College London</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-open-source-networking-technologies-11389?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Open Source Networking Technologies</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/data-and-ai-fundamentals-104400?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data and AI Fundamentals</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/programming-languages-1-98728?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages Ⅰ</a> from <em>Korea Advanced Institute of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/programming-languages2-116590?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages Ⅱ</a> from <em>Korea Advanced Institute of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/c-structured-programming-17287?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">C for Everyone: Structured Programming</a> from <em>University of California, Santa Cruz</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-visualization-for-all-8003?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Visualization for All</a> from <em>Trinity College</em></li>
     <li><a href="https://www.classcentral.com/course/edx-mobile-computing-with-app-inventor-cs-principles-3590?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mobile Computing with App Inventor – CS Principles</a> from <em>The University of Warwick</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-computer-science-and-programming-13874?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">プログラミングしながら学ぶコンピュータサイエンス入門 : Introduction to Computer Science and Programming</a> from <em>Tokyo Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-computer-science-and-programming-32127?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Computer Science and Programming</a> from <em>Tokyo Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/intro-to-quantum-computing-8706?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Understanding Quantum Computers</a> from <em>Keio University</em></li>
     <li><a href="https://www.classcentral.com/course/helsinki-devops-with-kubernetes-98594?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps with Kubernetes</a> from <em>University of Helsinki</em></li>
     <li><a href="https://www.classcentral.com/course/helsinki-devops-with-docker-98598?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps with Docker</a> from <em>University of Helsinki</em></li>
     <li><a href="https://www.classcentral.com/course/programming-with-guis-13844?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming with GUIs</a> from <em>Raspberry Pi Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/programming-102-think-like-a-computer-scientist-12758?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming 102: Think Like a Computer Scientist</a> from <em>Raspberry Pi Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-basics-66360?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Basics</a> from <em>Sungkyunkwan University</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-mongodb-9455?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to MongoDB</a> from <em>MongoDB University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-programacion-orientada-a-objetos-poo-4051?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programación Orientada a Objetos (POO)</a> from <em>MéxicoX</em></li>
     <li><a href="https://www.classcentral.com/course/edx-information-technology-foundations-17970?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Information Technology Foundations</a> from <em>Western Governors University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-scripting-and-programming-foundations-17972?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Scripting and Programming Foundations</a> from <em>Western Governors University</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-http-web-servers-8374?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">HTTP &amp; Web Servers</a></li>
</ul>
<h2 id="heading-intermediate-457">Intermediate (457)</h2>
<ul>
     <li><a href="https://www.classcentral.com/course/python-databases-4272?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Using Databases with Python</a> from <em>University of Michigan</em> ★★★★★(4060)</li>
     <li><a href="https://www.classcentral.com/course/rprog-1713?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">R Programming</a> from <em>Johns Hopkins University</em> ★★★☆☆(246)</li>
     <li><a href="https://www.classcentral.com/course/datascitoolbox-1712?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Data Scientist’s Toolbox</a> from <em>Johns Hopkins University</em> ★★★☆☆(166)</li>
     <li><a href="https://www.classcentral.com/course/kadenze-machine-learning-for-musicians-and-artists-3768?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning for Musicians and Artists</a> from <em>Goldsmiths University of London</em> ★★★★★(89)</li>
     <li><a href="https://www.classcentral.com/course/algorithms-divide-conquer-374?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Divide and Conquer, Sorting and Searching, and Randomized Algorithms</a> from <em>Stanford University</em> ★★★★★(68)</li>
     <li><a href="https://www.classcentral.com/course/progfun-422?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Functional Programming Principles in Scala</a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★★★(66)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-and-agile-systems-for-product-management-19101?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science and Agile Systems for Product Management</a> from <em>University System of Maryland</em> ★★★★★(62)</li>
     <li><a href="https://www.classcentral.com/course/algs4partI-339?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms, Part I</a> from <em>Princeton University</em> ★★★★★(59)</li>
     <li><a href="https://www.classcentral.com/course/getdata-1714?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Getting and Cleaning Data</a> from <em>Johns Hopkins University</em> ★★★☆☆(57)</li>
     <li><a href="https://www.classcentral.com/course/crypto-616?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cryptography I</a> from <em>Stanford University</em> ★★★★★(53)</li>
     <li><a href="https://www.classcentral.com/course/independent-intelligenza-artificiale-48047?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intelligenza Artificiale</a> from <em>University of Urbino</em> ★★★★★(49)</li>
     <li><a href="https://www.classcentral.com/course/edx-python-for-data-science-8209?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python for Data Science</a> from <em>University of California, San Diego </em> ★★★★☆(47)</li>
     <li><a href="https://www.classcentral.com/course/python-data-analysis-6671?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Data Science in Python</a> from <em>University of Michigan</em> ★★☆☆☆(46)</li>
     <li><a href="https://www.classcentral.com/course/object-oriented-design-9216?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Object-Oriented Design</a> from <em>University of Alberta</em> ★★★★☆(39)</li>
     <li><a href="https://www.classcentral.com/course/intro-to-big-data-4164?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Big Data</a> from <em>University of California, San Diego </em> ★★★☆☆(35)</li>
     <li><a href="https://www.classcentral.com/course/media-data-4925?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Making Sense of Data in the Media</a> from <em>The University of Sheffield</em> ★★★★★(35)</li>
     <li><a href="https://www.classcentral.com/course/statinference-1717?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Statistical Inference</a> from <em>Johns Hopkins University</em> ★★★☆☆(34)</li>
     <li><a href="https://www.classcentral.com/course/regmods-1718?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Regression Models</a> from <em>Johns Hopkins University</em> ★★★☆☆(34)</li>
     <li><a href="https://www.classcentral.com/course/edx-probability-and-statistics-in-data-science-using-python-8213?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Probability and Statistics in Data Science using Python</a> from <em>University of California, San Diego </em> ★★☆☆☆(31)</li>
     <li><a href="https://www.classcentral.com/course/edx-cs188-1x-artificial-intelligence-445?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">CS188.1x: Artificial Intelligence</a> from <em>University of California, Berkeley</em> ★★★★★(30)</li>
     <li><a href="https://www.classcentral.com/course/principlescomputing1-1724?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Principles of Computing (Part 1)</a> from <em>Rice University</em> ★★★★★(30)</li>
     <li><a href="https://www.classcentral.com/course/repdata-1716?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Reproducible Research</a> from <em>Johns Hopkins University</em> ★★★★☆(27)</li>
     <li><a href="https://www.classcentral.com/course/predmachlearn-1719?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Practical Machine Learning</a> from <em>Johns Hopkins University</em> ★★★☆☆(27)</li>
     <li><a href="https://www.classcentral.com/course/programming-languages-452?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages, Part A</a> from <em>University of Washington</em> ★★★★★(27)</li>
     <li><a href="https://www.classcentral.com/course/website-coding-4191?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Responsive Website Basics: Code with HTML, CSS, and JavaScript </a> from <em>University of London International Programmes</em> ★★★★☆(27)</li>
     <li><a href="https://www.classcentral.com/course/edx-mining-massive-datasets-2406?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mining Massive Datasets</a> from <em>Stanford University</em> ★★★★★(25)</li>
     <li><a href="https://www.classcentral.com/course/data-science-crash-course-4392?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">A Crash Course in Data Science</a> from <em>Johns Hopkins University</em> ★★★★☆(25)</li>
     <li><a href="https://www.classcentral.com/course/design-patterns-9215?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Design Patterns</a> from <em>University of Alberta</em> ★★★★★(25)</li>
     <li><a href="https://www.classcentral.com/course/software-security-1728?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Security </a> from <em>University of Maryland, College Park</em> ★★★★☆(24)</li>
     <li><a href="https://www.classcentral.com/course/algorithmic-toolbox-5471?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithmic Toolbox</a> from <em>University of California, San Diego </em> ★★★★☆(23)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduccion-a-la-inteligencia-artificial-principales-algoritmos-17247?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introducción a la Inteligencia Artificial: Principales Algoritmos</a> from <em>Galileo University</em> ★★★★★(22)</li>
     <li><a href="https://www.classcentral.com/course/algs4partII-340?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms, Part II</a> from <em>Princeton University</em> ★★★★★(21)</li>
     <li><a href="https://www.classcentral.com/course/cloud-computing-2717?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Concepts, Part 1</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(21)</li>
     <li><a href="https://www.classcentral.com/course/datavisualization-2737?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Visualization</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(21)</li>
     <li><a href="https://www.classcentral.com/course/edx-learning-from-data-introductory-machine-learning-1240?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Learning From Data (Introductory Machine Learning)</a> from <em>California Institute of Technology</em> ★★★★★(21)</li>
     <li><a href="https://www.classcentral.com/course/edx-statistics-and-r-2960?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Statistics and R</a> from <em>Harvard University</em> ★★★★☆(20)</li>
     <li><a href="https://www.classcentral.com/course/edx-automata-theory-376?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Automata Theory</a> from <em>Stanford University</em> ★★★★☆(20)</li>
     <li><a href="https://www.classcentral.com/course/udacity-introduction-to-machine-learning-course-2996?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Machine Learning Course</a> from <em>Stanford University</em> ★★★★☆(20)</li>
     <li><a href="https://www.classcentral.com/course/udacity-data-analysis-with-r-1478?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis with R</a> from <em>Facebook</em> ★★★★★(18)</li>
     <li><a href="https://www.classcentral.com/course/mongodb-university-mongodb-for-java-developers-599?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MongoDB for Java Developers</a></li>
     <li><a href="https://www.classcentral.com/course/procmin-2445?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Process Mining: Data science in Action</a> from <em>Eindhoven University of Technology</em> ★★★★☆(17)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-5475?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures</a> from <em>University of California, San Diego </em> ★★★★☆(16)</li>
     <li><a href="https://www.classcentral.com/course/principlescomputing2-3198?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Principles of Computing (Part 2)</a> from <em>Rice University</em> ★★★★☆(16)</li>
     <li><a href="https://www.classcentral.com/course/software-architecture-9217?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Architecture</a> from <em>University of Alberta</em> ★★★★☆(16)</li>
     <li><a href="https://www.classcentral.com/course/edx-how-to-code-simple-data-3465?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How to Code: Simple Data</a> from <em>The University of British Columbia</em> ★★★★☆(15)</li>
     <li><a href="https://www.classcentral.com/course/algorithmicthink1-1725?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithmic Thinking (Part 1)</a> from <em>Rice University</em> ★★★★☆(15)</li>
     <li><a href="https://www.classcentral.com/course/kadenze-the-nature-of-code-3777?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Nature of Code</a> from <em>Processing Foundation</em> ★★★★★(15)</li>
     <li><a href="https://www.classcentral.com/course/udacity-design-of-computer-programs-323?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Design of Computer Programs</a> from <em>Stanford University</em> ★★★★☆(14)</li>
     <li><a href="https://www.classcentral.com/course/genpython-3476?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python for Genomic Data Science</a> from <em>Johns Hopkins University</em> ★★★☆☆(14)</li>
     <li><a href="https://www.classcentral.com/course/build-data-science-team-4391?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building a Data Science Team</a> from <em>Johns Hopkins University</em> ★★★★☆(14)</li>
     <li><a href="https://www.classcentral.com/course/textretrieval-2734?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Text Retrieval and Search Engines</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(14)</li>
     <li><a href="https://www.classcentral.com/course/responsive-web-design-4200?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Responsive Web Design</a> from <em>University of London International Programmes</em> ★★★★☆(14)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-analysis-take-it-to-the-max-2916?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis: Take It to the MAX()</a> from <em>Delft University of Technology</em> ★★★☆☆(13)</li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-data-science-1480?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Data Science</a></li>
     <li><a href="https://www.classcentral.com/course/edx-using-python-for-research-7204?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Using Python for Research</a> from <em>Harvard University</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/real-life-data-science-4389?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science in Real Life</a> from <em>Johns Hopkins University</em> ★★★☆☆(12)</li>
     <li><a href="https://www.classcentral.com/course/datasciencemathskills-7745?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science Math Skills</a> from <em>Duke University</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-i-arraylists-linkedlis-23256?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures &amp; Algorithms I: ArrayLists, LinkedLists, Stacks and Queues</a> from <em>Georgia Institute of Technology</em> ★★★★★(12)</li>
     <li><a href="https://www.classcentral.com/course/optimization-487?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Discrete Optimization</a> from <em>University of Melbourne</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/introduction-to-software-product-managem-4196?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Software Product Management</a> from <em>University of Alberta</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-r-basics-9253?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science: R Basics</a> from <em>Harvard University</em> ★★★★★(11)</li>
     <li><a href="https://www.classcentral.com/course/javascript-4295?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Interactivity with JavaScript</a> from <em>University of Michigan</em> ★★★★☆(11)</li>
     <li><a href="https://www.classcentral.com/course/edx-human-computer-interaction-i-fundamentals-design-principles-14444?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human-Computer Interaction I: Fundamentals &amp; Design Principles</a> from <em>Georgia Institute of Technology</em> ★★★★★(11)</li>
     <li><a href="https://www.classcentral.com/course/bioinformatics-745?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Biology Meets Programming: Bioinformatics for Beginners</a> from <em>University of California, San Diego </em> ★★★☆☆(10)</li>
     <li><a href="https://www.classcentral.com/course/udacity-programming-languages-325?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages</a> from <em>University of Virginia</em> ★★★☆☆(10)</li>
     <li><a href="https://www.classcentral.com/course/independent-learning-from-data-introductory-machine-learning-course-366?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Learning from Data (Introductory Machine Learning course)</a> from <em>California Institute of Technology</em> ★★★★★(10)</li>
     <li><a href="https://www.classcentral.com/course/udacity-full-stack-foundations-3254?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Full Stack Foundations</a></li>
     <li><a href="https://www.classcentral.com/course/managing-data-analysis-4388?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Managing Data Analysis</a> from <em>Johns Hopkins University</em> ★★★☆☆(9)</li>
     <li><a href="https://www.classcentral.com/course/analytics-tableau-4297?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Visualization and Communication with Tableau</a> from <em>Duke University</em> ★★★★☆(9)</li>
     <li><a href="https://www.classcentral.com/course/cloud-applications-part1-2738?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Applications, Part 1: Cloud Systems and Infrastructure</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(9)</li>
     <li><a href="https://www.classcentral.com/course/algorithmicthink2-3200?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithmic Thinking (Part 2)</a> from <em>Rice University</em> ★★★★☆(9)</li>
     <li><a href="https://www.classcentral.com/course/udacity-data-wrangling-with-mongodb-1479?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Wrangling with MongoDB</a> from <em>MongoDB University</em> ★★★☆☆(9)</li>
     <li><a href="https://www.classcentral.com/course/responsivedesign-4190?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Styling with Responsive Design</a> from <em>University of Michigan</em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/edx-machine-learning-fundamentals-8216?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Fundamentals</a> from <em>University of California, San Diego </em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/edx-foundations-of-data-analysis-part-1-statistics-using-r-4805?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Analysis - Part 1: Statistics Using R</a> from <em>The University of Texas at Austin</em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/cryptography-1730?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cryptography</a> from <em>University of Maryland, College Park</em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/edx-matlab-and-octave-for-beginners-7376?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MATLAB and Octave for Beginners</a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/images-462?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Image and Video Processing: From Mars to Hollywood with a Stop at the Hospital</a> from <em>Duke University</em> ★★★★☆(7)</li>
     <li><a href="https://www.classcentral.com/course/guided-tour-machine-learning-finance-11231?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Guided Tour of Machine Learning in Finance</a> from <em>New York University (NYU)</em> ★☆☆☆☆(7)</li>
     <li><a href="https://www.classcentral.com/course/udacity-software-testing-365?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Testing</a> from <em>University of Utah</em> ★★★★☆(7)</li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-devops-4013?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to DevOps</a> from <em>Nutanix</em> ★★★☆☆(7)</li>
     <li><a href="https://www.classcentral.com/course/edx-computer-graphics-548?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Graphics</a> from <em>University of California, San Diego </em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-optimizing-performance-4203?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Performance</a> from <em>University of California, San Diego </em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/internet-of-things-history-4276?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet of Things: How did we get here?</a> from <em>University of California, San Diego </em> ★★☆☆☆(6)</li>
     <li><a href="https://www.classcentral.com/course/comparch-342?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Architecture</a> from <em>Princeton University</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/aofa-921?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Analysis of Algorithms</a> from <em>Princeton University</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/analytics-mysql-4181?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Managing Big Data with MySQL</a> from <em>Duke University</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-computer-networking-2336?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Networking</a> from <em>Georgia Institute of Technology</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-ii-binary-trees-heaps--23255?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures &amp; Algorithms II: Binary Trees, Heaps, SkipLists and HashMaps</a> from <em>Georgia Institute of Technology</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/cloudcomputing2-2942?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Concepts: Part 2</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/web-application-development-4288?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Application Development with JavaScript and MongoDB</a> from <em>University of London International Programmes</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/meteor-development-4328?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Meteor.js Development </a> from <em>University of London International Programmes</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/client-needs-and-software-requirements-4302?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Client Needs and Software Requirements </a> from <em>University of Alberta</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/interactivegraphics-2067?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Interactive Computer Graphics</a> from <em>University of Tokyo</em> ★★★☆☆(6)</li>
     <li><a href="https://www.classcentral.com/course/complexity-explorer-fundamentals-of-machine-learning-11493?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Machine Learning</a> from <em>Santa Fe Institute</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-software-debugging-457?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Debugging</a> from <em>Saarland University</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-algorithms-364?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Algorithms</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-ajax-2997?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to AJAX</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-data-analysis-4937?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Data Analysis</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-networking-for-web-developers-5965?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Networking for Web Developers</a></li>
     <li><a href="https://www.classcentral.com/course/edx-software-construction-in-java-6469?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Construction in Java</a> from <em>Massachusetts Institute of Technology</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/internet-of-things-dragonboard-4260?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet of Things: Setting Up Your DragonBoard™ Development Platform</a> from <em>University of California, San Diego </em> ★★★☆☆(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-structures-an-active-learning-approach-10436?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures: An Active Learning Approach</a> from <em>University of California, San Diego </em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/udacity-software-development-process-2335?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Development Process</a> from <em>Georgia Institute of Technology</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/cloudnetworking-2732?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Networking</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/sna-19180?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Social Network Analysis</a> from <em>University of California, Davis</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/dbessentials-4337?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Database Management Essentials</a> from <em>University of Colorado System</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/data-management-visualization-4184?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Management and Visualization</a> from <em>Wesleyan University</em> ★★☆☆☆(5)</li>
     <li><a href="https://www.classcentral.com/course/udacity-javascript-promises-5680?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">JavaScript Promises</a> from <em>Google</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-essentials-6512?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science Essentials</a> from <em>Microsoft</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-programming-for-everyone-an-introduction-to-visual-programming-languages-9381?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming for Everyone – An Introduction to Visual Programming Languages</a> from <em>Weizmann Institute of Science</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/openhpi-parallel-programming-concepts-1701?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Parallel Programming Concepts</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-data-visualization-and-d3-js-2898?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Visualization and D3.js</a></li>
     <li><a href="https://www.classcentral.com/course/algorithms-on-strings-5470?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms on Strings</a> from <em>University of California, San Diego </em> ★★★☆☆(4)</li>
     <li><a href="https://www.classcentral.com/course/r-programming-environment-7170?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The R Programming Environment</a> from <em>Johns Hopkins University</em> ★★★☆☆(4)</li>
     <li><a href="https://www.classcentral.com/course/data-manipulation-4473?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Manipulation at Scale: Systems and Algorithms</a> from <em>University of Washington</em> ★★★☆☆(4)</li>
     <li><a href="https://www.classcentral.com/course/programming-languages-part-b-6920?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages, Part B</a> from <em>University of Washington</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/data-analysis-tools-4169?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis Tools</a> from <em>Wesleyan University</em> ★★★☆☆(4)</li>
     <li><a href="https://www.classcentral.com/course/edx-querying-data-with-transact-sql-3341?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Querying Data with Transact-SQL</a> from <em>Microsoft</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/edx-programming-with-python-for-data-science-6471?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming with Python for Data Science</a> from <em>Microsoft</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/independent-practical-numerical-methods-with-python-2339?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Practical Numerical Methods with Python</a> from <em>George Washington University</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/algorithms-on-graphs-5479?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms on Graphs</a> from <em>University of California, San Diego </em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/internet-of-things-communication-4173?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet of Things: Communication Technologies</a> from <em>University of California, San Diego </em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/cs-tech-interview-4261?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mastering the Software Engineering Interview</a> from <em>University of California, San Diego </em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/big-data-management-6466?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Modeling and Management Systems</a> from <em>University of California, San Diego </em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/big-data-integration-processing-6467?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Integration and Processing</a> from <em>University of California, San Diego </em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/edx-algorithmic-design-and-techniques-10241?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithmic Design and Techniques</a> from <em>University of California, San Diego </em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/udacity-machine-learning-unsupervised-learning-1848?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: Unsupervised Learning</a> from <em>Brown University</em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/udacity-software-architecture-design-3418?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Architecture &amp; Design</a> from <em>Georgia Institute of Technology</em> ★★★★★(3)</li>
     <li><a href="https://www.classcentral.com/course/edx-human-computer-interaction-ii-cognition-context-culture-14445?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human-Computer Interaction II: Cognition, Context &amp; Culture</a> from <em>Georgia Institute of Technology</em> ★★★★★(3)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-iii-avl-and-2-4-trees--23283?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures &amp; Algorithms III: AVL and 2-4 Trees, Divide and Conquer Algorithms</a> from <em>Georgia Institute of Technology</em> ★★★★★(3)</li>
     <li><a href="https://www.classcentral.com/course/data-collection-framework-6085?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Framework for Data Collection and Analysis</a> from <em>University of Maryland, College Park</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/dwdesign-4230?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Warehouse Concepts, Design, and Data Integration</a> from <em>University of Colorado System</em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/service-oriented-architecture-9219?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Service-Oriented Architecture</a> from <em>University of Alberta</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/udacity-website-performance-optimization-2189?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Website Performance Optimization</a> from <em>Google</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/edx-devops-for-developers-how-to-get-started-6333?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps for Developers: How to Get Started</a> from <em>Microsoft</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/nand2tetris2-8025?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Build a Modern Computer from First Principles: Nand to Tetris Part II (project-centered course)</a> from <em>Hebrew University of Jerusalem</em> ★★★★★(3)</li>
     <li><a href="https://www.classcentral.com/course/data-mining-with-weka-7805?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Mining with Weka</a> from <em>University of Waikato</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/mongodb-university-mongodb-for-net-developers-3273?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MongoDB for .NET Developers</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-configuring-linux-web-servers-4050?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Configuring Linux Web Servers</a></li>
     <li><a href="https://www.classcentral.com/course/edx-language-proof-and-logic-2340?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Language, Proof and Logic</a> from <em>Stanford University</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-mobile-application-experiences-part-1-from-a-domain-to-an-app-idea-1523?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mobile Application Experiences Part 1: From a Domain to an App Idea</a> from <em>Massachusetts Institute of Technology</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-development-fundamentals-8516?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Development Fundamentals</a> from <em>University of Pennsylvania</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/r-packages-7175?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building R Packages</a> from <em>Johns Hopkins University</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-computational-thinking-with-python-10319?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science: Computational Thinking with Python</a> from <em>University of California, Berkeley</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/advanced-data-structures-4346?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Data Structures in Java</a> from <em>University of California, San Diego </em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/machine-learning-duke-12086?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Machine Learning</a> from <em>Duke University</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-human-computer-interaction-iv-evaluation-agile-methods-beyond-14447?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human-Computer Interaction IV: Evaluation, Agile Methods &amp; Beyond</a> from <em>Georgia Institute of Technology</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/programming-languages-part-c-7187?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming Languages, Part C</a> from <em>University of Washington</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/data-analytics-accountancy-1-9051?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analytics Foundations for Accountancy I</a> from <em>University of Illinois at Urbana-Champaign</em> ★☆☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/cs-fundamentals-1-14489?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Object-Oriented Data Structures in C++</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/responsive-website-examples-4356?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Responsive Website Tutorial and Examples</a> from <em>University of London International Programmes</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-how-to-code-complex-data-3464?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How to Code: Complex Data</a> from <em>The University of British Columbia</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/dataviz-6808?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Visualization with Tableau</a> from <em>University of California, Davis</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-algorithms-5752?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms</a> from <em>Indian Institute of Technology Bombay</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-testing-management-8171?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Testing Management</a> from <em>University System of Maryland</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/webapps1-5497?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Application Development: Basic Concepts</a> from <em>University of New Mexico</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-client-server-communication-6527?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Client-Server Communication</a> from <em>Google</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/complexity-explorer-introduction-to-computation-theory-11494?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Computation Theory</a> from <em>Santa Fe Institute</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-developing-international-software-part-1-3996?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Developing International Software, Part 1</a> from <em>Microsoft</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-principles-of-machine-learning-6511?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Principles of Machine Learning</a> from <em>Microsoft</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-analytics-and-learning-2144?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data, Analytics, and Learning</a> from <em>University of Texas Arlington</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/fundamentals-machine-learning-in-finance-11226?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Machine Learning in Finance</a> from <em>New York University (NYU)</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-autonomous-mobile-robots-1564?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Autonomous Mobile Robots</a> from <em>ETH Zurich</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-knowledge-management-and-big-data-in-business-3642?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Knowledge Management and Big Data in Business</a> from <em>Hong Kong Polytechnic University</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/approximation-algorithms-part-1-5026?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Approximation Algorithms Part I</a> from <em>École normale supérieure</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/process-mining-5419?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Process Mining with ProM</a> from <em>Eindhoven University of Technology</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-html5-apps-and-games-4671?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">HTML5 Apps and Games</a> from <em>World Wide Web Consortium (W3C)</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-theoretical-computer-science-455?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Theoretical Computer Science</a></li>
     <li><a href="https://www.classcentral.com/course/edx-compilers-2716?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Compilers</a> from <em>Stanford University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/algorithms-graphs-data-structures-7354?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Graph Search, Shortest Paths, and Data Structures</a> from <em>Stanford University</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-computation-structures-2-computer-architecture-4810?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computation Structures 2: Computer Architecture</a> from <em>Massachusetts Institute of Technology</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-computational-thinking-for-modeling-and-simulation-12764?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computational Thinking for Modeling and Simulation</a> from <em>Massachusetts Institute of Technology</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/advanced-algorithms-and-complexity-5474?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Algorithms and Complexity</a> from <em>University of California, San Diego </em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/advanced-r-7174?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced R Programming</a> from <em>Johns Hopkins University</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/linear-models-2-7476?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Linear Models for Data Science 2: Statistical Linear Models</a> from <em>Johns Hopkins University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/foundations-of-healthcare-systems-engineering-21475?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Healthcare Systems Engineering</a> from <em>Johns Hopkins University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/internet-of-things-project-5118?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming for the Internet of Things Project</a> from <em>University of California, Irvine</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/intro-analyticthinking-datascience-datamining-22604?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Analytic Thinking, Data Science, and Data Mining</a> from <em>University of California, Irvine</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/basic-data-processing-visualization-pyth-13494?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basic Data Processing and Visualization</a> from <em>University of California, San Diego </em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-database-systems-concepts-design-8573?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Database Systems Concepts &amp; Design</a> from <em>Georgia Institute of Technology</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-human-computer-interaction-iii-ethics-needfinding-prototyping-14446?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human-Computer Interaction III: Ethics, Needfinding &amp; Prototyping</a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-iv-pattern-matching-dj-23282?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures &amp; Algorithms IV: Pattern Matching, Dijkstra’s, MST, and Dynamic Programming Algorithms</a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/blockchain-basics-11314?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Blockchain Basics</a> from <em>University at Buffalo</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/mathematics-for-computer-science-12817?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mathematics for Computer Science</a> from <em>University of London International Programmes</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-construction-data-abstraction-8200?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Construction: Data Abstraction</a> from <em>The University of British Columbia</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-software-construction-object-oriented-design-8201?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Construction: Object-Oriented Design</a> from <em>The University of British Columbia</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/devops-culture-and-mindset-12549?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps Culture and Mindset</a> from <em>University of California, Davis</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/software-processes-9514?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Development Processes and Methodologies</a> from <em>University of Minnesota</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/server-side-nodejs-8888?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Server-side Development with NodeJS, Express and MongoDB</a> from <em>The Hong Kong University of Science and Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/essential-linear-algebra-for-data-science-66491?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Essential Linear Algebra for Data Science</a> from <em>University of Colorado Boulder</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-analysis-visualization-and-dashboard-design-5388?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis: Visualization and Dashboard Design</a> from <em>Delft University of Technology</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-automated-software-testing-unit-testing-coverage-criteria-and-design-for-testability-12038?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Automated Software Testing: Unit Testing, Coverage Criteria and Design for Testability</a> from <em>Delft University of Technology</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-automated-software-testing-model-and-state-based-testing-12039?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Automated Software Testing: Model and State-based Testing</a> from <em>Delft University of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/fundamentals-network-communications-9267?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Network Communication</a> from <em>University of Colorado System</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/linux-server-management-security-9319?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Linux Server Management and Security</a> from <em>University of Colorado System</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/hacking-patching-9529?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Hacking and Patching</a> from <em>University of Colorado System</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-formal-software-verification-8180?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Formal Software Verification</a> from <em>University System of Maryland</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/iot-software-architecture-6507?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Architecture for the Internet of Things</a> from <em>EIT Digital</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-paradigms-of-computer-programming-1487?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Paradigms of Computer Programming</a> from <em>Université catholique de Louvain</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/miriadax-client-based-web-applications-development-reactjs-angular-14717?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Client-based Web Applications development: ReactJS &amp; Angular</a> from <em>Universidad Politécnica de Madrid</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-advanced-algorithmics-and-graph-theory-with-python-12017?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Algorithmics and Graph Theory with Python</a> from <em>Institut Mines-Télécom</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-browser-rendering-optimization-3524?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Browser Rendering Optimization</a> from <em>Google</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-google-maps-apis-6477?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Google Maps APIs</a> from <em>Google</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-and-mobility-6584?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity and Mobility</a> from <em>University System of Georgia</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-developing-sql-databases-7405?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Developing SQL Databases</a> from <em>Microsoft</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-typescript-2-8633?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to TypeScript 2</a> from <em>Microsoft</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-building-interactive-prototypes-using-javascript-8719?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Interactive Prototypes using JavaScript</a> from <em>Microsoft</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-c-8823?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to C#</a> from <em>Microsoft</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-algorithms-and-data-structures-8937?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms and Data Structures</a> from <em>Microsoft</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-algorithms-and-data-structures-in-c-9483?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms and Data Structures in C#</a> from <em>Microsoft</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-2d-game-development-with-libgdx-4856?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">2D Game Development with libGDX</a> from <em>Amazon</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/advanced-methods-reinforcement-learning--11240?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Overview of Advanced Methods of Reinforcement Learning in Finance</a> from <em>New York University (NYU)</em> ★☆☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-advanced-database-queries-20798?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Database Queries</a> from <em>New York University (NYU)</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-advanced-database-administration-20799?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Database Administration</a> from <em>New York University (NYU)</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-cloud-infrastructure-technologies-6000?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cloud Infrastructure Technologies</a> from <em>Linux Foundation</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/hipython-4286?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">用Python玩转数据 Data Processing Using Python</a> from <em>Nanjing University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/python-data-processing-7751?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Processing Using Python</a> from <em>Nanjing University</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/parallelism-ia-9390?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Parallelism on Intel Architecture</a> from <em>Intel</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/intro-practical-deep-learning-10449?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">An Introduction to Practical Deep Learning</a> from <em>Intel</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-how-to-win-coding-competitions-secrets-of-champions-6300?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How to Win Coding Competitions: Secrets of Champions</a> from <em>ITMO University</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/independent-hacker101-10431?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Hacker101</a> from <em>HackerOne</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-diseno-de-sistemas-de-informacion-gerencial-para-internet-con-mysql-php-y-joomla-11425?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Diseño de Sistemas de información gerencial para Internet con MySQL / PHP y Joomla</a> from <em>Universidad del Rosario</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-technical-interview-6143?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Technical Interview</a> from <em>Pramp</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-designing-restful-apis-4887?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Designing RESTful APIs</a></li>
     <li><a href="https://www.classcentral.com/course/mongodb-university-mongodb-for-javascript-developers-12630?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MongoDB for Javascript Developers</a></li>
     <li><a href="https://www.classcentral.com/course/edx-quantitative-methods-for-biology-17849?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantitative Methods for Biology</a> from <em>Harvard University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-fundamentals-of-tinyml-21641?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of TinyML</a> from <em>Harvard University</em></li>
     <li><a href="https://www.classcentral.com/course/probabilistic-graphical-models-3-learnin-7293?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Probabilistic Graphical Models 3: Learning</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/algorithms-greedy-7350?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/algorithms-npcomplete-7351?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Shortest Paths Revisited, NP-Complete Problems and What To Do About Them</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-algorithms-design-and-analysis-part-1-8984?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms: Design and Analysis, Part 1</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-algorithms-design-and-analysis-part-2-19393?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms: Design and Analysis, Part 2</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-mobile-application-experiences-part-3-building-mobile-apps-5633?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mobile Application Experiences Part 3: Building Mobile Apps</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-advanced-software-construction-in-java-6475?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Software Construction in Java</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-mobile-application-experiences-7840?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mobile Application Experiences</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-for-healthcare-33547?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning for Healthcare</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-structures-and-software-design-8517?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Software Design</a> from <em>University of Pennsylvania</em></li>
     <li><a href="https://www.classcentral.com/course/edx-algorithm-design-and-analysis-8520?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithm Design and Analysis</a> from <em>University of Pennsylvania</em></li>
     <li><a href="https://www.classcentral.com/course/data-analysis-python-22538?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis Using Python</a> from <em>University of Pennsylvania</em></li>
     <li><a href="https://www.classcentral.com/course/building-web-applications-in-django-22252?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Web Applications in Django</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/django-features-and-libraries-22253?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Django Features and Libraries</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/web-application-technologies-and-django-22360?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Application Technologies and Django</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/building-web-applications-in-django-22361?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Web Applications in Django</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/django-features-and-libraries-22362?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Django Features and Libraries</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/develop-augmented-virtual-mixed-extended-reality--23273?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Developing AR/VR/MR/XR Apps with WebXR, Unity &amp; Unreal</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/intro-augmented-virtual-mixed-extended-reality-te-23274?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to AR/VR/MR/XR: Technologies, Applications &amp; Issues</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-sports-analytics-53129?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Machine Learning in Sports Analytics</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/database-architecture-scale-and-nosql-with-elasti-58698?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Database Architecture, Scale, and NoSQL with Elasticsearch</a> from <em>University of Michigan</em></li>
     <li><a href="https://www.classcentral.com/course/neurohacking-6420?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Neurohacking In R</a> from <em>Johns Hopkins University</em></li>
     <li><a href="https://www.classcentral.com/course/r-data-visualization-7176?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Data Visualization Tools</a> from <em>Johns Hopkins University</em></li>
     <li><a href="https://www.classcentral.com/course/exploratory-data-analysis-97459?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Exploratory Data Analysis</a> from <em>Johns Hopkins University</em></li>
     <li><a href="https://www.classcentral.com/course/merkle-cryptocurrencies-16868?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Merkle Tree and Cryptocurrencies</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-machine-learning-and-predictions-10320?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science: Machine Learning and Predictions</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/edx-blockchain-technology-11428?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Blockchain Technology</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-models-and-decisions-in-business-analytics-8218?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data, Models and Decisions in Business Analytics</a> from <em>Columbia University</em></li>
     <li><a href="https://www.classcentral.com/course/internet-of-things-sensing-actuation-4182?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet of Things: Sensing and Actuation From Devices</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-minecraft-coding-and-teaching-7480?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Minecraft, Coding and Teaching</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-how-virtual-reality-works-8514?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">How Virtual Reality Works</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-genomic-data-science-8962?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Genomic Data Science</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-structures-fundamentals-10246?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures Fundamentals</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-graph-algorithms-10247?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Graph Algorithms</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-string-processing-and-pattern-matching-algorithms-10248?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">String Processing and Pattern Matching Algorithms</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/computerscience2-10671?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Science: Algorithms, Theory, and Machines</a> from <em>Princeton University</em></li>
     <li><a href="https://www.classcentral.com/course/java-programming-recommender-5113?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Java Programming: Build a Recommendation System</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-data-engineering-duke-40278?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Data Engineering</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-virtualization-containers-api-duke-40279?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Virtualization, Containers and APIs</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-foundations-for-product-managers-55175?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Foundations for Product Managers</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/managing-machine-learning-projects-55176?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Managing Machine Learning Projects</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/web-app-command-line-tools-for-data-engineering-d-86355?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web Applications and Command-Line Tools for Data Engineering</a> from <em>Duke University</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-human-computer-interaction-8567?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Human-Computer Interaction</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-software-analysis-testing-8568?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Analysis &amp; Testing</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-introduction-to-graduate-algorithms-10625?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Graduate Algorithms</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/network-virtual-21379?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Network Function Virtualization</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-sys-software-21380?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Systems Software</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-app-21382?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Applications</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-cybersecurity-the-ciso-s-view-8652?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity: The CISO's View</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/edx-building-a-cybersecurity-toolkit-8653?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building a Cybersecurity Toolkit</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/edx-finding-your-cybersecurity-career-path-8654?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Finding Your Cybersecurity Career Path</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/machine-teaching-ai-70701?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Teaching for Autonomous AI</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/designing-autonomous-ai-92059?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Designing Autonomous AI</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/building-autonomous-ai-117536?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Autonomous AI</a> from <em>University of Washington</em></li>
     <li><a href="https://www.classcentral.com/course/data-analytics-accountancy-2-10515?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analytics Foundations for Accountancy II</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/data-modeling-regression-analysis-busine-13713?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Modeling and Regression Analysis in Business</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/cs-fundamentals-3-14487?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Unordered Data Structures</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/cs-fundamentals-2-14488?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Ordered Data Structures</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-accounting-python-18078?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning for Accounting with Python</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-algorithms-r-business-analytics-45196?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Algorithms with R in Business Analytics</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/advanced-deep-learning-methods-healthcare-64159?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Deep Learning Methods for Healthcare</a> from <em>University of Illinois at Urbana-Champaign</em></li>
     <li><a href="https://www.classcentral.com/course/blockchain-platforms-11313?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Blockchain Platforms</a> from <em>University at Buffalo</em></li>
     <li><a href="https://www.classcentral.com/course/smarter-contracts-11315?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Smart Contracts</a> from <em>University at Buffalo</em></li>
     <li><a href="https://www.classcentral.com/course/decentralized-apps-on-blockchain-11316?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Decentralized Applications (Dapps)</a> from <em>University at Buffalo</em></li>
     <li><a href="https://www.classcentral.com/course/data-analyze-visualize-22086?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis and Visualization</a> from <em>University at Buffalo</em></li>
     <li><a href="https://www.classcentral.com/course/supercomputing-7660?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Supercomputing</a> from <em>Partnership for Advanced Computing in Europe</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-predictive-analytics-using-python-14420?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Predictive Analytics using Python</a> from <em>University of Edinburgh</em></li>
     <li><a href="https://www.classcentral.com/course/data-science-k-means-clustering-python-13623?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Science: K-Means Clustering in Python</a> from <em>University of London International Programmes</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-applied-cryptography-118914?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Applied Cryptography</a> from <em>University of London International Programmes</em></li>
     <li><a href="https://www.classcentral.com/course/implementation-strategies-ai-and-cognitive-comput-23304?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Implementation Strategies: AI and Cognitive Computing</a> from <em>The University of British Columbia</em></li>
     <li><a href="https://www.classcentral.com/course/implementation-strategies-cloud-computing-23305?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Implementation Strategies: Cloud Computing</a> from <em>The University of British Columbia</em></li>
     <li><a href="https://www.classcentral.com/course/worldbuilding-for-video-games-40673?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Worldbuilding for Video Games</a> from <em>The University of British Columbia</em></li>
     <li><a href="https://www.classcentral.com/course/dataviz-dashboards-6806?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Creating Dashboards and Storytelling with Tableau</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/dataviz-design-6809?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Essential Design Principles for Tableau</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/continuous-integration-13654?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Continuous Integration</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/data-wrangling-analysis-abtesting-14375?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Wrangling, Analysis and AB Testing with SQL</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/identifying-security-vulnerabilities-c-p-14509?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Identifying Security Vulnerabilities in C/C++Programming</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/exploiting-securing-vulnerabilities-java-15154?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Exploiting and Securing Vulnerabilities in Java Applications</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/spark-sql-17045?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Distributed Computing with Spark SQL</a> from <em>University of California, Davis</em></li>
     <li><a href="https://www.classcentral.com/course/game-design-and-development-3-32224?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Game Design and Development 3: 3D Shooter</a> from <em>Michigan State University</em></li>
     <li><a href="https://www.classcentral.com/course/game-design-and-development-2-32226?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Game Design and Development 2: 2D Platformer</a> from <em>Michigan State University</em></li>
     <li><a href="https://www.classcentral.com/course/game-design-and-development-1-32228?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Game Design and Development 1: 2D Shooter</a> from <em>Michigan State University</em></li>
     <li><a href="https://www.classcentral.com/course/game-design-and-development-4-32230?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Game Design and Development 4: 3D Platformer</a> from <em>Michigan State University</em></li>
     <li><a href="https://www.classcentral.com/course/movingtothecloud-6607?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Moving to the Cloud</a> from <em>University of Melbourne</em></li>
     <li><a href="https://www.classcentral.com/course/edx-signals-systems-and-learning-20053?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Signals, Systems, and Learning</a> from <em>Rice University</em></li>
     <li><a href="https://www.classcentral.com/course/pkubioinfo-1209?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Bioinformatics: Introduction and Methods 生物信息学: 导论与方法</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/aoo-1737?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">面向对象技术高级课程（The Advanced Object-Oriented Technology）</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/osvirtsecurity-2348?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">操作系统与虚拟化安全</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/pkuco-2351?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">计算机组成 Computer Organization</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/catmooc-2354?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">计算机辅助翻译原理与实践 Principles and Practice of Computer-Aided Translation</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/spdsalgo-2761?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">数据结构基础</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/spdsalgo2-2762?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">高级数据结构与算法</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/os-3229?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">操作系统原理（Operating Systems）</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/algorithms-3230?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">算法设计与分析 Design and Analysis of Algorithms</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/suanfa-jichu-4306?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">算法基础</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-advanced-design-and-analysis-of-algorithms-6364?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">算法设计与分析(高级) | Advanced Design and Analysis of Algorithms</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/java-chengxu-sheji-8692?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Java程序设计</a> from <em>Peking University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-laff-on-programming-for-correctness-7852?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">LAFF – On Programming for Correctness</a> from <em>The University of Texas at Austin</em></li>
     <li><a href="https://www.classcentral.com/course/lean-software-development-9512?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Lean Software Development</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/engineering-practices-secure-software-qu-9515?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Engineering Practices for Building Quality Software</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/automated-analysis-19609?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Automated Analysis</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/web-mobile-testing-19610?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web and Mobile Testing with Selenium</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/black-box-white-box-testing-19612?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Black-box and White-box Testing</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/bootstrap-4-8682?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Front-End Web UI Frameworks and Tools: Bootstrap 4</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/mathematical-methods-for-data-analysis-58719?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mathematical Methods for Data Analysis</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/software-engineering-modeling-software-systems-us-81469?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Engineering: Modeling Software Systems using UML</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/software-engineering-implementation-and-testing-81470?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Engineering: Implementation and Testing</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/software-engineering-software-design-and-project--81471?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Engineering: Software Design and Project Management</a> from <em>The Hong Kong University of Science and Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-big-data-for-reliability-and-security-21148?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data for Reliability and Security</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-deep-learning-2-33404?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Deep Learning</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/missing-data-6086?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Dealing With Missing Data</a> from <em>University of Maryland, College Park</em></li>
     <li><a href="https://www.classcentral.com/course/industrial-iot-project-planning-machine--12284?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Project Planning and Machine Learning</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/algorithms-searching-sorting-indexing-40796?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms for Searching, Sorting, and Indexing</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/dynamic-programming-greedy-algorithms-43547?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Dynamic Programming, Greedy Algorithms</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/data-mining-methods-48057?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Mining Methods</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/software-architecture-for-big-data-fundamentals-66062?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Software Architecture for Big Data</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/advanced-topics-future-trends-database-technologi-89680?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Topics and Future Trends in Database Technologies</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/software-architecture-for-big-data-applications-111003?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applications of Software Architecture for Big Data</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/software-architecture-patterns-for-big-data-114640?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Architecture Patterns for Big Data</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-analysis-building-your-own-business-dashboard-5387?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis: Building Your Own Business Dashboard</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-global-software-development-9119?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Global Software Development</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/fundamentals-of-quantum-information-34203?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Quantum Information</a> from <em>Delft University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/homeland-security-cybersecurity-connecti-8820?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Homeland Security &amp; Cybersecurity Connection - It's Not About the Terrorists</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/peer-to-peer-protocols-local-area-networ-9266?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Peer-to-Peer Protocols and Local Area Networks</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/packet-switching-networks-algorithms-9268?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Packet Switching Networks and Algorithms</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/detecting-cyber-attacks-9419?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Detecting and Mitigating Cyber Threats and Attacks</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/design-secure-networked-systems-9530?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Design and Analyze Secure Networked Systems</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/basic-cryptography-and-crypto-api-9531?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basic Cryptography and Programming with Crypto API</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/asymmetric-crypto-9533?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Asymmetric Cryptography and Key Management</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/symmetric-crypto-9534?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Symmetric Cryptography</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/software-design-threats-mitigations-9655?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Design Threats and Mitigations</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/requirements-specification-goals-9807?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Requirements Specifications: Goals and Conflict Analysis</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/srs-documents-requirements-9808?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">SRS Documents: Requirements and Diagrammatic Notations</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/requirements-gathering-secure-9809?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Requirements Gathering for Secure Software Development</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/software-requirements-prioritization-9810?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Requirements Prioritization: Risk Analysis</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/requirements-elicitation-9811?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Requirements Elicitation: Artifact and Stakeholder Analysis</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/data-structures-design-patterns-10139?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Design Patterns for Game Developers</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/cloud-computing-security-11754?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Security</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/advanced-system-security-topics-13381?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced System Security Topics</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/algorithms-data-collection-code-15137?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algorithms, Data Collection, and Starting to Code</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/data-analysis-representation-selection-i-15139?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Analysis and Representation, Selection and Iteration</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/edx-implementation-of-data-structures-5753?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Implementation of Data Structures</a> from <em>Indian Institute of Technology Bombay</em></li>
     <li><a href="https://www.classcentral.com/course/edx-foundations-of-data-structures-5755?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Structures</a> from <em>Indian Institute of Technology Bombay</em></li>
     <li><a href="https://www.classcentral.com/course/edx-i-sistemi-operativi-moderni-10696?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">I sistemi Operativi Moderni</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/edx-nuove-tecnologie-digitali-11406?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Nuove tecnologie digitali</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/edx-laboratorio-di-programmazione-strumenti-e-programmi-13481?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Laboratorio di programmazione: strumenti e programmi</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/nosql-databases-12414?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">NoSQL systems</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/data-intensive-applications-12425?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Designing data-intensive applications</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/relational-database-12430?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational database systems</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/cognicion-12452?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cognición encarnada</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/edx-software-testing-fundamentals-8179?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Software Testing Fundamentals</a> from <em>University System of Maryland</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-structures-and-algorithm-design-part-i-1646?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Algorithm Design Part I | 数据结构与算法设计(上)</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-1-17914?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Algorithms (I)</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-2-17915?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Algorithms (II)</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-3-17916?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Algorithms (III)</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/data-structures-algorithms-4-17917?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Structures and Algorithms (IV)</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/algoritmica-basica-48081?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Algoritmos y Programación en R</a> from <em>Tecnológico de Monterrey</em></li>
     <li><a href="https://www.classcentral.com/course/edx-enterprise-software-lifecycle-management-6304?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Enterprise Software Lifecycle Management</a> from <em>National Research Nuclear University MEPhI</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-processing-and-analysis-with-excel-21114?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Processing and Analysis with Excel</a> from <em>Rochester Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-representation-and-visualization-in-tableau-21115?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Representation and Visualization in Tableau</a> from <em>Rochester Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-getting-started-with-unreal-engine-21127?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Getting Started with Unreal Engine</a> from <em>Rochester Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/artificial-intelligence-an-overview-58723?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Artificial Intelligence: An Overview</a> from <em>Politecnico di Milano</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-overview-71019?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: an overview</a> from <em>Politecnico di Milano</em></li>
     <li><a href="https://www.classcentral.com/course/edx-the-software-architect-code-building-the-digital-world-4812?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Software Architect Code: Building the Digital World</a> from <em>Universidad Carlos iii de Madrid</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-java-programming-fundamental-data-structures-and-algorithms-7454?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Java Programming: Fundamental Data Structures and Algorithms</a> from <em>Universidad Carlos iii de Madrid</em></li>
     <li><a href="https://www.classcentral.com/course/iot-devices-6748?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Architecting Smart IoT Devices</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/iot-architecture-6839?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Architecting Smart IoT Devices</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/io-efficient-algorithms-16913?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">I/O-efficient algorithms</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/reviews-and-metrics-for-software-improve-4318?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Reviews &amp; Metrics for Software Improvements</a> from <em>University of Alberta</em></li>
     <li><a href="https://www.classcentral.com/course/edx-cybersecurity-and-privacy-in-the-iot-9754?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity and Privacy in the IoT</a> from <em>Curtin University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-communicating-with-robots-and-bots-15152?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Communicating with Robots and Bots</a> from <em>Curtin University</em></li>
     <li><a href="https://www.classcentral.com/course/artificial-intelligence-algorithmic-information-a-47955?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Understanding Artificial Intelligence through Algorithmic Information Theory</a> from <em>Institut Mines-Télécom</em></li>
     <li><a href="https://www.classcentral.com/course/edx-procedural-modelling-17212?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Procedural Modelling</a> from <em>National University of Singapore</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-trading-finance-17911?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Using Machine Learning in Trading and Finance</a> from <em>New York Institute of Finance</em></li>
     <li><a href="https://www.classcentral.com/course/intro-teste-de-software-10389?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introdução ao Teste de Software</a> from <em>Universidade de São Paulo</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-data-structures-and-algorithms-11457?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Data Structures and Algorithms</a> from <em>Google</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-offline-web-applications-5679?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Offline Web Applications</a> from <em>Google</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-progressive-web-apps-6548?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Progressive Web Apps</a> from <em>Google</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-data-structures-7391?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Data Structures</a> from <em>University of Adelaide</em></li>
     <li><a href="https://www.classcentral.com/course/edx-programming-for-data-science-8162?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming for Data Science</a> from <em>University of Adelaide</em></li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-and-x-factor-6585?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity and the X-Factor</a> from <em>University System of Georgia</em></li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-and-the-internet-of-things-6586?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity and the Internet of Things</a> from <em>University System of Georgia</em></li>
     <li><a href="https://www.classcentral.com/course/edx-programming-in-r-for-data-science-6038?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Programming in R for Data Science</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-developing-intelligent-apps-and-bots-6357?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Developing Intelligent Apps and Bots</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-applied-machine-learning-6406?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Machine Learning</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-angularjs-framework-fundamentals-7377?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AngularJS: Framework Fundamentals</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-implementing-in-memory-sql-database-objects-7399?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Implementing In-Memory SQL Database Objects</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-building-functional-prototypes-using-node-js-8722?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building Functional Prototypes using Node.js</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-application-design-considerations-an-inclusive-approach-8741?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Application Design Considerations: An Inclusive Approach</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-designing-data-platform-solutions-10313?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Designing Data Platform Solutions</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/network-security-database-vulnerabilitie-13873?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Network Security &amp; Database Vulnerabilities </a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/cybersecurity-compliance-framework-syste-14384?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cybersecurity Compliance Framework &amp; System Administration</a> from <em>IBM</em></li>
     <li><a href="https://www.classcentral.com/course/real-time-cyber-threat-detection-9668?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Real-Time Cyber Threat Detection and Mitigation</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/enterprise-infrastructure-security-9861?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Enterprise and Infrastructure Security</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-information-security-introduction-to-information-security-21423?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Information Security - Introduction to Information Security</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-information-security-advanced-topics-21428?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Information Security - Advanced topics</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-penetration-testing-discovering-vulnerabilities-21433?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Penetration Testing - Discovering Vulnerabilities</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-penetration-testing-post-exploitation-21435?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Penetration Testing - Post Exploitation</a> from <em>New York University (NYU)</em></li>
     <li><a href="https://www.classcentral.com/course/quantum-computer-systems-design-i-56652?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantum Computer Systems Design I: Intro to Quantum Computation and Programming</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/quantum-computer-systems-ii-56653?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantum Computer Systems Design II: Principles of Quantum Architecture</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/quantum-computer-systems-design-iii-56654?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantum Computer Systems Design III: Working with Noisy Systems</a> from <em>The University of Chicago </em></li>
     <li><a href="https://www.classcentral.com/course/blockchain-scalability-21843?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Blockchain Scalability and its Foundations in Distributed Systems</a> from <em>The University of Sydney</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-devops-transforming-and-improving-operations-7506?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to DevOps: Transforming and Improving Operations</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-kubernetes-8764?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Kubernetes</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/edx-business-considerations-for-5g-with-edge-iot-and-ai-13841?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Business Considerations for 5G with Edge, IoT, and AI</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/edx-open-source-and-the-5g-transition-13842?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Open Source and the 5G Transition</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-serverless-on-kubernetes-21476?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Serverless on Kubernetes</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/edx-web-app-development-with-the-power-of-node-js-10245?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Web App Development with the Power of Node.js</a> from <em>Technische Universität München (Technical University of Munich)</em></li>
     <li><a href="https://www.classcentral.com/course/edx-iot-system-architecture-design-and-evaluation-13241?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">IoT System Architecture: Design and Evaluation</a> from <em>Waseda University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-uml-class-diagrams-for-software-engineering-7837?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">UML Class Diagrams for Software Engineering</a> from <em>KU Leuven University</em></li>
     <li><a href="https://www.classcentral.com/course/gaming-big-data-11192?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science in the Games Industry</a> from <em>University of Dundee</em></li>
     <li><a href="https://www.classcentral.com/course/internet-aging-6528?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Internet of Things for Active Ageing</a> from <em>Taipei Medical University</em></li>
     <li><a href="https://www.classcentral.com/course/orientacao-a-objetos-com-java-5673?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Orientação a Objetos com Java</a> from <em>Instituto Tecnológico de Aeronáutica</em></li>
     <li><a href="https://www.classcentral.com/course/computer-architecture-34207?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Architecture</a> from <em>Harvey Mudd College</em></li>
     <li><a href="https://www.classcentral.com/course/more-data-mining-with-weka-8389?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">More Data Mining with Weka</a> from <em>University of Waikato</em></li>
     <li><a href="https://www.classcentral.com/course/kadenze-introduction-elements-of-microgame-design-8395?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction: Elements of Microgame Design</a> from <em>Worcester Polytechnic Institute</em></li>
     <li><a href="https://www.classcentral.com/course/using-r-for-regression-and-machine-learning-in-in-59138?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Using R for Regression and Machine Learning in Investment</a> from <em>Sungkyunkwan University</em></li>
     <li><a href="https://www.classcentral.com/course/mejora-tu-negocio-con-inteligencia-artificial-47287?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mejora tu Negocio con Inteligencia Artificial</a> from <em>Universidad Anáhuac</em></li>
     <li><a href="https://www.classcentral.com/course/defensive-programming-and-debugging-12107?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Defensive Programming and Debugging</a> from <em>Partnership for Advanced Computing in Europe</em></li>
     <li><a href="https://www.classcentral.com/course/python-in-hpc-13774?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Python in High Performance Computing</a> from <em>Partnership for Advanced Computing in Europe</em></li>
     <li><a href="https://www.classcentral.com/course/independent-concurrency-6493?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Concurrency</a> from <em>AdaCore University</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-applied-15163?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Applied Machine Learning</a> from <em>Alberta Machine Intelligence Institute</em></li>
     <li><a href="https://www.classcentral.com/course/edx-bias-and-discrimination-in-ai-18144?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Bias and Discrimination in AI</a> from <em>Université de Montréal</em></li>
     <li><a href="https://www.classcentral.com/course/edx-deep-learning-essentials-18145?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deep Learning Essentials</a> from <em>Université de Montréal</em></li>
     <li><a href="https://www.classcentral.com/course/openhpi-code-of-life-when-computer-science-meets-genetics-5151?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Code of Life – When Computer Science Meets Genetics</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-dynamic-web-applications-with-sinatra-6796?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Dynamic Web Applications with Sinatra</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-deploying-applications-with-heroku-6798?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deploying Applications with Heroku</a></li>
     <li><a href="https://www.classcentral.com/course/udacity-vr-scenes-and-objects-7380?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">VR Scenes and Objects</a></li>
     <li><a href="https://www.classcentral.com/course/mongodb-university-mongodb-for-python-developers-12631?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MongoDB for Python Developers</a></li>
</ul>
<h2 id="heading-advanced-187">Advanced (187)</h2>
<ul>
     <li><a href="https://www.classcentral.com/course/edx-the-analytics-edge-1623?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">The Analytics Edge</a> from <em>Massachusetts Institute of Technology</em> ★★★★★(80)</li>
     <li><a href="https://www.classcentral.com/course/ml-foundations-4352?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Foundations: A Case Study Approach</a> from <em>University of Washington</em> ★★★★☆(40)</li>
     <li><a href="https://www.classcentral.com/course/sample-based-learning-methods-14496?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Sample-based Learning Methods</a> from <em>University of Alberta</em> ★★★★★(40)</li>
     <li><a href="https://www.classcentral.com/course/computer-simulations-17986?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Simulations</a> from <em>University of California, Davis</em> ★★★★★(38)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduccion-al-diseno-de-hardware-con-verilog-11782?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introducción al diseño de hardware con Verilog</a> from <em>Galileo University</em> ★★★★★(38)</li>
     <li><a href="https://www.classcentral.com/course/udacity-introduction-to-artificial-intelligence-301?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Artificial Intelligence</a> from <em>Stanford University</em> ★★★★☆(27)</li>
     <li><a href="https://www.classcentral.com/course/ml-computer-vision-120126?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">[New] Machine Learning for Computer Vision</a> from <em>MathWorks</em></li>
     <li><a href="https://www.classcentral.com/course/fundamentals-of-reinforcement-learning-14497?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Fundamentals of Reinforcement Learning</a> from <em>University of Alberta</em> ★★★★★(24)</li>
     <li><a href="https://www.classcentral.com/course/patterndiscovery-2733?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Pattern Discovery in Data Mining</a> from <em>University of Illinois at Urbana-Champaign</em> ★★☆☆☆(21)</li>
     <li><a href="https://www.classcentral.com/course/ml-regression-4289?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: Regression</a> from <em>University of Washington</em> ★★★★★(20)</li>
     <li><a href="https://www.classcentral.com/course/edx-statistical-thinking-for-data-science-and-analytics-4913?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Statistical Thinking for Data Science and Analytics</a> from <em>Columbia University</em> ★★☆☆☆(19)</li>
     <li><a href="https://www.classcentral.com/course/bitcointech-3655?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Bitcoin and Cryptocurrency Technologies</a> from <em>Princeton University</em> ★★★★☆(19)</li>
     <li><a href="https://www.classcentral.com/course/prediction-control-function-approximatio-14499?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Prediction and Control with Function Approximation</a> from <em>University of Alberta</em> ★★★★★(19)</li>
     <li><a href="https://www.classcentral.com/course/probabilistic-graphical-models-309?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Probabilistic Graphical Models 1: Representation</a> from <em>Stanford University</em> ★★★★☆(18)</li>
     <li><a href="https://www.classcentral.com/course/devdataprod-1720?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Developing Data Products</a> from <em>Johns Hopkins University</em> ★★★★☆(18)</li>
     <li><a href="https://www.classcentral.com/course/hiddenmessages-3289?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Finding Hidden Messages in DNA (Bioinformatics I)</a> from <em>University of California, San Diego </em> ★★★★★(17)</li>
     <li><a href="https://www.classcentral.com/course/neural-networks-deep-learning-9058?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Neural Networks and Deep Learning</a> from <em>DeepLearning.AI</em> ★★★★★(15)</li>
     <li><a href="https://www.classcentral.com/course/edx-machine-learning-for-data-science-and-analytics-4912?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning for Data Science and Analytics</a> from <em>Columbia University</em> ★★★☆☆(15)</li>
     <li><a href="https://www.classcentral.com/course/machinelearningwithbigdata-4238?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning With Big Data</a> from <em>University of California, San Diego </em> ★★☆☆☆(14)</li>
     <li><a href="https://www.classcentral.com/course/edx-artificial-intelligence-ai-7230?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Artificial Intelligence (AI)</a> from <em>Columbia University</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/edx-machine-learning-7231?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning</a> from <em>Columbia University</em> ★★★★☆(12)</li>
     <li><a href="https://www.classcentral.com/course/textanalytics-2736?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Text Mining and Analytics</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★★☆(10)</li>
     <li><a href="https://www.classcentral.com/course/hardwaresec-1729?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Hardware Security</a> from <em>University of Maryland, College Park</em> ★★★☆☆(10)</li>
     <li><a href="https://www.classcentral.com/course/python-plotting-6670?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Plotting, Charting &amp; Data Representation in Python</a> from <em>University of Michigan</em> ★★☆☆☆(9)</li>
     <li><a href="https://www.classcentral.com/course/ml-classification-4219?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: Classification</a> from <em>University of Washington</em> ★★★★★(9)</li>
     <li><a href="https://www.classcentral.com/course/multivariate-calculus-machine-learning-10452?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mathematics for Machine Learning: Multivariate Calculus</a> from <em>Imperial College London</em> ★★★★★(9)</li>
     <li><a href="https://www.classcentral.com/course/convolutional-neural-networks-9057?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Convolutional Neural Networks</a> from <em>DeepLearning.AI</em> ★★★★★(8)</li>
     <li><a href="https://www.classcentral.com/course/udacity-reinforcement-learning-1849?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Reinforcement Learning</a> from <em>Brown University</em> ★★★☆☆(8)</li>
     <li><a href="https://www.classcentral.com/course/independent-practical-deep-learning-for-coders-7887?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Practical Deep Learning For Coders</a> from <em>fast.ai</em> ★★★★☆(8)</li>
     <li><a href="https://www.classcentral.com/course/clusteranalysis-2735?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cluster Analysis in Data Mining</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(7)</li>
     <li><a href="https://www.classcentral.com/course/machine-learning-projects-9056?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Structuring Machine Learning Projects</a> from <em>DeepLearning.AI</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/python-machine-learning-6673?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Machine Learning in Python</a> from <em>University of Michigan</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/edx-enabling-technologies-for-data-science-and-analytics-the-internet-of-things-4911?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Enabling Technologies for Data Science and Analytics: The Internet of Things</a> from <em>Columbia University</em> ★☆☆☆☆(6)</li>
     <li><a href="https://www.classcentral.com/course/graph-analytics-4249?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Graph Analytics for Big Data</a> from <em>University of California, San Diego </em> ★★★☆☆(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-machine-learning-1020?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning</a> from <em>Georgia Institute of Technology</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-advanced-operating-systems-1016?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Operating Systems</a> from <em>Georgia Institute of Technology</em> ★★★★★(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-interactive-3d-graphics-552?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Interactive 3D Graphics</a> from <em>Autodesk</em> ★★★★☆(6)</li>
     <li><a href="https://www.classcentral.com/course/udacity-model-building-and-validation-3256?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Model Building and Validation</a> from <em>AT&amp;T</em> ★★☆☆☆(6)</li>
     <li><a href="https://www.classcentral.com/course/ml-clustering-and-retrieval-4313?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning: Clustering &amp; Retrieval</a> from <em>University of Washington</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/udacity-applied-cryptography-326?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Cryptography</a> from <em>University of Virginia</em> ★★★★☆(5)</li>
     <li><a href="https://www.classcentral.com/course/independent-introduction-to-computer-architecture-642?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Computer Architecture</a> from <em>Carnegie Mellon University</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/edx-sparse-representations-in-image-processing-from-theory-to-practice-9135?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Sparse Representations in Image Processing: From Theory to Practice</a> from <em>Technion - Israel Institute of Technology</em> ★★★★★(5)</li>
     <li><a href="https://www.classcentral.com/course/assembly-3290?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Genome Sequencing (Bioinformatics II)</a> from <em>University of California, San Diego </em> ★★★★★(4)</li>
     <li><a href="https://www.classcentral.com/course/machine-learning-data-analysis-4354?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning for Data Analysis</a> from <em>Wesleyan University</em> ★★★★☆(4)</li>
     <li><a href="https://www.classcentral.com/course/probabilistic-graphical-models-2-inferen-7292?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Probabilistic Graphical Models 2: Inference</a> from <em>Stanford University</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/python-social-network-analysis-6674?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Applied Social Network Analysis in Python</a> from <em>University of Michigan</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/datasci2-4341?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Practical Predictive Analytics: Models and Methods</a> from <em>University of Washington</em> ★★☆☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/regression-modeling-practice-4351?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Regression Modeling in Practice</a> from <em>Wesleyan University</em> ★★★★☆(3)</li>
     <li><a href="https://www.classcentral.com/course/pca-machine-learning-10451?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mathematics for Machine Learning: PCA</a> from <em>Imperial College London</em> ★★☆☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/quantitative-formal-modeling-1-4864?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantitative Formal Modeling and Worst-Case Performance Analysis</a> from <em>EIT Digital</em> ★★★☆☆(3)</li>
     <li><a href="https://www.classcentral.com/course/comparinggenomes-3291?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Comparing Genes, Proteins, and Genomes (Bioinformatics III)</a> from <em>University of California, San Diego </em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/clustering-3556?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Genomic Data Science and Clustering (Bioinformatics V)</a> from <em>University of California, San Diego </em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-knowledge-based-ai-cognitive-systems-1025?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Knowledge-Based AI: Cognitive Systems</a> from <em>Georgia Institute of Technology</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-introduction-to-operating-systems-3419?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Operating Systems</a> from <em>Georgia Institute of Technology</em> ★★★★★(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-intro-to-information-security-3420?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Intro to Information Security</a> from <em>Georgia Institute of Technology</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/cloud-applications-2-6309?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cloud Computing Applications, Part 2: Big Data and Applications in the Cloud</a> from <em>University of Illinois at Urbana-Champaign</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-foundations-of-data-analysis-part-2-inferential-statistics-4804?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Foundations of Data Analysis - Part 2: Inferential Statistics</a> from <em>The University of Texas at Austin</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/intro-to-deep-learning-9606?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Deep Learning</a> from <em>Higher School of Economics</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/collaborative-filtering-6927?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Nearest Neighbor Collaborative Filtering</a> from <em>University of Minnesota</em> ★★☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/edx-data-mining-theories-and-algorithms-for-tackling-big-data-8130?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Mining: Theories and Algorithms for Tackling Big Data | 数据挖掘：理论与算法</a> from <em>Tsinghua University</em> ★★★☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/reinforcement-learning-in-finance-11239?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Reinforcement Learning in Finance</a> from <em>New York University (NYU)</em> ★☆☆☆☆(2)</li>
     <li><a href="https://www.classcentral.com/course/udacity-real-time-analytics-with-apache-storm-3000?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Real-Time Analytics with Apache Storm</a> from <em>Twitter</em> ★★★★☆(2)</li>
     <li><a href="https://www.classcentral.com/course/linear-models-6180?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Linear Models for Data Science 1: Least Squares</a> from <em>Johns Hopkins University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/artificial-intelligence-for-breast-cancer-detecti-46386?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Artificial Intelligence for Breast Cancer Detection</a> from <em>Johns Hopkins University</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-high-performance-computer-architecture-1018?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">High Performance Computer Architecture</a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-computational-photography-1023?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computational Photography</a> from <em>Georgia Institute of Technology</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-computability-complexity-algorithms-1024?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computability, Complexity &amp; Algorithms</a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/udacity-network-security-8570?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Network Security</a> from <em>Georgia Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/data-genes-medicine-7193?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data, Genes, and Medicine</a> from <em>State University of New York</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-quantum-machine-learning-12860?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantum Machine Learning</a> from <em>University of Toronto</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/parallel-programming-in-java-8909?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Parallel Programming in Java</a> from <em>Rice University</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/concurrent-programming-in-java-8910?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Concurrent Programming in Java</a> from <em>Rice University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/dwrelational-4199?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Relational Database Support for Data Warehouses</a> from <em>University of Colorado System</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/big-data-analysys-6288?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Analysis with Scala and Spark</a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-nature-in-code-biology-in-javascript-6881?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Nature, in Code: Biology in JavaScript</a> from <em>École Polytechnique Fédérale de Lausanne</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/text-mining-analytics-7338?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Hands-on Text Mining and Analytics</a> from <em>Yonsei University</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/ml-models-human-in-the-loop-pipelines-45865?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Optimize ML Models and Deploy Human-in-the-Loop Pipelines</a> from <em>DeepLearning.AI</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-devops-practices-and-principles-9475?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps Practices and Principles</a> from <em>Microsoft</em> ★★☆☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/deep-learning-reinforcement-learning-21630?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deep Learning and Reinforcement Learning</a> from <em>IBM</em> ★★★☆☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-cloud-foundry-and-cloud-native-software-architecture-8387?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Cloud Foundry and Cloud Native Software Architecture</a> from <em>Linux Foundation</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-sparse-representations-in-signal-and-image-processing-fundamentals-9133?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Sparse Representations in Signal and Image Processing: Fundamentals</a> from <em>Technion - Israel Institute of Technology</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/ai-for-medical-diagnosis-19461?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI for Medical Diagnosis</a> from <em>DeepLearning.AI</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/bd2klincs-3024?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Science with the BD2K-LINCS Data Coordination and Integration Center</a> from <em>Icahn School of Medicine at Mount Sinai</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/security-operations-administration-sscp-10335?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Security Operations and Administration</a> from <em>(ISC)²</em> ★★★★★(1)</li>
     <li><a href="https://www.classcentral.com/course/systems-application-security-sscp-10338?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Systems and Application Security</a> from <em>(ISC)²</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/incident-response-recovery-risks-sscp-10340?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Identifying, Monitoring, and Analyzing Risk and Incident Response and Recovery </a> from <em>(ISC)²</em> ★★★★☆(1)</li>
     <li><a href="https://www.classcentral.com/course/edx-principles-statistical-and-computational-tools-for-reproducible-data-science-9489?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Principles, Statistical and Computational Tools for Reproducible Data Science</a> from <em>Harvard University</em></li>
     <li><a href="https://www.classcentral.com/course/unsupervised-learning-recommenders-reinforcement--93343?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Unsupervised Learning, Recommenders, Reinforcement Learning</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/advanced-learning-algorithms-93344?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Learning Algorithms</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/kadenze-real-time-audio-signal-processing-in-faust-10144?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Real-Time Audio Signal Processing in Faust</a> from <em>Stanford University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-computation-structures-3-computer-organization-6245?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computation Structures 3: Computer Organization</a> from <em>Massachusetts Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/number-theory-cryptography-9210?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Number Theory and Cryptography</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-concurrent-programming-89920?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Concurrent Programming with GPUs</a> from <em>Johns Hopkins University</em></li>
     <li><a href="https://www.classcentral.com/course/crypto-hashing-16869?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cryptography and Hashing Overview</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/predictive-modeling-model-fitting-regression-anal-22600?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Predictive Modeling, Model Fitting, and Regression Analysis</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/cluster-analysis-association-mining-and-model-eva-22601?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cluster Analysis, Association Mining, and Model Evaluation</a> from <em>University of California, Irvine</em></li>
     <li><a href="https://www.classcentral.com/course/edx-data-science-inferential-thinking-through-simulations-10321?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Data Science: Inferential Thinking through Simulations</a> from <em>University of California, Berkeley</em></li>
     <li><a href="https://www.classcentral.com/course/molecularevolution-3555?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Molecular Evolution (Bioinformatics IV)</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/mutations-3557?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Finding Mutations in DNA and Proteins (Bioinformatics VI)</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-dynamic-programming-applications-in-machine-learning-and-genomics-10249?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Dynamic Programming: Applications In Machine Learning and Genomics</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/edx-np-complete-problems-10275?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">NP-Complete Problems</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/design-thinking-predictive-analytics-dat-13492?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Design Thinking and Predictive Analytics for Data Products</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/deploying-machine-learning-models-13493?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deploying Machine Learning Models</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/meaningful-predictive-modeling-13495?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Meaningful Predictive Modeling</a> from <em>University of California, San Diego </em></li>
     <li><a href="https://www.classcentral.com/course/udacity-high-performance-computing-1028?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">High Performance Computing</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-gt-refresher-advanced-os-4734?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">GT - Refresher - Advanced OS</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-artificial-intelligence-8565?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Artificial Intelligence</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-cyber-physical-systems-security-8569?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber-Physical Systems Security</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-compilers-theory-and-practice-8572?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Compilers: Theory and Practice</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-fa17-machine-learning-8995?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">FA17: Machine Learning</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-machine-learning-9695?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/udacity-cyber-physical-systems-design-analysis-10473?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber-Physical Systems Design &amp; Analysis</a> from <em>Georgia Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-predictive-analytics-using-machine-learning-14423?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Predictive Analytics using Machine Learning</a> from <em>University of Edinburgh</em></li>
     <li><a href="https://www.classcentral.com/course/plant-bioinformatics-12753?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Plant Bioinformatics</a> from <em>University of Toronto</em></li>
     <li><a href="https://www.classcentral.com/course/advancedmodeling-7757?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Advanced Modeling for Discrete Optimization</a> from <em>University of Melbourne</em></li>
     <li><a href="https://www.classcentral.com/course/basic-modeling-7759?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basic Modeling for Discrete Optimization</a> from <em>University of Melbourne</em></li>
     <li><a href="https://www.classcentral.com/course/lisan-youhua-jianmo-jichupian-7772?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">离散优化建模基础篇 Basic Modeling for Discrete Optimization</a> from <em>The Chinese University of Hong Kong</em></li>
     <li><a href="https://www.classcentral.com/course/lisan-youhua-jianmo-gaojiepian-7775?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">离散优化建模高阶篇 Advanced Modeling for Discrete Optimization</a> from <em>The Chinese University of Hong Kong</em></li>
     <li><a href="https://www.classcentral.com/course/lisan-youhua-suanfapian-11217?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">离散优化算法篇 Solving Algorithms for Discrete Optimization</a> from <em>The Chinese University of Hong Kong</em></li>
     <li><a href="https://www.classcentral.com/course/solving-algorithms-discrete-optimization-11219?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Solving Algorithms for Discrete Optimization</a> from <em>University of Melbourne</em></li>
     <li><a href="https://www.classcentral.com/course/descriptive-statistics-statistical-distr-7025?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Basic Data Descriptors, Statistical Distributions, and Application to Business Decisions</a> from <em>Rice University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-quantum-cryptography-6334?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Quantum Cryptography</a> from <em>California Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/edx-laff-on-programming-for-high-performance-13675?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">LAFF-On Programming for High Performance</a> from <em>The University of Texas at Austin</em></li>
     <li><a href="https://www.classcentral.com/course/edx-machine-learning-15170?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning</a> from <em>The University of Texas at Austin</em></li>
     <li><a href="https://www.classcentral.com/course/stepik-obrabotka-izobrazheniy-10493?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Обработка изображений</a> from <em>Higher School of Economics</em></li>
     <li><a href="https://www.classcentral.com/course/recommender-systems-introduction-6889?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Recommender Systems: Non-Personalized and Content-Based</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/recommender-metrics-6918?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Recommender Systems: Evaluation and Metrics</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/matrix-factorization-6933?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Matrix Factorization and Advanced Techniques</a> from <em>University of Minnesota</em></li>
     <li><a href="https://www.classcentral.com/course/computer-applications-of-artificial-intelligence--52912?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer Applications of Artificial Intelligence and e-Construction</a> from <em>Purdue University</em></li>
     <li><a href="https://www.classcentral.com/course/data-collection-analytics-project-6083?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Combining and Analyzing Complex Data</a> from <em>University of Maryland, College Park</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-high-performance-computing-22706?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to High-Performance and Parallel Computing</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/statistical-inference-for-estimation-in-data-scie-45214?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Statistical Inference for Estimation in Data Science</a> from <em>University of Colorado Boulder</em></li>
     <li><a href="https://www.classcentral.com/course/classical-cryptosystems-9532?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Classical Cryptosystems and Core Concepts</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/mathematical-foundations-cryptography-9535?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Mathematical Foundations for Cryptography</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/cryptographic-hash-integrity-protection-9586?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cryptographic Hash and Integrity Protection</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/crypto-info-theory-9587?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cryptography and Information Theory</a> from <em>University of Colorado System</em></li>
     <li><a href="https://www.classcentral.com/course/edx-matlab-et-octave-pour-debutants-4759?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">MATLAB et Octave pour débutants</a> from <em>École Polytechnique Fédérale de Lausanne</em></li>
     <li><a href="https://www.classcentral.com/course/linear-optimization-22235?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Optimization: principles and algorithms - Linear optimization</a> from <em>École Polytechnique Fédérale de Lausanne</em></li>
     <li><a href="https://www.classcentral.com/course/network-and-discrete-optimization-22236?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Optimization: principles and algorithms - Network and discrete optimization</a> from <em>École Polytechnique Fédérale de Lausanne</em></li>
     <li><a href="https://www.classcentral.com/course/unconstrained-nonlinear-optimization-22237?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Optimization: principles and algorithms - Unconstrained nonlinear optimization</a> from <em>École Polytechnique Fédérale de Lausanne</em></li>
     <li><a href="https://www.classcentral.com/course/edx-il-linguaggio-naturale-dall-uomo-alla-macchina-11401?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Il linguaggio naturale, dall'uomo alla macchina</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-data-mining-con-r-43786?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning e Data Mining in R</a> from <em>University of Naples Federico II</em></li>
     <li><a href="https://www.classcentral.com/course/ntumlone-algorithmicfoundations-9737?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">機器學習基石下 (Machine Learning Foundations)---Algorithmic Foundations</a> from <em>National Taiwan University</em></li>
     <li><a href="https://www.classcentral.com/course/rengong-zhineng-10375?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">人工智慧：搜尋方法與邏輯推論 (Artificial Intelligence - Search &amp; Logic)</a> from <em>National Taiwan University</em></li>
     <li><a href="https://www.classcentral.com/course/ai2-11519?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">人工智慧：機器學習與理論基礎 (Artificial Intelligence - Learning &amp; Theory)</a> from <em>National Taiwan University</em></li>
     <li><a href="https://www.classcentral.com/course/operations-research-modeling-33417?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Operations Research (1): Models and Applications</a> from <em>National Taiwan University</em></li>
     <li><a href="https://www.classcentral.com/course/operations-research-algorithms-33430?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Operations Research (2): Optimization Algorithms</a> from <em>National Taiwan University</em></li>
     <li><a href="https://www.classcentral.com/course/sesenta-anos-inteligencia-artificial-12427?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Sesenta años de inteligencia artificial</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/razonamiento-artificial-12446?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Razonamiento artificial</a> from <em>Universidad Nacional Autónoma de México</em></li>
     <li><a href="https://www.classcentral.com/course/edx-dna-sequences-alignments-and-analysis-8157?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DNA Sequences: Alignments and Analysis</a> from <em>University System of Maryland</em></li>
     <li><a href="https://www.classcentral.com/course/edx-computational-geometry-5434?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">计算几何 | Computational Geometry</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/edx-big-data-machine-learning-12739?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Big Data Machine Learning | 大数据机器学习</a> from <em>Tsinghua University</em></li>
     <li><a href="https://www.classcentral.com/course/automata-system-validation-6825?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">System Validation: Automata and behavioural equivalences</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/system-validation-behavior-7420?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">System Validation (2): Model process behaviour</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/system-validation-software-protocols-7803?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">System Validation (4): Modelling Software, Protocols, and other behaviour</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/system-validation-modal-formulas-7808?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">System Validation (3): Requirements by modal formulas</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/approximation-algorithms-13080?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Approximation Algorithms</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/automated-reasoning-symbolic-model-checking-18066?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Automated Reasoning: Symbolic Model Checking</a> from <em>EIT Digital</em></li>
     <li><a href="https://www.classcentral.com/course/edx-generative-modelling-17216?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Generative Modelling</a> from <em>National University of Singapore</em></li>
     <li><a href="https://www.classcentral.com/course/edx-performative-modelling-17217?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Performative Modelling</a> from <em>National University of Singapore</em></li>
     <li><a href="https://www.classcentral.com/course/edx-infrastructure-as-code-9476?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Infrastructure as Code</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-devops-testing-9479?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps Testing</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/edx-devops-for-databases-9480?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">DevOps for Databases</a> from <em>Microsoft</em></li>
     <li><a href="https://www.classcentral.com/course/secure-software-development-verification-and-more-22215?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Secure Software Development: Verification and More Specialized Topics</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/secure-software-development-requirements-design-a-22217?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Secure Software Development: Requirements, Design, and Reuse</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-risc-v-34201?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to RISC-V</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/building-a-risc-v-cpu-core-34202?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Building a RISC-V CPU Core</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/risc-v-toolchain-and-compiler-optimization-techni-58737?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">RISC-V Toolchain and Compiler Optimization Techniques</a> from <em>Linux Foundation</em></li>
     <li><a href="https://www.classcentral.com/course/cyber-physical-systems-1-9791?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Cyber-Physical Systems: Modeling and Simulation</a> from <em>University of California, Santa Cruz</em></li>
     <li><a href="https://www.classcentral.com/course/edx-introduction-to-statistical-methods-for-gene-mapping-5425?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Statistical Methods for Gene Mapping</a> from <em>Kyoto University</em></li>
     <li><a href="https://www.classcentral.com/course/ai-for-medical-prognosis-19462?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI for Medical Prognosis </a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/ai-for-medical-treatment-19463?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">AI For Medical Treatment</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/build-basic-generative-adversarial-networks-gans-21788?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Build Basic Generative Adversarial Networks (GANs)</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/build-better-generative-adversarial-networks-gans-21789?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Build Better Generative Adversarial Networks (GANs)</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/apply-generative-adversarial-networks-gans-21792?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Apply Generative Adversarial Networks (GANs)</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/generative-deep-learning-with-tensorflow-22548?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Generative Deep Learning with TensorFlow</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/custom-models-layers-loss-functions-with-tensorfl-22550?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Custom Models, Layers, and Loss Functions with TensorFlow</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/deploying-machine-learning-models-in-production-43543?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Deploying Machine Learning Models in Production</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-modeling-pipelines-in-production-43544?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Modeling Pipelines in Production</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/machine-learning-data-lifecycle-in-production-43545?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Machine Learning Data Lifecycle in Production </a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/introduction-to-machine-learning-in-production-43546?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Introduction to Machine Learning in Production</a> from <em>DeepLearning.AI</em></li>
     <li><a href="https://www.classcentral.com/course/edx-computer-system-design-advanced-concepts-of-modern-microprocessors-7046?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Computer System Design: Advanced Concepts of Modern Microprocessors</a> from <em>Chalmers University of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/approximation-algorithms-part-2-5688?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Approximation Algorithms Part II</a> from <em>École normale supérieure</em></li>
     <li><a href="https://www.classcentral.com/course/edx-reliable-distributed-algorithms-part-2-6603?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Reliable Distributed Algorithms - Part 2</a> from <em>KTH Royal Institute of Technology</em></li>
     <li><a href="https://www.classcentral.com/course/access-control-sscp-10337?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Access Controls </a> from <em>(ISC)²</em></li>
     <li><a href="https://www.classcentral.com/course/network-security-communications-sscp-10339?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Networks and Communications Security</a> from <em>(ISC)²</em></li>
     <li><a href="https://www.classcentral.com/course/optimize-machine-learning-model-performance-17312?utm_source=fcc_medium&amp;utm_medium=web&amp;utm_campaign=cs_programming_2023">Optimizing Machine Learning Performance</a> from <em>Alberta Machine Intelligence Institute</em></li>
</ul>

 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is an Algorithm? Algorithm Definition for Computer Science Beginners ]]>
                </title>
                <description>
                    <![CDATA[ If you’re a student and want to study computer science, or you’re learning to code, then there’s a chance you’ve heard of algorithms. Simply put, an algorithm is a set of instructions that performs a particular action. Contrary to popular belief, an ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-an-algorithm-definition-for-beginners/</link>
                <guid isPermaLink="false">66adf2617550d4f37c2019d7</guid>
                
                    <category>
                        <![CDATA[ algorithms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Kolade Chris ]]>
                </dc:creator>
                <pubDate>Tue, 13 Dec 2022 00:38:26 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/11/laptop-gfe4d4bfc0_1280.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If you’re a student and want to study computer science, or you’re learning to code, then there’s a chance you’ve heard of algorithms. Simply put, an algorithm is a set of instructions that performs a particular action.</p>
<p>Contrary to popular belief, an algorithm is not some piece of code that requires extremely advanced knowledge in order to implement. At the same time, I won't say that an algorithm is easy to implement, either. Some can be, but it depends on what you're trying to do.</p>
<p>In the end, the best way to get better at algorithms is by practicing them regularly.</p>
<p>In this article, you'll learn all about algorithms so you'll be prepared next time you encounter one, or have to write one yourself. I will also share some freeCodeCamp resources that will help you learn how to write algorithms in different languages.</p>
<h2 id="heading-what-well-cover">What We'll Cover</h2>
<ul>
<li><a class="post-section-overview" href="#heading-what-exactly-is-an-algorithm">What Exactly Is an Algorithm?</a></li>
<li><a class="post-section-overview" href="#heading-why-do-you-need-an-algorithm">Why Do You Need an Algorithm?</a></li>
<li><a class="post-section-overview" href="#heading-types-of-algorithms">Types of Algorithms</a></li>
<li><a class="post-section-overview" href="#whichprogramminglanguageisbestforwritingalgorithms">Which Programming Language Is Best for Writing Algorithms?</a> (rename)</li>
<li><a class="post-section-overview" href="#heading-resources-for-learning-algorithms">Resources for Learning Algorithms</a></li>
<li><a class="post-section-overview" href="#heading-conclusion">Conclusion</a></li>
</ul>
<h2 id="heading-what-exactly-is-an-algorithm">What Exactly Is an Algorithm?</h2>
<p>An algorithm is a set of steps for solving a known problem. Most algorithms are implemented to run following the <strong>four steps</strong> below: </p>
<ul>
<li>take an input</li>
<li>access that input and make sure it's correct</li>
<li>show the result</li>
<li>terminate (the stage where the algorithm stop running)</li>
</ul>
<p>Some steps of the algorithm may run repeatedly, but in the end, <strong>termination</strong> is what ends an algorithm. </p>
<p>For example, the algorithm below sort numbers in descending order. It loops through the numbers specified until it arranges them in descending order, then terminates when there are no more number to sort:</p>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortNumbersInDescendingOrder</span>(<span class="hljs-params">nums</span>) </span>{
  <span class="hljs-keyword">let</span> sortedNums = <span class="hljs-literal">false</span>;
  <span class="hljs-keyword">while</span> (!sortedNums) {
    sortedNums = <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt; nums.length; i++) {
      <span class="hljs-keyword">if</span> (nums[i] &gt; nums[i - <span class="hljs-number">1</span>]) {
        [nums[i], nums[i - <span class="hljs-number">1</span>]] = [nums[i - <span class="hljs-number">1</span>], nums[i]];
        sortedNums = <span class="hljs-literal">false</span>;
      }
    }
  }
  <span class="hljs-keyword">return</span> nums;
}

<span class="hljs-keyword">const</span> unsortedNums = [<span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">6</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">10</span>, <span class="hljs-number">9</span>, <span class="hljs-number">8</span>, <span class="hljs-number">7</span>];
<span class="hljs-keyword">const</span> sortedNums = sortNumbersInDescendingOrder(unsortedNums);

<span class="hljs-built_in">console</span>.log(sortedNums); <span class="hljs-comment">// [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]</span>
</code></pre>
<p>For a theoretical basis, for instance, an algorithm for dividing two numbers and showing the remainder could run through the steps below:</p>
<ul>
<li><strong>Step 1</strong>: the user enters the first and second numbers – the dividend and the divisor</li>
<li><strong>Step 2</strong>: the algorithm written to perform the division takes in the number, then puts a division sign between the dividend and the divisor. It also checks for a remainder. </li>
<li><strong>Step 3</strong>: the result of the division and remainder is shown to the user</li>
<li><strong>Step 4</strong>: the algorithm terminates</li>
</ul>
<p>Here's how that kind of algorithm is implemented in JavaScript:</p>
<pre><code class="lang-js"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">divideTwoNums</span>(<span class="hljs-params">num1, num2</span>) </span>{
  <span class="hljs-keyword">const</span> result =  num1 / num2;
  <span class="hljs-keyword">const</span> remainder = num1 % num2

  <span class="hljs-keyword">return</span> <span class="hljs-string">`The result is <span class="hljs-subst">${result}</span> remainder <span class="hljs-subst">${remainder}</span>`</span>
}

<span class="hljs-keyword">const</span> result = divideTwoNums(<span class="hljs-number">21</span>, <span class="hljs-number">2</span>)

<span class="hljs-built_in">console</span>.log(result) <span class="hljs-comment">// The result is 10.5 remainder 1</span>
</code></pre>
<p>If there's an error, the algorithm may not run, or might return the wrong output. If the programmer who wrote the algorithm took user experience into consideration, then an error handler could show an error to the user and let them know what to do.</p>
<h2 id="heading-why-do-you-need-an-algorithm">Why do you Need an Algorithm?</h2>
<p>If you’re one of those computer science students asking “why algorithms”, here are some reasons why you should learn about them:</p>
<p><strong>Problem Solving</strong>: being able to write an algorithm improves your problem-solving capacity. It is a common belief that once you can solve a problem with one thing, you can solve problems with another closely related one. So, if you can solve problems with Python, you can solve problems with JavaScript.</p>
<p><strong>Scalability</strong>: an algorithm helps your software/application/website respond appropriately to demands.</p>
<p><strong>Proper Utilization of Resources:</strong> choosing the right algorithm ensures proper utilization of resources such as memory, storage, network, and others. </p>
<h2 id="heading-types-of-algorithms">Types of Algorithms</h2>
<p>Algorithms in computer science can be broadly categorized into searching and sorting algorithms:</p>
<ul>
<li>Sorting – selection sort, bubble sort, insertion sort, merge sort, quick sort, and so on.</li>
<li>Searching – binary search, exponential search, jump search, and so on.</li>
</ul>
<p>But there are many types of algorithms that programers use regularly. Here are some other common algorithm types organized by category:</p>
<ul>
<li>Hashing – SHA-256, SHA-1</li>
<li>Brute force – trial and error</li>
<li>Divide and conquer – merge sort algorithm</li>
<li>Greedy – Prim's algorithm, Kruskal's algorithm </li>
<li>Recursive – computer factorials</li>
</ul>
<h2 id="heading-which-programming-language-is-best-for-writing-algorithms">Which Programming Language Is Best for Writing Algorithms?</h2>
<p>You can write angorithms in any programming language. There's no benefit to using one language over another.</p>
<p>Every language has its strengths and weaknesses, and each has unique syntax and features. So writing an algorithm might look different in one language compared to another.</p>
<p>But algorithms are universal concepts. So if you can write <strong>bubble sort</strong> in Python, you should also be able to write it in JavaScript or C#.</p>
<h2 id="heading-resources-for-learning-algorithms">Resources for Learning Algorithms</h2>
<p>Here are some videos from the freeCodeCamp YouTube channel that can help you learn algorithms effectively:</p>
<ul>
<li><a target="_blank" href="https://www.youtube.com/watch?v=8hly31xKli0">Algorithms and Data Structures Tutorial - Full Course for Beginners</a></li>
<li><a target="_blank" href="https://www.youtube.com/watch?v=fW_OS3LGB9Q">Algorithms in Python – Full Course for Beginners</a></li>
<li><a target="_blank" href="https://www.youtube.com/watch?v=RBSGKlAvoiM&amp;list=PLR69o5h4xAwUgZHf8Y6V-KukXHBlbAcc1&amp;index=2">Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer</a></li>
<li><a target="_blank" href="https://www.youtube.com/watch?v=oBt53YbR9Kk&amp;list=PLR69o5h4xAwUgZHf8Y6V-KukXHBlbAcc1&amp;index=4">Dynamic Programming - Learn to Solve Algorithmic Problems &amp; Coding Challenges</a></li>
<li><a target="_blank" href="https://www.youtube.com/watch?v=l7-f9gS8VOs&amp;list=PLR69o5h4xAwUgZHf8Y6V-KukXHBlbAcc1&amp;index=14">Understanding Sorting Algorithms</a></li>
</ul>
<p>Also, the interactive <a target="_blank" href="https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/">JavaScript Algorithms and Data Structures Certification</a> on freeCodeCamp can give you a crash course in algorithmic thinking in JavaScript.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In this article, we went over what an algorithm is, their types, and resources for learning algorithms. </p>
<p>If you read this far, the next thing you should do is start learning algorithms with one or more of the resources listed in this article.</p>
<p>Thank you for reading.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
