জাভা থ্রেড প্রোগ্রামিং

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

নিজের লেখা বই হাতে বইমেলায় দ্বিমিক প্রকাশনীর স্টলে লেখক বজলুর রহমান।

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

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

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

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

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

বইটির সর্বোচ্চ বিক্রয়মূল্য ৩২০ টাকা। কিছু কিছু শিক্ষার্থীর কাছে এটি একটু বেশি ঠেকতে পারে, কারণ আমরা পৃষ্ঠা সংখ্যা দিয়ে বইয়ের দাম বিবেচনা করে অভ্যস্ত। কিন্তু আমি বলব যে, এরকম একটি বই লিখতে লেখকের যেই পরিশ্রম হয় তার তুলনায় বইয়ের দাম কিছুই না। আর আমরা বার্গার খেতে গেলে ডবল চিজ (অতিরিক্ত চিজ বা পনিরের স্তর) দিতে বললে বার্গারের দাম যতটুকু বেড়ে যায়, এটি ততটুকুই। তুলনাটি একটু স্থূল হয়ে গেলেও আশা করি সবাই বিষয়টিতে একমত হবে।

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

 

 

 

শাহরিয়ার মনজুর – ইন্টারভিউ

এসিএম আইসিপিসি (ACM ICPC) হচ্ছে বিশ্বের সবচেয়ে মর্যাদাপূর্ণ প্রোগ্রামিং প্রতিযোগিতা। পৃথিবীজুড়ে অনেকগুলো আঞ্চলিক প্রতিযোগিতা থেকে বাছাইকৃত দলগুলো অংশ নেয় চূড়ান্ত প্রতিযোগিতায়, যেটি আইসিপিসি ওয়ার্ল্ড ফাইনালস নামে পরিচিত। সেখানে বিচারক হওয়ার অত্যন্ত কঠিন, বিরল ও সম্মানের ব্যাপার। এক যুগেরও বেশি সময় ধরে এসিএম আইসিপিসি ওয়ার্ল্ড ফাইনালসে বিচারক হিসেবে নিয়মিত বাংলাদেশের শাহরিয়ার মনজুর। নিজের একাগ্রতা ও প্রোগ্রামিংয়ের প্রতি ভালোবাসা থেকে বৈশ্বিক এই আসরে তিনি আমন্ত্রিত হচ্ছেন আর সেই সাথে বাংলাদেশকে এনে দিচ্ছেন অনন্য সম্মান।

ACM ICPC World Finals 2016 – Phuket, Thailand.

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

সুবিন : আপনি তো এবারেও এসিএম আইসিপিসি’র চূড়ান্ত পর্ব বিচারক হিসেবে যাচ্ছেন। এ নিয়ে আপনার আইসিপিসির চূড়ান্ত পর্বে কত বার যাওয়া হবে?
শাহরিয়ার মনজুর : বিচারক হলাম ত্রয়োদশতম বারের মতো কিন্তু যাচ্ছি এগারতম বার, প্রথম দুবার ভিসা পাইনি।

সুবিন : আইসিপিসির চূড়ান্ত পর্বের বিচারক হিসেবে নির্বাচনের প্রক্রিয়াটি কী?
শাহরিয়ার মনজুর : ডিরেক্টর অফ জাজিং কাছে প্রবলেম পাঠাতে হয় ইমেইলের মাধ্যমে। একটি কমিটি প্রবলেম সেটারের নাম না দেখে প্রবলেম বাছাই করে। যাদের প্রবলেম বাছাই করা হয় তাদের মধ্য থেকেই বিচারক নির্বাচন করা হয়। তবে একদম অপরিচিত কারো প্রবলেম নেয়া হয় না হয়ত। আমি যখন প্রথমবার প্রবলেম দেই তখন কিছু কারণে পরিচিত ছিলাম অনেকের কাছেই। যেমন : UVa Online Judge-এর সাথে জড়িত থাকা, ওয়ার্ল্ড ফাইনালস্ ওয়ার্মআপ আয়োজন করা, স্কিয়েনা-রেভিল্লা এর প্রোগ্রামিং চ্যালেঞ্জেস (Programming challenges) বইতে আমার নাম থাকা ইত্যাদি। তাই বলা যায়, আমি চূড়ান্ত পর্বের বিচারক হয়েছিলাম অনেকটা ভাগ্যের জোরেই।

সুবিন : সেখানে তো আপনার তৈরি করা প্রোগ্রামিং সমস্যা ব্যবহার করা হয়। এরকম একটি প্রোগ্রামিং সমস্যা তৈরি করতে আপনার কীরকম সময় দিতে হয়?
শাহরিয়ার মনজুর : আমার সবচেয়ে প্রিয় প্রবলেমগুলা আসলে ঢাকা রিজিওনাল অথবা ওয়ার্মআপ কনটেস্টে ব্যবহৃত হয়েছে। একটা প্রবলেম তৈরী করতে কী পরিমান সময় লাগে এটি বলা কঠিন, ব্যাপারটি একাধারে কবিতা লেখা এবং এমন সমস্যা সমাধান করার মতো যা আগে কেউ কখনও করে নি। মনের মধ্যে প্রোগ্রামিং সমস্যা তৈরি করার ভাব আসতে হবে এবং সেটার সমাধানও মাথা থেকে বের হতে হবে। কাজেই সেটা এক দিনেও হতে পারে আবার কয়েক বছর সময়ও লাগতে পারে।

সুবিন : এসিএম আইসিপিসি’র চূড়ান্ত পর্ব ছাড়া আর কোন কোন প্রতিযোগিতার জন্য আপনি প্রোগ্রামিং সমস্যা তৈরি করেন?
শাহরিয়ার মনজুর : ভবিষ্যতে কোথায় করব জানিনা কারণ বয়স হচ্ছে। কিন্তু এখন পর্যন্ত ঢাকা, ফুকেট (থাইল্যান্ড), কুয়ালালামপুর (মালয়েশিয়া), SWERC এবং কিছু চাইনিজ রিজিওনালের জন্য প্রোগ্রামিং সমস্যা তৈরি করেছি।

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

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

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

সুবিন : দেশের প্রোগ্রামারদের মানের উন্নয়ন ঘটানোর জন্য সরকারীভাবে এবং ব্যাক্তিপর্যায়ে কী ধরণের উদ্যোগ নেওয়া যেতে পারে?
শাহরিয়ার মনজুর : সরকার দেশের শিক্ষার মান বাড়াতে পারে যাতে করে মানুষের বিশ্লেষণ করার ক্ষমতা আরো বাড়ে। এছাড়া প্রোগ্রামিং ক্যাম্প, জাতীয় প্রোগ্রামিং প্রতিযোগিতা এর মত ইভেন্ট আরো বাড়ানো যেতে পারে।

