Learn C Programming

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

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

Programming আসলে কী

Freeপড়া

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

  • Program জিনিসটা কী, এক বাক্যে যে কাউকে বলে দিতে পারবে।
  • রোজকার একটা কাজের ভেতরে তিনটা move (sequence, selection, repetition) চিনতে পারবে।
  • ছোট একটা সমস্যার জন্য পাঁচ ধাপের plan সোজা বাংলায় লিখতে পারবে।

বিরিয়ানির একটা recipe card নিজে কিছুই রান্না করে না। ওতে আগুন নেই, চাল নেই, পেঁয়াজ নেই। শুধু ধাপগুলো লেখা থাকে, এত পরিষ্কার করে যে অচেনা একজন মানুষও ধরে ধরে করতে পারে।

Programming মানে মেশিনের জন্য ঠিক ওই রকম একটা card লেখা। মেশিন খুব ধৈর্যশীল। আবার মেশিনের চেয়ে বাজে রাঁধুনি তুমি জীবনেও দেখবে না। card-এ লবণের কথা না থাকলে সে লবণ দেবে না।

এক প্লেট সিঙ্গাড়া নিয়ে Maria আর Bob এটা নিয়েই তর্ক করছে। Bob বলছে, programming-এর কঠিন অংশটা হলো টাইপ করা। Maria বলল, তাহলে মুখে মুখে বলো তো, পাঁচটা সংখ্যার মধ্যে সবচেয়ে বড়টা কীভাবে বের করবে। Bob বলল, "তাকিয়ে দেখে সবচেয়ে বড়টা নিয়ে নেব"।

Maria বলল, এটা কোনো নির্দেশ না। মেশিন একসঙ্গে পাঁচটা সংখ্যার দিকে তাকাতে পারে না। সে দুইটা মেলাতে পারে, একটা মনে রাখতে পারে, তারপর এগোতে পারে। Bob চুপ করে গেল। Programming শেখা বেশিরভাগ মানুষের এখান থেকেই শুরু হয়।

Computer দ্রুত, চালাক না

আজকের একটা processor প্রতি সেকেন্ডে কয়েকশো কোটি ছোট নির্দেশ চালায়। তুমি চোখের পলক ফেলার আগেই সে দশ ডিজিটের দুইটা সংখ্যা যোগ করে ফেলবে। অথচ nmae লিখলে সে বুঝবে না যে তুমি name লিখতে চেয়েছিলে।

এই দুইটা জিনিস একসঙ্গে থাকাটাই মেশিনের চরিত্র। বিশাল গতি, আর এক ফোঁটা কাণ্ডজ্ঞান নেই। Program লেখার সময় তুমি কোনো ধারণা বুঝিয়ে বলছ না। তুমি এমন নির্দেশ দিচ্ছ যাতে কিছুই বাদ না পড়ে।

প্রথম দুই সপ্তাহ এটা অন্যায্য লাগে। তারপর এটাই এই বিষয়ের সবচেয়ে ভালো খবর হয়ে দাঁড়ায়। যে মেশিনের কল্পনাশক্তি নেই, সে তোমাকে চমকে দিতে পারে না। Program ভুল হলে সেটা ভুল হয়েছে তোমার লেখা কিছুর জন্য। আর তোমার লেখা জিনিস খুঁজে বের করা যায়, ঠিকও করা যায়।

মনে রেখো

Program-এর ভুলকে সবাই bug বলে। পৃথিবীর প্রতিটা কাজ করা programmer রোজ bug লেখে। দক্ষতা মানে চিরকালের জন্য bug এড়ানো না। দক্ষতা মানে মাথা ঠান্ডা রেখে সেটা খুঁজে বের করা।

পরিষ্কার নির্দেশ: data, ধাপ, output

মেশিনকে দেওয়া প্রতিটা নির্দেশ তিনটা প্রশ্নের উত্তর দেয়।

  1. কোন data রাখব? এগুলোই উপকরণ: পাঁচটা সংখ্যা, একটা নাম, একটা তাপমাত্রা।
  2. ওটা দিয়ে কী করব, আর কোন ক্রমে? এগুলোই ধাপ।
  3. শেষে কী দেখাব? এটাই টেবিলে দেওয়া খাবার।

