Learn C Programming

lesson ২ / ৭ · C কেন, আর program জিনিসটা আসলে কী

Module ০ · C কেন, আর program জিনিসটা আসলে কী

AI যখন code লিখে দেয়, তখন C শিখব কেন

Freeপড়া

এই lesson-এ যা শিখবে

  • 2026 সালে C শেখার চারটা সৎ কারণ বলতে পারবে।
  • AI-র coding tool কী বদলে দিয়েছে আর কী বদলায়নি, সেটা ব্যাখ্যা করতে পারবে।
  • অনুশীলন বাদ না দিয়ে assistant-কে শিক্ষক হিসেবে ব্যবহার করতে পারবে।

প্রশ্নটা সরাসরিই ধরা যাক, কারণ এটা তোমার মাথায় আছেই। Zara একটা assistant-কে বলল একটা C program লিখে দিতে, যেটা একটা লেখা উল্টে দেবে। তিন সেকেন্ডে পেয়েও গেল। দেখতে পরিপাটি।

hello শব্দটা দিতেই olleh ছেপে দিল। তারপর সে একটা ফাঁকা লাইন দিল, আর program মরে গেল। কেন মরল, সে বলতে পারল না, কারণ যে সাতটা লাইনে আসল ব্যাপারটা ছিল সেগুলো সে পড়তে পারে না।

এই ফাঁকটা নিয়েই এই lesson। "AI খারাপ" না। "AI তোমার চাকরি খেয়ে ফেলবে" না। শুধু সোজা প্রশ্নটা: সামনের code-টা বুঝতে পারলে তোমার লাভ কী।

কারণ এক: যেটা বোঝো না, সেটা যাচাইও করতে পারো না

Assistant হলো খুব দ্রুত একজন junior developer, যে কখনো বলে না "আমি ঠিক নিশ্চিত না"। সে পূর্ণ আত্মবিশ্বাস নিয়ে তোমার হাতে একটা crash করা program ধরিয়ে দেবে। কাউকে ওই code পড়তে হবে। কাউকে বলতে হবে "এই loop এক ধাপ বেশি চলছে"।

সেই কাজটা তোমার। Zara যে program পেয়েছিল, সেটা নিচে পুরোটা দেওয়া আছে। এখনই এটা লিখতে পারার দরকার নেই। একবার দেখে নাও, যাতে বাকি lesson-টা সত্যিকারের কিছু দেখিয়ে কথা বলতে পারে।

Example 1: assistant যে program লিখে দিল
#include <stdio.h>
#include <string.h>

void reverse(char *s)
{
    size_t i = 0;
    size_t j = strlen(s) - 1;
    while (i < j) {
        char t = s[i];
        s[i] = s[j];
        s[j] = t;
        i++;
        j--;
    }
}

int main(void)
{
    char word[64] = "hello";
    reverse(word);
    printf("[%s]\n", word);
    return 0;
}
[olleh]

কাজ করছে। strlen লম্বা কতটা বলে দেয়, i সামনে থেকে শুরু, j পেছন থেকে শুরু, আর দুই অক্ষর জায়গা বদল করতে করতে মাঝখানে মেলে। hello শব্দটার জন্য এখানে কিছুই ভুল নেই।

Compiler-এ চালাও
Example 2: একই program, শুধু input আলাদা

একটা জিনিস বদলাও। hello-র বদলে একটা ফাঁকা লেখা দাও। বাকি সব হুবহু এক।

#include <stdio.h>
#include <string.h>

void reverse(char *s)
{
    size_t i = 0;
    size_t j = strlen(s) - 1;
    while (i < j) {
        char t = s[i];
        s[i] = s[j];
        s[j] = t;
        i++;
        j--;
    }
}

int main(void)
{
    char word[64] = "";
    reverse(word);
    printf("[%s]\n", word);
    return 0;
}
Segmentation fault

এই লাইনটা program-র output না। এটা operating system-র জানানো যে program এমন memory ছুঁয়েছে যেটা তার না, তাই ওকে থামিয়ে দেওয়া হয়েছে। Playground-এ run-টা একটা runtime error আর শূন্য নয় এমন exit code দিয়ে শেষ হয়।

কারণটা একটা অক্ষর। strlen("") হলো 0, তাই strlen(s) - 1 মানে 0 থেকে 1 বাদ। কিন্তু size_t এমন একটা type, যেটা ঋণাত্মক সংখ্যা রাখতে পারে না।