সুবিন : আপনি তো অনেকদিন ধরে শিক্ষকতাও করছেন। আট-দশ বছর আগের শিক্ষার্থী ও বর্তমান সময়ের শিক্ষার্থীদের মধ্যে কোনো পার্থক্য আপনার চোখে পরে?
শাহরিয়ার মনজুর : মানের খুব বেশি তারতম্য চোখে পরে নি। কিন্তু এখন অনেকেরই বাসায় ডেস্কটপ অথবা ল্যাপটপ কম্পিউটার থাকায় কম্পিউটার এর সাধারণ ব্যবহারের মান অনেক ভালো। কিন্তু একই সাথে প্রোগ্রামিং এ সময় নষ্ট (!) না করে ফেইসবুক এ সময় নষ্ট করার প্রবণতা অনেক বেশি। আমর প্রথম কম্পিউটার এর গল্প ( ৮ মেগা ram, ৪২০ মেগা HDD ) এখনকার ছাত্ররা অনেক আগ্রহ নিয়ে শুনে কারণ তাদের কাছে এটা শেরশাহ আমলের গল্প মনে হয়।

সুবিন : ভালো সফটওয়্যার প্রকৌশলী হতে গেলে প্রোগ্রামিংয়ে দক্ষ হতে হয়, আবার প্রোগ্রামিংয়ে দক্ষতা অর্জনের জন্য চর্চার কোনো বিকল্প নেই। এখন যারা প্রতিযোগিতামূলক প্রোগ্রামিং করে না, বা অনলাইন জাজেও প্রবলেম সলভ করে না, তাদের জন্য প্রোগ্রামিং চর্চা করার বিকল্প উপায় কী হতে পারে?
শাহরিয়ার মনজুর : মোটামুটি ভালো প্রোগ্রামার হবার জন্য যেকোনো ভালো বই এর অনুশীলনীর সব সমস্যা নিজে নিজে সমাধান করলেই যথেষ্ট। এমন লেখক নামের মধ্যে “শাহরিয়ার” সাবস্ট্রিং (substring) আছে তাদের লেখা বই পড়াও ভালো।
সুবিন : একজন কম্পিউটার বিজ্ঞানের শিক্ষার্থীর জন্য প্রথম প্রোগ্রামিং কোর্সটা খুবই গুরুত্বপূর্ণ। তো এই কোর্সটি আপনি দীর্ঘদিন পড়িয়ে আসছেন। যারা নতুন শিক্ষক হবেন এবং এই কোর্সটি পড়াবেন, তাদের জন্য আপনি কিছু পরামর্শ দেন।
শাহরিয়ার মনজুর : যে কাউকে প্রোগ্রামিং শেখাতে পারব এই বিশ্বাস আমার আছে। কিন্তু মূল সমস্যা হলো প্রোগ্রামিং শেখানোর জন্য যত সময় প্রত্যেক শিক্ষার্থীকে দেওয়া দরকার সেটা সম্ভব হয়ে ওঠে না ক্রেডিট আওয়ার (credit hour)-এর দোলাচলে। এটাও ঠিক যে সবার খুব ভালো প্রোগ্রামার হবার ক্ষমতা থাকে না কিন্তু মোটামুটি মানের প্রোগ্রামার সবাই হতে পারে। শিক্ষক হিসাবে আমি কিছু ভালো প্রোগ্রামার তৈরী করতে পেরেছি কিন্তু আরো অনেক বেশি পারলে ভালো লাগত। আবার সাউদইস্ট ইউনিভার্সিটির একমাত্র গুগলার আমার সি এর কোর্স করেই নি, নিজে নিজেই প্রোগ্রামিং শিখেছে।

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

সুবিন : আপনি ছোটবেলায় কোন কোন স্কুল-কলেজে পড়েছেন?
শাহরিয়ার মনজুর : বনানী বিদ্যানিকেতন (কেজি), লিটল এঞ্জেলস স্কুল (৩-৫), ইঞ্জিনিয়ারিং ইউনিভার্সিটি স্কুল (৬-১০), ঢাকা কলেজ। আমার দেখা সবচেয়ে ভালো শিক্ষা প্রতিষ্ঠান ঢাকা কলেজ কারণ সেখানে মুক্ত চিন্তা করার অনেক সুযোগ।

সুবিন : আমাদের স্কুলের লেখাপড়া নিয়ে তো নিয়মিতই বিভিন্ন পরীক্ষা-নিরীক্ষা করা হয়। সিলেবাস, বই ইত্যাদি পরিবর্তন করা হয়। আপনার পর্যবেক্ষণে আমাদের স্কুলের শিক্ষাব্যবস্থায় কি মৌলিক কোনো পরিবর্তন প্রয়োজন বলে আপনি মনে করেন?
শাহরিয়ার মনজুর : খুব ধীরে হলেও সব দেশের শিক্ষার মান বাড়ে, আমরা কেন জানি উল্টা দিকে হাঁটলাম। নতুন যদি কিছু করতে না পারি, আগে যেমন ছিল সেখানে তো অন্তত ফেরত যেতে পারি? SSC , HSC -তে গ্রেডিং সিস্টেম যদি রাখতেই হয় তাহলে ৯০% এ A+ করা যেতে পারে এবং গ্রেড এর ধাপ আরো বাড়ানো উচিত। মনে রাখা দরকার যে শিক্ষা ব্যবস্থা কোনো সার্কাস না যে সবাইকে এসেই চমৎপ্রদ কোনো খেলা দেখাতে হবে।

সুবিন : আপনি প্রোগ্রামিং শেখা শুরু করলেন কবে এবং কিভাবে প্রোগ্রামিং-এর প্রতি আকৃষ্ট হয়েছিলেন?

শাহরিয়ার মনজুর : প্রোগ্রামিং শেখা শুরু করি বুড়ো বয়সে, অর্থাৎ আমার বয়স যখন ঊনিশ, তখন। হুজুগে পরে বুয়েটের কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগে ভর্তি হই। শুরুতে প্রোগ্রামিং খুবই ভয় পেতাম। ১০,০০০+ লাইন এর একটি টার্ম অ্যাসাইনমেন্ট করে নিজেকে খুব ভালো প্রোগ্রামার ভাবা শুরু করি, ভাল্লাদলিদ (ইউভিএ) সাইট-এ প্রোগ্রামিং সমস্যা সমাধান করতে গিয়ে সেই ভুল ভাঙ্গে, এরপর ওইখানে বেশ কিছু সমস্যা সমাধান করে আবার নিজেকে ততক্ষণ ভালো প্রোগ্রামার ভাবা শুরু করি যতক্ষণ কিসমান এর সাথে আলাপ হয়নি। সার করা হলো : একমাত্র বোকারাই নিজেদের ভালো প্রোগ্রামার ভাবে।

