<?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: Abhijeet Shinde</title>
    <description>The latest articles on DEV Community by Abhijeet Shinde (@abhijeet_shinde_0452c19b8).</description>
    <link>https://dev.to/abhijeet_shinde_0452c19b8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3460974%2Fba879428-73a5-4c2f-9fd5-5291e37cbc97.jpeg</url>
      <title>DEV Community: Abhijeet Shinde</title>
      <link>https://dev.to/abhijeet_shinde_0452c19b8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhijeet_shinde_0452c19b8"/>
    <language>en</language>
    <item>
      <title>TCP in Motion: MTU, MSS, PMTUD, Flow Control, and Congestion Control</title>
      <dc:creator>Abhijeet Shinde</dc:creator>
      <pubDate>Wed, 12 Aug 2026 09:55:14 +0000</pubDate>
      <link>https://dev.to/abhijeet_shinde_0452c19b8/tcp-in-motion-mtu-mss-pmtud-flow-control-and-congestion-control-4m1n</link>
      <guid>https://dev.to/abhijeet_shinde_0452c19b8/tcp-in-motion-mtu-mss-pmtud-flow-control-and-congestion-control-4m1n</guid>
      <description>&lt;h2&gt;
  
  
  1. Why This Topic Matters
&lt;/h2&gt;

&lt;p&gt;The last post covered what's &lt;em&gt;inside&lt;/em&gt; a TCP segment and how a connection opens and closes — but it never asked how big a segment is allowed to be, how many can be sent before the sender has to wait, or what stops a sender from overwhelming the network entirely. Those three questions turn out to be one continuous story: &lt;strong&gt;segment size (MTU/MSS/PMTUD) → how much data can be in flight based on the receiver (Flow Control) → how much data can be in flight based on the network itself (Congestion Control)&lt;/strong&gt;. This post walks through all three, in the order they actually build on each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Source Material
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Playlist: &lt;a href="https://www.youtube.com/playlist?list=PLd1s-PEC5Pio" rel="noopener noreferrer"&gt;Chai aur Code — Computer Networking Series&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Video: &lt;a href="https://youtu.be/18-nbrEEU9o" rel="noopener noreferrer"&gt;MTU, MSS, and PMTUD&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Video: &lt;a href="https://youtu.be/PL_6aNL_KqY" rel="noopener noreferrer"&gt;TCP Flow Control&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Video: &lt;a href="https://youtu.be/B3JwzcPTZDw" rel="noopener noreferrer"&gt;TCP Congestion Control&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MTU, MSS, PMTUD&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;MTU is a link-level ceiling on IP packet size; the Ethernet header sits outside it entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSS is TCP-only — the payload that fits once IP and TCP headers are subtracted from MTU (1500 → 1460 is the standard pair).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fragmentation duplicates header overhead per fragment, which is exactly why TCP avoids it via MSS negotiation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MSS negotiated at the handshake only reflects the two endpoints — not every router's MTU along the path. PMTUD closes that gap using the DF bit and ICMP "Fragmentation Needed" messages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Flow Control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stop-and-wait costs one round trip per segment; cumulative ACKs let several segments be sent and acknowledged together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The receiver's buffer size &lt;em&gt;is&lt;/em&gt; the advertised window — a full buffer means Window Size = 0, and a window update event (fresh ACK, non-zero window) tells the sender it's safe to resume.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The sender's sliding window is shaped directly by what the receiver last advertised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Window Size field is only 16 bits (max 65,535 bytes) — Window Scaling, negotiated at the handshake, multiplies it by a power of 2 for high-bandwidth links.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Congestion Control&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Flow control only protects the &lt;em&gt;receiver&lt;/em&gt;; congestion control protects the &lt;em&gt;network&lt;/em&gt; — the sender's real window is &lt;code&gt;MIN(RWND, CWND)&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slow Start doubles CWND every RTT until it hits ssthresh, then Congestion Avoidance takes over and grows it linearly instead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A triple duplicate ACK (moderate signal) halves ssthresh and CWND, then resumes in Congestion Avoidance. An RTO (severe signal) halves ssthresh but resets CWND all the way to 1, restarting Slow Start.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ECN lets routers flag congestion &lt;em&gt;before&lt;/em&gt; dropping packets, using ECN → ECE → CWR flags across the IP and TCP headers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Key Concepts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;MTU (Maximum Transmission Unit)&lt;/strong&gt; — the largest IP packet a link can carry without fragmenting it: &lt;code&gt;MTU = IP Header + TCP/UDP Header + Payload&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MSS (Maximum Segment Size)&lt;/strong&gt; — the TCP payload that fits in one segment: &lt;code&gt;MSS = MTU − IP Header − TCP Header&lt;/code&gt; (1500 − 20 − 20 = 1460).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PMTUD (Path MTU Discovery)&lt;/strong&gt; — finds the smallest MTU across the &lt;em&gt;entire&lt;/em&gt; path, not just the two endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flow control&lt;/strong&gt; — governs how much data the sender can have in flight, bounded by the receiver's buffer (the advertised &lt;strong&gt;window size&lt;/strong&gt; ).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sliding window&lt;/strong&gt; — the sender's own buffer of unacknowledged data, resized to match the receiver's last advertised window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Window Scaling&lt;/strong&gt; — a handshake-negotiated multiplier (factor 0–14) that extends the window past the 16-bit field's 65,535-byte ceiling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CWND (Congestion Window)&lt;/strong&gt; — the maximum unacknowledged data TCP allows based on what the &lt;em&gt;network&lt;/em&gt; can handle, distinct from the receiver-driven RWND.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ssthresh&lt;/strong&gt; — the CWND value where TCP switches from exponential Slow Start growth to linear Congestion Avoidance growth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ECN (Explicit Congestion Notification)&lt;/strong&gt; — router-to-sender congestion warning that happens &lt;em&gt;before&lt;/em&gt; any packet loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Segment Sizing: Fragmentation and PMTUD
&lt;/h3&gt;

