<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jose Maria Iriarte</title>
    <description>The latest articles on DEV Community by Jose Maria Iriarte (@josemariairiarte).</description>
    <link>https://dev.to/josemariairiarte</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F945235%2F4679d937-31f4-4f3e-8586-28a21b5e8898.jpg</url>
      <title>DEV Community: Jose Maria Iriarte</title>
      <link>https://dev.to/josemariairiarte</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/josemariairiarte"/>
    <language>en</language>
    <item>
      <title>Building Portfolio Insights: Lessons from an Event‑Driven .NET Microservices Dashboard</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Tue, 16 Dec 2025 15:59:02 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/building-portfolio-insights-lessons-from-an-event-driven-net-microservices-dashboard-4m53</link>
      <guid>https://dev.to/josemariairiarte/building-portfolio-insights-lessons-from-an-event-driven-net-microservices-dashboard-4m53</guid>
      <description>&lt;p&gt;Over the past weeks, I’ve been working on Portfolio Insights, a personal finance dashboard built on a microservices architecture using .NET 8, RabbitMQ, gRPC, and Docker. The project is a continuation of my exploration into distributed systems, following an earlier e‑commerce microservices application, but applied to a more analytics‑driven, number‑centric domain.&lt;/p&gt;

&lt;p&gt;The goal was not to build a production‑ready finance app, but to design and implement a cohesive, end‑to‑end system that demonstrates how independent services can collaborate through synchronous and asynchronous communication, while still supporting a clean and understandable client experience.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tigerbluejay" rel="noopener noreferrer"&gt;
        tigerbluejay
      &lt;/a&gt; / &lt;a href="https://github.com/tigerbluejay/Microservices-Infrastructure-Personal-Finance-Dashboard" rel="noopener noreferrer"&gt;
        Microservices-Infrastructure-Personal-Finance-Dashboard
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      .NET 8 Application implementing Containerized Microservices Infrastructure and Architecture. The Solution consists of four Microservices (Market Data, Portfolio, Analytics and Notifications) a Message Broker, an API Gateway and a .NET Razor Pages Web Client
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;📊 Portfolio Insights – Personal Finance Dashboard&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This project is a demonstration of a .NET 8 microservices-based personal finance and analytics platform. It builds on the architectural patterns and infrastructure explored in my earlier E-Commerce Microservices project, applying them to a number‑driven, analytics‑focused domain.&lt;/p&gt;
&lt;p&gt;The application allows users to manage investment portfolios, retrieve simulated market prices, compute analytics asynchronously, and receive notifications based on computed results. All services are containerized and orchestrated via Docker Compose, showcasing a realistic, end‑to‑end distributed system.&lt;/p&gt;
&lt;p&gt;Building this application helped solidify my understanding of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Event‑driven microservices&lt;/li&gt;
&lt;li&gt;gRPC and HTTP communication&lt;/li&gt;
&lt;li&gt;CQRS and layered architectures&lt;/li&gt;
&lt;li&gt;Message‑based analytics pipelines&lt;/li&gt;
&lt;li&gt;Vertical Slice and Clean Architectures&lt;/li&gt;
&lt;li&gt;Containerized orchestration with Docker&lt;/li&gt;
&lt;li&gt;Implementation of Cross-cutting concerns such as validations, logging, health checks and custom exception handling&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧩 Solution Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The solution consists of eight projects, all located at the same directory level:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Market Data Service – Simulated market prices and price…&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tigerbluejay/Microservices-Infrastructure-Personal-Finance-Dashboard" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowrdvr7as6n8mtxqznyv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowrdvr7as6n8mtxqznyv.jpg" alt="High Level Design #1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap1ki8e7slv7ov7343l0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fap1ki8e7slv7ov7343l0.jpg" alt="High Level Design #2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qdknsb88r9sa5bl5pgf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qdknsb88r9sa5bl5pgf.jpg" alt="High Level Design #3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Space
&lt;/h2&gt;

&lt;p&gt;At a high level, Portfolio Insights allows a user to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage an investment portfolio (assets and quantities)&lt;/li&gt;
&lt;li&gt;Retrieve simulated market prices&lt;/li&gt;
&lt;li&gt;Compute portfolio analytics asynchronously&lt;/li&gt;
&lt;li&gt;Receive notifications when analytics are refreshed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the hood, each of these responsibilities is handled by a separate microservice, each with its own datastore and lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Market Data Service&lt;/strong&gt; – simulates and publishes market prices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio Service&lt;/strong&gt; – owns user portfolios and assets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics Service&lt;/strong&gt; – computes metrics from portfolio and market events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notification Service&lt;/strong&gt; – reacts to analytics results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A YARP API Gateway acts as a single entry point, and a Razor Pages web client consumes the system through HTTP calls routed via the gateway.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx0g1pni1z59sy25sfsc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxx0g1pni1z59sy25sfsc.jpg" alt="Portfolio Insights Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture First, Code Second
&lt;/h2&gt;

&lt;p&gt;One of the most important lessons from this project was the value of diagramming the system in advance.&lt;/p&gt;

&lt;p&gt;With event‑driven architectures, complexity doesn’t come from individual services—it comes from how they interact. Before writing most of the code, I spent time mapping out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which service owns which data&lt;/li&gt;
&lt;li&gt;Which interactions are synchronous (gRPC)&lt;/li&gt;
&lt;li&gt;Which workflows are asynchronous (RabbitMQ events)&lt;/li&gt;
&lt;li&gt;How state changes propagate through the system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This upfront design work paid off, especially once I started building the client application. In an event‑driven system, not every user action results in immediate, synchronous data. The client often triggers a command, waits for asynchronous processing, and then queries a different service for the result.&lt;/p&gt;

&lt;p&gt;Understanding those flows early made it much easier to design consistent endpoints and avoid tight coupling between the UI and internal service logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4002n2yc1kov0y9z4ctl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4002n2yc1kov0y9z4ctl.jpg" alt="Portfolio Insights - Portfolio"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Communication Patterns in Practice
&lt;/h2&gt;

&lt;p&gt;Portfolio Insights deliberately mixes communication styles:&lt;/p&gt;

&lt;p&gt;gRPC is used where low‑latency, request/response interactions make sense—such as the Portfolio Service requesting current prices from the Market Data Service.&lt;/p&gt;

&lt;p&gt;RabbitMQ with MassTransit handles event‑driven workflows—portfolio updates, market price changes, and analytics computations.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A user adds or updates assets in their portfolio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Portfolio Service publishes a PortfolioUpdatedEvent.&lt;/li&gt;
&lt;li&gt;The Analytics Service consumes this event, joins it with the latest market prices, and computes metrics.&lt;/li&gt;
&lt;li&gt;The Analytics Service publishes an AnalyticsComputedEvent.&lt;/li&gt;
&lt;li&gt;The Notification Service reacts and stores user notifications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The client doesn’t talk to all these services directly. Instead, it triggers the initial command and later queries the Analytics or Notification endpoints when data is ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk1n2zs0melh8cbmw8ps.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpk1n2zs0melh8cbmw8ps.jpg" alt="Portfolio Insights - Analytics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Ownership and Technology Choices
&lt;/h2&gt;

&lt;p&gt;Each service owns its own data and uses storage appropriate to its needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Portfolio Service uses PostgreSQL with Marten, treating the database as a document store.&lt;/li&gt;
&lt;li&gt;Analytics Service uses SQL Server with a layered architecture (API, Application, Domain, Infrastructure).&lt;/li&gt;
&lt;li&gt;Market Data and Notification Services use SQLite, Redis, and in‑memory stores where persistence requirements are lighter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach reinforced an important principle: consistency across services matters less than clarity of ownership and intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Client Perspective
&lt;/h2&gt;

&lt;p&gt;From the UI side, this project highlighted how deeply backend architecture influences frontend design.&lt;/p&gt;

&lt;p&gt;Because analytics are computed asynchronously, the client must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trigger actions that start background workflows&lt;/li&gt;
&lt;li&gt;Display previously computed data&lt;/li&gt;
&lt;li&gt;Refresh views once downstream services have processed events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Designing the Razor Pages client forced me to think carefully about when data should be requested and which service is responsible for it. This is another area where early architectural diagrams were invaluable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z6elwers8svoozynx6l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z6elwers8svoozynx6l.jpg" alt="Portfolio Insights - Notifications"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Took Away
&lt;/h2&gt;

&lt;p&gt;Beyond the specific technologies, this project reinforced a few broader lessons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event‑driven systems reward clear boundaries and explicit contracts&lt;/li&gt;
&lt;li&gt;Diagramming workflows early prevents costly redesigns later&lt;/li&gt;
&lt;li&gt;Client applications should reflect the realities of asynchronous systems&lt;/li&gt;
&lt;li&gt;Docker Compose is an excellent way to reason about distributed systems as a whole&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Portfolio Insights is ultimately a learning and portfolio project, but it represents a meaningful step forward in my understanding of modern .NET microservices, asynchronous communication, and system‑level design.&lt;/p&gt;

&lt;p&gt;If you’re exploring similar architectures, my biggest recommendation is simple: design the flows before the code. In event‑driven systems, that clarity makes all the difference.&lt;/p&gt;

&lt;p&gt;📺 Watch the application overview here:&lt;br&gt;


  &lt;iframe src="https://www.youtube.com/embed/FqLpblkKysA"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the Next Step
&lt;/h2&gt;

&lt;p&gt;If this article gave you a clearer picture of how an event-driven microservices architecture comes together in a real-world .NET application, here are a few ways to continue exploring:&lt;/p&gt;

&lt;p&gt;📁 Explore the GitHub Repository – Review the full source code to see how the services, message flows, API Gateway, and Razor Pages client fit together. Following the code alongside the architecture diagrams is the best way to reinforce how synchronous and asynchronous communication work in practice.&lt;/p&gt;

&lt;p&gt;💡 Share the Architecture – If you know someone learning microservices, messaging, or distributed systems in .NET, share this project with them. It’s often easier to understand these concepts through a concrete, end-to-end example.&lt;/p&gt;

&lt;p&gt;🖥 Experiment and Extend – Clone the project and try evolving it. Add new events, introduce additional analytics, or adjust how the client reacts to asynchronous workflows. Small changes are a great way to deepen your understanding of event-driven design.&lt;/p&gt;

&lt;p&gt;👍 Star the Repository – If you find the project useful, consider starring the repository. It helps others discover the project and supports continued sharing of practical architecture examples.&lt;/p&gt;