সুবিন : আমি বর্তমানে একটি প্রবণতা লক্ষ করছি, শিক্ষার্থীরা যখন নতুন প্রোগ্রামিং শেখে, তখন কোনো সমস্যা সমাধান করতে না পারলে তারা সাথে সাথেই কোনো ফোরাম বা ফেসবুক গ্রুপ থেকে সেটার সমাধান জেনে নেয়। এতে কি আসলে তেমন কোনো লাভ হয়?
শাহরিয়ার মনজুর : আমার এক স্টুডেন্ট বলেছিল পাশ করে নতুন চাকরীতে ঢোকার পর, “স্যার উপরে আল্লাহ নিচে গুগল (google), তাই সব কিছুর সমাধান বের করতে পারি”, কিন্তু শিক্ষার্থীরা এমন করলে এতে তাদেরই ক্ষতি। এই জন্য ক্লাসেও যারা প্রোগ্রামিং বেশি পারে তাদের আমি সতর্ক করি যেন অন্যদেরকে তারা তাদের কোড না দেখায়।

সুবিন : আপনি তো অনেকদিন ধরেই প্রোগ্রামিং সমস্যা তৈরি ও কম্পিউটার বিজ্ঞানে শিক্ষকতার কাজ চালিয়ে যাচ্ছেন। ভবিষ্যতে কি অন্য ধরণের কোনো কাজ করার পরিকল্পনা আছে নাকি এ দুটি কাজই চালিয়ে যেতে চান?
শাহরিয়ার মনজুর : কোনো বাঁধাধরা পরিকল্পনা নেই, আমি পেশায়ে শিক্ষক, আর প্রোগ্রামিং সমস্যা তৈরি করা আমার প্যাশন। যে কবিতা আমি মাঝে মাঝে গুনগুন করি তা হলো:

“আজি হতে শত বর্ষ পরে ,
কে তুমি খাবি খাচ্ছ আমার প্রবলেম নিয়ে
আজি হতে শত বর্ষ পরে”

এই সাক্ষাৎকারটিসহ মোট এক ডজন সাক্ষাৎকার নিয়ে প্রকাশিত হয়েছে প্রোগ্রামিং ক্যারিয়ার গাইডলাইনঃ এক ডজন প্রোগ্রামারের কথা। বইটি পাওয়া যাচ্ছে রকমারি ডট কম-এ।

পিপলওয়্যার – বই রিভিউ

গ্র্যাবে আমি বর্তমানে যেই চাকরি করছি, সেখানে আমার কাজ হচ্ছে ইঞ্জিনিয়ারিং ম্যানেজমেন্ট (Engineering Management)। তো এই কাজটির সঙ্গে আমি একদমই অপরিচিত ছিলাম। তারপরও আমার স্বভাবসুলভ আলসেমি, মানুষের সঙ্গে কাজ করার অভিজ্ঞতা ও কমনসেন্স ব্যবহার করে কাজ চলে যাচ্ছে। আর এই ইঞ্জিনিয়ারিং ম্যানেজার হিসেবে কাজ শুরু করার পরে আমি বিভিন্ন রকম বইপত্র কেনা ও পড়া শুরু করি। সেসব বইয়ের অন্যতম হচ্ছে Peopleware: Productive Projects and Teams (3rd Edition) ।সম্প্রতি বইটি দ্বিতীয়বারের মতো পড়ে শেষ করলাম। বইটি প্রথমবার পড়েছিলাম ২০১৫ সালের শেষ দিকে।

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

বইতে মোট ছয়টি অংশে ৩৯টি অধ্যায় আছে। প্রথম অংশের শিরোনাম হচ্ছে Managing the Human Resource – মানবসম্পদ ব্যবস্থাপনা। সেখানে মূলত সফটওয়্যার প্রজেক্টগুলোর সাফল্য-ব্যর্থতা নিয়ে আলোচনা করা হয়েছে। কীভাবে সফটওয়্যার তৈরির প্রক্রিয়া হার্ডওয়্যার তৈরির প্রক্রিয়ার চেয়ে আলাদা, সেখানে সফটওয়্যারের গুনগত মান নিশ্চিতকরণ কতটা জরুরী, এই বিষয়ে গ্রাহকদের দৃষ্টিভঙ্গী কী, ম্যানেজারের করণীয় কী – সেসব বিষয় আলোচনায় এসেছে। নিম্নমানের সফটওয়্যার কেবল গ্রাহকদের জন্যই সমস্যার সৃষ্টি করে না, বরং সফটওয়্যার প্রকৌশলীদের হতাশার কারণও হয়ে দাঁড়ায়। সফটওয়্যার শিল্পের বিকাশে তাই গুনগত মান নিশ্চিতকরণ বেশ গুরুত্বপূর্ণ, আর সেই সাথে চ্যালেঞ্জিংও বটে। আর গুনগত মানের সঙ্গে যেই জিনিসটি অঙ্গাঅঙ্গি ভাবে জড়িত, তার নাম হচ্ছে প্রোডাক্টিভিটি (productivity) বা উৎপাদনশীলতা। একজন সফটওয়্যার প্রকৌশলীর উৎপাদনশীলতা পরিমাপ করার প্রক্রিয়াটি কিন্তু বেশ অস্পষ্ট ও দুরুহ। সেই বিষয়টিও চমৎকারভাবে আলোচনা করেছেন লেখকদ্বয়।

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

তৃতীয় অংশ হচ্ছে The Right People বা সঠিক লোকবল। সফটওয়্যার তৈরি এখন আর কেবল ব্যক্তিবিশেষের মুন্সিয়ানা নয়, বরং এক বা একাধিক দলের ছন্দময় কাজের ফলাফল। তাই এখানে ব্যক্তির চেয়ে দলের ভূমিকা অনেক বেশি। একটি দল গড়ে ওঠে সেই দলের মানুষদের নিয়ে, তাই দলের জন্য সঠিক মানুষ নির্বাচন গুরুত্বপূর্ণ। আর সেখানে ইঞ্জিনিয়ারিং ম্যানেজার গুরুত্বপূর্ণ ভূমিকা পালন করতে পারেন। সেসব নিয়ে বিস্তর আলোচনা করা হয়েছে বইয়ের এই অংশে। সঠিক মানুষ পাওয়ার পরে তাদের নিয়ে সেরা দল তৈরি করতে হয়। সেখানে ইঞ্জিনিয়ারিং ম্যানেজার অনেকটা ফুটবল দলের ম্যানেজারের দায়িত্ব পালন করেন। দশজন সেরা প্রোগ্রামারকে এক দলে নিয়ে নিলে সেই দল আপনাআপনি ভালো কাজ করার সম্ভাবনা খুব কম। তাই বইয়ের চতুর্থ অংশে লেখকরা এই বিষয়ে আলোকপাত করেছেন। এই অংশের নাম – Growing Productive Team।

বইয়ের শেষ দুটি অংশের নাম হচ্ছে যথাক্রমে Fertile Soil এবং It’s Supposed to Be Fun to Work Here। উর্বর জমিতে যেমন সোনালী ফসল হেসে ওঠে, তেমনি সঠিক ও সুন্দর কাজের পরিবেশে প্রোগ্রামাররাও অনেক ভালোভাবে তাদের কাজ সম্পন্ন করতে পারে। আর এই পরিবেশ এমনি এমনি গড়ে ওঠে না, তার জন্য চাই সেই প্রতিষ্ঠানের সচেতন চেষ্টা। যদিও ইঞ্জিনিয়ারিং ম্যানেজার একটি প্রতিষ্ঠানের মাঝারি পর্যায়ের মানুষ, তারপরও তার হাতে অন্তত তার নিজের দলের জন্য কিছু করার ক্ষমতা থাকে, অন্য দলগুলোকেও প্রভাবিত করার সম্ভাবনা থাকে। তাই সেই চেষ্টা চালিয়ে যাওয়ার কিছু উপায় বাতলে দেওয়া হয়েছে এই অংশগুলোর বিভিন্ন অধ্যায়ে।

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

 

