Friday, September 20, 2019

C Programming Level beginner 01

প্রোগ্রামিং এর হাতেখড়ি (পর্ব-১)

আজকে হঠাৎ মোবাইলে একটি গেম খেলার সময় মনে হল আমরা কেন প্রোগ্রামিং শিখব সেটা নিয়ে কিছু লিখা যায়। মূলত যাদের প্রোগ্রামিং নিয়ে খুব সামান্য ধারণা আছে এবং যারা শিখতে চাও তাদের প্রোগ্রামিং সম্পর্কে আগ্রহী করে তোলার জন্যই এ লেখাটি।
এক কথায় প্রোগ্রামিং মানে হল প্রোগ্রাম বা সফটওয়্যার বানানো। আমরা কম্পিউটারে যা ব্যবহার করি সবই একেকটা প্রোগ্রাম। একটি নির্দিষ্ট ভাষা ব্যবহার করে এগুলো লেখা হয়। যে ভাষা ব্যবহার করে এগুলো লিখা হয় তাকে প্রোগ্রামিং ল্যাংগুয়েজ বলে।
প্রোগ্রামিং শিখতে গেলে প্রথমে যেই প্রশ্নটা আসবে সেটা হল কেন আমরা প্রোগ্রামিং শিখব? উত্তর খুব সোজা! কম্পিউটারকে চালানোর জন্য প্রোগ্রামিং শিখব! তুমি হয়ত বলতে পার এই যে মিডিয়া প্লেয়ারে দুইটা ক্লিক করলেই গান চালু হয়ে যাচ্ছে অথবা মাউসের দুটো ক্লিকেই যে কোন গেমস আমি খেলতে পারছি কিন্তু প্রোগ্রামটা কোথায়? 

কিন্তু সত্যি কথা হল কম্পিউটার একটা বোকা যন্ত্র। নিজে কিছু করার ক্ষমতা এর নেই। একে দিয়ে কাজ করিয়ে নিতে হয়। তুমি চাইলে ১০০ মানুষের কাজ এই কম্পিউটার দিয়ে করিয়ে নিতে পার। আর করিয়ে নেওয়াটাই হল প্রোগ্রামিং। অর্থাৎ একটি নির্দিষ্ট প্রোগ্রাম সেট করে দেওয়ার পরই তুমি যে কোন কাজ করতে পারছ। যেমন তুমি গান শুনতে পারছ, এনিমেশন বানাতে পারছ অথবা গেমস খেলতে পারছ। তাহলে কেমন হয় যদি তুমি নিজেই একটা প্রোগ্রাম বানিয়ে ফেলো? হতে পারে সেটা গেমস অথবা অন্য কিছু।


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


অনেকে হয়ত বলে থাকে যে প্রোগ্রামিং শেখার জন্য কম্পিউটার সায়েন্সেই পড়া লাগে। বিষয়টাকে আমি একটু অন্যভাবে দেখি। কম্পিউটার সায়েন্সে পড়ার জন্য প্রোগ্রামিং শেখাটা “মাস্ট” কিন্তু প্রোগ্রামিং শিখতে হলে কম্পিউটার সায়েন্সে পড়তে হবে এরকম কোন কথাই নেই। যদি থাকত তাহলে বিল গেটস থেকে শুরু করে মার্ক জাকারবার্গ বা বিভিন্ন প্রোগ্রামাররা কিন্তু কম্পিউটার সায়েন্সে গ্রাজুয়েটই থাকতেন। পড়ালেখা ছেড়ে প্রোগ্রামিং করতেন না! এমনকি বিভিন্ন প্রোগ্রামিং কন্টেস্টের হাই রেটেড কোডারদের অনেকেই হাই স্কুল পর্যন্ত শেষ করে নি! মূলত বিষয়টা হল তুমি আগ্রহ পাচ্ছ কি না। হয়ত দেখা গেল আর্টসে পড়ার পরও তোমার প্রোগ্রামিং ভাল লেগে যেতে পারে। একবার ভাল লাগলেই হল। বাকি কাজ তুমি নিজেই করে ফেলবে।