&lt;p&gt;Working through projects like this builds intuition that goes beyond individual frameworks—helping you design systems that scale in complexity while remaining understandable.&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>eventdriven</category>
      <category>architecture</category>
      <category>github</category>
    </item>
    <item>
      <title>Integrating an Angular Client with a .NET Web API – A Freelancer Marketplace Application</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Wed, 17 Sep 2025 15:16:00 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/integrating-an-angular-client-with-a-net-web-api-a-freelancer-marketplace-application-1akj</link>
      <guid>https://dev.to/josemariairiarte/integrating-an-angular-client-with-a-net-web-api-a-freelancer-marketplace-application-1akj</guid>
      <description>&lt;p&gt;Building full-stack applications is always an exciting challenge, especially when you want to create something original while sharpening your technical skills. Over the past weeks, I worked on a project that combines Angular 17/18 on the frontend with a .NET 8 Web API on the backend: a Freelancer Marketplace application.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tigerbluejay" rel="noopener noreferrer"&gt;
        tigerbluejay
      &lt;/a&gt; / &lt;a href="https://github.com/tigerbluejay/Angular-.Net-Integration-Freelancer-Marketplace-App" rel="noopener noreferrer"&gt;
        Angular-.Net-Integration-Freelancer-Marketplace-App
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      .NET 8 API with Angular 17/18 Client - An application for freelancers and their clients to work together
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;💼 Freelancer Marketplace&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A full-stack freelancer marketplace web application built with ASP.NET 8 Web API and Angular 18. Users can register, login, and participate with three distinct roles: Administrator, Client, and Freelancer. Freelancers can create profiles, manage portfolios, browse and apply for projects, and chat with clients in real-time. Clients can post projects, manage proposals, and collaborate with freelancers. Admins can manage users and enforce platform rules.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;✅ User Registration &amp;amp; Login&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Secure authentication using JWT tokens&lt;/li&gt;
&lt;li&gt;Role-based authorization (Admin / Client / Freelancer)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;✅ Freelancer Features&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Profile management with editable details&lt;/li&gt;
&lt;li&gt;Create, edit, delete portfolio items (title, description, photo) with pagination&lt;/li&gt;
&lt;li&gt;Browse projects and filter by required skills (5 distinct skills available)&lt;/li&gt;
&lt;li&gt;Submit proposals for projects&lt;/li&gt;
&lt;li&gt;View submitted proposals (filter by Approved / Rejected / Pending)&lt;/li&gt;
&lt;li&gt;Approved proposals automatically generate active projects and enable real-time chat with clients&lt;/li&gt;
&lt;li&gt;Messaging system with unread counters, last message preview, timestamps…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tigerbluejay/Angular-.Net-Integration-Freelancer-Marketplace-App" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This project was born as both a learning exercise and a way to showcase how to bring together two powerful frameworks. The app integrates authentication, role-based navigation, data persistence, pagination, SignalR for live chat and presence, and various UX touches like modals, guards, and notifications. It is a real-world scenario where clients and freelancers interact on a platform, with administrators keeping the ecosystem in check.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws8at44or4cdvwb4jcx3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws8at44or4cdvwb4jcx3.jpg" alt="Freelancer Dashboard - Browse Projects"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a Freelancer Marketplace?
&lt;/h2&gt;

&lt;p&gt;Rather than building a generic CRUD app, I wanted something closer to a real-world product. A freelancer marketplace is perfect because it naturally involves multiple roles, dynamic interactions, and workflows that push both the API and the Angular client beyond the basics.&lt;/p&gt;

&lt;p&gt;The application defines three distinct roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Freelancer&lt;/strong&gt;: builds a profile, adds portfolio items, browses projects, submits proposals, and chats with clients when proposals are approved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt;: creates projects, manages incoming proposals, and collaborates with freelancers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Admin&lt;/strong&gt;: oversees the platform with a panel to enable/disable user accounts and monitor online presence in real-time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each role has its own dedicated navigation bar and tailored user experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yhmmidbvsuwlsgshevl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6yhmmidbvsuwlsgshevl.jpg" alt="Freelancer Dashboard - Submitted Proposals"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Angular Meets .NET
&lt;/h2&gt;

&lt;p&gt;The project began in Angular 17 and was later migrated to Angular 18, making it a good case study for keeping frontend dependencies modern and compatible. On the backend, .NET 8 Web API provides authentication (JWT), persistence with EF Core and SQLite, and real-time capabilities with SignalR.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhvlwtge33sg7uqkm19ma.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhvlwtge33sg7uqkm19ma.jpg" alt="Client Dashboard - Profile and Projects"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Some highlights of the integration:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authentication &amp;amp; Authorization&lt;/strong&gt;: JWT tokens handled in Angular via interceptors, with client-side guards preventing unauthorized or disabled users from accessing the app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CRUD + Pagination&lt;/strong&gt;: Portfolio items, projects, and proposals are paginated for smooth browsing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SignalR Integration&lt;/strong&gt;: Real-time chat between freelancers and clients, with unread message counters, presence indicators, and autoscrolling conversations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;User Experience&lt;/strong&gt;: Angular guards warn against unsaved changes, modals confirm critical actions, and toasters provide feedback.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89rk4dyw0im0pwldmpr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk89rk4dyw0im0pwldmpr.jpg" alt="Freelancer and Client Chat Window"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;A few insights emerged while building the marketplace:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Folder structure matters&lt;/strong&gt;: I started with every Angular component in its own folder. While not perfectly organized, it still worked. The project reminded me that iteration and refactoring are natural parts of learning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Angular and .NET pair well&lt;/strong&gt;: The synergy between Angular’s reactive front-end design and .NET’s structured API made development smooth. Once authentication and SignalR were configured, everything else clicked together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-world scenarios force depth&lt;/strong&gt;: Unlike toy projects, building a freelancer marketplace required thinking through workflows: proposals, approvals, active projects, and messaging. This depth made the integration feel authentic.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4vj7cilt2mi57wlif6m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4vj7cilt2mi57wlif6m.jpg" alt="Admin Panel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;If you’re learning full-stack development, there’s tremendous value in picking a project idea that excites you and has practical complexity. You’ll encounter the kind of challenges that surface in professional applications: handling state, ensuring security, designing APIs for multiple roles, and maintaining clarity in the codebase.&lt;/p&gt;

&lt;p&gt;This project is more than just a tutorial exercise—it’s a working demonstration of how Angular and .NET can power a modern, role-based platform where real-time collaboration is central.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The Freelancer Marketplace app gave me the chance to practice integration between Angular 17/18 and .NET 8, explore SignalR real-time communication, and think carefully about user roles and workflows.&lt;/p&gt;

&lt;p&gt;For anyone building similar projects, I’d recommend starting small but choosing an application idea with enough moving parts to stay engaging. That’s how you grow not only as a developer, but also as a designer of systems that make sense to real people.&lt;/p&gt;

&lt;p&gt;📺 Watch the application overview here:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/YpZb8Kpykqw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the Next Step
&lt;/h2&gt;

&lt;p&gt;If this article helped you understand how Angular can consume a .NET API service in a real-world application, here's how you can continue your journey:&lt;/p&gt;

&lt;p&gt;📁 Explore the GitHub Repository – Dive into the repository to examine the Angular app and the API integration. Follow along with the code to reinforce your understanding of consuming and interacting with APIs in .NET.&lt;/p&gt;

&lt;p&gt;💡 Share the Knowledge – Know someone who’s learning to work with .NET APIs or Angular? Share this guide with them to help them accelerate their learning and improve their skills.&lt;/p&gt;

&lt;p&gt;🖥 Start Coding – The best way to grasp these concepts is by getting hands-on. Take the provided code and experiment with adding new features or integrating other APIs.&lt;/p&gt;

&lt;p&gt;👍 Like the Repository – If you find the project helpful, give it a thumbs-up! This will help others discover the repository and benefit from it too.&lt;/p&gt;

&lt;p&gt;By engaging with this tutorial and project, you'll build a strong foundation in .NET API, Angular Client integration, ready to implement these skills in real-world applications.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>angular</category>
      <category>api</category>
      <category>learning</category>
    </item>
    <item>
      <title>Mental Math Hacks: Swift Estimations of Powers and Roots for Programmers</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 24 May 2025 03:00:00 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/mental-math-hacks-swift-estimations-of-powers-and-roots-for-programmers-321m</link>
      <guid>https://dev.to/josemariairiarte/mental-math-hacks-swift-estimations-of-powers-and-roots-for-programmers-321m</guid>
      <description>&lt;p&gt;In a world overflowing with digital tools, it’s easy to dismiss mental math as outdated — a quaint relic from the pre-calculator age. But there’s something uniquely powerful about sharpening your ability to think numerically without external support. Like optimizing code for runtime efficiency, refining your mental math streamlines your internal thought processes and reduces your cognitive load.&lt;/p&gt;

&lt;p&gt;This article is based on a short guide I wrote called &lt;strong&gt;&lt;em&gt;Estimating Powers and Roots Fast - Essential Tactics to Speed Up Mental Calculations with Whole Numbers&lt;/em&gt;&lt;/strong&gt;, the third in a three-part series I began in 2018. The project started as a personal challenge: to improve how I processed numbers mentally. I wanted to go beyond fuzzy estimations and reclaim the skill of clear, structured calculation — the kind that feels more like flow than friction.&lt;/p&gt;

&lt;p&gt;What began as scattered notes turned into three compact books, each focused on two core operations: addition &amp;amp; subtraction, multiplication &amp;amp; division, powers &amp;amp; roots. This article distills the key strategies from the third of those books.&lt;/p&gt;

&lt;p&gt;These are not “tricks” in the superficial sense — they’re practical, reusable mental algorithms. Some are intuitive, others might feel surprising at first, but all are meant to reduce latency between seeing a problem and arriving at a confident answer.&lt;/p&gt;

&lt;p&gt;Whether you’re optimizing memory usage or tallying totals in your head, these techniques will train you to think faster, reduce errors, and — yes — enjoy math a little more.&lt;/p&gt;

&lt;p&gt;Note that the original guide contains detailed explanations on these and other techniques, impossible to reproduce in an article of this nature or length. &lt;strong&gt;If you are serious about incorporating these techniques, I strongly recommend you read the full guide, linked at the end of this article.&lt;/strong&gt; It's completely free to download and read.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Key Strategies for Estimating Powers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧱 Foundational Powers
&lt;/h3&gt;

&lt;p&gt;Know the small powers of 2–10 by heart. These are your “power landmarks” — quick-access reference points that anchor your estimation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: If you know `5^3 = 125` and `5^4 = 625`,
and you’re asked to estimate `5^3.5`, 
you know it must fall between 125 and 625 — closer to the former.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔄 Break Down and Multiply
&lt;/h3&gt;

&lt;p&gt;Decompose a base into smaller components whose powers you know, then recombine using multiplication rules.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate `6^4` by computing `(2 × 3)^4 = 2^4 × 3^4 =
16 × 81 = 1296`.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 Beyond Simple Break Down and Multiply
&lt;/h3&gt;

&lt;p&gt;Use substitutions or approximations when clean decomposition isn’t possible — apply the nearest base you &lt;em&gt;can&lt;/em&gt; work with.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate 14^6.
Instead of calculating this directly, 
rewrite as (14^2)^3 = 196^3.
Then approximate 196^3 ≈ (200)^3 = 8,000,000.
Since 196 &amp;lt; 200, you know the true result is slightly less 
— maybe around 7.5 million.
This gets you in the right ballpark quickly without full multiplication.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 Elevating Multiples of 10
&lt;/h3&gt;