কেন সিএসই পড়বা না

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

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

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

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

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

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

আর কম্পিউটার সায়েন্স কিন্তু অনেক বোঝার বিষয়। যাদের গণিতের সাধারণ বিষয়গুলো বুঝতেই সমস্যা হয়, তাদের আসলে এই দিকে না আসাই ভালো।

যারা আমার কথায় এখনও একমত হও নাই, তারা আমার লেখা প্রোগ্রামিং শেখার একটা বই আছে, (http://cpbook.subeen.com-এ গিয়ে ফ্রি-তে বইটা পড়া যায়)। সেই বইটা কিছুদিন পড়। যদি মনে হয়, এই জিনিস নিয়া আগামী চার বছর ব্যাপক খাটাখাটনি করতে পারবা এবং আগামী ২০-৩০ বছর এইরকম বিদঘুটে জিনিসকেই নিজের পেশা হিসেবে নিতে পারবা, তাহলে কম্পিউটার সায়েন্স পড়লেও পড়তে পারো।

এইচটিএমএল কিভাবে শিখব?

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

এইচটিএমএল জানার আগে ওয়েবসাইট সম্পর্কে একটু ধারণা থাকা প্রয়োজন। তাই প্রথম ভিডিওতে ওয়েব ডিজাইন সম্পর্কে আলোচনা করেছি।

দ্বিতীয়, তৃতীয় ও চতুর্থ ভিডিওতে এইচটিএমএল-এর বিভিন্ন জিনিস দেখানো হয়েছে।

আশা করি, ভিডিওগুলো অনেকের কাজে আসবে। কোনো মতামত থাকলে পোস্টের নিচে কমেন্টে জানানোর অনুরোধ রইল।

প্রোগ্রামিং ক্লাব

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

আপনি কিভাবে আপনার এলাকায় একটি প্রোগ্রামিং সংগঠন গড়ে তুলবেন?

প্রথমেই প্রোগ্রামিং শেখাতে যাবেন না। গ্রাম/জেলা শহরের প্রায় অধিকাংশ মানুষের ধারনা কম্পিউটার বিনোদন এর কাজে ব্যবহার করা হয়, তাদের কাছে কম্পিউটার এর বিনোদনটাই আনন্দদায়ক। ঠিকাছে, আপনি ১০০ জন শিক্ষাথীকে এক জায়গায় করেন, যদি না পারেন তাহলে ৫০ জন, যারা ষষ্ঠ থেকে নবম শ্রেণীর শিক্ষার্থী। দশম শ্রেণীর শিক্ষাথীদেরকে নিতে হবে না, কারণ তাদের কিছুদিন পরই SSC পরীক্ষা।

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

https://www.youtube.com/watch?v=krYXHtrzXLU

https://youtu.be/wldli30PT1E

সর্বপরি প্রথমে তাদের কে এটাই খুব ভালো করে বোঝাতে হবে যে কম্পিউটার বিনোদন এর মেশিন না, এটা অনেক শক্তিধর, যেটা দিয়ে পৃথিবী পৃষ্ঠ থেকে চাঁদে একটা রোবট নিয়ন্ত্রন করা যায় যেন রুপকথার মতন)।

এখন আসি প্রোগ্রামিং-এ, এতক্ষণ ধরে তাদেরকে যেই রূপকথা শোনালেন, সেটার আসল শক্তি যে প্রোগ্রামিং সেটা ভালো করে বোঝান। বোঝান যে, এই প্রোগ্রামিং শিখলে তুমি এক সুপার পাওয়ার এর অধিকারি হতে পারবে, তুমি যে ক্লাশ অফ ক্লান, টেম্পল রান নামক গেম গুলা খেলো সেগুলা বানাতে পারবে। বোঝান যে এই প্রোগ্রামিং শিখলে অনেক সম্মান + পুরস্কার পাওয়া যায় (NHSPC এর ব্যাপার টা)।

এর পর দেখেন সেই ১০০ জন এর মধ্যে কত জন প্রোগ্রামিং এর ব্যাপারে উৎসাহী হয়। আশা করি, অনেকে হবে, কারন আমার অভিজ্ঞতা তাই বলে।

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