তিনটার একটা বাদ পড়লে মেশিন ফাঁকটা নিজে ভরে দেয় না। হয় সে error দিয়ে থেমে যায়, নয় সে বুক ফুলিয়ে একটা ভুল উত্তর ধরিয়ে দেয়। দ্বিতীয়টাই বিপজ্জনক।

তাই যেকোনো ধাপের জন্য একটা কাজের পরীক্ষা আছে। অচেনা একজন মানুষ কি এটা প্রতিবার একইভাবে করতে পারবে? উত্তর না হলে ধাপটা এখনো একটা ইচ্ছা, নির্দেশ না।

তিনটা move: sequence, selection, repetition

ভারী শব্দগুলো সরিয়ে দাও। পৃথিবীর প্রতিটা program তিনটা move দিয়ে বানানো।

Moveমানে কীরান্নাঘরেProgram-এ
Sequenceএটা করো, তারপর এটা, তারপর এটাপানি ফোটাও, চাল দাও, পানি ঝরাওএকটা সংখ্যা নাও, দ্বিগুণ করো, ছাপাও
Selectionকিছু সত্যি হলে A করো, নইলে Bমেহমান এলে দ্বিগুণ রাঁধোনম্বর 40-এর নিচে হলে "fail" ছাপাও
Repetitionকিছু না বদলানো পর্যন্ত করেই যাওঘন না হওয়া পর্যন্ত নাড়তে থাকোlist শেষ না হওয়া পর্যন্ত সংখ্যা পড়ো

পুরো হাতিয়ার এইটুকুই। এই track-র বাকিটা জুড়ে তুমি শিখবে প্রতিটা move C-তে কীভাবে লেখে। তারপর সারা জীবন ধরে এগুলোকে আরো মজার ভাবে মেশাবে। তাই পরে কোনো program পড়তে গিয়ে যদি চিহ্নের দেয়াল মনে হয়, আগে তিনটা move খুঁজে নাও। ওগুলো সব সময় ওখানেই আছে।

Input, processing, output

তিনটা move বলে ভেতরে কী হচ্ছে। বাইরের গড়নটা আরো সহজ: কিছু একটা ঢোকে, তার উপর কিছু ঘটে, কিছু একটা বেরোয়।

প্রতিটা program-এর গড়ন: input, processing, output Input যা ঢোকে Processing তিনটা move Output যা বেরোয় পাঁচটা নম্বর টাইপ করা হলো যোগ করো, পাঁচ দিয়ে ভাগ করো গড় পর্দায় দেখা গেল কোনো program-এর মাঝখানটা বিশাল, কোনোটা প্রায় পুরোটাই input আর output. গড়নটা বদলায় না।
ছবি 1। প্রতিটা program এই বাক্সের ভেতরেই থাকে।

একবার এই গড়নটা চোখে পড়লে সব জায়গায় দেখবে। তোমার ফোনের alarm সময়টা input হিসেবে নেয়, ঘড়ির সঙ্গে মেলায়, তারপর বাজে। একটা search box শব্দ নেয়, মিলে যাওয়া page খোঁজে, তারপর তালিকা দেখায়। এর বাইরে কিছুই হচ্ছে না।

Plan কোনো জাদু না

নতুনরা প্রায়ই ভাবে, অভিজ্ঞ programmer-রা কোনো গোপন কৌশল জানে। জানে না। ওদের যেটা আছে সেটা একটা অভ্যাস: ঘোলাটে একটা লক্ষ্যকে ছোট, যাচাই করা যায় এমন ধাপে ভেঙে ফেলা। অভ্যাসটা তৈরি করা যায়। এই পুরো track সেটা তৈরি করার জন্যই।