&lt;p&gt;When a number is a clean multiple of 10, strip the zeroes, calculate the power, then adjust for scale.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: `30^2 = (3 × 10)^2 = 3^2 × 10^2 = 9 × 100 = 900`.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 Larger Bases
&lt;/h3&gt;

&lt;p&gt;Use known approximations or reduce the exponent by converting to smaller base expressions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: `20^4 = (2 × 10)^4 = 2^4 × 10^4 =
16 × 10,000 = 160,000`.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Key Strategies for Estimating Roots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🟩 Perfect Square Roots
&lt;/h3&gt;

&lt;p&gt;Work backwards from known squares and interpolate if necessary.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate `√1600`. 
You know `40^2 = 1600`, 
so the answer is exactly 40.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧮 Perfect Square Roots (5+ Digits)
&lt;/h3&gt;

&lt;p&gt;Look at the number of digits and use digit-pattern clues &lt;br&gt;
from common squares to narrow down candidates.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate `√62500`. 
You know `250^2 = 62500`, 
and that squares ending in “500” often come from roots ending in 50.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧊 Extending to Perfect Cubes (≤ 6 digits)
&lt;/h3&gt;

&lt;p&gt;Use the number of digits to guess the number of digits in the root, then apply unit-digit patterns to narrow it down.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate ∛614125.
Split the number: 614 and 125.
Note that:
80³ = 512,000
90³ = 729,000
Since 614,125 falls between 80³ and 90³, the cube root is in the 80s.
The number ends in 5, and cube roots ending in 5 produce cubes ending in 5.
So the cube root is 85.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📦 Cube Roots of 7–9 Digit Numbers
&lt;/h3&gt;

&lt;p&gt;Group the digits, then use both first and last digits to estimate. You may also need digital sums to break ties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate ∛478,211,768.
First digits: between 700³ = 343M and 800³ = 512M 
→ So it's in the 700s.
Last digit is 8, which corresponds to a root ending in 2 (since 2³ = 8).
Digital sum of the number is 44 → 4+4 = 8 
→ root's digital sum should be 2, 5 or 8.
Try 722, 752, 782 → Best estimate: 782.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧮 4th and 5th Roots
&lt;/h3&gt;

&lt;p&gt;Estimate the root by matching number of digits in the base using scientific notation — then refine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: Estimate ∜1×10¹².
You’re looking for the 4th root of a trillion.
100⁴ = 10⁸, 1000⁴ = 10¹² → so ∜(1×10¹²) = 1000.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🧰 Practice &amp;amp; Progress
&lt;/h3&gt;

&lt;p&gt;Like any skill, speed and confidence come with practice. Try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Estimating shopping discounts, volumes and distances involving roots and powers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calculating loans, and compound interests&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keeping track of wellness stats for your weigh training for example&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn’t to become a human calculator, but to develop a mental agility that helps in work, school, and everyday thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Download the Full Guide
&lt;/h2&gt;

&lt;p&gt;This article is a condensed version of my guide:&lt;/p&gt;

&lt;p&gt;👉 Download the PDF: Estimating Powers and Roots Fast&lt;br&gt;
&lt;a href="https://tigerbluejay.github.io/math/Estimating-Powers-and-Roots-Fast.pdf" rel="noopener noreferrer"&gt;Estimating Powers and Roots Fast (PDF)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This guide contains much more detailed information about how to profit from the various tactics including various reference powers and roots tables and expanded explanations. If you are serious about these techniques I strongly recommend you read the guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Help Others and Keep the Conversation Going!
&lt;/h2&gt;

&lt;p&gt;If you found this article helpful, here’s how you can contribute to spreading the knowledge:&lt;/p&gt;

&lt;p&gt;👍 Like this article to show your support and help others discover it.&lt;/p&gt;

&lt;p&gt;📁 Bookmark it so you can easily come back to these techniques anytime you need them.&lt;/p&gt;

&lt;p&gt;🔄 Share it with friends or colleagues who might benefit from faster mental math strategies.&lt;/p&gt;

&lt;p&gt;💬 Comment below with your favorite tip, a trick you’ve used, or any questions you might have — let’s keep learning together!&lt;/p&gt;

&lt;p&gt;By liking, sharing, or commenting, you're not just helping me reach more readers — you're contributing to a community that thrives on growth and knowledge. Sharing this article helps others enhance their mental math skills, reducing cognitive load and boosting productivity. Your engagement could make someone’s day easier or help them see math in a new, empowering way!&lt;/p&gt;

&lt;p&gt;Thank you for being part of this learning journey! 🙌&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
      <category>math</category>
    </item>
    <item>
      <title>Optimizing Mental Math: Fast Multiplications and Divisions for Software Engineers</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 17 May 2025 03:00:00 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/optimizing-mental-math-fast-multiplications-and-divisions-for-software-egineers-43a0</link>
      <guid>https://dev.to/josemariairiarte/optimizing-mental-math-fast-multiplications-and-divisions-for-software-egineers-43a0</guid>
      <description>&lt;p&gt;In a world overflowing with digital tools, it’s easy to dismiss mental math as outdated — a quaint relic from the pre-calculator age. But there’s something uniquely powerful about sharpening your ability to think numerically without external support. Like optimizing code for runtime efficiency, refining your mental math streamlines your internal thought processes and reduces your cognitive load.&lt;/p&gt;

&lt;p&gt;This article is based on a short guide I wrote called &lt;strong&gt;&lt;em&gt;Multiplying and Dividing Fast - Essential Tactics to Speed Up Mental Calculations with Whole Numbers&lt;/em&gt;&lt;/strong&gt;, the second in a three-part series I began in 2018. The project started as a personal challenge: to improve how I processed numbers mentally. I wanted to go beyond fuzzy estimations and reclaim the skill of clear, structured calculation — the kind that feels more like flow than friction.&lt;/p&gt;

&lt;p&gt;What began as scattered notes turned into three compact books, each focused on two core operations: addition &amp;amp; subtraction, multiplication &amp;amp; division, powers &amp;amp; roots. This article distills the key strategies from the second of those books.&lt;/p&gt;

&lt;p&gt;These are not “tricks” in the superficial sense — they’re practical, reusable mental algorithms. Some are intuitive, others might feel surprising at first, but all are meant to reduce latency between seeing a problem and arriving at a confident answer.&lt;/p&gt;

&lt;p&gt;Whether you’re optimizing memory usage or tallying totals in your head, these techniques will train you to think faster, reduce errors, and — yes — enjoy math a little more.&lt;/p&gt;

&lt;p&gt;Note that the original guide contains detailed explanations on these and other techniques, impossible to reproduce in an article of this nature or length. &lt;strong&gt;If you are serious about incorporating these techniques, I strongly recommend you read the full guide, linked at the end of this article.&lt;/strong&gt; It's completely free to download and read.&lt;/p&gt;




&lt;h1&gt;
  
  
  📃 Core Multiplication Tactics
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔄 Doubling
&lt;/h2&gt;

&lt;p&gt;Use for multiplying by 2, 4, 8, etc. (powers of two).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
354 × 2 = 708
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔄 Doubling Twice or Thrice
&lt;/h2&gt;

&lt;p&gt;Used for ×4, ×8, ×16, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
42 × 16 = 672
84, 168, 336, 672
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔄 Multiples of 10
&lt;/h2&gt;

&lt;p&gt;Multiply as if zeroes weren’t there, then append them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
40 × 45,000 = 1,800,000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💵 Multiplying by 5 (Halving)
&lt;/h2&gt;

&lt;p&gt;Multiply by 10, then divide by 2.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
5 × 74 = 370
740 / 2 = 370
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔢 Squares Ending in 5
&lt;/h2&gt;

&lt;p&gt;Multiply tens digit by (n+1) and append 25.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
95 × 95 = 9025
9 x 10 = 90
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 Multiplying by 11 (2-digit)
&lt;/h2&gt;

&lt;p&gt;Add digits and sandwich between.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
11 × 72 = 792
7 + 2 = 9
7 9 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 Multiplying by 11 (3+ digits)
&lt;/h2&gt;

&lt;p&gt;Pairwise addition from right to left, carry included.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
11 × 3,480 = 38,280

8 + 0 = 8
4 + 8 = 12
3 + 4 = 7

30000
07000
01200
00080
00000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Multiplying by 15
&lt;/h2&gt;

&lt;p&gt;Decompose into (10 + 5) then apply halving.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
15 × 382 = 5,730

10 x 382 = 3820
3820 / 2 = 1910
3820 + 1910
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📈 Two-Digit Products (Lattice-like)
&lt;/h2&gt;

&lt;p&gt;Apply place-value cross multiplication.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
34 × 65 = 2,210

3 x 6 = 18
4 x 5 = 20
3 x 5 + 4 x 6 = 39

1800
0390
0020
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📈 Three-Digit Multiplication
&lt;/h2&gt;

&lt;p&gt;Break into hierarchical place-value multiplications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
123 × 432 = 53,136

4 x 1
1 x 3 + 4 x 2 
2 x 1 + 2 x 3 + 3 x 4
3 x 3 + 2 x 2
3 x 2

40000
11000
02000
00130
00006
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📈 Two-Digit by Three-Digit
&lt;/h2&gt;

&lt;p&gt;Use the same principle, append 0s where needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
44 × 452 = 19,888
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  💸 Balancing for Multiplication
&lt;/h2&gt;

&lt;p&gt;Shift factors to easier equivalents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
144 × 24 = (288 × 12) = 3,456

(144 x 2) / (24 / 2) =
288 x 12 =
288 x 10 + 288 x 2 =
2880 + 576
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🌐 Rounding and Compensation
&lt;/h2&gt;

&lt;p&gt;Round one number to an easier figure, then subtract excess.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
16 × 191 = (16 × 200) - (16 × 9) = 3,056
3,200 - 144 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔹 Associative Property
&lt;/h2&gt;

&lt;p&gt;Break one factor into primes or easier groups.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
22 × 267 = 11 × 534 = 5,874

11 x 2 x 267
267 doubled, 534
534 x 11

3 + 4 = 7
5 + 3 = 8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Distributive Property
&lt;/h2&gt;

&lt;p&gt;Use expanded form: a(b + c)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
51 × 295 = (50 × 295) + 295 = 15,045
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Products Near Powers of 10 (One Away)
&lt;/h2&gt;

&lt;p&gt;Use complements to subtract from powers of 10.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
387 × 999 = 386,613
387000 - 387
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Products Near Powers of 10 (Both Close)
&lt;/h2&gt;

&lt;p&gt;Use cross-adjustment and product of differences.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
997 x 998 = 995,006

997 - 1,000 = -3, 998 - 1000 = -2

997 + (-2) = 995
-3 x (-2) = 6

995000
000006
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  📃 Core Division Tactics
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📃 Division as Inverse Multiplication
&lt;/h2&gt;

&lt;p&gt;Think "what times X gives me Y?"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
72 ÷ 6 = 12