এবার আসি কিভাবে প্রোগ্রামিং শেখাবেন সেই কথায়। আপনি তাদেরকে শুধু শেখান, কিভাবে কোডব্লকস ইনস্টল দিবে, কিভাবে কোড লিখবে, কিভাবে কোড রান কম্পাইল করবে, কোডে কোথাও ভুল থাকলে সেগুলা কিভাবে বুঝবে, কিভাবে কোড রান করবে। এবং পরিশেষে তাদের কে আপনি “Hello World” টা রান করা শিখিয়ে দিন। বাকি সব কিছু তারা শিখে নিবে! কিভাবে? ওদের কে খুব ভালো করে একটা জিনিশ শিখিয়ে দিতে হবে আপনাকে, সেটা হলো তারা নিজেরা কিভাবে বই (বই এর লিংক http://cpbook.subeen.com) পড়ে প্রোগ্রামিং শিখবে। বই-এর প্রতিটা কোড সে নিজে নিজে লিখবে এবং রান করবে। কোথাও না বুঝলে ফেসবুক-এ অনেক গ্রুপ আছে (যেমন : https://facebook.com/groups/programming.school/ অথবা https://facebook.com/groups/bengaliprogramming/ ) সেখানে শিক্ষার্থীরা তাদের সমস্যা বা প্রশ্ন পোস্ট করবে। আর যদি ফেসবুক না থাকে (না থাকাই আসলে ভালো) তাহলে আপনার মোবাইল নাম্বার দিয়ে দিন, আপনাকে ফোন করবে, আপনি ফোনে বুঝায়ে দিবেন, আর গুগল তো আছেই। এখন গ্রামেও খুব ভালো ইন্টারনেট। আর আপনি প্রচুর উৎসাহ দিবেন। ছোটরা আনন্দের সাথে শিখতে ভালোবাসে, তাদেরকে যেটুকুই শেখান না কেন, আনান্দের সাথে শেখান।

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

আমি শতভাগ নিশ্চিত আপনি ১/২ মাস পর ১০/২০ জন শিক্ষাথী পাবেন যারা মোটামুটি প্রোগ্রামিং পারে। এর পর ঐ ১০ জনকে দেখেই আরো ১০ জন শিখবে। তারপর আরো ১০ জন, তারপর আরো…এভাবেই চলবে…।

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

– মিজানুর রহমান।

 

গড়, মধ্যক ও প্রচুরক

গড় শব্দটির সঙ্গে তোমরা যারা স্কুলে বিষয়টি পড়ে ফেলেছ, তারা যেমন পরিচিত, তেমনি যারা ক্রিকেট খেলা দেখো, তারাও পরিচিত। এই বইটি যখন লেখা হচ্ছে, তখন তামিম ইকবালের টেস্ট ক্রিকেটে ব্যাটিং গড় হচ্ছ 40.34 আর সাকিব আল হাসানের 40.93। এই গড় কিভাবে হিসেব করা হলো আর এর মানেই বা কী?

আমাকে যদি দুটি সংখ্যা দিয়ে এদের গড় বের করতে বলা হয়, তখন আমি সংখ্যা দুটি যোগ করে দুই দিয়ে ভাগ করবো। যেমন : 5 ও 6, এই দুটি সংখ্যার গড় হচ্ছে (5 + 6) / 2 বা 11 / 2 বা 5.5। তিনটি সংখ্যা 6, 7, 8-এর গড় হচ্ছে (6 + 7 + 8) / 3 বা 21 / 3 বা 7। তাহলে আমাকে যদি n সংখ্যক সংখ্যা দেওয়া হয়, তাহলে তাদের গড় বের করতে হলে সবগুলো সংখ্যা যোগ করে n দিয়ে ভাগ করবো। তাহলেই হয়ে গেলো।

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

def average(li):
   s = sum(li)
   n = len(li)
   return s / n

li = [1, 2, 3]
print("Average:", average(li))
li = [10, 20, 30, 40, 50, 60, 70, 80]
print("Average:", average(li))
li = [-1, 0, 1]
print("Average:", average(li))

প্রোগ্রামটি রান করলে আমরা আউটপুট পাবো এরকম :

Average: 2.0
Average: 45.0
Average: 0.0

ক্রিকেট খেলায় ব্যাটিং গড় কিভাবে বের করে? মোট রানকে ইনিংস দিয়ে ভাগ করতে হয়। তবে একটি মজার বিষয় হচ্ছে, কোনো ইনিংসে অপরাজিত থাকলে, অর্থাৎ, আউট না হলে, সেই ইনিংসকে ভাগ করার সময় গণনা করা হয় না। ধরা যাক, কোনো ব্যাটসম্যান প্রথম খেলায় করলো 50 রান, দ্বিতীয় খেলায় 100 রান (অপরাজিত), তৃতীয় খেলায় আবারো 50 রান করে আউট হলো। তাহলে তার ব্যাটিং গড় হবে, (50 + 100 + 50) / 2, বা 200 / 2 বা 100। এখানে 3 এর বদলে 2 দিয়ে ভাগ করার কারণ হচ্ছে, দ্বিতীয় খেলায় সে অপরাজিত ছিল।

এখন গড় আমাদের কী কাজে লাগে? ধরা যাক, আন্তর্জাতিক ক্রিকেট খেলায় নতুন একটি দেশের আগমন ঘটলো এবং বাংলাদেশের সঙ্গে ওই দলের খেলা। টসে হেরে ওই দল প্রথমে ব্যাটিং পেল। এখন ওদের যেই দুজন ব্যাটসম্যান ইনিংস ওপেন করতে এসেছে, ঘরোয়া লিগে একজনের ব্যাটিং গড় হচ্ছে 26 আরেকজনের হচ্ছে 41। এই তথ্য থেকে তুমি দুজন ব্যাটসম্যানের মধ্যে তুলনা করতে পারো যে, কে তুলনামূলক ভালো ব্যাটসম্যান। তবে আজকের ম্যাচে কে কত রান করবে, এটি কিন্তু ব্যাটিং গড়ের ওপর নির্ভর করে না। কারও ব্যাটিং গড় 26 মানে এই নয় যে, সে প্রতি ইনিংসে 26 রান করে। তাহলে গড় হচ্ছে কোনো কিছুর মান সম্পর্কে ধারনা করার জন্য একটি টুল মাত্র। ইংরেজিতে একে average বলে, তবে গণিতের ক্ষেত্রে mean শব্দটিই বেশি ব্যবহার করা হয়।

এখন আরেকটি উদাহরণ দেই। কোনো দেশের মানুষ কেমন ধনী বা গরিব, তা বোঝার জন্য অনেকসময় মাথাপিছু আয় ব্যবহার করা হয়। মাথাপিছু আয় মানে হচ্ছে গড় আয়। সেটি ব্যবহার করে সেই দেশের মানুষের অর্থনৈতিক অবস্থা সম্পর্কে ধারণা পাওয়া যায়। কিন্তু সেখানে যদি মানুষের আয়ের মধ্যে বৈষম্য অনেক বেশি হয়, তাহলে কিন্তু গড় ব্যবহার করে প্রকৃত ধারণা পাওয়া যাবে না। একটি উদহারণ দিয়ে বোঝাই। ধরা যাক, কোনো দেশে 10 জন মানুষ আছে। তাদের মধ্যে 2 জন প্রতি মাসে 10 হাজার টাকা আয় করে। 5 জন প্রতিমাসে 20 হাজার টাকা আয় করে। আর একজন আয় করে প্রতিমাসে 30 হাজার টাকা। বাকী দুইজন প্রতি মাসে 5 লক্ষ টাকা আয় করে। তাহলে প্রতিমাসে তাদের গড় আয় কত?

গড় আয় = (10000 + 10000 + 20000 + 20000 + 20000 + 20000 + 20000 + 30000 + 500000 + 500000) / 10 = 115000।
তার মানে গড় আয় এক লক্ষ পনের হাজার টাকা! তাহলে শুধু গড় আয় জানলে যেকেউ সেই দেশের মানুষকে ধনী ভাববে। তাই গড় ব্যবহার করে সবসময় প্রকৃত চিত্র পাওয়া যায় না। তবে এতে হতাশ হওয়ার কিছু নেই, কারণ আমাদের হাতে রয়েছে মধ্যক ও প্রচুরক।

মধ্যক

এখন ধরা যাক, তুমি কোনো ক্রিকেট দলের ম্যানেজার। তোমার দল তৈরির সময় দুই জন ব্যাটসম্যান – রবিন ও সমিত-এর মধ্যে একজনকে বেছে নিতে হবে। দুজনের মধ্যে যার ব্যাটিং গড় বেশি, তুমি তাকে দলে নিতে পারো। কিন্তু তুমি যদি আরেকটু সচেতন হও, তখন হয়ত তুমি জানতে চাইতে পারো যে, কে কতগুলো ম্যাচ খেলেছে। ধরা যাক, রবিন 50 টি ম্যাচ খেলেছে এবং তার ব্যাটিং গড় 30। আর সমিত খেলেছে 5টি ম্যাচ এবং তার ব্যাটিং গড় 38। তুমি কিন্তু বেশিরভাগ ক্ষেত্রেই রবিনকে দলে নেবে, যেহেতু সে সমিতের তুলনায় অনেক বেশি অভিজ্ঞ। কিন্তু দুইজন যদি সমান সংখ্যক ম্যাচ খেলে, তখন কি কেবল গড় হিসেব করবে? তুমি চাইলে তখন আরেক ধরনের টুল ব্যবহার করতে পারো, যার নাম মধ্যক (ইংরেজিতে বলে median)। ধরা যাক, রবিন ও সমিত – দুজনেই 10টি করে ম্যাচ খেলেছে। 10টি ম্যাচে রবিনের রান হচ্ছে 95, 88, 47, 0, 10, 1, 5, 12, 0, 3। আর সমিতের রান হচ্ছে 10, 40, 20, 37, 0, 1, 25, 35, 30, 33। রবিনের গড় রান সমিতের গড় রানের চেয়ে বেশি। তবে এখানে আমরা দেখতে পাচ্ছি, রবিন মাঝে-মধ্যে অনেক বেশি রান করে, তবে বেশিরভাগ সময়ই সে খুব একটা ভালো খেলে না। আর সমিত দুয়েকটা বাদের বাকি খেলাগুলোয় মোটামুটি রান করতে পারে। তাই শুধু গড়ের ওপর ভরসা করা আমাদের ঠিক হবে না। আমরা মধ্যক বের করবো। প্রথমে আমরা তাদের প্রতি ম্যাচের রান ছোট থেকে বড় ক্রমানুসারে সাজাবো। তাহলে রবিনের রান হবে 0, 0, 1, 3, 5, 10, 12, 47, 88, 95 আর সমিতের রান হবে 0, 1, 10, 20, 25, 30, 33, 35, 37, 40। মধ্যক বের করতে গেলে আমাদেরকে তালিকার মাঝামাঝি সংখ্যাটি নিতে হবে। মোট সংখ্যা যদি বিজোড় হয়, তাহলে মাঝামাঝি সংখ্যা হবে একটি। যেমন 11-এর ক্ষেত্রে 6 নম্বর সংখ্যাটি হচ্ছে মাঝামাঝি সংখ্যা। কারণ ওই সংখ্যার চেয়ে ছোট 5টি সংখ্যা আছে। আবার বড় সংখ্যাও আছে 5টি। কিন্তু জোড় সংখ্যার বেলায় একটি মাঝামাঝি সংখ্যা বের করা যায় না। যেমন 10টি সংখ্যার ক্ষেত্রে আমরা যদি 5 নম্বর সংখ্যাটিকে মাঝামাঝি সংখ্যা ধরি, তাহলে তার ছোটি 4টি আর তার বড় 5টি সংখ্যা থাকবে। আবার 6 নম্বর সংখ্যাকে মাঝামাঝি সংখ্যা ধরলে, তার ছোট 5টি আর বড় 4টি সংখ্যা থাকবে।

যেহেতু আমাদের 10 টি সংখ্যা, তাই আমরা 5 ও 6 নম্বর সংখ্যা দুটি নিয়ে তাদের গড় বের করবো, মানে সংখ্যা দুটি যোগ করে দুই দিয়ে ভাগ করবো। তাহলে রবিনের রানের মিডিয়ান হবে 7.5 আর সমিতের রানের মিডিয়ান হবে 27.5। এখানে আমরা মিডিয়ান ব্যবহার করে সিদ্ধান্ত নিতে পারি যে কাকে দলে নেব। কাজটি তোমরা খাতা কলমে করে ফেল, তবে আমি পাইথন ব্যবহার করে একটি প্রোগ্রাম লিখে দেখাবো।

def median(li):
   li.sort()
   count = len(li)
   if count == 0:
      return None
   if count % 2 == 1:
      mid = count // 2
      return li[mid]
   else:
      mid2 = count // 2
      mid1 = mid2 - 1
      return (li[mid1]+li[mid2])/2

robin_run = [95, 88, 47, 0, 10, 1, 5, 12, 0, 3]
shomit_run = [10, 40, 20, 37, 0, 1, 25, 35, 30, 33]

median_robin = median(robin_run)
median_shomit = median(shomit_run)

print("Median run for Robin", median_robin)
print("Median run for Shomit", median_shomit)

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

প্রচুরক

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

একটি ওয়ানডে ম্যাচে একজন বোলারের পক্ষে সর্বোচ্চ ও সর্বনিম্ন কয়টি উইকেট পাওয়া সম্ভব? উত্তর হবে, যথাক্রমে 10টি ও 0টি। 0-এর চেয়ে কম কিংবা 10-এর চেয়ে বেশি উইকেট পাওয়া সম্ভব নয়। এখন ধরা যাক, মোস্তাফিজ এখন পর্যন্ত 20টি ওয়ানডে ম্যাচে বোলিং করেছে। সেই খেলাগুলোতে সে প্রতি খেলায় যতগুলো উইকেট পেয়েছে, তা হচ্ছে : 6, 5, 6, 4, 3, 1, 3, 2, 1, 0, 5, 3, 3, 2, 2, 1, 3, 4, 3, 3। এখন আমি একটি তালিকা তৈরি করবো, যে মোস্তাফিজ 0 উইকেট পেয়েছে কতবার, 1 উইকেট পেয়েছে কতবার … এরকম।

উইকেট ম্যাচের সংখ্যা
0 1
1 3
2 3
3 7
4 2
5 2
6 2
7 0
8 0
9 0
10 0

তাহলে আমরা দেখতে পাচ্ছি, মোস্তাফিজ সবচেয়ে বেশি পেয়েছে 3 উইকেট। 20টি খেলার মধ্যে 7 টি খেলাতেই সে 3 উইকেট করে পেয়েছে। তাহলে তুমি ধরে নিতে পারো যে, আজকের খেলাতে মোস্তাফিজের 3 উইকেট পাওয়ার সম্ভাবনাই সবচেয়ে বেশি। এখানে প্রচুরক হচ্ছে 3। কারণ উইকেটের লিস্টে 3 সবচেয়ে বেশি বার আছে। আমরা এখন ওপরের হিসেবটা একটি পাইথন প্রোগ্রাম লিখে করবো।

wkts_list = [6, 5, 6, 4, 3, 1, 3, 2, 1, 0, 5, 3, 3, 2, 2, 1, 3, 4, 3, 3]

for item in range(11):
   print("Wicket:", item, "Count:", wkts_list.count(item))

প্রোগ্রামটি রান করলে আউটপুট আসবে এরকম :

Wicket: 0 Count: 1
Wicket: 1 Count: 3
Wicket: 2 Count: 3
Wicket: 3 Count: 7
Wicket: 4 Count: 2
Wicket: 5 Count: 2
Wicket: 6 Count: 2
Wicket: 7 Count: 0
Wicket: 8 Count: 0
Wicket: 9 Count: 0
Wicket: 10 Count: 0

যে ঘটনাটি সবচেয়ে বেশি সংখ্যক বার ঘটে, সেটিই হচ্ছে প্রচুরক। বিভিন্ন রকম মতামত জরিপ করতে প্রচুরক ব্যবহার করা হয়। যেমন ধরো, তুমি একটি নতুন মোবাইল ফোন কিনতে চাও। কিন্তু কোন ব্র্যান্ডের ফোন ভালো সেটা বুঝতে পারছ না। তখন তুমি তোমার বন্ধুদের জিজ্ঞাসা করতে পারো এবং সবচেয়ে বেশি সংখ্যক বন্ধু যেই ব্র্যান্ডের মোবাইল ফোন ব্যবহার করে বা ভালো বলে, সেই ব্র্যান্ডের ফোন কিনতে পারো।

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

এই লেখাটি সহ গণিতের আরো কিছু মৌলিক বিষয় নিয়ে প্রকাশিত হয়েছে গণিত করবো জয়

FAQ – পাইথন দিয়ে প্রোগ্রামিং শেখা

পাইথন দিয়ে প্রোগ্রামিং শেখা (লেখক তামিম শাহরিয়ার সুবিন) বই সম্পর্কে কিছু সচরাচর জিজ্ঞাসিত প্রশ্নের উত্তর –

১) কোন প্রকাশনী থেকে বইটি প্রকাশিত হয়েছে?