তাই C-তে যাওয়ার আগে সোজা বাংলায় লেখা তিনটা plan দেখো। প্রতিটা পড়ে ওই অচেনা মানুষের প্রশ্নটা করো: কেউ কি অনুমান না করে এটা করতে পারবে?

Plan 1: পাঁচটা সংখ্যার মধ্যে সবচেয়ে বড়টা

এই plan-টাই Bob মুখে বলতে পারেনি। খেয়াল করো, মেশিন কখনোই দুইটার বেশি জিনিস মেলাচ্ছে না।

  1. প্রথম সংখ্যাটা নাও। নাম দাও এখন পর্যন্ত সবচেয়ে বড়।
  2. List-এর পরের সংখ্যাটা নাও।
  3. ওটা এখন পর্যন্ত সবচেয়ে বড়-র চেয়ে বড় হলে, ওটাই নতুন এখন পর্যন্ত সবচেয়ে বড়।
  4. List শেষ না হওয়া পর্যন্ত ধাপ 2 আর 3 করতে থাকো।
  5. এখন পর্যন্ত সবচেয়ে বড় বলে দাও। ওটাই উত্তর।
Numbers: 12  40  7  40  3
Step 1: largest so far = 12
Step 2: 40 > 12, largest so far = 40
Step 3: 7 is not bigger, no change
Step 4: 40 is not bigger, no change
Step 5: 3 is not bigger, no change
Answer: 40

তিনটা move-ই এখানে আছে। ধাপ 1 আর 5 হলো sequence, ধাপ 3 হলো selection, ধাপ 4 হলো repetition। এই মাপের plan-ই তুমি Module 9-এ C-তে লিখবে।

Plan 2: শব্দটা palindrome কি না

Palindrome মানে সামনে থেকে আর পেছন থেকে একই পড়া যায়, যেমন madam। মেশিন পুরো শব্দটা একসঙ্গে দেখতে পারে না। সে একবারে একটা অক্ষর দেখতে পারে, আর অবস্থান গুনতে পারে।

  1. প্রথম অক্ষর আর শেষ অক্ষরের দিকে আঙুল রাখো।
  2. দুইটা অক্ষর আলাদা হলে "না" বলে থেমে যাও।
  3. একই হলে প্রথম আঙুল এক ঘর ডানে, শেষ আঙুল এক ঘর বামে সরাও।
  4. প্রথম আঙুল শেষ আঙুলের আগে থাকা পর্যন্ত ধাপ 2 আর 3 করতে থাকো।
  5. "না" না বলেই অক্ষর ফুরিয়ে গেলে "হ্যাঁ" বলো।
Word: madam
m and m match, move inwards
a and a match, move inwards
pointers meet at d, nothing left to check
Answer: yes

ধাপ 2 প্রথম অমিল পেলেই থেমে যায়। এটা সত্যিকারের একটা নকশার সিদ্ধান্ত, দুর্ঘটনা না। Zara এখানে দুইটা কেস ধরিয়ে দিত: ফাঁকা শব্দ, আর এক অক্ষরের শব্দ।

Plan 3: টাকা পাঠানো, app যেভাবে করে

একই তিনটা move টাকার বেলাতেও খাটে। নিচে একটা mobile transfer-র plan, যাচাইগুলো রেখে দেওয়া হয়েছে।

  1. যার কাছে পাঠানো হবে তার নম্বর, টাকার পরিমাণ আর PIN পড়ো।
  2. PIN ভুল হলে "PIN ভুল" বলে থেমে যাও।
  3. টাকার পরিমাণ balance-র চেয়ে বেশি হলে "টাকা কম পড়েছে" বলে থেমে যাও।
  4. যে পাঠাচ্ছে তার হিসাব থেকে টাকা বাদ দাও, যে পাচ্ছে তার হিসাবে যোগ করো, log-এ এক লাইন লেখো।
  5. নতুন balance সহ একটা confirmation দেখাও।
Balance: 500. Amount: 700.
PIN check: passed
Balance check: 700 > 500
Answer: not enough money