6 x 12 = 72
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧰 Advanced Halving
&lt;/h2&gt;

&lt;p&gt;Successive halving for dividing by 4, 8, 16, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
3,760 ÷ 16 = 235

1880, 940, 470, 235
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📉 Divisibility Rules (3, 5, 9, 10, etc.)
&lt;/h2&gt;

&lt;p&gt;Use digital sums or ending digits.&lt;br&gt;
Detailed explanations of this family of subtechniques can be found in the ebook linked below.&lt;br&gt;
&lt;/p&gt;

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

495

Digital sum = 4 + 9 + 5= 18
Digital sum = 1 + 8 = 9

Divisible by both 3 and 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Rounding &amp;amp; Compensation (Division)
&lt;/h2&gt;

&lt;p&gt;Round dividend/divisor then adjust the result.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
684 ÷ 3 = (690 - 6) ÷ 3 = 228
230 - 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📈 Balancing in Division
&lt;/h2&gt;

&lt;p&gt;Shift dividend/divisor by a common factor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
77 ÷ 11 = (770 ÷ 110) = 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔹 Associative in Division
&lt;/h2&gt;

&lt;p&gt;Break divisor into friendly parts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
264 ÷ 12 = (264 ÷ 3) ÷ 4 = 22
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📃 Distributive in Division
&lt;/h2&gt;

&lt;p&gt;Break up dividend to divide in parts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example: 
(840 + 60) ÷ 30 = 28 + 2 = 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🧰 Practice &amp;amp; Progress
&lt;/h3&gt;

&lt;p&gt;Like any skill, speed and confidence come with practice. Try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Estimating bills or invoices in your head&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practicing products while walking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Playing games that push number recognition and recall&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn’t to become a human calculator, but to develop a mental agility that helps in work, school, and everyday thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Download the Full Guide
&lt;/h2&gt;

&lt;p&gt;This article is a condensed version of my guide:&lt;/p&gt;

&lt;p&gt;👉 Download the PDF: Multiplying and Dividing Fast&lt;br&gt;
&lt;a href="https://tigerbluejay.github.io/math/Multiplying-and-Dividing-Fast.pdf" rel="noopener noreferrer"&gt;Multiplying and Dividing Fast (PDF)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This guide contains much more detailed information about how to profit from the various tactics including various reference multiplication and division tables and expanded explanations, in particular, for the sections regarding divisibility rules. If you are serious about these techniques I strongly recommend you read the guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Help Others and Keep the Conversation Going!
&lt;/h2&gt;

&lt;p&gt;If you found this article helpful, here’s how you can contribute to spreading the knowledge:&lt;/p&gt;

&lt;p&gt;👍 Like this article to show your support and help others discover it.&lt;/p&gt;

&lt;p&gt;📁 Bookmark it so you can easily come back to these techniques anytime you need them.&lt;/p&gt;

&lt;p&gt;🔄 Share it with friends or colleagues who might benefit from faster mental math strategies.&lt;/p&gt;

&lt;p&gt;💬 Comment below with your favorite tip, a trick you’ve used, or any questions you might have — let’s keep learning together!&lt;/p&gt;

&lt;p&gt;By liking, sharing, or commenting, you're not just helping me reach more readers — you're contributing to a community that thrives on growth and knowledge. Sharing this article helps others enhance their mental math skills, reducing cognitive load and boosting productivity. Your engagement could make someone’s day easier or help them see math in a new, empowering way!&lt;/p&gt;

&lt;p&gt;Thank you for being part of this learning journey! 🙌&lt;/p&gt;

</description>
      <category>math</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Low-Latency Mental Math: Quick Additions and Subtractions for Software Developers</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 10 May 2025 03:00:00 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/low-latency-math-quick-additions-and-subtractions-for-software-developers-5eg4</link>
      <guid>https://dev.to/josemariairiarte/low-latency-math-quick-additions-and-subtractions-for-software-developers-5eg4</guid>
      <description>&lt;p&gt;In a world overflowing with digital tools, it’s easy to dismiss mental math as outdated — a quaint relic from the pre-calculator age. But there’s something uniquely powerful about sharpening your ability to think numerically without external support. Like optimizing code for runtime efficiency, refining your mental math streamlines your internal thought processes and reduces your cognitive load.&lt;/p&gt;

&lt;p&gt;This article is based on a short guide I wrote called &lt;strong&gt;&lt;em&gt;Adding and Subtracting Fast - Essential Tactics to Speed Up Mental Calculations with Whole Numbers&lt;/em&gt;&lt;/strong&gt;, the first in a three-part series I began in 2018. The project started as a personal challenge: to improve how I processed numbers mentally. I wanted to go beyond fuzzy estimations and reclaim the skill of clear, structured calculation — the kind that feels more like flow than friction.&lt;/p&gt;

&lt;p&gt;What began as scattered notes turned into three compact books, each focused on two core operations: addition &amp;amp; subtraction, multiplication &amp;amp; division, powers &amp;amp; roots. This article distills the key strategies from the first of those books.&lt;/p&gt;

&lt;p&gt;These are not “tricks” in the superficial sense — they’re practical, reusable mental algorithms. Some are intuitive, others might feel surprising at first, but all are meant to reduce latency between seeing a problem and arriving at a confident answer.&lt;/p&gt;

&lt;p&gt;Whether you’re optimizing memory usage or tallying totals in your head, these techniques will train you to think faster, reduce errors, and — yes — enjoy math a little more.&lt;/p&gt;

&lt;p&gt;Note that the original guide contains detailed explanations on these and other techniques, impossible to reproduce in an article of this nature or length. &lt;strong&gt;If you are serious about incorporating these techniques, I strongly recommend you read the full guide, linked at the end of this article.&lt;/strong&gt; It's completely free to download and read.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Foundational Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔢 Number Complements
&lt;/h3&gt;

&lt;p&gt;Master pairs that sum to 10, 20, and 100. These are essential for fast subtraction and pattern recognition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Examples:
3 + 7 = 10  
6 + 14 = 20  
87 + 13 = 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✌️ Table of 2 and Its Uses
&lt;/h3&gt;

&lt;p&gt;Doubling is powerful for grouping and estimating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
4 + 2 = 3 × 2  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ➕ Rule of Adding to 9
&lt;/h3&gt;

&lt;p&gt;Add 10 instead, then subtract 1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
9 + 7 = 10 + 7 = 17 → 17 - 1 = 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ➕ Rule of Adding to 8
&lt;/h3&gt;

&lt;p&gt;Same logic, subtract 2 instead of 1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
8 + 5 = 10 + 5 = 15 → 15 - 2 = 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧮 Core Addition Techniques
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🧩 Decomposing
&lt;/h2&gt;

&lt;p&gt;Break numbers apart to make things easier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
5 + 7 = 5 + (5 + 2) = 10 + 2 = 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👀 Scanning
&lt;/h2&gt;

&lt;p&gt;Before adding, scan the numbers for potential carrying.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
123 + 231 + 245  
Check units, then tens, then hundreds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📐 Aligning
&lt;/h2&gt;

&lt;p&gt;Align digits by place value in your head.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
684 + 941 + 198  
Add hundreds: 600 + 900 + 100 = 1600  
Add tens: 80 + 40 + 90 = 210  
Add ones: 4 + 1 + 8 = 13  
Total = 1600 + 210 + 13 = 1823
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧮 Rounding and Compensation
&lt;/h2&gt;

&lt;p&gt;Round one term to a nearby 10 or 100, then adjust.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
39 + 48 = 40 + 48 = 88 → 88 - 1 = 87
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚖️ Balancing
&lt;/h2&gt;

&lt;p&gt;Round two numbers in opposite directions to cancel out adjustments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
97 + 59 + 31  
Round 59 → 60 (+1)  
Round 31 → 30 (−1)  
Net effect: 97 + 60 + 30 = 187
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👯 Grouping (Sequential)
&lt;/h2&gt;

&lt;p&gt;Combine easy-to-add groups to reduce mental load.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
13 + 17 + 58 + 12  
→ 10 + 20 + 60 + 10 = 100  
→ Remaining: 3 + 7 + 8 + 2 = 20  
Total = 100 + 20 = 120
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ➖ Core Subtraction Techniques
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔄 Reverse and Negate
&lt;/h2&gt;

&lt;p&gt;Flip subtraction when the subtrahend is larger.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
2 - 8 = -(8 - 2) = -6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎯 Subtracting from Multiples of 10
&lt;/h2&gt;

&lt;p&gt;Use complements to subtract from 10, 100, or 1000.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
100 - 47 = 53  
Think: (10 - 4 - 1 in tens) + (10 - 7 in ones)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔁 Addition Techniques for Subtraction
&lt;/h2&gt;

&lt;p&gt;Many addition tricks (decomposing, rounding) work in reverse.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
84 - 47 = (84 - 44) - 3 = 40 - 3 = 37
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧲 Matching
&lt;/h2&gt;

&lt;p&gt;Add the same number to both terms to simplify.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
37 - 22 → add 3 to both → 40 - 25 = 15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔀 Mixed Operations
&lt;/h2&gt;

&lt;p&gt;When you mix additions and subtractions, group all negatives and positives separately, then combine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Example:
83 - 45 - 15 - 38  
= 83 - (45 + 15 + 38)  
= 83 - 98 = -(98 - 83) = -15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🎯 Practice &amp;amp; Progress
&lt;/h3&gt;

&lt;p&gt;Like any skill, speed and confidence come with practice. Try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Estimating grocery bills in your head&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practicing sums and differences while walking&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Making a game out of spotting friendly numbers in daily life&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn’t to become a human calculator, but to develop a mental agility that helps in work, school, and everyday thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  📘 Download the Full Guide
&lt;/h2&gt;

&lt;p&gt;This article is a condensed version of my short guide:&lt;/p&gt;

&lt;p&gt;👉 Download the PDF: Adding and Subtracting Fast&lt;br&gt;
&lt;a href="https://tigerbluejay.github.io/math/Adding-and-Subtracting-Fast.pdf" rel="noopener noreferrer"&gt;Adding and Subtracting Fast (PDF)&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Help Others and Keep the Conversation Going!
&lt;/h2&gt;

&lt;p&gt;If you found this article helpful, here’s how you can contribute to spreading the knowledge:&lt;/p&gt;

&lt;p&gt;👍 Like this article to show your support and help others discover it.&lt;/p&gt;

&lt;p&gt;📑 Bookmark it so you can easily come back to these techniques anytime you need them.&lt;/p&gt;

&lt;p&gt;🔄 Share it with friends or colleagues who might benefit from faster mental math strategies.&lt;/p&gt;

&lt;p&gt;💬 Comment below with your favorite tip, a trick you’ve used, or any questions you might have — let’s keep learning together!&lt;/p&gt;

&lt;p&gt;By liking, sharing, or commenting, you're not just helping me reach more readers — you're contributing to a community that thrives on growth and knowledge. Sharing this article helps others enhance their mental math skills, reducing cognitive load and boosting productivity. Your engagement could make someone’s day easier or help them see math in a new, empowering way!&lt;/p&gt;