উত্তরঃ দ্বিমিক প্রকাশনী (ওয়েবসাইট http://dimik.pub )

২) বইয়ের দাম কত?

উত্তরঃ গায়ের দাম ২০০ টাকা (দোকানে একটু কম রাখার কথা)।

৩) বইতে পাইথন ২ নাকি পাইথন ৩ ব্যবহার করা হয়েছে?

উত্তরঃ পাইথন ৩।

৪) আমি (তামিম শাহরিয়ার সুবিন-এর) কম্পিউটার প্রোগ্রামিং ১ম ও ২য় খণ্ড বইটি পড়েছি, এখন কি পাইথন বইটি পড়ব?

উত্তরঃ পাইথন শেখার কোনো দরকার থাকলে পড়া যেতে পারে, নইলে পড়ার দরকার নাই।

৫) বইটা কাদের জন্য উপযোগি?

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

৬) “পাইথন পরিচিতি” ও “পাইথন দিয়ে প্রোগ্রামিং শেখা” বই দুটির মধ্য পার্থক্য কী?

পাইথন পরিচিতি বইতে পাইথন 2.x ব্যবহার করা হয়েছে, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটিতে 3.x। পাইথন পরিচিতি বইটি অভিজ্ঞ প্রোগ্রামার যারা পাইথন শিখতে চায়, তাদের জন্য, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটি যারা নতুন প্রোগ্রামিং শিখতে চায়, তাদের জন্য।