ধাপ 2 আর 3 হলো selection, যেগুলো program-টাকে আগেই থামিয়ে দেয়। সত্যিকারের system বেশিরভাগটাই এমন ধাপ দিয়ে তৈরি। কাজের মজার অংশটা হলো ঠিক করা, কোন যাচাই লাগবে আর কোন ক্রমে।

একটা অভ্যাস

এই সপ্তাহটা জুড়ে, ফোনের কোনো app কিছু করলেই একটু থেমে তিনটা অংশের নাম বলো। কী ঢুকল? কী হিসাব হলো? কী বেরোল?

প্রতিবার দশ সেকেন্ড। যত পড়াই পড়ো, এই অভ্যাসটা programmer-র চোখ তার চেয়ে দ্রুত তৈরি করে।

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

  • bc, Linux আর macOS-র সঙ্গে আসা calculator। Input হলো তুমি যা টাইপ করলে। Processing হলো তোমার হিসাবের উপর এক দফা কাজ। Output হলো সংখ্যাটা। এর repetition move হলো সেই loop, যেটা তুমি বন্ধ না করা পর্যন্ত পড়তেই থাকে।
  • ATM থেকে টাকা তোলা। Input হলো card, PIN আর টাকার অঙ্ক। Selection move দুইটা: PIN যাচাই আর balance যাচাই। ব্যাংকের উত্তরটা যায় ISO 8583 message হয়ে, যেটা 1987 সালের একটা format আর আজও রোজ ব্যবহার হয়।
  • Wikipedia-র search box. Input তোমার শব্দ। Processing হলো CirrusSearch, Elasticsearch-র উপরে বানানো engine, যেটা Wikipedia 2014 সাল থেকে চালাচ্ছে। Output হলো সাজানো তালিকা। Repetition move চলে প্রতিটা সম্ভাব্য page-র জন্য একবার করে।
  • Traffic light controller. Input হলো timer আর রাস্তার sensor. Selection ঠিক করে পরের phase কোনটা, repetition চক্রটা চালিয়ে যায়, আর output হলো কোন বাতিটা জ্বলবে। যুক্তরাষ্ট্রে এই আচরণ ঠিক করে দেয় NEMA TS-2 standard.

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

১. এমন ধাপ, যেখানে মেশিনকে "তাকাতে" বা "খেয়াল করতে" বলা হয়।

Bob লিখল: "পাঁচটা সংখ্যার দিকে তাকিয়ে সবচেয়ে বড়টা নাও।" কিছুই হবে না, কারণ ওরকম কোনো নির্দেশ নেই। মেশিন দুইটা মান মেলায়; সে এক নজরে একটা দল দেখে না। ঠিক করার উপায় উপরের Plan 1: একটা এখন পর্যন্ত সবচেয়ে বড় রেখে একবারে একটা সংখ্যা মেলাও।

২. উত্তরটা কোথায় যাবে, সেটা না বলা।

যে plan "এবং ওটাই সবচেয়ে বড়" বলে শেষ হয়, তার কোনো output ধাপ নেই। Program ঠিক উত্তরটা বের করে, তারপর কিছুই দেখায় না। এর C version-টার দেখা পাবে Module 3-এ, যেখানে সমাধান এক লাইন: ছাপিয়ে দাও।

৩. এমন repetition, যার থামার উপায় নেই।

"সংখ্যা মিলিয়ে যেতে থাকো" কখনো শেষ হয় না। সত্যিকারের মেশিন ভদ্রভাবে থামে না; তুমি বন্ধ না করা পর্যন্ত সে ঘুরতেই থাকে। প্রতিটা repetition ধাপে পর্যন্ত শব্দটা লাগবে, আর সত্যিই বদলায় এমন কিছু লাগবে। Plan 1-এ সেই জিনিসটা হলো list-এ তোমার অবস্থান।

৪. দুইটা ধাপ, যেগুলো গোপনে ক্রমের উপর নির্ভর করে।