তোমার ব্রেইনের চিন্তা শক্তি বাড়িয়ে দিবে প্রোগ্রামিং!
অনেকে হয়ত আবার বলে বসতে পারে আর্টসে পড়ে প্রোগ্রামিং এর মত কাজ করে টাইম লস করার মানে কি?  কিন্তু প্রোগ্রামিং মানে হল লজিক ধরে ধরে সমস্যার সমাধান করা। ধর, তুমি একটা সমস্যায় পড়েছ। এখন সমস্যা সমাধান করতে হবে। একের পর এক বিভিন্ন স্টেপ অনুসরণ করেই তুমি সলিউশনে পৌঁছাবে। অর্থাৎ তোমাকে চিন্তা করতে হবে। যে কোন সমস্যার একদম মূলে গিয়ে ভাবতে হবে। কোন লজিকে গেলে সমস্যা দ্রুত সমাধান করা যাবে তা নিয়ে তোমার মস্তিষ্ক ভাববে। এতে করে যেটা হবে সেটা হল তোমার মস্তিষ্ক অধিক সক্রিয় হবে। ব্রেইনের লজিক্যাল পার্ট আরও বেশি ভাবতে শিখবে। ফলে সেটা শুধু প্রোগ্রামিং এর সমস্যা সমাধানেই কাজে লাগবে তা না বরং অন্য যে কোন কিছু মনে রাখা বা শেখার ক্ষেত্রে দ্রুত আয়ত্ত্ব করতে সাহায্য করবে। বলতে গেলে তোমার ব্রেইনের চিন্তা শক্তি বাড়িয়ে দিবে প্রোগ্রামিং।

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


প্রোগ্রামিং শেখার আরেকটা সুফলের কথা জানিয়ে রাখি। আমরা পড়ালেখা করি জানার জন্য সত্য কিন্তু এখন সমাজের অবস্থাটা অনেকটা এমন হয়ে গেছে তোমার পড়া-লেখার উপর নির্ভর করছে চাকরীর ভবিষ্যৎ! তো একটা কথাই শুধু বলব- তুমি যদি ভাল প্রোগ্রামার হও তাহলে তোমাকে কষ্ট করে চাকরী খুঁজতে হবে না বরং চাকরীই তোমাকে খুঁজে বের করে নিবে। তবে শুধুমাত্র গুগল-মাইক্রোসফট বা ভাল সফটওয়্যার ফার্মে চাকরী করার জন্যই নয় শেখার জন্য বা মজা পাওয়ার জন্যই প্রোগ্রামিং শেখাটা উচিত।



আরেকটা কথা বলে রাখা ভাল, কয়েকদিন চেষ্টা করলেই তুমি যে কোন প্রোগ্রামিং ল্যাংগুয়েজ শিখে ফেলতে পারবে। তবে ভাল প্রোগ্রামার হতে গেলে শুধুমাত্র প্রোগ্রামিং ল্যাঙ্গুয়েজে শিখলেই হবে না বরং লজিক ডেভেলপ করে সমস্যা সমাধান করা জানতে হবে। আর তা করতে হলে গণিত খুব ভাল মত জানতে হবে কিংবা এলগরিদম বুঝতে হবে। অর্থাৎ যেই বিষয়টা বুঝাতে চাইছি তা হল এক সপ্তাহ বা দুই সপ্তাহ চেষ্টা করেই তুমি প্রোগ্রামিং শিখতে পারবে না বরং কয়েক মাস চেষ্টার ফলেই যে কোন ল্যাংগুয়েজ এবং তার এপ্লিকেশন তুমি ব্যবহার করে ফেলতে পারবে। সুতরাং একটাই কথা, প্রোগ্রামিং এর উপর সময় দিতে হবে।
আর প্রোগ্রামিং শিখতে হলে প্রথমেই যেটা আসবে সেটা হল সি প্রোগ্রামিং। তো পরের পর্বগুলোতে সি প্রোগ্রামিং সম্পর্কে একদম বেসিক কিছু ধারণা দিতে চেষ্টা করব।

তো একবার চেষ্টা করেই দেখ না প্রোগ্রামিং খুব সোজা নাকি একটু কঠিন?

প্রোগ্রামিং ল্যাঙ্গুয়েজ বলতে কি বুঝায়?

প্রোগ্রামিং ল্যাঙ্গুয়েজ হচ্ছে এমন একটি আনুষ্ঠানিক ভাষা বা অনেক গুলো নির্দিষ্ট নিয়মাবলির সমষ্টি যার মাধ্যমে বিভিন্ন ধরনের আউটপুট বের করা বা পাওয়া সম্ভব।

প্রোগ্রামিং শেখার আগে আপনাকে অবশ্যই জানতে হবে যে বিষয়গুলো

