প্রোগ্রামিং কেউ যখন নতুন শুরু করে তখন শুরুতে চোখে অন্ধকার দেখা খুবই স্বাভাবিক ঘটনা।তাই যারা নতুন শুরু করেছেন তারা এই ভেবে সান্ত্বনা পেতে পারেন যে আগে যারা শুরু করেছিল তাদেরও শুরুতে একই অবস্থাই হয়েছিল।হয়তো তারা আপনার চেয়েও বেশি অন্ধকার দেখেছিলেন শুরুতে।তাই প্রথম কথা শুরুতে কঠিন লাগলে হাল ছেড়ে দিবেন না।একবার যদি এটার মজা পেয়ে যান তখন দেখবেন স্টার হোটেলে খাসির লেগরোস্ট খাওয়ার চেয়ে কোড করতে ভালো লাগবে;);)।
হ্যাঁ যেটা বলছিলাম।প্রোগ্রামিং কিন্তু কঠিন না।শুধু আপনি যখন শুরু করছেন তখন প্রোগ্রামিংয়ের কনসেপ্টগুলো আপনার কাছে নতুন,মানে একেবারেই নতুন আর কি।নিজের একটা মজার অভিজ্ঞতার কথা বলি, তাহলে বোধহয় আপনাদের বোঝাতে পারবো।যখন শুরু করেছিলাম "X = X + 1" কিভাবে হয় হাজার ভেবেও কোন কূলকিনারা পাইনি :)।এটা বুঝতে ও নিজেকে বোঝাতে বেগ পেতে হয়েছিল যে এটার অর্থ ডানপাশের X এর সাথে এক যোগ করে বামপাশের X এর মধ্যে যোগফলটা স্টোর করে রাখা।শুধু ভেবেছি X আর X + 1 সমান এটা কিভাবে সম্ভব ??যাহোক বুঝতেই পারছেন আমি আপনাদেরই একজন :)।
আমি C প্রোগ্রামিং ল্যাংগুয়েজ নিয়ে মূলত আলোচনা করব।C হল সোজা কথায় প্রোগ্রামিং ল্যাংগুয়েজগুলির "বাবা"।কেন ?C এর কিন্তু অনেক ক্ষমতা।মেশিন হার্ডওয়্যারের সাথে সোজাসাপ্টা কথাবার্তা বলার জন্য C এর উপরে জিনিস নাই।অবশ্য যে ল্যাংগুয়েজগুলি মানুষের কাছে দেখতে ও বুঝতে যত বিদঘুটে সেটা মেশিনের জন্য ততটাই সহজবোধ্য।C এমন একটা ভাষা যেটা একই সাথে মানুষ ও মেশিন উভয়ের জন্যই সহজবোধ্য।এজন্য C তে লেখা কোন প্রোগ্রাম অন্য ভাষা যেমন জাভাতে লেখা একই প্রোগ্রামের তুলনায় অনেক দ্রুত চলে।এখন কথা হল এতসব সুবিধার ফলাফল কি ?? আপনার অপারেটিং সিস্টেমটা সেটা হোক উইন্ডোজ,লিনাক্স বা ম্যাকিনটোশ, এটা কিন্তু C তে লেখা।বিশ্বাস হয় না ? লিনাক্সের সোর্স কোডটা দেখে নিন না হয়:)। আপনার কম্পিউটারের কোন ডিভাইস যেমন হার্ডডিস্ক, কিবোর্ড, মাউস বা বাইরের কিছু যেমন ধরুন ডিজিটাল ক্যামেরা,প্রোজেক্টর বা আপনার পেনড্রাইভটা এগুলোর জন্য যে ড্রাইভার লাগে সেগুলোও C তে লেখা হয় মূলত।তাই বোঝাই যায় ইনার গায়ের জোর মাশাল্লাহ খারাপ না।:):)
অনেক কথা হল।এখন আমরা দেখে নিই, C তে কোড করতে গেলে আমাদের কি কি লাগবে।প্রথানেই লাগবে একটা IDE (Integrated Development Environment)।সংক্ষেপে বলতে গেলে IDE হল একটা যায়গা যেখানে আপনি কোড লিখবেন,লেখা কোডটা কম্পাইল করতে পারবেন ও এক্সিকিউটেবল প্রোগ্রাম বানাতে পারবেন। C এর জন্য অনেক এরকম কম্পাইলার সংযুক্ত IDE আছে।যেমন, মাইক্রোসফট ভিজুয়াল স্টুডিও,টার্বো সি,কোডব্লকস,জেনি ইত্যাদি।মাইক্রোসফট ভিজুয়াল স্টুডিও,টার্বো সি শুধু উইন্ডোজের জন্য,জেনি লিনাক্সের জন্য।কোডব্লকস সকল প্লাটফর্মের জন্যই আছে।তাই আমি এটা ব্যবহার করতেই উৎসাহিত করব।CodeBlocks ডাউনলোড করতে পারবেন ওদের সাইট থেকে।ইন্সটল কিভাবে করতে হবে তা মনে হয় বলার দরকার নেই কারন এটা সবাই পারবে।আর একটা কথা।তা হল টার্বো সি কে সোজা কথায় ডাস্টবিনে পাঠান।২০১১ সালে এসেও অনেকে নব্বইয়ের দশকের ঐ ডসমোডের প্রোগ্রামটাকে নিয়ে কেন পড়ে থাকতে পছন্দ করেন সেটা আমার বোধগম্য নয়।আমি এই সিরিজটা যদি চালিয়ে যেতে পারি তাহলে এখানে যে কোডগুলো ব্যবহার করব সেগুলো GCC কম্পাইলারে কম্পাইল করা।কাজেই অন্য কম্পাইলারে এটা কম্পাইল করার আগে কিছু মোডিফিকেশন করতে হবে।তা না হলে একগাদা এরর দেখাবে।
এই লেখার উদ্দেশ্য নতুনদের প্রোগ্রামিং ভীতিটা কিছুটা হলেও দূর করার চেস্টা করা।তাই বলে রাখা ভাল যে সি শেখার জন্য এটা বা এমন টিউটোরিয়াল কখনোই যথেস্ট নয়।ভাল করে শিখতে হলে অবশ্যই এক বা একাধিক ভালো বইয়ের শরনাপন্ন আপনাকে হতেই হবে।তবে বই সিলেকশানের ব্যাপারে আমার সাথে হয়ত অনেকের দ্বিমত থাকতে পারে।আমার ব্যক্তিগত মতামত হল সি শেখার জন্য বাজারে যে বাংলা বইগুলো পাওয়া যায় ঐগুলোর দিকে না যাওয়াটাই ভালো। বাজারে যে বাংলা বইগুল পাওয়া যায় সেখানে শুধু শুধুই সহজ জিনিসগুলকে কঠিন বানানো হয়েছে।আমি Herbert Schildt এর লেখা C: The Complete Reference বইটা পছন্দ করি।আমি না পৃথিবীর বেশিরভাগেরই এটা পছন্দ।তবে Boss হতে হলে C এর জনক ডেনিস রিচির The C Programming Language বইটা পড়তে হবেই।তবে এই বইটা বোঝার জন্য খুব সহজ হবে না শুরুতে।বইয়ের দোকানে বা ইন্টারনেটে দুই যায়গাতেই দুইটা বই পেতে খুব একটা সমস্যা হবে না।:)
যাইহোক অনেক কথা হল।এখন আমরা সি তে আমাদের প্রথম প্রোগ্রামটা লিখে ফেলি আর বুঝে ফেলি কোডের ভিতরের কাহিনী যেটা ভালো করে বোঝাটা খুব বেশি পরিমানে জরুরি।
আচ্ছা দেখি এবার। প্রথম লাইন "# include<stdio.h> "।এটা দিয়ে লাইব্রেরি সাপোর্ট আপনার কোডে অন্তর্ভুক্ত করা হয়।এটা লেখার মানে হল কম্পাইলারকে বলা যে তোমার কাছে যে বিশাল লাইব্রেরিটা আছে তার ভিতর থেকে আমি stdio বইটা (:)) ব্যবহার করতে চাই।আমরা যেটাকে বই বললাম সেটা আসলে আমাদের কাজ সহজ করার জন্য আগে থেকে লিখে রাখা কিছু ফাংশনের একটা সংকলন।বিভিন্ন কাজগুলোর প্রকার অনুযায়ী এরকম অসংখ্য সংকলন আমাদের ঐ লাইব্রেরিতে আছে।যেমন, গানিতিক হিসাবের জন্য math, সময় বিষয়ক কাজের জন্য time ইত্যাদি আর কি।এখানে আমি যে সংকলনের কথা বলেছি এটা দুইটা ফাইলে থাকে মূলত।অর্থাৎ stdio এর জন্য আমাদের লাইব্রেরিতে দুইটা ফাইল আছে।একটা stdio.h অন্যটা stdio.c ।stdio.h এ থাকে stdio এর যাবতীয় ফাংশনের prototype বা সোজা বাংলায় নাম।আমরা এজন্যই হেডার ফাইলটা include করি।এটা করলে আমাদের কোডে আমরা যদি এটার ভিতরের কোন ফাংশন ব্যবহার করি তাহলে কম্পাইলার stdio.h এ খোজে যে ফাংশনের নামটা আছে কিনা।যদি থাকে তাহলে সে stdio.c তে ঐ ফাংশানের যে বিস্তারিত কোড লেখা আছে ওখানে প্রোগ্রামকে পাঠিয়ে দেয়।আর ফাংশন যদি না থাকে হেডার ফাইলে, তাহলে এরর দেখাবে।এখানে কনসেপ্ট টা মোটামুটি এরকম।কম্পাইলার ভেদে বিভিন্নভাবে ইমপ্লিমেন্ট করা হয় এটা।
এরপর আমরা আসব main() ফাংশনে।ফাংশন টার্মটা অনেকবার ব্যবহার করলাম কিন্তু বলা হয়নি ফাংশন কি।ফাংশন নিয়ে পরে বিস্তারিত আরেকটা পোস্ট লিখতে হবে।আপাতত যেটুকু লাগবে সেটা বলি।আমরা গণিতে যে ফাংশন পড়ে এসেছি সেখানে কি ছিল একটু মনে করি।আমরা f(x)= some terms of x এভাবে শিখেছি তাইনা ? এখানে x এর কোন মানের জন্য ফাংশন আমাদের একটা সংখ্যা রেজাল্ট দিত।অর্থাৎ ফাংশন কিছু একটা নেয় ও একটা রেজাল্ট আমাদের দেয়।এখানেও একই কনসেপ্ট।একটা ফাংশন কিছু একটা (parameter1 , parameter 2 , ... parameter n) নিবে ও হিসাব নিকাশ শেষে কিছু আমাদেরকে ফেরত দিবে মানে Return করবে।ফাংশনের শুরু ও শেষ হয় সেকেন্ড ব্রাকেট দিয়ে।
main() একটা ফাংশন।সকল প্রোগ্রামের কার্যকলাপ এই ফাংশন থেকে শুরু হয়। main() এ দেখা যাচ্ছে প্যারামিটার লিস্ট ফাঁকা।কাজেই এটা কোন প্যারামিটার নেয় না(আসলে নেয় ,আমরা পরে দেখব)।এজন্য ব্রাকেটের ভিতর আমরা ফাঁকা রাখি বা void লিখি।main() এর আগে int লেখা দেখা যাচ্ছে।এটার মানে হচ্ছে main() ফাংশন একটা integer Return করে এবং অবশ্যই সেটা শুন্য।তাই আমরা main() এর শেষ কথাটা লিখেছি Return 0.এই হল মোটামুটি কথাবার্তা।
এতক্ষন যা বললাম সেটার একটা উদাহরন আমরা দেখব এবার।কনসোল স্ক্রীনে কোনকিছু প্রিন্ট করতে বা কোন লেখা দেখাতে আমরা printf(string) ফাংশন ব্যবহার করি।এটার প্যারামিটারের যায়গাতে আমি string নামে একটা শব্দ লিখেছি।আমরা এটা সম্পর্কে পরে জানবো।আজ আপাতত এটা জানি যে,string হল দুপাশে ডাবল কোট দিয়ে লেখা একটা বাক্য।printf ফাংশন ঐ ডাবল কোটের ভিতর যেটা পাবে ওটা কনসোল স্ক্রীনে প্রিন্ট করবে।হ্যাঁ, এখন একটু কথা আছে।এই ফাংশনটা stdio.h এ আছে।কাজেই আমরা এটা কল করলেই সে প্রিন্ট করার কাজটা করে দেয়।আমরা যদি লাইব্রেরি ব্যবহার না করতাম তবে একটা কিছু প্রিন্ট করতে আমাদের অনেক বড় ও জটিল কোড লিখতে হত।আর আমরা যদি # include<stdio.h> লাইনটা না লিখতাম তাহলে কম্পাইলার printf ফাংশনকে চিনতে পারতো না।ফলে এরর দেখাত।printf এর প্যারামিটারে ডাবল কোটের ভিতর আমরা লিখেছি "Hello C ...\n"।কাজেই বোঝাই যাচ্ছে আমাদের প্রোগ্রাম কনসোল স্ক্রীনে Hello C ... লেখাটা প্রিন্ট করবে।দেখি করে কি না ...
আজকে এ পর্যন্তই।সকলের উৎসাহ পেলে আগামী পর্বও আসবে খুব শীঘ্রই।কারো কোন প্রশ্ন থাকলে বলবেন।আমি সাধ্যমত উত্তর দিতে চেস্টা করব। আর ভুল পেলে অবশ্যই ধরিয়ে দিবেন।তাতে সবারই উপকার হবে। 🙂
* একই সাথে সামহয়্যারইনব্লগে প্রকাশিত
আমি অয়ন। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর 3 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 6 টি টিউন ও 56 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি অয়ন।ব্লগিং করতে পছন্দ করি সত্যি কিন্তু আমি টেক ব্লগার নই।যেহেতু এটা টেক ব্লগ তাই আমাকে চেস্টা করতে হবে টেক ব্লগারের অভিনয় করার।এই মুহূর্তে ঠিক জানিনা কতটুকু সফল অভিনয় করতে পারব :)।পড়াশোনা আপাতত বুয়েটের সিএসই ডিপার্টমেন্টে,ফাইনাল ইয়ার।আর বেশিদিন হয়তো ছাত্র থাকা হবে না,মাত্র এক বছর কিন্তু ছাত্র হয়ে থাকতে পারলেই...
নতন কম্প্টিারের মত পরাতন কম্পিইটার চলেনা কেন?