&lt;p&gt;Thank you for being part of this learning journey! 🙌&lt;/p&gt;

</description>
      <category>learning</category>
      <category>math</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Lessons from Building a One-Man Startup</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 03 May 2025 09:26:15 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/lessons-from-building-a-one-man-startup-the-evolution-of-octal-stream-id2</link>
      <guid>https://dev.to/josemariairiarte/lessons-from-building-a-one-man-startup-the-evolution-of-octal-stream-id2</guid>
      <description>&lt;p&gt;Over the course of several years, I embarked on an ambitious solo journey to create a digital education business. What began as a simple idea evolved through multiple iterations—each one teaching me something about technology, process, and the nature of entrepreneurship itself. This is the story of that journey—from Katacoding to Sigmacasts to Octal Stream—and the insights I gained along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Evolution: From Video Calls to Scalable Content
&lt;/h2&gt;

&lt;p&gt;The concept began with Katacoding, a platform offering live, one-on-one online coding lessons via video calls. While the model had promise, it lacked scalability. That realization led to Sigmacasts, a curated series of educational videos on math and computer science. The production process taught me how to craft educational narratives and use video to communicate abstract ideas.&lt;/p&gt;

&lt;p&gt;Eventually, these two concepts merged into Octal Stream—a platform offering on-demand, instructor-led video lessons focused on foundational web development. Octal Stream aimed to deliver the human quality of live lessons with the reach and polish of asynchronous video.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technologies I Leveraged (and Learned)
&lt;/h2&gt;

&lt;p&gt;The project became an opportunity to develop and integrate a wide range of technologies and tools. Among them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Cloud Services:&lt;/strong&gt; Lightsail virtual machines, S3 object storage, Route 53 for DNS, and Simple Email Service for transactional and marketing communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WordPress:&lt;/strong&gt; Using the Avada theme along with essential plugins like Memberpress for subscriptions, Stripe Payments, Yoast SEO, and Wordfence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External services:&lt;/strong&gt; Vectera for video hosting, iPage for WordPress hosting, and stock image libraries for visual content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creative tools:&lt;/strong&gt; KdenLive for video editing, GIMP for image creation and manipulation, and Office/LibreOffice for scriptwriting, presentations, and animations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code and browser-based work:&lt;/strong&gt; Sublime Text for scripting and site customizations, regular browser-based demonstrations for teaching content.&lt;/p&gt;

&lt;p&gt;Each technology had a learning curve, but it also brought a deeper understanding of full-stack development, infrastructure management, and the production workflow behind digital products.&lt;/p&gt;




&lt;h2&gt;
  
  
  Protocols and Systems I Built
&lt;/h2&gt;

&lt;p&gt;To stay productive and consistent, I developed internal protocols and workflows for nearly every aspect of the business:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio and video recording standards:&lt;/strong&gt; Detailed specs and consistent steps to ensure production quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content pipeline:&lt;/strong&gt; A structured system for writing, recording, editing, and publishing video lessons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment and migration guides:&lt;/strong&gt; Documentation to help with website migrations and service updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Marketing systems:&lt;/strong&gt; Templates and notes for SEO, ad copywriting, social media strategy, and campaign tracking.&lt;/p&gt;

&lt;p&gt;These internal systems gave structure to a complex creative and technical process. They also laid the groundwork for future delegation, should I ever grow the team.&lt;/p&gt;




&lt;h2&gt;
  
  
  Business Infrastructure and Exploration
&lt;/h2&gt;

&lt;p&gt;Beyond technology, I explored what it meant to create a business infrastructure designed to support international growth. This included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Incorporating a Delaware LLC with IncNow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Filing for an EIN (Employer Identification Number) with the IRS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Opening a Mercury Bank account for international payments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Securing a U.S.-based virtual business address and registering it with the U.S. Embassy in Buenos Aires&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Investigating options like Stripe Atlas for potential U.S. incorporation, bank account and market reach&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These steps broadened my understanding of global business logistics and helped me think about scalability from both a financial and legal standpoint.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Learned About Organizations
&lt;/h2&gt;

&lt;p&gt;Working solo gave me an intimate look at what it means to be the organization. I wore every hat—developer, designer, instructor, marketer, sysadmin, and CEO. That experience was humbling and illuminating.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some key realizations:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Organizations are ecosystems.&lt;/strong&gt; Each function—product, marketing, operations, finance—demands time and energy. Trying to scale all of them equally at once is a recipe for burnout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus is survival.&lt;/strong&gt; Passion projects are energizing, but if they don’t support revenue, they should be postponed until the essentials are working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Efficiency matters.&lt;/strong&gt; Free and open-source tools can dramatically reduce startup costs, though finding and configuring them is becoming more complex.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Competing for attention is expensive.&lt;/strong&gt; I learned to be cautious with paid ads and SEM—especially when going up against established corporations with large budgets.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons I’ll Take Into Future Ventures
&lt;/h2&gt;

&lt;p&gt;Looking back, I see this experience not as a failed startup, but as a highly concentrated entrepreneurial education. Here’s what I’ll carry forward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validate early.&lt;/strong&gt; I built a product before building an audience. Future efforts will prioritize community and conversation early on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t over-invest in polish before traction.&lt;/strong&gt; From branding to video production, perfection can wait until the core model is validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace “good enough” tools.&lt;/strong&gt; I spent time building infrastructure that others had already optimized. Next time, I’ll stand on the shoulders of giants.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specialize, then expand.&lt;/strong&gt; Wearing many hats taught me versatility—but deep progress came when I narrowed my focus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Align effort with value.&lt;/strong&gt; I now ask: “Is this task critical to delivering value to users or generating revenue?” If not, it gets deferred.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;This journey taught me more than any book or course could have. I now have a blueprint for launching future products more strategically, with clarity on what matters most in early-stage entrepreneurship.&lt;/p&gt;

&lt;p&gt;Building Octal Stream may not have made me a millionaire, but it did make me a better technologist, thinker, and builder. And next time, I’ll start not from zero—but from here... and hopefully, you will have drawn some valuable lessons too from my experience if you decide to embark on a similary journey!&lt;/p&gt;

</description>
      <category>startup</category>
      <category>testimonial</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Foundations of Data Structures and Algorithms in C#</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 12 Apr 2025 18:30:09 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/foundations-of-data-structures-and-algorithms-in-c-315b</link>
      <guid>https://dev.to/josemariairiarte/foundations-of-data-structures-and-algorithms-in-c-315b</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/tigerbluejay/CSharp-DataStructures-Algorithms-Fundamentals" rel="noopener noreferrer"&gt;&lt;strong&gt;CSharp-DataStructures-Algorithms-Fundamentals&lt;/strong&gt;&lt;/a&gt; is a focused, foundational repository written in C# that helps developers understand and implement the most essential data structures and algorithms through simple, self-contained examples.&lt;/p&gt;

&lt;p&gt;It was developed as a response to the scarcity of educational DSA content in C#, particularly when compared to the abundance of materials available in JavaScript, Python, or Java. This project mirrors the pedagogical structure of popular repositories in those languages, with a particular focus on &lt;strong&gt;readability and conceptual clarity&lt;/strong&gt; rather than optimality or cleverness.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Inside
&lt;/h2&gt;

&lt;p&gt;This repository covers a range of fundamental topics in data structures and algorithms, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arrays&lt;/strong&gt;: Basic operations and manipulation techniques.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linked Lists&lt;/strong&gt;: Implementation and traversal methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stacks and Queues&lt;/strong&gt;: Understanding LIFO and FIFO structures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trees&lt;/strong&gt;: Binary trees, traversal algorithms, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graphs&lt;/strong&gt;: Representation and traversal techniques.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recursion&lt;/strong&gt;: Solving problems through recursive approaches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sorting Algorithms&lt;/strong&gt;: Implementations of Bubble Sort, Insertion Sort, Merge Sort, Quick Sort, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Searching Algorithms&lt;/strong&gt;: Linear and Binary Search methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hash Tables&lt;/strong&gt;: Understanding hashing and collision resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frequency Counters&lt;/strong&gt;: Techniques for counting occurrences efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sliding Window&lt;/strong&gt;: Optimizing problems involving subsets of data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Divide and Conquer&lt;/strong&gt;: Breaking problems into subproblems for efficient solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Greedy Algorithms&lt;/strong&gt;: Making optimal choices at each step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Programming&lt;/strong&gt;: Solving complex problems by breaking them down into simpler subproblems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph Algorithms&lt;/strong&gt;: Including Dijkstra's algorithm for shortest paths.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each topic is presented with clear, concise examples to aid understanding.&lt;/p&gt;




&lt;h2&gt;
  
  
  Motivation and Purpose
&lt;/h2&gt;

&lt;p&gt;The repository was created to address two key issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The lack of beginner-friendly C# materials on DSA&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
While countless tutorials and repositories exist for languages like JavaScript or Python, comparable resources in C# are rare. This project adapts proven learning structures to C#, offering a consistent and readable path through classic problems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To promote conceptual understanding over clever implementations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Rather than diving into complex or optimal code, the examples here emphasize &lt;strong&gt;digestibility&lt;/strong&gt; — making it easier for learners to &lt;strong&gt;grasp the logic&lt;/strong&gt; behind each structure or algorithm before worrying about performance tuning.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Target Audience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Developers with little or no formal education in data structures and algorithms
&lt;/li&gt;
&lt;li&gt;Bootcamp or self-taught programmers transitioning to more technical interviews
&lt;/li&gt;
&lt;li&gt;C# developers seeking a &lt;strong&gt;clean, minimal&lt;/strong&gt; reference for foundational concepts
&lt;/li&gt;
&lt;li&gt;Interviewees needing a conceptual refresher on common DSA patterns in C#
&lt;/li&gt;
&lt;li&gt;Mentors and educators looking for &lt;strong&gt;teachable&lt;/strong&gt;, idiomatic examples&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Selected Examples
&lt;/h2&gt;

&lt;p&gt;The repository includes a variety of topics such as pointers, recursion, sorting, searching, and graph traversal. Below are three representative samples.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Count Unique Values (Multiple Pointers Pattern)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;CSharp_DataStructures_Algorithms_Fundamentals&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MultiplePointers&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;CountUniqueValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Pointer for tracking unique values&lt;/span&gt;
            &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;++)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="c1"&gt;// When two pointers point to different elements&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++;&lt;/span&gt; &lt;span class="c1"&gt;// Increment the pointer for unique values&lt;/span&gt;
                    &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Assign current value to next unique slot&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Total unique values&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: Counts the number of unique values in a sorted array.&lt;br&gt;
Concepts Reinforced: Two-pointer technique, array traversal, in-place updates.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. QuickSort (Divide and Conquer)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;QuickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Find the pivot index&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;pivotIndex&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Pivot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Sort left and right halves&lt;/span&gt;
        &lt;span class="nf"&gt;QuickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pivotIndex&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;QuickSort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pivotIndex&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;right&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Example breakdown:&lt;/span&gt;