&lt;p&gt;With MTU = 1500 bytes but a 1600-byte packet to send (20-byte header + 1580 payload):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fragment 1: IP Header 20B + Payload 1480B = 1500B (matches MTU exactly)
Fragment 2: IP Header 20B + Payload 100B = 120B (duplicated header for the leftovers)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MSS negotiation avoids this at the source. With MSS = 1460 negotiated at the handshake, a 3000-byte send splits into 1460 + 1460 + 80 — Segment 1 checks out as &lt;code&gt;1460 + 20 + 20 = 1500&lt;/code&gt;, landing exactly at the MTU. Skip that negotiation and send 1500 raw payload bytes instead, and the final packet becomes &lt;code&gt;1500 + 20 + 20 = 1540&lt;/code&gt;, blowing past the MTU and forcing fragmentation anyway.&lt;/p&gt;

&lt;p&gt;When endpoints agree on MSS but a router &lt;em&gt;in between&lt;/em&gt; has a smaller MTU, PMTUD finds it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client(1500) ── R1(460) ── R2(1420) ── R3(512) ── Server(1500)

1. Client sends 1500B with DF (Don't Fragment) set.
2. R1's link MTU (460) is smaller → can't fragment (DF set) → drops packet,
   replies with ICMP "Fragmentation Needed, MTU = 460."
3. Client resizes to 460B and resends.
4. 460B fits under R2 (1420) and R3 (512) too → reaches the server.
5. Discovered Path MTU = 460 bytes.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flow Control: Pacing to the Receiver
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Stop-and-Wait: 3 segments → 3 round trips
Cumulative ACK: 3 segments sent back-to-back → 1 round trip (single ACK covers all 3)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Receiver buffer = 3 bytes. Sender fills it with Seq 1, 2, 3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server sends ACK, Window Size = 0 (buffer full)
Client stops sending
        ...app reads Seq 1–3, freeing the buffer...
Server sends ACK + Window Size = 3 (window update event)
Client resumes sending

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sender's sliding window tracks this directly — window shrinks to 0 when the receiver is full, and reopens the moment a window update arrives. And because the Window Size field is only 16 bits (max 65,535 bytes), high-bandwidth links negotiate Window Scaling at the handshake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Advertised Window = 65,000 bytes, Scaling Factor = 8
Effective Window = 65,000 × 2^8 = 65,000 × 256 ≈ 16,640,000 bytes (~16 MB)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Congestion Control: Pacing to the Network
&lt;/h3&gt;

&lt;p&gt;The receiver's window alone isn't enough — a router in the middle might have less buffer than either endpoint. Assume MSS = 1 byte, RTT = 1 sec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sender buffer: 4 segments | Router buffer: 2 segments | Receiver buffer: 4 segments

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sending 4 segments based only on the receiver's window overflows the router's 2-segment buffer, and the excess gets dropped. Hence: &lt;code&gt;Sender Window = MIN(RWND, CWND)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Slow Start&lt;/strong&gt; , with &lt;code&gt;ssthresh = 64&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CWND: 1 → 2 → 4 → 8 → 16 → 32 → 64 (doubles every RTT until it hits ssthresh)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Congestion Avoidance&lt;/strong&gt; then takes over: &lt;code&gt;CWND = CWND + 1/CWND&lt;/code&gt;, applied once per RTT — versus Slow Start's +1 per single ACK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reacting to loss&lt;/strong&gt; , starting from CWND = 64:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Triple Duplicate ACK (moderate): RTO (severe):
  new ssthresh = 64 / 2 = 32 new ssthresh = 64 / 2 = 32
  new CWND = 64 / 2 = 32 new CWND = 1 (full reset)
  → resumes in Congestion Avoidance → restarts from Slow Start

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ECN&lt;/strong&gt; , detecting congestion before any loss:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Router nearing overload → sets ECN flag = 1 in the IP header (instead of dropping)
2. Receiver sees it → sets ECE = 1 in its next ACK
3. Sender sees ECE = 1 → halves ssthresh and CWND, moves into Congestion Avoidance
4. Sender sets CWR = 1 on its next segment, confirming the reduction to the receiver

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Things That Confused Me
&lt;/h2&gt;

&lt;p&gt;I expected Ethernet framing to count toward MTU, since it's physically part of what goes out on the wire — it doesn't; MTU is strictly an IP-layer number. I also assumed Window Scaling somehow expanded the Window Size &lt;em&gt;field&lt;/em&gt; itself — it doesn't; the field stays 16 bits forever, and scaling just changes how both sides &lt;em&gt;interpret&lt;/em&gt; the number, agreed once at the handshake. And I expected RTO and triple duplicate ACK to trigger the same reaction, since both mean "something got lost" — they don't. A triple duplicate ACK means later segments are still arriving, so it's treated as moderate congestion. An RTO means nothing got through at all, which is why TCP throws away all its progress and restarts from CWND = 1 instead of just halving it.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. My Explanation in Simple Words
&lt;/h2&gt;

&lt;p&gt;Think of sending data as shipping packages down a delivery route. MTU is the biggest box any truck on the route can carry, and MSS is how much you're allowed to pack inside once you've set aside room for the shipping label (the headers). PMTUD is sending a test package first to find the smallest box size used by &lt;em&gt;any&lt;/em&gt; truck along the whole route, so you never have to repack halfway.&lt;/p&gt;

&lt;p&gt;Flow control is pouring water into a cup while watching how full it already is — stop when it's full, resume once someone's had a sip. Congestion control is watching the &lt;em&gt;pipe&lt;/em&gt; between you and the cup, not just the cup — even if the cup has room, you slow down if the pipe itself is straining. You start pouring cautiously and speed up quickly (Slow Start), then ease off your rate of speeding up once you sense the pipe filling (Congestion Avoidance). If you hear it actually overflowed somewhere (a timeout), you go back to pouring from scratch. ECN is the pipe tapping you on the shoulder to say "getting full" before anything actually spills.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;MTU is the link-level packet ceiling; MSS is TCP's payload budget after headers; PMTUD finds the smallest MTU across the whole path so fragmentation never has to happen mid-route.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flow control paces the sender to the &lt;em&gt;receiver's&lt;/em&gt; buffer — a full buffer means Window Size = 0, and a window update event reopens it; Window Scaling extends the 16-bit field's 65,535-byte ceiling for high-bandwidth links.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Congestion control paces the sender to the &lt;em&gt;network's&lt;/em&gt; capacity — &lt;code&gt;Sender Window = MIN(RWND, CWND)&lt;/code&gt; — using Slow Start's exponential growth up to ssthresh, then Congestion Avoidance's linear growth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Triple duplicate ACK (moderate loss signal) halves the window and resumes in Congestion Avoidance; RTO (severe signal) resets CWND to 1 and restarts Slow Start entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ECN lets the network warn the sender before any packet is actually dropped, via ECN → ECE → CWR across the IP and TCP headers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. Next Topic
&lt;/h2&gt;

&lt;p&gt;Next up: DNS — how a name typed into a browser turns into the IP address that everything in this post has been routing to.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>tcp</category>
      <category>flowcontrol</category>
      <category>congestioncontrol</category>
    </item>
    <item>
      <title>The MVP Is Live: Stream Anything Through Telegram, No App Required</title>
      <dc:creator>Abhijeet Shinde</dc:creator>
      <pubDate>Mon, 10 Aug 2026 07:27:10 +0000</pubDate>
      <link>https://dev.to/abhijeet_shinde_0452c19b8/the-mvp-is-live-stream-anything-through-telegram-no-app-required-kj6</link>
      <guid>https://dev.to/abhijeet_shinde_0452c19b8/the-mvp-is-live-stream-anything-through-telegram-no-app-required-kj6</guid>
      <description>

&lt;p&gt;Since &lt;a href="https://projectlog.hashnode.dev/how-a-simple-question-took-me-to-building-a-media-platform" rel="noopener noreferrer"&gt;Part 1&lt;/a&gt;, this series has been documenting the build of a distributed media platform from scratch — from a simple frustration (movies and anime scattered across five devices) through metadata extraction, transcoding pipelines, hardening, and finally the &lt;a href="https://projectlog.hashnode.dev/distributed-media-platform-architecture-hosting-cdn-security" rel="noopener noreferrer"&gt;full production architecture in Part 5&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That architecture is no longer just a diagram. It's live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Working Right Now
&lt;/h2&gt;

&lt;p&gt;The MVP runs entirely inside Telegram — no app to install, no account to create. Just a bot.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Search&lt;/strong&gt; — ask for a title, and the bot tells you whether it's ready to stream, still processing, or not in the system yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Playback&lt;/strong&gt; — completed titles stream straight through the gateway/worker split documented in Part 5: a Koyeb API gateway handling the lightweight requests, an Oracle Cloud VM running the FFmpeg transcoding worker for everything heavy, connected through an Upstash queue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Request flow&lt;/strong&gt; — if a title doesn't exist yet, you can request it and it gets picked up for processing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it running on free-tier infrastructure, same as the architecture from Part 5.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Still In Progress
&lt;/h2&gt;

&lt;p&gt;Upload is the one piece not fully hardened yet. Pre-signed URLs mean the gateway never touches the video bytes directly — but the failure paths, duplicate handling at scale, and edge cases from real (messy) user uploads are still being worked through. Streaming and search are solid; upload is the next thing getting stress-tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Post Exists
&lt;/h2&gt;

&lt;p&gt;Every part of this series so far has been me testing against my own usage. This is the first point where that's not enough — I need people who aren't me actually hitting the bot and telling me what breaks.&lt;/p&gt;

&lt;p&gt;If you try it, here's what I actually want to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Does playback feel instant, or is there lag you notice?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is anything about how the bot responds confusing?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Does anything break outright?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://t.me/Hellnight2005bot" rel="noopener noreferrer"&gt;&lt;strong&gt;Try the bot on Telegram&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'll read every reply. Next up on the build side is the monitoring and logging layer teased at the end of Part 5 — actually seeing what the system is doing once it's running, instead of guessing from the outside. Upload hardening picks back up after that, and this round of feedback will help shape what needs the most attention when it does.&lt;/p&gt;




&lt;p&gt;This is part of the ongoing &lt;a href="https://projectlog.hashnode.dev/series/building-a-media-platform-from-scratch" rel="noopener noreferrer"&gt;Building a Distributed Media Platform from Scratch&lt;/a&gt; series.&lt;/p&gt;

</description>
      <category>learninginpublic</category>
      <category>buildinpublic</category>
      <category>systemdesign</category>
      <category>telegrambot</category>
    </item>
    <item>
      <title>Am I Becoming a Copy-Paste Machine? What Education Taught Me (and What It Didn’t)</title>
      <dc:creator>Abhijeet Shinde</dc:creator>
      <pubDate>Wed, 25 Mar 2026 05:00:00 +0000</pubDate>
      <link>https://dev.to/abhijeet_shinde_0452c19b8/am-i-becoming-a-copy-paste-machine-what-education-taught-me-and-what-it-didnt-38ll</link>
      <guid>https://dev.to/abhijeet_shinde_0452c19b8/am-i-becoming-a-copy-paste-machine-what-education-taught-me-and-what-it-didnt-38ll</guid>
      <description>&lt;p&gt;I recently watched a video about &lt;a href="https://youtu.be/IYt_x4Yzgds?si=PRN9uPccmuHVPorx" rel="noopener noreferrer"&gt;&lt;strong&gt;How To Become Dangerously Self-Educated&lt;/strong&gt;&lt;/a&gt;—people who didn’t always fit into the traditional education system. That video didn’t just teach me something new, it made me question something I had been feeling for a long time.&lt;/p&gt;

&lt;p&gt;Am I really learning… or just copying?&lt;/p&gt;




&lt;h3&gt;
  
  
  The Way We’re Taught
&lt;/h3&gt;

&lt;p&gt;From school to college, most of us are trained in a very specific way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Follow the guide&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write long answers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use expected keywords&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill pages to get marks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point, learning becomes less about understanding and more about &lt;em&gt;presentation&lt;/em&gt;. It starts to feel like we are being trained to repeat, not to think.&lt;/p&gt;

&lt;p&gt;And slowly, without realizing it, we begin to feel like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Maybe I’m just a copy-paste machine with limited memory.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  When I Started Thinking Differently
&lt;/h3&gt;

&lt;p&gt;For a long time, I followed the system. I wrote answers exactly as taught.&lt;/p&gt;

&lt;p&gt;But then something changed.&lt;/p&gt;

&lt;p&gt;I started writing answers in my own words. I focused on understanding instead of memorizing. And something surprising happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;My answers became shorter&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clearer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easier for me to understand&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Maybe I’m lacking something.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because in exams, shorter answers don’t always get full marks. It felt like understanding was being punished.&lt;/p&gt;

&lt;p&gt;But later, I realized something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When you truly understand something, you don’t need many words to explain it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  The Conflict: Understanding vs Marks
&lt;/h3&gt;

&lt;p&gt;This is where the real struggle begins.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you write simply → you understand deeply, but may lose marks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you write long, memorized answers → you get marks, but may not truly understand&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what do we do?&lt;/p&gt;

&lt;p&gt;Are we forced to choose between thinking and scoring?&lt;/p&gt;




&lt;h3&gt;
  
  
  The Truth: These Are Two Different Skills
&lt;/h3&gt;

&lt;p&gt;This is the biggest realization:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding and exam-writing are not the same thing.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Understanding is about clarity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exams are about structure and expectations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I understood this, everything changed.&lt;/p&gt;

&lt;p&gt;I stopped thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I am bad at writing long answers”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And started thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I need to &lt;em&gt;expand my understanding into exam format&lt;/em&gt;”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Are We Losing Our Thinking Ability?
&lt;/h3&gt;

&lt;p&gt;This was my biggest fear.&lt;/p&gt;

&lt;p&gt;If I keep writing like this for years, will I lose my ability to think deeply?&lt;/p&gt;

&lt;p&gt;The answer is: &lt;strong&gt;Only if you stop being aware.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you blindly follow the system, yes—it can make your thinking mechanical.&lt;/p&gt;

&lt;p&gt;But if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Keep questioning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep understanding in your own way&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the system only when needed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you are not losing anything.&lt;/p&gt;

&lt;p&gt;In fact, you are gaining something most people don’t: &lt;strong&gt;awareness.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Real Problem with Education
&lt;/h3&gt;

&lt;p&gt;Education is not entirely wrong—but it is incomplete.&lt;/p&gt;

&lt;p&gt;It teaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to pass exams&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to present answers&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it often fails to teach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to think independently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to simplify complex ideas&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to connect knowledge&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So students who think differently often feel like they are doing something wrong—when in reality, they are doing something &lt;em&gt;better&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;I don’t need to go back to copying.&lt;/p&gt;

&lt;p&gt;Instead, I can do both:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Learn deeply (for myself)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Understand concepts simply&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use my own words&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on clarity&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Write smartly (for exams)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Expand answers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add structure and keywords&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Match expectations&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  A New Way to See It
&lt;/h3&gt;

&lt;p&gt;I’m not a copy-paste machine.&lt;/p&gt;

&lt;p&gt;I’m someone learning two different skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to think&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to present&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the goal is not to choose one.&lt;/p&gt;

&lt;p&gt;The goal is to &lt;strong&gt;master both&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thought
&lt;/h3&gt;

&lt;p&gt;The system may train you to write in a certain way.&lt;/p&gt;

&lt;p&gt;But it doesn’t control how you think—unless you let it.&lt;/p&gt;

&lt;p&gt;So instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Education is limiting me”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I now think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I will use education as a tool, not a boundary.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And maybe that’s where real learning begins.&lt;/p&gt;

</description>
      <category>education</category>
      <category>learning</category>
      <category>selflearning</category>
      <category>studentlife</category>
    </item>
    <item>
      <title>Documenting My CS50 Progress (Still Learning!)</title>
      <dc:creator>Abhijeet Shinde</dc:creator>
      <pubDate>Mon, 24 Nov 2025 17:35:42 +0000</pubDate>
      <link>https://dev.to/abhijeet_shinde_0452c19b8/documenting-my-cs50-progress-still-learning-336d</link>
      <guid>https://dev.to/abhijeet_shinde_0452c19b8/documenting-my-cs50-progress-still-learning-336d</guid>
      <description>&lt;p&gt;I recently started learning &lt;strong&gt;CS50&lt;/strong&gt;, and I’m still in the early part of the course — but even these first few weeks have already changed how I think about programming.&lt;/p&gt;

&lt;p&gt;To stay consistent and understand things more deeply, I’ve begun writing short reflection posts.&lt;/p&gt;

&lt;p&gt;In these notes, I share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the concepts that finally clicked for me,&lt;/li&gt;
&lt;li&gt;the parts I struggled with,&lt;/li&gt;
&lt;li&gt;the small breakthroughs that felt rewarding,&lt;/li&gt;
&lt;li&gt;and how the course is shaping my understanding of computer science.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m not documenting the course week-by-week — just capturing my learning as it happens.&lt;/p&gt;

&lt;p&gt;If you're also studying CS50 or starting your programming journey, you might find these reflections relatable or helpful.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Follow the full series here: &lt;a href="https://weeklyupdate.hashnode.dev/series/my-cs50-journey" rel="noopener noreferrer"&gt;CS50&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;

</description>
      <category>c</category>
      <category>cs50</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