Plan 3-এ ধাপ 3 আর 4 উল্টে দাও। তাহলে app balance যাচাই করার আগেই টাকা কেটে নেবে। ভালো দিনে দুইটা version-ই "কাজ করে"। কিন্তু সঠিক শুধু একটা। ক্রম মানেরই অংশ, সাজসজ্জা না।

মাথা খাটাও

নিচে চা বানানোর একটা plan আছে। একটা ধাপ বাদ পড়েছে, আর সেই ধাপ ছাড়াও মেশিন কাজ শেষ বলে জানাবে। বাদ পড়া ধাপটা খুঁজে বের করো, আর বলো পানীয়টার স্বাদ কেমন হবে।

  1. কেতলিতে পানি ভরো।
  2. কেতলিটা চুলায় বসাও।
  3. চার মিনিট অপেক্ষা করো।
  4. পাত্রে চা পাতা দাও।
  5. কেতলির পানি পাত্রে ঢালো।
  6. তিন মিনিট অপেক্ষা করে পরিবেশন করো।

মেশিন ঠিক যা লেখা আছে তাই করে, তার বেশি কিছু না। ধাপ 2 আবার পড়ো, তারপর নিজেকে জিজ্ঞেস করো ধাপ 3 আসলে কিসের অপেক্ষা করছে।

অনুশীলন ১সহজ

খাতায় পাঁচটা সংখ্যার মধ্যে সবচেয়ে বড়টা বের করার plan-টা নিজের ভাষায় লেখো। Plan 1-এর দিকে তাকাবে না। তারপর অচেনা মানুষের পরীক্ষাটা চালাও, আর যে ধাপে কাউকে অনুমান করতে হবে সেটা দাগিয়ে রাখো।

নিয়ম। কোনো code না। পাঁচ ধাপ বা তার কম। কোনো ধাপে "তাকাও", "দেখো", "খেয়াল করো" বা "স্বাভাবিকভাবেই" শব্দ থাকবে না। প্রতিটা ধাপে বড়জোর দুইটা সংখ্যার কথা থাকবে।

নিজে যাচাই করো। 3, 3, 3, 3, 3 list-টার উপর হাতে চালিয়ে দেখো। তারপর 9, 1, 1, 1, 1-এর উপর। ঠিক plan কোনো আলাদা নিয়ম ছাড়াই আগে 3, পরে 9 উত্তর দেবে।

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

কোনো বছর leap year কি না, সেটা ঠিক করার plan লেখো। এটাই তুমি Module 5-এ সত্যিকারের C-তে লিখবে, তাই এখনকার ভালো plan পরে সময় বাঁচাবে।

নিয়মটা। 4 দিয়ে ভাগ গেলে বছরটা leap year। 100 দিয়ে ভাগ গেলে সেটা ব্যতিক্রম, leap year না। 400 দিয়ে ভাগ গেলে সেটা আবার ওই ব্যতিক্রমের ব্যতিক্রম, মানে leap year। তাই 2024 leap year, 1900 না, আর 2000 হ্যাঁ।

নিয়ম। সোজা বাংলা। প্রতিটা selection-এ "যদি" শব্দটা ব্যবহার করো। 2024, 1900, 2000 আর 2023, চারটার জন্যই তোমার plan-কে ঠিক উত্তর দিতে হবে।

নিজে যাচাই করো। বেশিরভাগ প্রথম চেষ্টায় 1900 ভুল হয়। তোমারটাতেও হলে তোমার "যদি" ধাপগুলোর ক্রমটাই বদলাতে হবে।

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

একটা বাক্যে কয়টা শব্দ আছে, সেটা গোনার plan লেখো। শব্দ মানে পরপর কিছু অক্ষর। শব্দের মাঝে এক বা একাধিক space থাকে।

নিয়ম। মেশিন বাম থেকে ডানে একবারে একটা character পড়ে, আর পেছনে ফিরতে পারে না। সে একটা গণনা আর একটা হ্যাঁ বা না তথ্য রাখতে পারে। এইটুকুই তোমার স্মৃতি।

