- কম্পিউটার প্রোগ্রামিং কি?
- প্রোগ্রামিং কেন শিখব?
- আমি কি প্রোগ্রামিং শিখতে পারবো?
- কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখা উচিত?
- কিভাবে শিখব? কোথায় শিখব?
কম্পিউটার প্রোগ্রামিং কি?
বলুন তো, Power on করা মাত্রই একটি কম্পিউটার কিভাবে চলতে শুরু করে? হ্যাঁ, ঠিকই বলেছেন, অবশ্যই বিদ্যুৎ প্রবাহের কারণে এমনটা ঘটে, তাই না? কম্পিউটার, মোবাইল এবং এমন আরো যত ইলেকট্রনিক ডিভাইস আছে সবই যে বৈদ্যুতিক প্রবাহ দ্বারা চলে এটা তো সবারই জানা।
কিন্তু এবার আমি আপনার কম্পিউটার থেকে কিছু ফাইল মুছে দেব। তারপর যদি কম্পিউটারটি আবার চালু করি তাহলে কম্পিউটারের আলো জ্বলে উঠবে ঠিকই, কালো স্ক্রিনে সাদা কিছু লেখাও আসবে, কিন্তু আমাদের অতি পরিচিত অপারেটিং সিস্টেমটি (Operating System বা সংক্ষেপে OS) আর লোড হবে না। আর OS ঠিকভাবে না আসা পর্যন্ত আপনি আর গান শুনতে পারবেন না, গেম খেলতে পারবেন না, লেখালেখি, ইন্টারনেট ব্রাউজিংয়ের মতো মজার মজার কাজগুলি করতে পারবেন না। বিদ্যুৎ আছে, কম্পিউটারটিও বহাল তবিয়তে আছে, তবু শুধু মাত্র কিছু ফাইল মুছে দেয়ার কারণে কেন এমন হলো?
ব্যপারটা হলো – সকল ইলেকট্রনিক ডিভাইসের মত কম্পিউটারেরও নিজস্ব কোন বুদ্ধিমত্তা নেই, নিজে নিজে কোন কাজ বা সিদ্ধান্ত নেয়ার ক্ষমতা নেই। তাহলে কম্পিউটার এত কাজ কিভাবে করে? কারণ কোন কাজ কিভাবে করতে হবে এটা বোঝানোর জন্য কম্পিউটার প্রোগ্রামারেরা কিছু নির্দেশনা বা কমান্ড কম্পিউটারের মেমরীতে (Memory) আগে থেকেই দিয়ে রেখেছে। এই নির্দেশগুলির সমষ্ঠিগত রূপই হচ্ছে কম্পিউটার প্রোগ্রাম। ওই যে ফাইলগুলি মুছে দিলাম সেই ফাইলগুলির ভেতরে OS সঠিকভাবে চলার জন্য গুরুত্বপূর্ণ নির্দেশনা দেয়া ছিল। তাই আপাত দৃষ্টিতে কিছু নিরীহদর্শন ফাইল মুছে দেয়াতে আপনার কম্পিউটারটি আক্ষরিক অর্থে চলছে ঠিকই, কিন্তু সহজে কাজ করার মতো অবস্থায় আর নেই। আর এই অতি প্রয়োজনীয় কম্পিউটার প্রোগ্রামগুলি লেখা হয় প্রোগ্রামিং ল্যাঙ্গুয়েজ (Programming Language) দ্বারা।
প্রোগ্রামিং ল্যাঙ্গুয়েজ হচ্ছে কম্পিউটারের ভাষা। মানুষ যেমন মানুষের বিভিন্ন ভাষা বুঝতে পারে, কম্পিউটার বা যে কোনো ইলেকট্রনিক ডিভাইস সেভাবেই বানানো হয় যেন সে অন্তত একটি প্রোগ্রামিং ল্যাংগুয়েজ বুঝতে পারে। মানুষের ভাষা যেমন শিখতে হয় তেমনি কম্পিউটারকেও কথা শোনাতে কম্পিউটারের ভাষা শিখতে হয়। আর যারা কম্পিউটারের ভাষা জানে তারাই হচ্ছে কম্পিউটার প্রোগ্রামার (Programmer)। একজন কম্পিউটার প্রোগ্রামারের কাজ হচ্ছে বিভিন্ন ইলেক্ট্রনিক ডিভাইসের জন্য প্রোগ্রামিং ভাষা ব্যবহার করে প্রয়োজনীয় নির্দেশাবলী বা কমান্ডগুলো লিখে দেয়া, যার ফলে ইলেক্ট্রনিক ডিভাইসগুলি বুঝতে পারে কখন কোন কাজটি করতে হবে। আর এই প্রোগ্রামগুলির কারণে ব্যবহারকারীরা কম্পিউটার ব্যবহার করে তাদের প্রয়োজনীয় নানান কাজ খুব সহজেই করতে পারে।
সংক্ষেপে কম্পিউটার প্রোগ্রামিংয়ের ইতিহাস জানতে হলে এই চমৎকার ইনফোগ্রাফিক্সটি দেখা যেতে পারে – The World of Programming
প্রোগ্রামিং কেন শিখব?
এখন কথা হচ্ছে কম্পিউটার প্রোগ্রামিং কেন শিখতে হবে? আমরা দামী দামী গ্যাজেট কিনব আর মজা করে গান শুনব, গেম খেলব, ফেসবুকিং করব তাই না? এই সব প্রোগ্রাম তো প্রোগ্রামাররাই বানিয়ে দিচ্ছে, আমাদের এত পরিশ্রম করার দরকার কি? এই খটোমটো কম্পিউটার প্রোগামিংয়ের জগতে পা রেখে কি লাভ?
কি দরকার বা কি লাভ সেই লাভজনক উত্তরে যাওয়ার আগে একটু দার্শনিক দৃষ্টিভঙ্গি থেকে বিষয়টি ব্যাখ্যা করা যাক। একবার চিন্তা করে দেখুন তো, আপনার জীবনের যত আনন্দ বা আরামের জিনিসপত্র আছে, তা যদি ওই খটোমটো রস-কষবিহীন বিজ্ঞানীরা আবিস্কার না করতেন, ইঞ্জিনিয়াররা ডিজাইন না করতেন, আর কারিগররা তৈরি না করতেন তাহলে আপনি এই আনন্দগুলো কিভাবে করতেন? অতএব কবি যেমন লিখেছেন –
পরের কারণে স্বার্থ দিয়ে বলি
এ জীবনে মন সকলি দাও;
তার মত সুখ কোথাও কি আছে?
আপনার কথা ভুলিয়া যাও…
অতএব কাজ যত কঠিনই হোক না কেন, নিরবে নিভৃতে কাজগুলো কিন্তু করে চলেছে দুনিয়ার যত কাঠখোট্টা রসকষবিহীন ডাক্তার-প্রকৌশলী-গবেষক-বিজ্ঞানীরা। তাছাড়া আর একটু অন্যভাবে ভাবুন। আপনি কি সারা জীবন গাড়ির যাত্রী হয়ে থাকতে চান, নাকি নিজে ড্রাইভ করা শিখতে চান? অবশ্যই যাত্রী হয়ে বসে থাকার
চেয়ে গাড়ি চালাতে পারার মজাটা অনেক বেশি, তাই না? এখন এই মজাটা নেয়ার ইচ্ছা যার ভেতরে থাকবে সে অবশ্যই গাড়ি চালানো শিখতে চাইবে। তেমনি আপনার প্রয়োজনীয় কোনো কম্পিউটার প্রোগ্রাম যদি আপনি নিজেই বানিয়ে নিতে পারেন, সেটির আনন্দ কি অন্যরকম হবে না? সুতরাং সৃষ্টিশীলতার আনন্দ যারা পেতে চায়, উপভোগ করতে চায়, যত কষ্টই হোক তারা অবশ্যই সেই বিষয়টি আয়ত্ত্ব করতে সচেষ্ট হবে।
প্রোগ্রামিং শেখার দার্শনিক কারণ যদি আপনাকে উৎসাহিত করতে না পারে তো হতাশ হওয়ার কিছু নেই। এবার আসুন কিছু লাভজনক ফলিত কারণ সমূহ জেনে নিই –
- প্রোগ্রামিং শেখা আমাদেরকে যৌক্তিক চিন্তা (logical thinking) করতে শেখায়। একটি সমস্যাকে কিভাবে ছোট ছোট অংশে ভাগ করে সেটা সমাধান করতে হয় এটা প্রোগ্রামিং যারা শেখে তাদেরকে অনেক বেশি অনুশীলন করতে হয়। প্রোগ্রামিং ভাষার চর্চা মস্তিস্কের বুদ্ধিবৃত্তিক চর্চা ও চিন্তাশক্তি বাড়ানোর জন্য খুব ভালো একটি অনুশীলন।
- গণিতে যারা ভালো, কম্পিউটার প্রোগ্রামিং তাদেরকে গাণিতিক সমস্যার সমাধানে বিশেষ ভাবে সাহায্য করতে পারে। কম্পিউটার প্রোগ্রামিংয়ের মাধ্যমে বিভিন্ন গাণিতিক সমস্যার সমাধান করতে পারা ভালো প্রোগ্রামার হওয়ার অন্যতম উপায়।
- আমরা যারা ভবিষ্যতে কম্পিউটার সায়েন্স বা ইলেকট্রনিক্স নিয়ে পড়াশোনা করতে চাই, প্রোগ্রামিং শেখা তাদের জন্য আবশ্যক। আর এই শেখাটা যদি স্কুল জীবন থেকেই শুরু করা যায়, তবে কম্পিউটার সায়েন্স, ইলেকট্রনিক্স বা উচ্চতর শিক্ষায় ভর্তি হবার আগেই সে অনেকটা পথ এগিয়ে থাকবে।
- ম্যাথ অলিম্পিয়াড বা দাবা অলিম্পিয়াডের মতো জাতীয় ও আন্তর্জাতিক পর্যায়ে বিভিন্ন প্রোগ্রামিং প্রতিযোগিতায় অংশগ্রহণ করার সুযোগ তৈরি হয়।
- প্রোগ্রামবিহীন ইলেকট্রনিক ডিভাইস চিন্তা-ভাবনা যুক্তি-বুদ্ধি অনুভুতিবিহীন মানুষের মত। পৃথিবীতে প্রায় সকল ইলেকট্রনিক ডিভাইস চলতে তাই প্রোগ্রাম বা সফটঅয়্যার প্রয়োজন। প্রোগ্রামিং, সফটওয়্যার ইঞ্জিনিয়ারিং, সফটওয়্যার ডেভেলপমেন্ট, অ্যাপ্লিকেশন ডেভেলপমেন্ট, ওয়েব ডেভেলপমেন্ট, এসব অনেক বড় একটা ইন্ডাস্ট্রি। আর বড় ইন্ডাস্ট্রি মানে অনেক কাজের সুযোগ এবং অনেক কর্মসংস্থানের সুযোগ। বাকিটা নিশ্চয়ই আর বলে দিতে হবে না।
- স্কুল-কলেজের পাঠ্যপুস্তকেও এখন আইসিটি বিষয়টি অন্তর্ভুক্ত করা হয়েছে, প্রোগ্রামিং সম্পর্কেও ধারণা দেয়া হচ্ছে। আর একটা বিষয় তখনই পাঠক্রমে অন্তভুর্ক্ত হয় যখন তা জানা বর্তমান ও ভবিষ্যতের জন্য অত্যাবশ্যকীয় হয়ে ওঠে।
- নিজে নিজে কোন সফটওয়্যার বা অ্যাপ্লিকেশন বানিয়ে ফেলার মজা ও উদ্যোক্তা হয়ে আত্মপ্রকাশ করার সম্ভাবনা তো রয়েছেই। হয়তো আপনিই ভবিষ্যতের স্টিভ জবস, বিল গেটস, মার্ক জুকারবার্গ। ল্যারি পেজ, সের্গেই ব্রিন, জেফ বেজস বা জ্যাক মা ইনাদের নাম ইচ্ছা করেই লিখলাম না।
মনে আছে কি আমরা ছোটবেলায় ছবি আঁকা শিখতে যেতাম? কেন যেতাম? সবাই কি বড় আঁকিয়ে হওয়ার জন্য ছবি আঁকা শিখতে যেতাম? তা কিন্তু না। আমরা ছবি আঁকা শিখতে যেতাম কারণ আমাদের পাঠক্রমে ড্রইং বা ছবি আঁকা বিষয়টি ছিল। এছাড়া আমাদের পাঠ্যবইয়ে অনেক রকম ডায়াগ্রাম বা ছবি থাকতো, যেগুলো প্রশ্নের উত্তর লেখার সময় আঁকতে পারলে উত্তরটি ভালো হতো এবং মার্ক ভালো আসতো। অতএব যে ভালো ড্রয়িং করতে পারতো সেটা কিন্তু তাকে বারতি সুবিধা দিত, অতিরিক্ত একটা স্কিল হিসেবে কাজে লাগতো।
একইভাবে কম্পিউটারে অফিস অ্যাপ্লিকেশন চালাতে পারা বা ইন্টারনেট ব্রাউজিং করতে পারা এগুলো তো এখন বেসিক স্কিলস -এর পর্যায়ে চলে এসেছে যা প্রত্যেকেরই জানা থাকা উচিৎ। উপরন্তু দেখা যাচ্ছে উচ্চশিক্ষা, গবেষণা বা কর্মক্ষেত্রের নানান কাজে কম্পিউটার বিজ্ঞানের ছাত্র নয় এমন অনেকের-ই প্রোগ্রামিং ল্যাঙ্গুয়েজ জানার প্রয়োজন পড়ছে। আমার পরিচিত একজন জীববিজ্ঞানী যিনি গবেষণা এবং চাকুরীসূত্রে চীনে বসবাস করেন, তাকে পিএইচডি গবেষণার প্রয়োজনে পার্ল প্রোগ্রামিং ভাষাটি শিখতে ও ব্যবহার করতে হয়েছে। অতএব কম্পিউটার প্রোগ্রামিং করতে পারাটা এখন আর তেমন আহামরি কোন বিষয় নয়।
আমি কি প্রোগ্রামিং শিখতে পারবো?
সবচেয়ে কঠিন প্রশ্ন। কিন্তু বুঝতে পারলে উত্তরটা খুব সোজা। চিন্তা করে দেখুন, মানুষ একটা জিনিস কখন শেখে? যখন সেটা শেখার প্রয়োজন হয়। অথবা তখনই শেখে যখন সেটা শেখার যথেষ্ট আগ্রহ তার ভিতরে থাকে, মানে একটা প্রাকৃতিক তাড়না (natural urge) যাকে বলে।
আমার মতে সাধারণ একাডেমিক পড়াশোনা যারা করতে পারে, তাদের সকলের পক্ষে প্রোগ্রামিং শেখা সম্ভব। তবে হ্যাঁ, কম্পিউটার প্রোগ্রামিং আপনি কতদূর শিখবেন, এই জ্ঞান বা দক্ষতা আপনাকে কতদূর নিয়ে যাবে, প্রোগ্রামিংকে ক্যারিয়ার হিসেবে নিবেন কিনা সেটার জন্য নিজেকে ওই দুটো প্রশ্ন করতে হবে –
(১) এটি শেখা আপনার আসলেই প্রয়োজন কিনা?
(২) এটি শেখার জন্য যথেষ্ট আগ্রহ (সময় ও পরিশ্রম করার মানসিকতা) আপনার আছে কিনা?
এই দুটো প্রশ্নের উত্তর যদি হ্যাঁ হয় তাহলে আপনার কম্পিউটার প্রোগ্রামিং শেখা উচিত এবং সময় নষ্ট না করে আজ থেকেই শুরু করে দেয়া উচিত। আর বাঁকিরা একাডেমিক বা কর্মক্ষেত্রের প্রয়োজনে যতটুকু দরকার ততটুকু শিখতে পারেন। তবে উভয় পক্ষেরই শেখার জন্য যথেষ্ট ধৈর্য্য থাকতে হবে।
কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখা উচিত?
যারা প্রোগ্রামিংয়ের জগতে একদম নতুন, কেবল শুরু করতে যাচ্ছেন, প্রোগ্রামিং জিনিসটা কি বুঝতে চাইছেন, লজিক্যাল থিংকিং অনুশীলন করতে চাইছেন তাদের জন্য প্রথম পছন্দ হচ্ছে – সি (C)। সি কে বলা হয় মাদার অব অল প্রোগ্রামিং ল্যাঙ্গুয়েজেস। সি প্রসিডউরাল প্রোগ্রামিং মডেল অনুসরণ করে। প্রোগ্রামিং-এর কোর যারা শিখতে চান, ডাটা স্ট্রাকচার, অ্যালগোরিদম, বিভিন্ন ম্যাথ ফাংশন একেবোরে ভেঙ্গে ভেঙ্গে শিখতে চান এবং শেষ পর্যন্ত প্রোগ্রামিং প্রতিযোগিতায় (Programming contest) অংশ নিতে চান সি শেখা তাদের জন্য ফরজ কাজের মতোই গুরুত্বপূর্ণ।
তবে আপনি চাইলে পাইথন (Python) দিয়েও শুরু করতে পারেন। পাইথনকে বলা হয় ভবিষ্যতের প্রোগ্রামিং ল্যাংগুয়েজ। বাইরের অনেক কারিকুলামে পাইথন দিয়ে প্রোগ্রামিং শেখানো শুরু করা হচ্ছে। আর পাইথনের যে সুবিধাটা আমি অনুভব করি তা হলো প্রোগ্রামিং শেখার জন্য শুধু না, বরং ভবিষ্যতে আপনি যদি ডেস্কটপ সফটওয়্যার ডেভেলপমেন্ট এবং ওয়েব ডেভেলপমেন্ট যে কোন সেক্টরে কাজ করতে চান সেক্ষেত্রেও এই একটি ল্যাংগুয়েজ দিয়ে দুটি কাজই করা সম্ভব। এমন কি মোবাইল অ্যাপ ডেভেলপমেন্ট-ও করা সম্ভব, যদিও মোবাইল অ্যাপ ডেভেলপমেন্টের জন্য পাইথন এখনও অতটা জনপ্রিয় হয়ে উঠতে পারেনি। পাইথন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাংগুয়েজ (OOP) মডেল অনুসরণ করে যা আধুনিক প্রোগ্রামিং বা সফটঅয়্যার ডেভেলপমেন্টের চাহিদা পূরণ করে।
কিন্তু এর মানে এই না আমি সি (C) শিখতে নিষেধ করছি। আমার নিজেরও প্রথম প্রোগ্রামিং ল্যাঙ্গুয়েজ ছিল সি (C)। এবং যেকোন একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ যখন আপনি ভালভাবে শিখবেন তখন নতুন আরেকটি প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখা আপনার জন্য অনেক সহজ হয়ে যাবে।
এছাড়া ছোটদের প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ক্ষেত্রে একটি জনপ্রিয় ল্যাঙ্গুয়েজ আছে যার নাম হচ্ছে স্ক্র্যাচ (Scratch)। অনেক দেশে এখন স্ক্র্যাচ দিয়ে বাচ্চাদেরকে প্রোগ্রামিংয়ের হাতেখড়ি করানো হয়। স্ক্র্যাচ বেশ মজার একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ। বাচ্চারা বেশ মজা পায়।
তবে শুধু মাত্র শেখা ছাড়াও কারও কারও ক্ষেত্রে প্রোগ্রামিং শেখার আগ্রহের পেছনে সুনির্দিষ্ট উদ্দেশ্য থাকে। যেমন গেম ডেভেলপ করা বা ওয়েব ডেভেলপমেন্ট শেখা, সেক্ষেত্রে আপনি নিচের ইনফোগ্রাফিক্সটি দেখে নিতে পারেন। ইনফোগ্রাফিক্স চিত্রে দেখানো আছে কম্পিউটারের কোন ল্যাঙ্গুয়েজটি বিশেষ কোন উদ্দেশ্যটি পূরণ করতে বেশি কার্যকরী।
ইনফোগ্রাফিক্স – Which Programming Language Should I Learn First
কিভাবে শিখব? কোথায় শিখব?
যে কোন কিছু শেখার সবচেয়ে ভালো রিসোর্স হচ্ছে এর অফিসিয়াল ওয়েবসাইট ও ডকুমেন্টেশন।
সি-এর অফিসিয়াল ওয়েবসাইট বা ডকুমেন্টেশন সেভাবে নেই তবে অসংখ্য ভালো ভালো রেফারেন্স সাইট রয়েছে। তার মধ্যে একটি – https://en.cppreference.com/w
পাইথন-এর অফিসিয়াল ওয়েবসাইট – https://www.python.org
স্ক্র্যাচ-এর অফিসিয়াল ওয়েবসাইট – https://scratch.mit.edu
এছাড়া যে কোন প্রোগ্রামিং ল্যাংগুয়েজ শেখার জন্য রয়েছে অসংখ্য ইউটিউব চ্যানেল। তবে তাদের মধ্যে FreeCodeCamp.org -এর চ্যানেলটি দেখে নিতে পারেন। তবে আরও অনেক চ্যানেল ও অনলাইন রিসোর্স রয়েছে। যার শেখানোর ধরণ আপনার বেশি ভালো লাগবে তারটাই ফলো করবেন। এখানে খুব বেশি কিছু দিলাম না কারণ শেখার জন্য বিভিন্ন রিসোর্স নিয়ে আলাদা আলাদা পোস্ট লিখব ইন শা আল্লাহ।
এবার কিছু ফ্রি এডভাইস দেই। কোন কিছু বিশেষ করে প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার সময় এই বিষয়গুলো মনে রাখলে লাভবান হবেন:
- কিছু শেখার সময় সেটা শেখার প্রয়োজনীয়তা ও নিজের ভিতরের আগ্রহ এবং আনন্দকে গুরুত্ব দিবেন। সেটা শিখে কবে নাগাদ ইনকাম শুরু করতে পারবেন বা কত লাখ টাকা বেতন পাবেন এটা চিন্তা করে শিখবেন না। এতে ভালভাবে শেখা হয়ই না বরং যতোটুকু শিখতে পারতেন ততটুকুও বাধাগ্রস্ত হবে।
- আপনি হয়তো শুনেছেন অমুক ভাই তমুক প্রোগ্রাম শিখে এখন অনেক টাকা ইনকাম করছে, অতএব এখন আপনাকেও ঠিক ওইটাই শিখতে হবে – এই উদ্দেশ্য নিয়ে কোন কিছু শিখবেন না। অল্পতেই হতোদ্যম হয়ে যাবেন। এতোদিনের পুরানো ট্র্যাক বা ক্যারিয়ার চেঞ্জ করার পূর্বে অবশ্যই ভালো করে ভাববেন। ডাক্তারী পেশাতেও অর্থ উপার্জনের সুযোগ রয়েছে, কিন্তু তাই বলে কি এখন আপনার ডাক্তার হবার সময়, সুযোগ ও পরিশ্রমের মানসিকতা রয়েছে? যদি সুযোগ থাকে তাহলে শুরু করুন।
- আইটি (I.T. বা Information Technology) সেক্টরে কাজ করা বলতে শুধু প্রোগ্রামিং বোঝায় না। আরও অনেক ক্ষেত্রে কাজের সুযোগ আছে। অতএব প্রোগ্রামিং না শিখতে পারলে জীবন বৃথা হয়ে যাবে তা নয় বরং বোঝার চেষ্টা করুন যে আইটি-র কোন ক্ষেত্রটি আপনি ভালো বোঝেন, কোন বিষয়টি নিয়ে কাজ করতে বেশি আনন্দ পান। কাজের ভেতরে আনন্দ থাকা এবং আনন্দ নিয়ে কাজ করতে পারা না পারাটা এক সময় অনেক বড় বিষয় হয়ে দাঁড়াবে।
আজ এ পর্যন্তই থাক। লিখতে লিখতে বেশ বড়-সড় একটি লেখা হয়ে গেল। শেষ পর্যন্ত পড়ার জন্য অনেক অনেক ধন্যবাদ। কোন প্রশ্ন বা সংশোধনী থাকলে নির্দ্বিধায় যোগাযোগ করুন, মেসেজ দিন, ইমেইল করুন। আমার ব্যক্তিগত ইমেইল – imzahan.bd@gmail.com