মাইনাস এক হওয়ার বদলে j হয়ে যায় ওই type-এ রাখা যায় এমন সবচেয়ে বড় সংখ্যা। Loop তখন প্রায় আঠারো কুইন্টিলিয়ন বার চলার কথা, আর প্রথম ধাপেই মরে যায়। এই type-র দেখা পাবে Module 2-তে, আর ঠিক এই ফাঁদটার দেখা পাবে Module 11-এ।

Compiler-এ চালাও
Example 3: তিন লাইনে সারাই

সমাধান হলো একবার মেপে নেওয়া, আর বদলানোর মতো কিছু না থাকলে সঙ্গে সঙ্গে বেরিয়ে যাওয়া।

#include <stdio.h>
#include <string.h>

void reverse(char *s)
{
    size_t len = strlen(s);
    if (len < 2) {
        return;
    }
    size_t i = 0;
    size_t j = len - 1;
    while (i < j) {
        char t = s[i];
        s[i] = s[j];
        s[j] = t;
        i++;
        j--;
    }
}

int main(void)
{
    char empty[8] = "";
    char one[8] = "a";
    char word[8] = "hello";

    reverse(empty);
    reverse(one);
    reverse(word);

    printf("[%s] [%s] [%s]\n", empty, one, word);
    return 0;
}
[] [a] [olleh]

তিনটা input, তিনটা ঠিক উত্তর, কোনো crash নেই। Assistant এটাও লিখে দিতে পারত। লেখেনি, কারণ ফাঁকা লাইনের বেলায় কী হবে সেটা কেউ তাকে জিজ্ঞেস করেনি। Zara জিজ্ঞেস করত, কারণ Zara আগে edge case পরীক্ষা করে।

Compiler-এ চালাও
Example 4: যে bug-টা এখনো রয়ে গেছে

এবার কঠিন কথাটা। Example 3 crash করে না, তবু দুনিয়ার বেশিরভাগ লেখার জন্য এটা ভুল। এটা byte উল্টায়, আর একটা বাংলা অক্ষর এক byte না।

#include <stdio.h>
#include <string.h>

void show_bytes(const char *label, const char *s)
{
    printf("%s (%zu bytes):", label, strlen(s));
    for (size_t i = 0; i < strlen(s); i++) {
        printf(" %02X", (unsigned char)s[i]);
    }
    printf("\n");
}

int main(void)
{
    char city[32] = "ঢাকা";
    show_bytes("before", city);

    size_t i = 0;
    size_t j = strlen(city) - 1;
    while (i < j) {
        char t = city[i];
        city[i] = city[j];
        city[j] = t;
        i++;
        j--;
    }

    show_bytes("after ", city);
    return 0;
}
before (12 bytes): E0 A6 A2 E0 A6 BE E0 A6 95 E0 A6 BE
after  (12 bytes): BE A6 E0 95 A6 E0 BE A6 E0 A2 A6 E0

চারটা বাংলা অক্ষর, বারোটা byte। Byte উল্টালে অক্ষর উল্টায় না। অক্ষরগুলো ছিঁড়ে যায়, আর terminal-এ শুধু বদলি চিহ্ন দেখা যায়।

কোনো compiler সতর্ক করে না। কেউ না লিখলে কোনো test-ও fail করে না। Byte জিনিসটা কী জানা থাকলে তবেই এই bug ধরা পড়ে। সেটা এই track-র Module 2 আর Module 10।

Compiler-এ চালাও

তাই অস্বস্তিকর সারমর্মটা এই। AI দুর্বল code-কে সবার জন্য কম খারাপ করে দেয়। সবচেয়ে ভালো programmer-দের সে খুব একটা এগিয়ে দেয় না। যারা সবচেয়ে বেশি লাভ করে, তারা আগে থেকেই জানে সঠিক code দেখতে কেমন। তারা ওটাকে পথ দেখাতে পারে, বাজে উত্তর বাতিল করতে পারে, ভাঙা জিনিস সারাতে পারে।

কারণ দুই: সবকিছুর নিচের মেঝেটা C

তুমি এই page পড়ার সময় C কী কী ধরে রেখেছে, একবার দেখো।