নিজে যাচাই করো। the quick fox-র জন্য উত্তর 3, আর বাড়তি space দেওয়া the quick fox-র জন্যও 3 হতে হবে। ফাঁকা লাইনের জন্য 0, আর শুরুতে space দেওয়া hello-র জন্য 1। Zara শেষ দুইটা আগে পরীক্ষা করত।

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

  • Programming করতে হলে কি অঙ্কে ভালো হতে হয়?

    না। তোমাকে বরং খুঁতখুঁতে হতে হবে, প্রতিটা কথা ঠিকঠাক করে বলার অভ্যাস করতে হবে, আর সেটা অঙ্ক না। বেশিরভাগ program-এ যে অঙ্ক লাগে সেটা তুমি বারো বছর বয়সেই শিখে ফেলেছ। graphics বা machine learning-র মতো কিছু জায়গায় বেশি লাগে। সাধারণ software-এ যত্ন লাগে, calculus না।

  • সরাসরি code না লিখে খাতায় plan লিখব কেন?

    কারণ টাইপ করলে কঠিন অংশটা ঢাকা পড়ে যায়। C-তে ভুল plan দেখতে syntax-র সমস্যার মতো লাগে, আর তুমি ভুল জায়গায় খুঁজতে থাকো। বাংলায় ভুল plan দশ সেকেন্ডেই ধরা পড়ে। অভিজ্ঞ programmer-রাও টাইপ করার আগে চার পাঁচ লাইনের খসড়া করে।

  • Algorithm আর program কি একই জিনিস?

    Algorithm হলো plan। Program হলো সেই plan, মেশিন চালাতে পারে এমন ভাষায় লেখা। একই algorithm C program হতে পারে, Python program হতে পারে, খাতার এক পাতাও হতে পারে। উপরের Plan 1 একটা algorithm; তুমি এখনো কোনো program লেখোনি।

  • সত্যিকারের কিছু বানাতে কত দিন লাগবে?

    Module 1-এ তুমি প্রথম C program চালাবে, আর Module 2-তে নিজে লিখবে। বন্ধু সত্যিই ব্যবহার করবে এমন কিছু বানাতে কয়েক মাস নিয়মিত অনুশীলন লাগে। সৎ উত্তরটা হলো, প্রথম দুই সপ্তাহ ধীর লাগে, তারপর গতিটা বদলে যায়।

  • আশেপাশের সবাই আমার চেয়ে দ্রুত বুঝছে মনে হয়। এটা কি খারাপ লক্ষণ?

    না, আর তুলনাটা সাধারণত ভুল। যাদের দ্রুত মনে হচ্ছে, তারা প্রায় সব সময়ই এটা আগে একবার টাইপ করেছে। ভবিষ্যৎ বলে দেয় এমন একটাই মাপকাঠি আছে: তুমি অনুশীলনগুলো শেষ করছ কি না, বিরক্তিকরগুলো সহ।

মূল কথা

  • Program মানে স্পষ্ট নির্দেশের তালিকা, যেটা মেশিন এক ধাপ এক ধাপ করে চালায়।
  • মেশিন দ্রুত আর আক্ষরিক। তুমি যা লিখেছ সে তাই করে, যা বোঝাতে চেয়েছ তা না।
  • প্রতিটা program তিনটা move দিয়ে তৈরি: sequence, selection আর repetition।
  • প্রতিটা program-এর বাইরের গড়ন এক: input, processing, output।
  • যে ধাপে অচেনা একজনকে অনুমান করতে হয়, সেটা ইচ্ছা, নির্দেশ না।
  • Algorithm হলো plan; program হলো সেই plan কোনো ভাষায় লেখা।

পরের lesson-এ আসছে 2026 সালের সবচেয়ে বেশি শোনা প্রশ্নটা। AI যদি তোমার হয়ে C লিখে দিতে পারে, তাহলে নিজে শিখব কেন? উত্তরটা ওই তর্কের দুই পক্ষের চেয়ে অনেক বেশি মজার।

lesson ১ শেষ

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

পরেরটা: AI যখন code লিখে দেয়, তখন C শিখব কেন