&lt;span class="c1"&gt;// QuickSort([4,6,9,1,2,5,3])&lt;/span&gt;
&lt;span class="c1"&gt;// Pivot = 4 → partitions array&lt;/span&gt;
&lt;span class="c1"&gt;// [3,2,1,4,6,9,5] → 4 is now in place&lt;/span&gt;
&lt;span class="c1"&gt;// Recurse on each side&lt;/span&gt;
&lt;span class="cm"&gt;/*
QuickSort(arr, left=0, right=6)  
  Pivot: 4, PivotIndex: 3  
  Array: { 3, 2, 1, 4, 9, 5, 6 }

  ├── QuickSort(arr, left=0, right=2)  
  │     Pivot: 3, PivotIndex: 2  
  │     Array: { 1, 2, 3, 4, 9, 5, 6 }  
  │  
  │     ├── QuickSort(arr, left=0, right=1)  
  │     │     Pivot: 1, PivotIndex: 0  
  │     │     Array: { 1, 2, 3, 4, 9, 5, 6 }  
  │     │     ├── QuickSort(arr, left=0, right=-1) → Return  
  │     │     └── QuickSort(arr, left=1, right=1) → Return  
  │  
  │     └── QuickSort(arr, left=3, right=2) → Return  
  │  
  └── QuickSort(arr, left=4, right=6)  
        Pivot: 9, PivotIndex: 6  
        Array: { 1, 2, 3, 4, 6, 5, 9 }  
        ├── QuickSort(arr, left=4, right=5)  
        │     Pivot: 6, PivotIndex: 5  
        │     Array: { 1, 2, 3, 4, 5, 6, 9 }  
        │     ├── QuickSort(arr, left=4, right=4) → Return  
        │     └── QuickSort(arr, left=6, right=5) → Return  
        └── QuickSort(arr, left=7, right=6) → Return
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: In-place sorting of arrays via partitioning.&lt;br&gt;
Concepts Reinforced: Recursion, divide-and-conquer strategy, pivot logic.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Dijkstra’s Algorithm (Graph Traversal with Priority Queue)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;Dijkstra&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;finish&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;nodes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;PriorityQueue&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;distances&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;?&amp;gt;();&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;vertex&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Keys&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vertex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dequeuedNode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Dequeue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;smallest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dequeuedNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Item1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;finish&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="n"&gt;smallest&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;edge&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;adjacencyList&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Weight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;distances&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;smallest&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Enqueue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Reverse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// Example: Dijkstra("A", "F")&lt;/span&gt;
&lt;span class="c1"&gt;// Shortest path: A → C → D → F&lt;/span&gt;
&lt;span class="c1"&gt;// Total cost: 5&lt;/span&gt;

&lt;span class="cm"&gt;/*
Initialization:
A distance = 0, other nodes = ∞
Priority queue: [A(0), B(∞), C(∞), D(∞), E(∞), F(∞)]

Step 1: Process A
A → B (4), A → C (2)
B updated to 4, C updated to 2
Priority queue: [C(2), B(4), D(∞), E(∞), F(∞)]

Step 2: Process C
C → D (2 + 2 = 4)
D updated to 4
Priority queue: [D(4), B(4), E(∞), F(∞)]

Step 3: Process B
B → E (4 + 3 = 7)
E updated to 7
Priority queue: [D(4), E(7), F(∞)]

Step 4: Process D
D → E (4 + 3 = 7) (no change)
D → F (4 + 1 = 5)
F updated to 5
Priority queue: [F(5), E(7)]

Step 5: Process F
F is the target, stop.

Path Reconstruction:
F → D → C → A
Reverse: A → C → D → F
Final Output
["A", "C", "D", "F"]
This is the shortest path from A to F, with a total cost of 5.
*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: Computes the shortest path between two nodes in a weighted graph.&lt;br&gt;
Concepts Reinforced: Graph traversal, priority queues, dictionaries, and path reconstruction.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Philosophy
&lt;/h2&gt;

&lt;p&gt;This repository serves as a bridge between learning and implementation — it doesn’t aim to provide complete academic coverage of each topic, but instead prioritizes conceptual clarity and accessible code.&lt;/p&gt;

&lt;p&gt;Each algorithm is written with readability in mind. More advanced topics such as recursion or graph traversal are broken down with commentary and examples, ensuring learners not only see the implementation but also understand the underlying mechanics.&lt;/p&gt;
&lt;h2&gt;
  
  
  Explore the Repository
&lt;/h2&gt;

&lt;p&gt;If this collection supports your own study or helps you mentor others, consider:&lt;/p&gt;

&lt;p&gt;⭐ Starring the GitHub repo&lt;/p&gt;

&lt;p&gt;💾 Bookmarking or saving this article&lt;/p&gt;

&lt;p&gt;🧑‍🤝‍🧑 Sharing it with peers or mentees on a similar path&lt;/p&gt;

&lt;p&gt;Your support helps reinforce the need for clean, foundational content in C# — especially in an ecosystem where such resources are hard to come by.&lt;/p&gt;

&lt;p&gt;View the full collection here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tigerbluejay" rel="noopener noreferrer"&gt;
        tigerbluejay
      &lt;/a&gt; / &lt;a href="https://github.com/tigerbluejay/CSharp-DataStructures-Algorithms-Fundamentals" rel="noopener noreferrer"&gt;
        CSharp-DataStructures-Algorithms-Fundamentals
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Clean C# implementations of fundamental data structures and algorithms for technical interviews and foundational understanding. Covers arrays, linked lists, trees, graphs, recursion, sorting, searching, dynamic programming, tries, and more—well-organized and ideal for .NET developers.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;C# Data Structures and Algorithms Fundamentals&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This repository is a comprehensive repository of essential data structures and algorithms implemented in C#, with clean, well-documented code and clear organization. This project demonstrates proficiency in core programming concepts such as arrays, linked lists, stacks, queues, trees, graphs, recursion, sorting, and searching algorithms. Ideal for technical interviews and foundational understanding, it reflects a strong grasp of algorithmic thinking and software engineering principles using .NET technologies.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;01 - Frequency Counters&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;The Frequency Counter pattern uses objects or hash tables to count occurrences of values, enabling efficient comparisons and data validations. It is particularly useful in problems involving anagram detection, duplicates, and value matching across arrays or strings. This folder introduces foundational logic used in optimizing nested loops and improving time complexity.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;02 - Multiple Pointers&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;The Multiple Pointers strategy involves creating pointers or indices that move toward each other or in parallel to solve…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tigerbluejay/CSharp-DataStructures-Algorithms-Fundamentals" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>csharp</category>
      <category>algorithms</category>
      <category>datastructures</category>
      <category>learning</category>
    </item>
    <item>
      <title>A Curated Repository of Early C# Algorithms for Technical Interviews</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 12 Apr 2025 09:40:46 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/a-curated-repository-of-foundational-c-algorithms-for-technical-interviews-42f2</link>
      <guid>https://dev.to/josemariairiarte/a-curated-repository-of-foundational-c-algorithms-for-technical-interviews-42f2</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/tigerbluejay/CollectionofBasicCSharpAlgorithms" rel="noopener noreferrer"&gt;&lt;strong&gt;Collection of Basic C# Algorithms&lt;/strong&gt;&lt;/a&gt; is a focused, practical repository designed to assist developers — particularly junior and mid-level professionals — in preparing for technical interviews that involve algorithmic problem-solving in C#.&lt;/p&gt;

&lt;p&gt;This collection emerged from personal experience and professional necessity. It serves as a foundational resource for those who may not have received formal training in data structures and algorithms, yet frequently encounter algorithmic challenges during interviews for roles that do not require algorithmic problem-solving as part of day-to-day responsibilities.&lt;/p&gt;

&lt;p&gt;These are not optimal solutions, but solutions optimized for beginners who may find it easy to think in simpler, yet more verbose terms.&lt;/p&gt;




&lt;h2&gt;
  
  
  Motivation and Purpose
&lt;/h2&gt;

&lt;p&gt;The motivation behind this repository was twofold:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To reduce signal noise&lt;/strong&gt;: Developers preparing for interviews often face an overwhelming volume of information, with algorithm repositories offering hundreds of problems of varying relevance or complexity. This project aims to &lt;strong&gt;distill the essentials&lt;/strong&gt; — the most frequently asked, straightforward algorithmic questions — and present them clearly in C#.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To support self-taught developers&lt;/strong&gt;: Many developers come to the field through nontraditional paths. This repository provides them with an accessible point of entry into algorithmic thinking, aligned with industry expectations.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Target Audience
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Junior to mid-level developers preparing for interviews
&lt;/li&gt;
&lt;li&gt;Developers transitioning into more technical or algorithm-heavy roles
&lt;/li&gt;
&lt;li&gt;Individuals without a computer science background seeking structured, minimal examples of classic problems
&lt;/li&gt;
&lt;li&gt;Interviewees applying to companies that require a basic proficiency in algorithms without expecting advanced computer science knowledge&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Selected Examples
&lt;/h2&gt;

&lt;p&gt;Below are three representative algorithms from the repository. Each example demonstrates core algorithmic reasoning and is implemented in clear, idiomatic C#.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Reverse Words in a String
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ReverseWordsinaString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hello World"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;' '&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;reversedString&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reversedString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: Reverses the order of words in a given string (e.g., "hello world" becomes "world hello").&lt;br&gt;
Concepts Reinforced: String splitting, array manipulation, and use of Array.Reverse.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Check if a String is a Palindrome
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;IsStringPalindrome&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"racecar"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToLower&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;reversed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ReverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isPalindrome&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Equals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reversed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isPalindrome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The string is a palindrome."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"The string is not a palindrome."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Helper method to reverse a string&lt;/span&gt;
&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ReverseString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;charArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToCharArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Reverse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;charArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;charArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: Checks whether a string reads the same forwards and backwards.&lt;br&gt;
Concepts Reinforced: String normalization, helper methods, conditionals.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Checking for Prime Numbers
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;IsIntPrime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Replace with the positive integer you want to check&lt;/span&gt;
    &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isPrime&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;IsPrime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isPrime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is a prime number."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt; is not a prime number."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;IsPrime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;||&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use Case: Determines if int is a prime number&lt;br&gt;
Concepts Reinforced: Nested loops and condition checking. General Math.&lt;/p&gt;
&lt;h2&gt;
  
  
  Project Philosophy
&lt;/h2&gt;

&lt;p&gt;This project was developed as a precursor to more formal study in data structures and algorithms. It reflects both practical interview experience and a desire to support developers at transitional points in their careers. Each algorithm is designed to be immediately understandable and directly relevant to common screening questions.&lt;/p&gt;

&lt;p&gt;Rather than aiming for academic completeness, this collection prioritizes relevance, clarity, and working solutions. The implementation style is intentionally straightforward, prioritizing readability and accessibility over optimization or cleverness.&lt;/p&gt;
&lt;h2&gt;
  
  
  Explore the Repository
&lt;/h2&gt;

&lt;p&gt;If you find the repository helpful in your own preparation or mentoring, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starring the repo on GitHub&lt;/li&gt;
&lt;li&gt;Bookmarking or liking this article for future reference&lt;/li&gt;
&lt;li&gt;Sharing it with colleagues or students navigating similar challenges&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your support helps signal that there’s value in concise, beginner-friendly technical resources.&lt;/p&gt;

&lt;p&gt;You can view the full collection here:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tigerbluejay" rel="noopener noreferrer"&gt;
        tigerbluejay
      &lt;/a&gt; / &lt;a href="https://github.com/tigerbluejay/CollectionofBasicCSharpAlgorithms" rel="noopener noreferrer"&gt;
        CollectionofBasicCSharpAlgorithms
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Common Basic Algorithms used in interviews related to C# positions - A collection of fundamental algorithms implemented in C#, covering sorting, searching, and data structure manipulation. This repository helps strengthen algorithmic thinking and coding efficiency in C#.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CollectionofBasicCSharpAlgorithms&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Collection of Basic C# Algorithms is a curated repository featuring fundamental algorithm implementations written in C#. It serves as a practical reference for developers seeking to understand core algorithmic concepts through concise, well-organized examples. Covering a range of topics from sorting and searching to string manipulation, this collection is ideal for beginners looking to strengthen their problem-solving skills or for experienced programmers needing quick access to foundational C# algorithm patterns.&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tigerbluejay/CollectionofBasicCSharpAlgorithms" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>csharp</category>
      <category>interview</category>
      <category>algorithms</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Starting as a Junior Developer and Breaking into the Job Market – A Retrospective</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Wed, 09 Apr 2025 01:52:23 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/starting-as-a-junior-developer-and-breaking-into-the-job-market-a-retrospective-10f4</link>
      <guid>https://dev.to/josemariairiarte/starting-as-a-junior-developer-and-breaking-into-the-job-market-a-retrospective-10f4</guid>
      <description>&lt;p&gt;Back in 2020, I recorded these two podcast episodes as part of a now-archived project. They cover my early experiences as a Junior Developer and my journey breaking into the job market back in 2014. A decade later, I’m sharing them here in case they resonate with anyone starting out or reflecting on their own path.&lt;/p&gt;

&lt;p&gt;Hope you enjoy!&lt;/p&gt;

&lt;p&gt;📺 Listen to the first episode here:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/JVZGkVG0Vbo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;📺 Listen to the second episode here:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/mZJtWoFA_U0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Share Your Story
&lt;/h2&gt;

&lt;p&gt;If these episodes strike a chord, feel free to:&lt;/p&gt;

&lt;p&gt;💾 Bookmark them for later&lt;br&gt;
🎧 Share with someone starting out in tech&lt;br&gt;
💬 Drop a comment with your own early career memories&lt;/p&gt;

&lt;p&gt;Every shared experience helps make the path a little clearer for those just beginning.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>codenewbie</category>
      <category>community</category>
    </item>
    <item>
      <title>Mastering CSS Video Series: A Structured, Concise Blueprint for Essential Modern CSS</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 05 Apr 2025 20:15:14 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/mastering-css-video-series-a-structured-concise-blueprint-for-essential-modern-css-3oi1</link>
      <guid>https://dev.to/josemariairiarte/mastering-css-video-series-a-structured-concise-blueprint-for-essential-modern-css-3oi1</guid>
      <description>&lt;p&gt;CSS is the backbone of web design, yet many tutorials are either too complex or too superficial. This article introduces a free, 24-video CSS series designed for beginners, developers in need of a refresher, and experienced coders exploring hidden features. Covering everything from fundamental syntax, selectors and properties to advanced topics like animations, transformations, and modern CSS features, each concise, practical lesson (3-9 minutes) ensures you gain a strong, structured understanding without feeling overwhelmed. Watch the first video or explore the full playlist to start learning today! 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  🔥 Why a Thorough Introduction to CSS Matters
&lt;/h3&gt;

&lt;p&gt;CSS is the foundation of the web design—every webpage you visit utilizes it. Whether you're a complete beginner or a developer looking to strengthen your fundamentals, a solid grasp of CSS is essential for designing harmonious, beautiful, pages that leave an impression.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ The Challenge
&lt;/h3&gt;

&lt;p&gt;Many CSS courses are long, bloated, or overly complex, making it hard to stay engaged. Some tutorials focus on theory without real-world application, while others rush through key concepts without proper explanations.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 The Solution
&lt;/h3&gt;

&lt;p&gt;I’ve created a free, 24-video CSS series that breaks everything down into short, focused lessons (3-9 minutes each). It’s beginner-friendly, to the point, and packed with practical examples—perfect for learning CSS quickly without feeling overwhelmed. The code provided is tested to work perfectly, so upon completing each lesson, you may view the styles in any web browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 What’s in This Video Series?
&lt;/h3&gt;

&lt;p&gt;The series begins with an introduction to styles, selectors and basic CSS principles. Starting from sylesheet references, the course moves quickly through CSS Reset, and common styles such as Fonts, Borders, Margins, Padding, and Sizing. From there, the course explores image and hyperlink-related Styles emphasizing core principles that guide how styles are prioritized as well as the rules behind how they “cascade”.&lt;/p&gt;

&lt;p&gt;In the second half, the course dives into often-overlooked advanced features, such as linear and radial gradients, transforms, transitions and animations. A dedicated section breaks down tables in detail, introducing key notions and best practices. These final lessons focus on modern CSS features —concepts rarely covered in quick-start guides but essential for mastering cascading stylesheets.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Who Is This For?
&lt;/h3&gt;

&lt;p&gt;Whether you're a beginner looking for a quick but solid foundation, a developer in need of a CSS refresher, or an experienced coder curious about hidden features you might have overlooked in a rushed introduction years ago, this series has something for you. Each video is designed to be concise yet insightful, covering both core concepts and lesser-known elements to help you write cleaner, more beautiful CSS and understand thoroughly why sometimes CSS styles appear to behave so unpredictably.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎬 How to Get Started?
&lt;/h3&gt;

&lt;p&gt;Getting started is simple! Just hit play on the first video below, which introduces you to the fundamentals of CSS:&lt;br&gt;
📺 Watch the first video here:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/bqGDmUnMLu0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;To follow along with the full 24-video series, check out the complete playlist:&lt;br&gt;
👉 &lt;strong&gt;Watch the full playlist here:&lt;/strong&gt; &lt;a href="https://www.youtube.com/playlist?list=PLUwkgSa02g92Rq22OCOl61jZ7J1aOC4vQ" rel="noopener noreferrer"&gt;CSS Video Series&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each video is short, focused, and beginner-friendly, so you can learn at your own pace. If you find the series helpful, consider subscribing for more content and sharing it with others who might benefit! &lt;br&gt;
Thank you for reading through. I hope you will enjoy this thorough video introduction to CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support Clean Learning Resources
&lt;/h2&gt;

&lt;p&gt;If this CSS series helps strengthen your skills — or offers clarity where other tutorials fell short — consider:&lt;/p&gt;

&lt;p&gt;⭐ Saving or bookmarking the article for future reference&lt;br&gt;
🎬 Sharing it with friends, mentees, or coding communities&lt;br&gt;
🧑‍🤝‍🧑 Spreading the word about clean, structured beginner resources&lt;/p&gt;

&lt;p&gt;Your support helps highlight the importance of clear, concise educational content in a field that often feels overwhelming for newcomers.&lt;/p&gt;

</description>
      <category>css</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>Mastering HTML Video Series: A Structured, Concise Blueprint for Essential Modern HTML</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 15 Feb 2025 16:26:01 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/mastering-html-video-series-a-structured-concise-blueprint-for-essential-modern-html-1gh9</link>
      <guid>https://dev.to/josemariairiarte/mastering-html-video-series-a-structured-concise-blueprint-for-essential-modern-html-1gh9</guid>
      <description>&lt;p&gt;HTML is the backbone of the web, yet many tutorials are either too complex or too superficial. This article introduces a free, 12-video HTML series designed for beginners, developers in need of a refresher, and experienced coders exploring hidden features. Covering everything from fundamental syntax and semantic elements to advanced topics like ARIA, microformats, and modern HTML features, each concise, practical lesson (3-9 minutes) ensures you gain a strong, structured understanding without feeling overwhelmed. Watch the first video or explore the full playlist to start learning today! 🚀&lt;/p&gt;




&lt;h3&gt;
  
  
  🔥 Why a Thorough Introduction to HTML Matters
&lt;/h3&gt;

&lt;p&gt;HTML is the foundation of the web—every webpage you visit is built on it. Whether you're a complete beginner or a developer looking to strengthen your fundamentals, a solid grasp of HTML is essential for writing clean, structured, and accessible code.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ The Challenge
&lt;/h3&gt;

&lt;p&gt;Many HTML courses are long, bloated, or overly complex, making it hard to stay engaged. Some tutorials focus on theory without real-world application, while others rush through key concepts without proper explanations.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 The Solution
&lt;/h3&gt;

&lt;p&gt;I’ve created a free, 12-video HTML series that breaks everything down into short, focused lessons (3-9 minutes each). It’s beginner-friendly, to the point, and packed with practical examples—perfect for learning HTML quickly without feeling overwhelmed.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 What’s in This Video Series?
&lt;/h3&gt;

&lt;p&gt;The series begins with an introduction to the basic HTML template, covering fundamental syntax conventions that will guide you throughout the course. It starts with comments, then moves into an overview of the most common HTML tags—first conceptually, then through real-world examples. From there, the course explores specialized elements like "figure", "aside", and "nav", emphasizing the importance of semantic HTML and why each tag matters.&lt;/p&gt;

&lt;p&gt;In the second half, the course dives into often-overlooked advanced features, such as ARIA, microformats, and microdata, helping you write accessible and structured code. A dedicated section breaks down forms in detail, introducing key elements and best practices. The final lessons focus on modern HTML features, including newer input types and elements—components rarely covered in quick-start guides but essential for mastering the language.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Who Is This For?
&lt;/h3&gt;

&lt;p&gt;Whether you're a beginner looking for a quick but solid foundation, a developer in need of an HTML refresher, or an experienced coder curious about hidden features you might have overlooked in a rushed introduction years ago, this series has something for you. Each video is designed to be concise yet insightful, covering both core concepts and lesser-known elements to help you write cleaner, more effective HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎬 How to Get Started?
&lt;/h3&gt;

&lt;p&gt;Getting started is simple! Just hit play on the first video below, which introduces you to the fundamentals of HTML:&lt;br&gt;
📺 Watch the first video here:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/4yFfJQswH98"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;To follow along with the full 12-video series, check out the complete playlist:&lt;br&gt;
👉 &lt;strong&gt;Watch the full playlist here:&lt;/strong&gt; &lt;a href="https://www.youtube.com/playlist?list=PLUwkgSa02g91I2YB6sC0VHB92G7fNfZ2V" rel="noopener noreferrer"&gt;HTML Video Series&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each video is short, focused, and beginner-friendly, so you can learn at your own pace. If you find the series helpful, consider subscribing for more content and sharing it with others who might benefit! &lt;br&gt;
Thank you for reading through. I hope you will enjoy this in depth detailed and concise video introduction to HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support Structured Learning
&lt;/h2&gt;

&lt;p&gt;If this HTML series helps you grasp the core concepts or dive deeper into advanced features, consider:&lt;/p&gt;

&lt;p&gt;⭐ Bookmarking or saving this article for future reference&lt;br&gt;
🎥 Sharing it with fellow learners, colleagues, or students starting their web development journey&lt;br&gt;
🧑‍🤝‍🧑 Spreading the word about accessible, concise tutorials for mastering HTML&lt;/p&gt;

&lt;p&gt;Your engagement encourages the creation of more clean, foundational resources that make learning web development easier for everyone.&lt;/p&gt;

</description>
      <category>html</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>First Steps in C++: An Introductory Capstone Project</title>
      <dc:creator>Jose Maria Iriarte</dc:creator>
      <pubDate>Sat, 04 Jan 2025 19:05:37 +0000</pubDate>
      <link>https://dev.to/josemariairiarte/first-steps-with-c-an-introductory-capstone-project-455k</link>
      <guid>https://dev.to/josemariairiarte/first-steps-with-c-an-introductory-capstone-project-455k</guid>
      <description>&lt;p&gt;This article presents a capstone project from an Introduction to Computer Science course, designed for beginners to learn C++ fundamentals. The project is divided into four stages or sub-projects, each corresponding to a different set of core concepts, from basic data types and control structures to advanced topics like object-oriented programming and code optimization. The project focuses on processing and analyzing manufacturing orders for cones and frustums, incorporating user input validation, geometric calculations, and cost analysis. As the project progresses, students learn essential software engineering principles, such as the use of classes, functions, and vectors, ultimately culminating in a comprehensive application that integrates all the skills learned throughout the course. The project files are shared on GitHub for anyone looking to explore a hands-on, structured approach to mastering C++.&lt;/p&gt;




&lt;p&gt;In this article, I want to share the capstone project from my Introduction to Computer Science course in college.&lt;/p&gt;

&lt;p&gt;In Introduction to Computer Science I, we used C++ to explore the fundamentals of programming languages.&lt;/p&gt;

&lt;p&gt;Reviewing the repository containing the project files for this course will be incredibly useful for anyone taking their first steps with C++ and seeking exposure to a comprehensive project that integrates all the individual building blocks into a cohesive whole.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/tigerbluejay" rel="noopener noreferrer"&gt;
        tigerbluejay
      &lt;/a&gt; / &lt;a href="https://github.com/tigerbluejay/CPlusPlusDeveloperEssentialPackage" rel="noopener noreferrer"&gt;
        CPlusPlusDeveloperEssentialPackage
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      C++ Computer Science Fundamentals Projects: From Data Types to Object Oriented Architecture. Gerogetown University - Introduction to Computer Science I Project - Summer 2016
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Introduction to Computer Science I (Georgetown University - Summer 2016)&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This repository contains a capstone project from Introduction to Computer Science I (Georgetown University, Summer 2016), designed as a structured and hands-on journey through C++ fundamentals. The project is divided into four standalone console applications (referred to here as Projects 1–4), each building upon the previous one in complexity and sophistication. It starts with basic concepts like data types, control structures, and input/output, and progresses to more advanced topics, including user-defined functions, object-oriented programming, operator overloading, and code optimization.&lt;/p&gt;
&lt;p&gt;Throughout the projects, students develop an application that processes and analyzes manufacturing orders for cones and frustums, incorporating user input validation, geometric calculations, and cost analysis. By working through these stages, learners gain practical experience with essential software engineering principles such as encapsulation, modular design, and use of vectors and classes. Whether you are a beginner looking to solidify your C++…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/tigerbluejay/CPlusPlusDeveloperEssentialPackage" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The capstone project in question is in reality four distinct standalone projects, each consists of a console application that takes input from the user and provides information based on that input. &lt;/p&gt;

&lt;p&gt;When I uploaded the files to GitHub, I referred to each stage as a “Project” for simplicity, but you can think of each successive Project as a stage that builds upon the previous one. Thus, Project 4 builds on Project 3, Project 3 builds on Project 2, and so on.&lt;/p&gt;

&lt;p&gt;In reality each project functions as a sandalone application, but each successive project is a more "refined" version of the previous.&lt;/p&gt;

&lt;p&gt;Feel free to review the files in each of the four project folders. &lt;/p&gt;

&lt;p&gt;Within each folder, the main code files are named &lt;br&gt;
jmi34P1.cpp for Project 1, &lt;br&gt;
jmi34P2.cpp for Project 2, &lt;br&gt;
jmi34P3.cpp for Project 3, &lt;br&gt;
and jmi34P4.cpp for the final project. &lt;/p&gt;

&lt;p&gt;You will also find additional ancillary files in each folder, such as helper code or pseudocode, but the core files listed above contain the central logic and function on their own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Sub-Projects in Detail
&lt;/h2&gt;

&lt;p&gt;As mentioned before, each of the four projects is a standalone version of an application that does similar things: It takes input from the user, displays some error messages where necessary, performs calculations, and outputs information.&lt;/p&gt;

&lt;p&gt;The applications corresponding to &lt;strong&gt;Projects 1 through 4&lt;/strong&gt; serve as a comprehensive tool for processing, validating, and analyzing manufacturing orders for cones and frustums (used for lamp shades). &lt;/p&gt;

&lt;h3&gt;
  
  
  Project Functionality Basics
&lt;/h3&gt;

&lt;p&gt;The Projects prompt the user to input a file (and in the initial versions just console input) containing shape order data, such as shape type, dimensions, color, and closure status. The programs use predefined constants and validation checks to ensure all inputs fall within acceptable ranges. Invalid inputs, such as incorrect shape codes, color codes, or dimension values, are flagged and reported, while valid records proceed to detailed geometric and cost-based calculations.&lt;/p&gt;

&lt;p&gt;User-friendly messages and tables guide the user through the process, ensuring clarity and ease of use. For each valid shape record, the programs calculate key geometric properties, including lateral surface area, top and base surface areas, total surface area, and derived parameters like slant heights and angles. They then compute the raw material cost and sales price based on these metrics, adding a markup for profit. Invalid records are excluded from these calculations but still documented in the output.&lt;/p&gt;

&lt;p&gt;The programs maintain cumulative totals for surface areas, costs, and sales prices, separately aggregating data for cones and frustums to generate summary statistics and averages. The applications conclude by presenting a detailed summary report in a well-formatted table, showing total and average surface area, raw material costs, and sales prices for both cones and frustums. They also include counters for the total number of records processed, the number of valid cone and frustum records, and the number of records containing errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Project Features
&lt;/h3&gt;

&lt;p&gt;In &lt;strong&gt;Projects 3 and 4&lt;/strong&gt;, the logic and structure are adjusted to incorporate more advanced concepts of an introductory computer science course. &lt;/p&gt;

&lt;p&gt;At the core of the applications is the Shape class, which encapsulates information about each manufactured object. This includes order details, dimensions (radius1, radius2, height), shape code (C for cone, F for frustum), color code, and other relevant attributes. The class provides member functions to calculate geometric properties (such as surface area, generating functions, and angles), as well as cost and price.&lt;/p&gt;

&lt;p&gt;The latter applications present a user-friendly menu with options to load data from a file, generate a summary report by region, and generate a summary report by shape. &lt;/p&gt;

&lt;p&gt;The loadData function reads data from the specified file, validates the input, and creates a vector of Shape objects. The summaryByRegion function calculates and displays the total surface area, cost, and price for each region (North, South, East, West, Other), along with averages across all regions. Similarly, the summaryByShape function calculates and displays the same metrics for cones and frustums separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Language Features Covered in Each Project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Project 1&lt;/strong&gt;: The code demonstrates several language features, including conditional statements, logical operators, loops, function calls, constants and macros, arithmetic operations, input/output, string manipulation, type casting, formatting output, scope, comments, control flow with return, and the implied use of enums or flags.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 2&lt;/strong&gt;: Builds on the concepts from Project 1, making use of several language features, including boolean logic with flags and logical OR (||), counters to track occurrences, string manipulation, conditional checks with multiple conditions, floating-point number formatting and fixed, and error message concatenation. It also utilizes nested conditional statements, iteration over flags, and formatted output. The setfill() manipulator is used to change fill characters, and summary totals are calculated using averages. These features include efficient flow control, formatted data output, and structured summaries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 3&lt;/strong&gt;: The code introduces several advanced language features, including custom exception handling, complex control flow, demonstrated through nested loops and conditional statements to handle multiple branching scenarios; function overloading, data encapsulation, type casting and conversion, further string manipulation, with methods such as substring, replace, and concatenation for handling text processing; collections (List), utilizing dynamic collections like List to store related objects; access modifiers, such as private and public, to define visibility and encapsulate data; static methods and variables, and parameter validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project 4&lt;/strong&gt;: Builds on the concepts from Project 3, plus advanced C++ language features such as member functions and const methods for encapsulation, pass-by-reference and const references for performance and safety, and the likely use of templates for generic programming. Project 4 also demonstrates the use of I/O stream manipulators for formatted output, efficient memory management with references to avoid unnecessary copies, and complex conditional logic for decision-making. Other key features are the use of static constants for integral business logic values, constant member variables and functions to ensure immutability, and class design that incorporates encapsulation to protect data. These techniques collectively highlight advanced C++ programming practices.&lt;/p&gt;

&lt;p&gt;I hope you will enjoy these four projects, and I hope they will serve to review the basic concepts of the C++ programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jumpstart Your C++ Journey
&lt;/h2&gt;

&lt;p&gt;If you’ve found this capstone project helpful in solidifying your understanding of C++, here’s how you can make the most of it:&lt;/p&gt;

&lt;p&gt;📁 &lt;strong&gt;Explore the GitHub Repository&lt;/strong&gt; – Dive into the project files and follow along with each stage to deepen your C++ knowledge.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Share the Knowledge&lt;/strong&gt; – Know someone starting their C++ learning journey? Share this resource and help them build their skills through hands-on experience.&lt;/p&gt;

&lt;p&gt;🖥 &lt;strong&gt;Start Coding&lt;/strong&gt; – The best way to learn is by doing. Pick a project, get coding, and challenge yourself to implement new features as you go!&lt;/p&gt;

&lt;p&gt;👍 &lt;strong&gt;Like the Repository&lt;/strong&gt; – If you find the project valuable, don't forget to give it a thumbs-up to help others discover it too!&lt;/p&gt;

&lt;p&gt;Your engagement with this structured project helps to foster a deeper understanding of C++ and software engineering principles.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>beginners</category>
      <category>softwareengineering</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