C-র উপর যা দাঁড়িয়ে আছে: তোমার code, runtime, system library, kernel, hardware তোমার Python, JavaScript বা Java program বেশিরভাগ course এখান থেকেই শুরু করে Language runtime: CPython, Node.js, JVM C আর C++ দিয়ে লেখা System library: glibc, OpenSSL, SQLite, zlib C দিয়ে লেখা Kernel: Linux, macOS-র XNU, Windows NT C দিয়ে লেখা Hardware: processor, memory, disk machine instruction আর byte C-র তিনটা স্তর
ছবি 1। Python শিখলে তুমি একটা যন্ত্র শেখো। C শিখলে তুমি শেখো সেই যন্ত্রটা কিসের উপর দাঁড়িয়ে আছে।

Operating system মানেই C। Database মানেই C: PostgreSQL, MySQL, SQLite, Redis। Language runtime মানেই C: তোমার Python চালায় CPython, আর সেটা একটা C program। Networking-র যন্ত্রপাতিও C, তাই তোমার ঘরের router এই মুহূর্তে C চালাচ্ছে।

Embedded system-ও C। এগুলো হলো অন্য জিনিসের ভেতরে লুকিয়ে থাকা ছোট computer: microwave oven, smart meter, drone, গাড়ির engine controller আর pacemaker। যেখানেই একটা chip আছে আর বিদ্যুতের কড়া হিসাব আছে, সেখানেই সাধারণত C। কারণ C তোমাকে দেখতে দেয় মেশিন ঠিক কী করবে।

"আমার Python program এত ধীর কেন" প্রশ্নটার উত্তর শেষ পর্যন্ত C-র স্তরেই পাওয়া যায়। Memory, address, byte, stack। না জেনেও বছরের পর বছর কাটানো যায়। শুধু ওই বছরগুলো অনুমান করেই কাটবে।

কারণ তিন: C অন্য সব ভাষা সহজ করে দেয়

C ছোট। 1989 সালের standard-এ keyword ছিল 32টা। এই track যে C17 ব্যবহার করে, তাতে আছে 44টা, আর বাড়তি দশটার বেশিরভাগ তুমি হয়তো কোনোদিন টাইপই করবে না। Java পঞ্চাশটারও বেশি শব্দ আটকে রাখে। Python 3.12-তে আছে 35টা।

C-র এই কয়েকটা জিনিস সত্যিকারের বুঝে ফেললে অনেক ভাষা আর নতুন লাগে না। ওদের loop হলো C-র loop। ওদের if হলো C-র if। ওদের curly brace হলো C-র curly brace। এমনকি যারা C-র memory model বাতিল করেছে, যেমন Rust, তারাও C-র গড়নটা ধার করেছে।

দ্বিতীয় একটা ফল আছে, যেটা আরো বেশি জরুরি। Python দিয়ে শুরু করা শিক্ষার্থীরা পরে একটা দেয়ালে ধাক্কা খায়, যখন pointer আর memory সামনে আসে। C দিয়ে শুরু করা শিক্ষার্থীরা ওই দেয়ালে ধাক্কা খায় প্রথম দিনেই। ওরা সেটা টপকায় যখন program দশ লাইনের, আর যেকোনো দেয়াল টপকানোর সবচেয়ে সস্তা সময় ওটাই।

কারণ চার: contest, lab exam আর interview

Contest, বিশ্ববিদ্যালয়ের lab exam আর চাকরির interview সবাই একই দুইটা জিনিস দেখে। তারা দেখে data structure আর algorithm।

C আর C++ হলো সেই ভাষা, যেখানে এই ধারণাগুলো সবচেয়ে কম লুকানো থাকে। C-তে array মানে পাশাপাশি বসানো memory-র একটা খণ্ড। Linked list মানে address-র একটা শেকল। তোমার পেছনে কেউ গোপনে কাজ করছে না। তাই interviewer যখন জিজ্ঞেস করে "এটার খরচ কত", তুমি চোখে দেখা জিনিস থেকেই উত্তর দাও।

মনে রেখো

ICPC আর Codeforces সহ বেশিরভাগ contest অন্য ভাষার পাশাপাশি C আর C++ নেয়। এখানে যা শিখবে তার প্রায় সবটাই খুব কম ঝামেলায় C++-এ চলে যায়। সেজন্যই Progsity-র CP course এই একই lesson-গুলো ব্যবহার করে।

AI কী বদলেছে, আর কী বদলায়নি

উৎসাহ দেওয়া পোস্টার না, নিচেরটা একটা সৎ হিসাব।