৭) বইটি কোথায় পাওয়া যাবে?

নীলক্ষেতের হক লাইব্রেরি, মানিক লাইব্রেরি ও রানা বুক পাবলিশার্স-এ (ফোন নাম্বার দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া ঘরে বসে অনলাইনে অর্ডার করা যাবে রকমারি ডট কম-এ।

৮) ঢাকার বাইরে থেকে কিভাবে কিনব?

উত্তরঃ উপরে উল্লেখিত (নীলক্ষেতের) তিনটি বইয়ের দোকানে যোগাযোগ করতে হবে (ঠিকানা দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া rokomari.com বাংলাদেশের যেকোনো জায়গায় বই পৌঁছে দেয়।

৯) বাংলাদেশের বাইরে থেকে কিভাবে কিনব?

উত্তরঃ জানি না।

১০) বইতে কী কী বিষয় আলোচনা করা হয়েছে?

উত্তরঃ বইয়ের ওয়েবসাইটে বিস্তারিত আছে ঃ http://dimik.pub/book/155/

১১) পাইথন সম্পর্কিত কিছু প্রশ্ন ছিল, কোথায় জিজ্ঞাসা করবো?

উত্তরঃ পাইথন নিয়ে জিজ্ঞাসা থাকলে নিচের দুটি গ্রুপে কিংবা প্রোগ্রামাবাদে প্রশ্ন করতে হবে:

১২) আচ্ছা, পাইথন কী?

উত্তরঃ বিস্তারিত লিখেছি এই লেখায় : পাইথন কী?

প্রোগ্রামিং শেখার এক ডজন টিপস্

 প্রথম প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে সি (C) বেশ জনপ্রিয় ও বহুল ব্যবহৃত। বিভিন্ন প্রোগ্রামিং প্রতিযোগিতায় (স্কুল-কলেজ-বিশ্ববিদ্যালয় পর্যায়ে) সি ব্যবহার করা হয়। কলেজে আইসিটি কোর্সের সি ব্যবহার করা হয় এবং বেশিরভাগ বিশ্ববিদ্যালয়েও প্রথম প্রোগ্রামিং কোর্সে সি ব্যবহার করা হয়। সি ভালোভাবে শিখতে গিয়ে অনেকেই নানান সমস্যায় পরে। তাই আমার অভিজ্ঞতা থেকে কিছু পরামর্শ দিলাম।

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

১) প্রোগ্রামিংয়ের পেছনে নিয়মিত সময় দিতে হবে। একটানা কয়েকঘণ্টা (২ থেকে ৫ ঘণ্টা)। সপ্তাহে কমপক্ষে ৫ দিন। এভাবে মাসের পর মাস। প্রোগ্রামিং করার সময় অন্য কিছু, যেমন টিভি দেখা, খেলা দেখা, ফেসবুক – এসব করা যাবে না।

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

৩) প্রোগ্রামিংয়ে অনেক সময়ই কেন হয় প্রশ্নের উত্তর পাওয়া যাবে না (আসলে পাওয়া যাবে, তবে অনেক পরে, কখনও কয়েক মাস পরে, কখনও আরো বেশি সময় পরে)। যেমন: scanf ফাংশনে ভেরিয়েবলের আগে & চিহ্ন কেন ব্যবহার করা হয়, সেটা নিয়ে শুরুতে বেশি মাথা ঘামানো দরকার নাই। কিভাবে ব্যবহার করতে হয়, সেটা জানলেই হবে। তবে প্রোগ্রামিং শিখতে থাকলে একসময় এর উত্তর পেয়ে যাবে। শুরুতে কী করলে কী হয়, সেটাই গুরুত্বপূর্ণ। এজন্য বেশি বেশি প্রোগ্রাম লিখতে হবে, এবং প্রোগ্রামিং করার সময় পূর্ণ মনোযোগ দিতে হবে।

৪) কোনো কিছু মনে রাখার চেষ্টা করা, কিংবা মুখস্থ করার চেষ্টা করার দরকার নাই। প্রোগ্রামিং এত বেশি প্র্যাকটিস করতে হবে যে মুখস্থ না করে বিষয়টা নিজের আয়ত্বে এসে যাবে। ক্রিকেট খেলায় যেমন কোন ধরনের বলে কোন শট খেলতে হয়, সেটা কেউ মুখস্থ করে না, বরং প্র্যাকটিস করতে করতে আয়ত্বে চলে আসে – এরকম আর কী।

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