C আর C++ দুটো আলাদা ল্যাঙ্গুয়েজ, তবে এদের মধ্যে যথেষ্ট মিল রয়েছে। মূল পার্থক্যটা হচ্ছে যে C হচ্ছে স্ট্রাকচারড প্রোগ্রামিং ল্যাঙ্গুয়েজ (structured programming language) আর C++ হচ্ছে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ (object oriented programming language)। এগুলো এখন না বুঝলে চিন্তিত হয়ো না, প্রোগ্রামিং শিখতে থাকো (প্রথমে সি, পরে সি প্লাস প্লাস), নিজেই বুঝে যাবে।



কম্পিউটার তো আসলে গণনা করার যন্ত্র, তাই না? যদিও আমরা এটি দিয়ে গান শুনি, ভিডিও দেখি, গেমস খেলি, আরও নানা কাজ করি। আসলে শেষ পর্যন্ত কম্পিউটার বোঝে শূন্য (0) আর একের (1) হিসাব। তাই ব্যবহারকারী (user) যা-ই করুক না কেন, কম্পিউটার কিন্তু সব কাজ গণনার মাধ্যমেই করে। কম্পিউটারের ব্যবহার এত ব্যাপক হওয়ার পেছনে অন্যতম কারণ হচ্ছে নানা রকম সফটওয়্যার দিয়ে নানা ধরনের কাজ করা যায় কম্পিউটারে। এসব সফটওয়্যার তৈরি করতে হয় প্রোগ্রাম লিখে অর্থাৎ কী হলে কী করবে এটি প্রোগ্রামের সাহায্যে কম্পিউটারকে বোঝাতে হয়।