AI যা বদলেছেAI যা বদলায়নি
একঘেয়ে setup code লেখা এখন দ্রুতকী বানাবে সেটা ঠিক করা এখনো তোমার কাজ
Syntax খুঁজে পাওয়া এখন সঙ্গে সঙ্গেBug সারাতে এখনো বোঝা লাগে
কখনো ক্লান্ত হয় না এমন একজন শিক্ষক আছেদক্ষতা এখনো নিজের অনুশীলন থেকেই আসে
ছোট script প্রায় বিনা খরচে হয়ে যায়বড় system নকশা করা এখনো কঠিন
প্রথম খসড়া কয়েক সেকেন্ডে আসেফাঁকা string-র কেসটা কাউকে খেয়াল করতেই হয়

শেখার সময় assistant কীভাবে ব্যবহার করবে

এর কোনোটাই যন্ত্র বন্ধ করে দেওয়ার যুক্তি না। এটা একটা পদ্ধতির যুক্তি। নিচেরটা কাজ করে।

  1. আগে নিজে চেষ্টা করো, সব সময়। জিজ্ঞেস করার আগে নিজের version লেখো। ভাঙা চেষ্টাও উত্তরে তোমার চোখ কোথায় পড়বে সেটা বদলে দেয়।
  2. কী জিজ্ঞেস করবে না, কেন জিজ্ঞেস করো। "ফাঁকা লাইনে এটা crash করছে কেন" তোমাকে কিছু শেখায়। "একটা reverse function লিখে দাও" কিছুই শেখায় না।
  3. সমস্যা না, error message পাঠাও। expected ';' before 'return' বোঝানোয় assistant খুব ভালো। সেটা তাকে করতে দাও, তারপর লাইনটা নিজে ঠিক করো।
  4. কোন তিনটা input এটাকে ভাঙবে, জিজ্ঞেস করো। শেখার সময় এটাই সবচেয়ে কাজের প্রশ্ন। Zara-র যে অভ্যাসটা আছে, তুমি সেটাই তৈরি করছ।
  5. চালানোর আগে প্রতিটা লাইন পড়ো। কোনো লাইন রহস্য হলে ওই লাইনটা নিয়েই প্রশ্ন করো। যে program তুমি ব্যাখ্যা করতে পারো না, সেটার debug-ও তুমি করতে পারবে না।
  6. Graded problem-এ কখনো সমাধান paste করবে না। ধরা পড়বে বলে না। অনুশীলনটাই তো তুমি যে জিনিসের জন্য টাকা দিচ্ছ।

যন্ত্রটা প্রচুর ব্যবহার করো। এমন শিক্ষক হিসেবে ব্যবহার করো যে ঘুমায় না, আর তোমার প্রশ্নে বিরক্তও হয় না। কিন্তু code আগে নিজে লেখো। ভুল আগে নিজে করো। তাহলে এমন একটা জিনিস তৈরি হবে যেটা কোনো যন্ত্র তোমাকে দিতে পারে না: বিচারবোধ।

এটা কোথায় কাজে লাগছে

  • Linux kernel. প্রায় তিন কোটি লাইন, বেশিরভাগই C, 1991 সালে Linus Torvalds শুরু করেছিলেন। তোমার Android ফোন আর ইন্টারনেটের বেশিরভাগ server এটা দিয়েই চালু হয়। তোমার program যখন একটা file চায়, উত্তরটা দেয় C-র code।
  • CPython. Python-র standard interpreter একটা C program। তুমি জীবনে যত Python লাইন লিখবে, সব C পড়ে আর চালায়। এর গতি বাড়ানোর কাজ হয় C-তে, Python-এ না।
  • SQLite. একটাই C file, প্রায় আড়াই লাখ লাইন, তোমার browser-এ, ফোনে আর বেশিরভাগ উড়োজাহাজের বিনোদন system-এ আছে। পৃথিবীতে সবচেয়ে বেশি জায়গায় বসানো database এটাই। এর test suite code-র চেয়ে অনেক বড়।
  • Redis. অসংখ্য web backend-র পেছনের in-memory data store, 2009 সাল থেকে C-তে লেখা। Progsity এটা cache আর rate limit-র জন্য ব্যবহার করে। তাই এই page-র পথেই C-র code বসে আছে।

যে ভুলগুলো সবাই করে

১. তৈরি করা code না পড়েই চালিয়ে দেওয়া।

size_t j = strlen(s) - 1;   /* looks harmless */