৬) যেই বই দিয়েই সি শেখা শুরু কর না কেন, সেটা দুইবার পড়তে হবে (এবং সেই বইতে যা বলা হয়েছে, তা করতে হবে)। তারপরে কমপক্ষে আরো একটা বই পড়তে হবে।

৭) ক্লাসের পরীক্ষায় (মানে প্রোগ্রামিং কোর্সের পরীক্ষায়) কম নাম্বার পেলে মন খারাপ করা চলবে না। কে কতটুকু প্রোগ্রামিং পারে সেটা আসলে পরীক্ষায় যাচাই করা খুব কঠিন।

৮) i++, ++i এসব জিনিস নিয়ে শুরুর দিকে মাথা ঘামানো মানে সময় নষ্ট করা, যদিও এটা পরীক্ষায় অনেক শিক্ষকেরই প্রিয় প্রশ্ন। ভেরিয়েবল, কন্ডিশনাল লজিক, লুপ, অ্যারে, ফাংশন – এসব জিনিস ভালোভাবে শিখতে ও এগুলো ব্যবহার করতে পারতে হবে।

৯) সি মোটামুটি শেখা হয়ে গেলে সি দিয়ে যেকোনো ওয়েবসাইট থেকে ৫০-১০০ টা সমস্যা সমাধান করতে হবে, তাহলে হাত ও মাথা পাকবে।

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

১১) প্রোগ্রামিং কনটেস্টে অংশ নিতে হবে। প্রোগ্রামিং প্রতিযোগিতায় ভালো করতে পারলে তো ভালো, কিন্তু ভালো করতে না পারলেও ক্ষতি নেই। ভালো করার জন্য যেই চেষ্টা – সেটা করতে গিয়েই অনেক কিছু শিখতে পারবে যেটা তোমাকে ভবিষ্যতে একজন দক্ষ সফটওয়্যার ইঞ্জিনিয়ার হতে সহায়তা করবে।

প্রোগ্রামিং নিয়ে আনন্দে সময় কাটুক সবার!

নোট: প্রোগ্রামিং শুরু করার আরো কিছু গাইডলাইন এখানে আছে : http://programabad.com/questions/1447/-

প্রোগ্রামিং ল্যাঙ্গুয়েজ

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

আমি যখন কলেজে পড়তাম, তখন কিউ-বেসিক (Q Basic) নামে একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ব্যর্থ চেষ্টা করেছিলাম। কিউ-বেসিক ল্যাঙ্গুয়েজটা আমাদের সিলেবাসে ছিল আর কী। এইচএসসি পরীক্ষার পরে কম্পিউটার কিনি, তখন এইচটিএমএল (HTML) শিখলাম কিছুটা, যদিও এটা ঠিক প্রোগ্রামিং ল্যাঙ্গুয়েজ না। তারপরে ২০০১ সালের শুরু থেকে সি (C) শেখা শুরু করি। আমাদের ভার্সিটির ক্লাস শুরু হয় ২০০১ সালের মে মাসে, আর ততদিনে সি এর বেসিক কিছুটা শেখা হয়েছে। আমি আমার বাকী ভার্সিটি-জীবন এর সুবিধা ভোগ করি। আমার যদি ভার্সিটির সি কোর্সের ক্লাশ থেকে সি শেখা লাগতো, তাহলে একটু অসুবিধাই হতো হয়ত, যেটা আমার অনেক ক্লাসমেটকে দেখে বুঝতে পেরেছি। সি শেখার সময় প্রথম বছরে ৩-৪টা বই কিনেছিলাম, যদিও সবগুলো বই শুরু থেকে শেষ পর্যন্ত পড়ি নাই। এক বছর সি শেখার পরে আমি হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি প্লাস প্লাস বইটা পড়ি। কিন্তু এরপরে আর আমার সি প্লাস প্লাস (C++) চর্চা করা হয় নাই।

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

ভার্সিটির সেকেন্ড ইয়ারে অবজেক্ট ওরিয়েন্টেড কোর্স ছিল। সেই কোর্সে জাভা (Java) শিখি। আর তারপরের সেমিস্টারে একটা প্রজেক্টও করি জাভা ব্যবহার করে। তারপরে ২০০৬-২০০৭ সালে কিছু টুকটাক কাজ করতে জাভা ব্যবহার করেছিলাম।

সম্ভবত ফোর্থ ইয়ারে আমাদের মাইক্রোপ্রসেস কোর্স ছিল, সেই কোর্সের ল্যাবের জন্য এসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language) শিখতে হয়েছিল।

আমার প্রথম প্রফেশনাল চাকরি ছিল টাইগার আইটি-তে, ২০০৭ সালের মাঝামাঝি। সেখানে আমি যেই প্রজেক্টে জয়েন করলাম, সেই প্রজেক্টে পার্ল (Perl) প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করতে হয়। কিন্তু আমি আগে কখনও এই ল্যাঙ্গুয়েজের নাম শুনি নাই। তাই বলে আমার কিন্তু চাকরি পেতে সমস্যা হয় নাই। কারণ ভালো কোম্পানীগুলো বেশি গুরুত্ব দেয় প্রবলেম সলভিং স্কিলের ওপর, প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ওপর নয়।

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

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

২০১৫ সালের মাঝামাঝি আমি সিঙ্গাপুরের গ্র্যাব নামক কোম্পানীতে ইন্টারভিউ দেই। বেশ কয়েকটা ইন্টারভিউ হয় এবং সেখানে আমি সি ব্যবহার করি, প্রবলেম সলভ করার জন্য। ইন্টারভিউ শেষে অফার পেয়ে জয়েন করি। জয়েন করার পরে জানতে পারলাম যে এখানে গো (Go বা Golang) ব্যবহার করা হয়, তাই প্রথম কিছুদিন গো শিখি। লক্ষ্য করার বিষয় হচ্ছে এত বড় কোম্পানী এত বেতন দিয়ে অন্য দেশ থেকে ইঞ্জিনিয়ার হায়ার করছে, ওরা কিন্তু এই বিষয় নিয়ে মাথা ঘামায় নাই যে আমি গো পারি কী না। সুতরাং বোঝাই যাচ্ছে যে কয়টা প্রোগ্রামিং ল্যাঙ্গুয়েজ পারি, এটা আসলে বিবেচ্য বিষয় নয়। কম্পিউটার সায়েন্সের বেসিক জ্ঞান (ডাটা স্ট্রাকচার, অ্যালগরিদম, অপারেটিং সিস্টেম, ডাটাবেজ, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, নেটওয়ার্কিং ইত্যাদি) এবং প্রবলেম সলভিং স্কিল-ই একজন ভালো সফটওয়্যার ইঞ্জিনিয়ার হওয়ার পূর্বশর্ত। আর কাজ করতে করতে সফটওয়্যার ইঞ্জিনিয়ারিংটাও শেখা হয়ে যায়, তবে তার জন্য ভালো কোম্পানীতে কাজ করাটা জরুরী।