একসময় কিন্তু কেবল 0 আর 1 ব্যবহার করেই কম্পিউটারের প্রোগ্রাম লিখতে হতো। কারণ কম্পিউটার তো 0, 1 ছাড়া আর কিছু বোঝে না, আর কম্পিউটারকে দিয়ে কোনো কাজ করাতে চাইলে তো তার ভাষাতেই কাজের নির্দেশ দিতে হবে। 0, 1 ব্যবহার করে যে প্রোগ্রামিং করা হতো, তার জন্য যে ভাষা ব্যবহৃত হতো, তাকে বলা হয় মেশিন ল্যাঙ্গুয়েজ। তারপর এল অ্যাসেম্বলি ল্যাঙ্গুয়েজ। এতে প্রোগ্রামাররা কিছু ইনস্ট্রাকশন যেমন ADD (যোগ), MUL (গুণ) ইত্যাদি ব্যবহারের সুযোগ পেল। আর এই ভাষাকে 0, 1-এর ভাষায় নিয়ে কাজ করাবার দায়িত্ব পড়ল অ্যাসেম্বলারের ওপর, প্রোগ্রামারদের সে বিষয়ে ভাবতে হতো না। কিন্তু মানুষের চাহিদার তো শেষ নেই। নতুন নতুন চাহিদার ফলে নতুন নতুন জিনিসের উদ্ভব হয়। একসময় দেখা গেল যে অ্যাসেম্বলি ল্যাঙ্গুয়েজ দিয়েও কাজ করা ঝামেলা হয়ে যাচ্ছে। তাই বড় বড় প্রোগ্রাম লিখার জন্য আরও সহজ ও উন্নত নানা রকম প্রোগ্রামিং ভাষা তৈরি হলো। যেমন - ফরট্রান (Fortran), বেসিক (Basic), প্যাসকেল (Pascal), সি (C)। তবে এখানেই শেষ নয়, এরপর এল আরও অনেক ল্যাঙ্গুয়েজ, যার মধ্যে অন্যতম হচ্ছে, সি প্লাস প্লাস (C++), ভিজ্যুয়াল বেসিক (Visual Basic), জাভা (Java), সি শার্প (C#), পার্ল (Perl), পিএইচপি (PHP), পাইথন (Python), রুবি (Ruby)। এখনো কম্পিউটার বিজ্ঞানীরা নিত্যনতুন প্রোগ্রামিং ভাষা তৈরি করে যাচ্ছেন। প্রোগ্রামাররা এসব ভাষা ব্যবহার করে প্রোগ্রাম লেখেন আর প্রতিটি ভাষার রয়েছে আলাদা কম্পাইলার, যার কাজ হচ্ছে ওই প্রোগ্রামকে কম্পিউটারের বোধগম্য ভাষায় রূপান্তর করা, তাই এটি নিয়ে প্রোগ্রামারদের ভাবতে হয় না।

প্রোগ্রাম লিখার সময় প্রোগ্রামারকে তিনটি প্রধান কাজ করতে হয়। প্রথমে তার বুঝতে হয় যে সে আসলে কী করতে যাচ্ছে, মানে তার প্রোগ্রামটি আসলে কী কাজ করবে। তারপর চিন্তাভাবনা করে এবং যুক্তি (logic) ব্যবহার করে অ্যালগরিদম দাঁড় করাতে হয়। মানে, লজিকগুলো ধাপে ধাপে সাজাতে হয়। এর পরের কাজটি হচ্ছে অ্যালগরিদমটাকে কোনো একটি প্রোগ্রামিং ভাষায় রূপান্তর করা, যাকে আমরা বলি কোডিং করা। একেক ধরনের কাজের জন্য একেক ল্যাঙ্গুয়েজ বেশি উপযোগী।

আমরা প্রোগ্রামিংয়ের মৌলিক কিছু জিনিস শেখার চেষ্টা করব এবং প্রোগ্রামগুলো আমরা লিখব সি ল্যাঙ্গুয়েজ ব্যবহার করে। আমি ধরে নিচ্ছি, তোমরা কম্পিউটার ব্যবহার করে অভ্যস্ত এবং প্রোগ্রামিং জিনিসটার সঙ্গে সম্পূর্ণ অপরিচিত। আর সি ল্যাঙ্গুয়েজ ব্যবহার করার পেছনে কারণ হচ্ছে, এটি বেশ পুরোনো হলেও অত্যন্ত শক্তিশালী ও জনপ্রিয় ল্যাঙ্গুয়েজ। প্রোগ্রামিংয়ের মৌলিক জিনিসগুলো বোঝার জন্য সি ভাষা অত্যন্ত সহায়ক। আর জনপ্রিয় সব প্রোগ্রামিং প্রতিযোগিতায় যে অল্প কয়েকটি ল্যাঙ্গুয়েজ ব্যবহার করা যায়, তার মধ্যে সি অন্যতম। আমরা অবশ্য সি ল্যাঙ্গুয়েজের পুরোটা এখানে শিখব না, কেবল মৌলিক বিষয়গুলো নিয়ে কাজ করতে যা দরকার সেটি দেখব। এই বইটি পড়ার পরে তোমরা কেবল সি-এর জন্য কোন বই পড়তে পারো অথবা অন্য কোনো ভাষা (যেমন– সি প্লাস প্লাস, জাভা কিংবা পাইথন) শেখা শুরু করে দিতে পারো। বইয়ের পরিশিষ্ট অংশে আমি কিছু বইয়ের নাম দিয়েছি, যা তোমাদের কাজে লাগবে।

বইটি পড়তে তোমাদের তিনটি জিনিস লাগবে, কম্পিউটার (ইন্টারনেট সংযোগ থাকলে ভালো হয়), সি ল্যাঙ্গুয়েজের কম্পাইলার এবং যথেষ্ট সময়। তাড়াহুড়ো না করে দুই থেকে তিন মাস সময় নিয়ে বইটি পড়লে ভালো হয়। প্রোগ্রামিং শেখার জন্য কেবল পড়াই যথেষ্ট নয়, পাশাপাশি কোডিং করতে হবে। বইয়ের প্রতিটি উদাহরণ নিজে নিজে কোড করে কম্পিউটারে চালিয়ে দেখতে হবে। যখনই আমি কোনো প্রশ্ন করব, সেটি নিয়ে চিন্তা করতে হবে। তার জন্য যদি দু-তিন ঘণ্টা বা দু-তিন দিন সময় লাগে লাগুক, কোনো ক্ষতি নেই, বরং দীর্ঘ সময় কোনো সমস্যার সমাধান নিয়ে চিন্তা করার অভ্যাসটি খুব জরুরি। কোনো অধ্যায় পুরোপুরি বোঝার আগে পরের অধ্যায় পড়া শুরু করা যাবে না। আবার কোনো অংশ যদি তোমার কাছে খুব সহজ মনে হয়, সেই অংশ ঠিকভাবে না পড়ে এবং প্রোগ্রামগুলো না করে পরের অংশে চলে যেয়ো না কিন্তু। সাধারণ পড়ালিখার সঙ্গে প্রোগ্রামিং শেখার অনেক পার্থক্য। এখানে পড়ার সঙ্গে সঙ্গে কাজ করাও জরুরি। আর এই বই পড়েই কিন্তু তুমি প্রোগ্রামার হয়ে যাবে না, বইটি পড়ে তুমি প্রোগ্রামার হওয়া শুরু করবে।

এবার আসা যাক, কম্পাইলার পাবে কোথায়? সি-এর জন্য বেশ কিছু কম্পাইলার আছে। তুমি যদি লিনাক্স কিংবা ম্যাক ব্যবহারকারী হও, তবে সবচেয়ে ভালো হচ্ছে gcc। অধিকাংশ লিনাক্সেই এটি আগে থেকে ইনস্টল করা থাকে। তোমার কম্পিউটারে না থাকলে এটি ইনস্টল করে নিতে হবে। আর উইন্ডোজ ব্যবহার করলে তুমি Codeblocks (http://www.codeblocks.org/) ব্যবহার করতে পারো। এটি একটি ফ্রি ও ওপেন সোর্স IDE (Integrated Development Environment) এবং ম্যাক আর লিনাক্সেও চলে। এমনিতে সাধারণ কোনো টেক্সট এডিটর (যেমন: নোটপ্যাড, জিএডিট, কেরাইট) ব্যবহার করে কোড লিখে সেটি কম্পাইলার দিয়ে কম্পাইল করে রান করা যায়। তবে অধিকাংশ আইডিই (IDE) গুলোতেই নিজস্ব টেক্সট এডিটর ও কম্পাইলার থাকে। প্রোগ্রাম রান করার ব্যবস্থাও থাকে। এ ছাড়াও নানা ধরনের টুলস্ থাকে।

Codeblocksটা সরাসরি তুমি http://www.codeblocks.org সাইট থেকে ডাউনলোড ও ইনস্টল করতে পারো। Downloads পেইজে Binaries-এ গেলে উইন্ডোজের জন্য তুমি দুটি অপশন দেখবে: codeblocks-10.05-setup.exe ও codeblocks-10.05mingw-setup.exe। তুমি দ্বিতীয়টি ডাউনলোড করবে (74.0 MB)। আর ইনস্টল করার কাজটি অন্য যেকোনো সফটওয়্যার বা গেমসের মতোই। যারা উবুন্টু ব্যবহার করো, তারা Ubuntu Software Center (Applications > Ubuntu Software Center) থেকে এটি ডাউনলোড করতে পারো।

প্রোগ্রামিং চর্চার বিষয়। ইন্টারনেটে বেশ কিছু ওয়েবসাইট আছে, যেখানে প্রচুর সমস্যা দেওয়া আছে যেগুলো প্রোগ্রামের সাহায্যে সমাধান করতে হয়। সব জায়গাতেই তুমি সি ল্যাঙ্গুয়েজে প্রোগ্রামিং করতে পারবে। এর মধ্যে কিছু কিছু ওয়েবসাইট আবার নিয়মিত প্রোগ্রামিং প্রতিযোগিতারও আয়োজন করে। এসব প্রতিযোগিতায় অংশগ্রহণ নিঃসন্দেহে তোমার প্রোগ্রামিং-দক্ষতা বৃদ্ধি করবে আর সেই সঙ্গে বিশ্বের নানা দেশের প্রোগ্রামারদের সঙ্গে মেশারও সুযোগ করে দেবে। অবশ্য প্রোগ্রামিং প্রতিযোগিতায় ভালো করতে হলে কেবল প্রোগ্রামিং জানলেই চলবে না, গাণিতিক দক্ষতাও যথেষ্ট গুরুত্বপূর্ণ।

প্রতিটি প্রোগ্রামের নিচে আমি একটি নম্বর দিয়েছি। প্রোগ্রামের নম্বর যদি ২.৫ হয়, তার মানে হচ্ছে এটি দ্বিতীয় অধ্যায়ের পাঁচ নম্বর প্রোগ্রাম।

এটি কিন্তু কোনো গল্পের বই নয়। তাই বিছানায় শুয়ে-বসে পড়া যাবে না। পড়ার সময় কম্পিউটার চালু রাখতে হবে এবং প্রতিটি উদাহরণ সঙ্গে সঙ্গে প্রোগ্রাম লিখে দেখতে হবে, কোনো সমস্যা সমাধান করতে দিলে তখনই সেটি সমাধানের চেষ্টা করতে হবে। মনে রাখবে, যত বেশি প্রোগ্রামিং তত বেশি আনন্দ।

আশা করছি, তুমি ধৈর্য নিয়ে বাকি অধ্যায়গুলো পড়বে এবং সবগুলো প্রোগ্রাম কম্পিউটারে চালিয়ে দেখবে। তোমার জন্য শুভ কামনা।

No comments:

Post a Comment