এখানে কোনো compiler message-ই নেই, আর সেটাই একে বিপজ্জনক করে। Program পরিষ্কারভাবে build হয়, তারপর run-এর সময় Segmentation fault দিয়ে মরে। সমাধান লাইনটা না, অভ্যাসটা: প্রতিটা লাইন পড়ো, আর জিজ্ঞেস করো input ফাঁকা হলে কী হবে।

২. ব্যাখ্যার বদলে উত্তর চাওয়া।

"একটা string উল্টানোর program লিখে দাও" তোমাকে Example 1 দেবে। "আমার loop ফাঁকা string-এ crash করছে কেন, বুঝিয়ে দাও" তোমাকে unsigned wraparound-র ধারণাটা দেবে। ওই ধারণাটা তুমি ত্রিশ বছর ধরে কাজে লাগাবে। একই যন্ত্র, ফল দুই রকম।

৩. "Compile হয়েছে" মানে "ঠিক আছে" ভেবে নেওয়া।

int average = total / count;   /* compiles perfectly */

Compiler ব্যাকরণ দেখে, মানে দেখে না। count শূন্য হলে এটা টুঁ শব্দ না করে build হয়, তারপর run-এর সময় ভেঙে পড়ে। এই ধারণাটা ভালোভাবে পাবে এর পরের পরের lesson-এ।

৪. Graded problem-এ সমাধান copy করা।

এটারও কোনো error message নেই। দামটা পরে আসে, lab exam বা interview-তে, যেখানে সমস্যা ছোট আর সাহায্য নেই। তার বদলে এই lesson-গুলোর hint ladder ব্যবহার করো: hint এক, hint দুই, তারপর সমাধান।

মাথা খাটাও

Example 1-এ ফিরে যাও, assistant-র লেখা program-টায়। কিছু না চালিয়ে, শুধু খাতায় বের করো নিচের তিনটা input-এ এটা কী করবে।

  1. ফাঁকা একটা লেখা, ""।
  2. এক অক্ষরের লেখা, "a"।
  3. বাংলা শব্দ "ঢাকা", যেটা চার অক্ষর আর বারো byte।

প্রতিটার জন্য বলো, এটা crash করবে, ভুল জিনিস ছাপবে, নাকি ঠিক থাকবে। তারপর বলো, তিনটার কোনটা একটা সাধারণ test ধরে ফেলত।

প্রতিটা ক্ষেত্রে strlen কী ফেরত দেয় সেটা ভাবো, তারপর ভাবো strlen(s) শূন্য হলে strlen(s) - 1 কী হয়। তৃতীয় input-র জন্য অক্ষর না, byte গোনো।

অনুশীলন ১সহজ

খাতায় C শেখার নিজের চারটা কারণ লেখো, নিজের ভাষায়, এক বাক্য করে। উপরের চারটা শিরোনাম টুকে দিও না।

নিয়ম। প্রতি কারণে এক বাক্য। প্রতিটা বাক্যে সুনির্দিষ্ট কিছু থাকতে হবে: একটা system, একটা ভাষা, একটা পরীক্ষা, বা একধরনের bug।

নিজে যাচাই করো। Code লেখে না এমন কাউকে পড়ে শোনাও। কোনো কারণ শুনে সে যদি "তাতে কী" বলে, ওইটা আবার লেখো।

অনুশীলন ২মাঝারি

তুমি যে assistant ব্যবহার করো সেটা নাও। ওকে বলো একটা C program লিখতে, যেটা একটা list-এর সবচেয়ে বড় সংখ্যাটা বের করবে। চালাবে না।

নিয়ম। আগে program-টা লাইন ধরে পড়ো। তারপর তোমার মনে হওয়া তিনটা input লিখে রাখো, যেগুলো এটাকে ভাঙবে। ফাঁকা list, একটা মাত্র সংখ্যা, আর সব সংখ্যা সমান, শুরুটা এখান থেকে করা যায়।

নিজে যাচাই করো। এবার তোমার তিনটা input দিয়ে চালাও। একটাই সৎ প্রশ্ন: মেশিন দেখানোর আগেই তুমি কি ব্যর্থতাটা বলে দিতে পেরেছিলে?

অনুশীলন ৩কঠিন

তৈরি করা code যাচাই করার জন্য সোজা বাংলায় কিছু নিয়ম লেখো। একজন reviewer যেন ওগুলো ধরে ধরে ঠিক করতে পারে, code-টা ব্যবহারের জন্য নিরাপদ কি না।

নিয়ম। পাঁচ থেকে আটটা নিয়ম। প্রতিটা নিয়ম শুধু পড়ে যাচাই করা যেতে হবে, চালিয়ে না। "দেখতে পরিষ্কার" কোনো নিয়ম না। "প্রতিটা loop-র থামার শর্ত লেখা আছে" একটা নিয়ম।

নিজে যাচাই করো। তোমার নিয়মগুলো Example 1-এর উপর চালাও। ভালো নিয়মের তালিকা ওটাকে বাতিল করবে, আর ঠিক কারণটাও বলে দেবে। তালিকাটা রেখে দাও; Module 16-এ এটাকে আরো ভালো করবে।

যে প্রশ্নগুলো সবার মনে আসে

  • পাঁচ বছর পরেও কি programming একটা চাকরি থাকবে?

    2031 সাল নিয়ে কেউ তোমাকে কথা দিতে পারবে না। আজ যেটা দেখা যাচ্ছে সেটা হলো কাজটা সরে গেছে: টাইপ করা কম, review করা, জোড়া দেওয়া, নিরাপদ করা আর দ্রুত করা বেশি। এর সবটাই পড়ার কাজ, আর code পড়া শেখার সবচেয়ে ভালো ভাষা C।

  • Python সহজ, ওটা দিয়ে শুরু করব না কেন?

    Python শুরু করা সহজ, ভেতরটা দেখা কঠিন। দুইটা পথই একই জায়গায় পৌঁছায়। C কষ্টটা আগে নিয়ে নেয়, মানে এই track-র Module 11 কষ্ট দেবে, তারপর আর কিছু কষ্ট দেবে না। মেশিনটা বুঝতে চাইলে C নাও।

  • 2026 সালে শেখার জন্য C কি বড্ড পুরোনো না?

    C পঞ্চাশ পেরিয়েছে, আর এখনো প্রতিটা ভাষার তালিকায় উপরের দিকেই আছে। বয়স ভুল মাপকাঠি। ঠিক মাপকাঠি হলো, এটা উধাও হলে কী কী ভেঙে পড়ত। সৎ উত্তর: পৃথিবীর প্রতিটা operating system।

  • এই track-র graded problem-এ কি assistant ব্যবহার করা যাবে?

    কেউ তোমাকে আটকাবে না, আর ক্ষতিটা তোমারই হবে। Problem-গুলো ইচ্ছা করেই ছোট, কারণ ওগুলো একটাই জিনিস বানায়: তোমার দক্ষতা। আগে hint ladder ব্যবহার করো: hint এক, hint দুই, তারপর বিস্তারিত সমাধান।

  • কতটা বুঝলে বুঝব যে যথেষ্ট বুঝেছি?

    এই পরীক্ষাটা করো। চালানোর আগে output বলে দিতে পারছ? আর এটাকে ভাঙবে এমন একটা input বলতে পারছ? দুইটার উত্তর হ্যাঁ হলে তুমি বুঝেছ। না হলে তুমি পড়েছ, যেটা আলাদা জিনিস।

মূল কথা

  • যে code বোঝো না সেটা যাচাই করতে পারবে না, আর যাচাই করাই এখন কাজের বড় অংশ।
  • Kernel, database, language runtime আর embedded device, সবার নিচের মেঝেটা C।
  • C ছোট, তাই এটা শিখলে বাকি বেশিরভাগ ভাষা চেনা চেনা লাগে।
  • Contest, lab exam আর interview-তে C-র এই স্বচ্ছতাই কাজে লাগে।
  • AI প্রথম খসড়ার গতি বদলেছে, ওটা নিয়ে বিচার করার দরকারটা বদলায়নি।
  • আগে নিজে চেষ্টা করো, কেন জিজ্ঞেস করো, ভাঙার input চাও, প্রতিটা লাইন পড়ো।

পরের lesson-এ দেখা হবে সেই মানুষগুলোর সঙ্গে, যারা এই ভাষাটা বানিয়েছিলেন, আর যে সমস্যায় তারা আটকে ছিলেন। গল্পটা C-র প্রায় প্রতিটা অদ্ভুত সিদ্ধান্তের ব্যাখ্যা দিয়ে দেয়।

lesson ২ শেষ

শেষ হলে চিহ্ন দিন, অগ্রগতি আপনার সাথে থাকবে।

পরেরটা: C-র গল্প: Bell Labs-র এক ঘর থেকে তোমার ফোন পর্যন্ত