[{"type":"Blog","title":"Some Stats of Competitive Programming in CSEDU","url":"/posts/2022/11/history-csedu-cp/","date":"Nov 2022","meta":"English · Competitive Programming CP","text":"CSEDU has been the Champion in any National Level Contest for 18 22 times. The only university ahead of CSEDU is BUET. No other university has more than 6 championships overall. Starting from 2011, CSEDU has at least one championship every year. That is a streak going on for 10 12 years and counting. CSEDU has never won any ICPC Regional. CSEDU has won the ICPC Dhaka Regional twice. Those championships came back to back in 2020 and 2021. No one from CSEDU ever participated in a World Finals twice, yet. Jubayer Rahman (Nirjhor) is set to become the first student from CSEDU to qualify for two World Finals. Iqram Mahmud and Jubayer Rahman (Nirjhor) are the youngest World Finalists from DU. Both of them were second-year students when they qualified for the World Finals in Sweden and Russia respectively. Next is RM Tonmoy. He was a third-year student when he qualified for the World Finals in the USA. Most number of wins by a single team is 4. The team is DU_Swampfire (Jubayer Rahman Nirjhor, Shahadat Hossain Shahin, Mahamudur Rahaman Sajib). Other teams with multiple championships are: DU_NotStrongEnough (3) (Ayman Rasheed, Ayon Shahrier, Jubayer Rahman (Nirjhor)), DU_Epinephrine (2) (Shahed Shahriar, Tanzir Islam Pial, Rezwan Mahmud), DU_Censored (3) (Sabit Anwar Zahin, Shahed Shahriar, Rezwan Mahmud), DU_Avengers (2) (Muhammad Ridowan, Bidhan Roy, Rashedul Hasan Rijul) and DU_Resonance (2) (Anna Fariha, Md. Shiplu Hawlader, Hasnain Heickal) Most number of wins in a calendar year is 3. This feat was achieved in 2019 by DU_Swampfire and in 2022 (still counting) by DU_NotStrongEnough. DU_NotStrongEnough, DU_Epinephrine and DU_Resonance are the only teams from CSEDU which won back to back contests. DU_NotStrongEnough is the only team to win three contests in a row. Only handful of people from CSEDU was a judge/problem-setter in ICPC. They are Syed Monowar Hossain, Jane Alam Jan, Anna Fariha, Shiplu Hawlader, Hasnain Heickal, Zobayer Hasan, Muhammad Ridowan, Shafaet Ashraf, Imran Bin Azad, Sabit Anwar Zahin, Shahed Shahriar, Sourav Sen Tonmoy, Rezwan Mahmud, Tanzir Islam Pial, Mahamudur Rahman Sajib. We have, in total, 24 29 students who have won a national/regional championship as part of a team. The list is given below. The number of championships is given in the bracket. Jubayer Rahman (Nirjhor) (5) (8) - 24th Batch. Shahed Shahriar (6) - 19th Batch. Rezwan Mahmud (Tonmoy) (5) - 20th Batch. Shahadat Hossain Shahin (4) - 21st Batch. Mahamudur Rahaman Sajib (4) - 20th Batch. Sabit Anwar Zahin (4) - 17th Batch. Mudhammad Ridowan (4) - 15th Batch. Ayon Shahrier (3) - 24th Batch. Ayman Rasheed (3) - 23rd Batch. Bidhan Roy (3) - 16th Batch. Hasnain Heickal (3) - 13th Batch. Tanzir Islam Pial (2) - 20th Batch. Sourav Sen Tonmoy (2) - 19th Batch. Rashedul Hasan Rijul (2) - 16th Batch. Momontho Mashak Monmoy (2) - 16th Batch. Zobayer Hasan (2) - 15th Batch. Anna Fariha (2) - 13th Batch. Md. Shiplu Hawlader (2) - 13th Batch. Asif Jawad (1) - 25th Batch. S M Nayeemul Islam (1) - 25th Batch. Md Reyad Hossain (1) - 23rd Batch. Safayat Ullah (1) - 21st Batch. Shafaet Ashraf (1) - 16th Batch. Jane Alam Jan (1) - 10th Batch. Syed Zubair Hossain (1) - 8th Batch. Mainul Islam (1) - 7th Batch. Monirul Islam (Sharif) (1) - 2nd Batch. M. Julius Hossain (1) - 2nd Batch. Kazi Golam Zilani (1) - 2nd Batch. This is a personal list curated by me. If I have made any mistake, please let me know."},{"type":"Blog","title":"পিএইচডি আবেদনের ঘটনাধারা","url":"/posts/2021/02/phd-admission-timeline/","date":"Feb 2021","meta":"Bangla · Higher Studies PhD","text":"পিএইচডি এর জন্য আবেদন এর সময় আসলে কি কি করতে হয় এই ব্যাপারে আমার নিজের অনেক ধোঁয়াশা ছিল। এই কারণে হয়ত কিছু ব্যাপারে পরিকল্পনা করতে গিয়েও ভুল হয়েছে। যদিও তখন অন্যদের সাথে কথা বলে এই বিষয়গুলো পরিষ্কার করার চেষ্টা করেছিলাম, কিন্তু লিখিত আকারে থাকলে হয়ত অনেকের সুবিধা হতে পারে। সেইজন্যই লিখে রাখা। ১৫ সেপ্টেম্বর, ২০২০ঃ টোফেল পরীক্ষার জন্য তারিখ নিয়েছি আমি আর মিথিলা। ২১ নভেম্বর পরীক্ষা। ১১ নভেম্বর, ২০২০ঃ মিথিলার GRE পরীক্ষা দিল, বনানীর আমেরিকান এলামনাই এসোসিয়েশন এর সেন্টারে। মূল স্কোর সব সেদিনই দিয়ে দিয়েছে। শুধু এনালিটিক্যাল রাইটিং স্কোর দেয়নি। আমি ২০১৮ সালের অক্টোবর মাসে GRE দিয়েছিলাম। সেটা পাঁচ বছর ব্যবহার করা যাবে দেখে আমি আর পরীক্ষা দিই নাই। ২১ নভেম্বর, ২০২০ঃ আমি আর মিথিলা টোফেল পরীক্ষা দিলাম, বনানীর আমেরিকান এলামনাই এসোসিয়েশন এর সেন্টারে। ঐদিনই রিডিং আর লিসেনিং অংশের স্কোর দিয়ে দিয়েছে। এই পরীক্ষার আগেই ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট, নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি, জর্জিয়া টেক এবং ইউনিভার্সিটি অফ সাউদার্ন ক্যালিফোর্নিয়া, এই চারটি ইউনিভার্সিটিতে স্কোর পাঠিয়েছি। ২৭ নভেম্বর, ২০২০ঃ আমাদের টোফেলের পুরো স্কোর আজকে দিয়েছে। ২৮ নভেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ কলোরাডো বোল্ডার এবং ভার্জিনিয়া টেকে টোফেলের স্কোর পাঠালাম। ২৯ নভেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ ইলিনয় আর্বানা শ্যাম্পেন এবং ইউনিভার্সিটি অফ টেক্সাস অস্টিনে টোফেলের স্কোর পাঠালাম। ৩০ নভেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া আরভাইনে টোফেলের স্কোর পাঠালাম। ০২ ডিসেম্বর, ২০২০ঃ রেনসেলার পলিটেকনিক ইন্সটিটিউট এ টোফেলের স্কোর পাঠালাম। ভার্জিনিয়া টেক, ইউনিভার্সিটি অফ ইলিনয় আর্বানা শ্যাম্পেন, ইউনিভার্সিটি অফ টেক্সাস অস্টিন, ইউনিভার্সিটি অফ সাউদার্ন ক্যালিফোর্নিয়া, ইউনিভার্সিটি অফ কলোরাডো বোল্ডার, ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া আরভাইন, নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি, জর্জিয়া টেক এ GRE স্কোর পাঠালাম। ০৪ ডিসেম্বর, ২০২০ঃ রেনসেলার পলিটেকনিক ইন্সটিটিউটে GRE স্কোর পাঠালাম। ১৪ ডিসেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট, ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া আরভাইন, ইউনিভার্সিটি অফ কলোরাডো বোল্ডারে এপ্লিকেশন জমা দিলাম। ১৫ ডিসেম্বর, ২০২০ঃ নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি, ইউনিভার্সিটি অফ সাউদার্ন ক্যালিফোর্নিয়া, জর্জিয়া টেক এবং ভার্জিনিয়া টেক এ এপ্লিকেশন জমা দিলাম। ২১ ডিসেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া রিভারসাইড ও ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া সান্টা ক্রুজ এ টোফেলের স্কোর পাঠালাম। ২৩ ডিসেম্বর, ২০২০ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া রিভারসাইডে GRE স্কোর পাঠালাম। ২৪ ডিসেম্বর, ২০২০ঃ ভার্জিনিয়া টেক থেকে লিফু হুয়াং ইন্টারভিউ নেওয়া আগ্রহ দেখিয়ে ইমেইল করেছেন। উনার নাম আমার SOP তে উল্লেখ করা হয়েছিল। ৩০ ডিসেম্বর, ২০২০ঃ ভার্জিনিয়া টেকের লিফ হুয়াং এর সাথে ইন্টারভিউ দিলাম। ইন্টারভিউ ভাল হয়েছে। মূলত উনি কি কাজ করেন সেটাই বলেছেন। সাথে আমি এখন পর্যন্ত কি কি কাজ করেছি তা জানতে চেয়েছেন। অবশ্য কেন আমি এতদিন পরে যাচ্ছি, এবং কেন আমি এসিস্টেন্ট প্রফেসর হিসাবে থাকার পরও পিএইচডি করতে চাচ্ছি নিয়ে সামান্য বিভ্রান্ত মনে হল। ৩১ ডিসেম্বর, ২০২০ঃ রেনসেলার পলিটেকনিক ইন্সটিটিউট এ এপ্লিকেশন জমা দিলাম। ০২ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ টেক্সাস ডালাস এবং স্টোনি ব্রুক ইউনিভার্সিটিতে টোফেলের স্কোর পাঠালাম। ০৫ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া রিভারসাইডে এপ্লিকেশন জমা দিলাম। ০৬ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া সান্টা ক্রুজ, ইউনিভার্সিটি অফ টেক্সাস ডালাস, স্টোনি ব্রুক ইউনিভার্সিটিতে GRE স্কোর পাঠালাম। ১১ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া সান্টা ক্রুজে এপ্লিকেশন জমা দিলাম। ১৩ জানুয়ারী, ২০২১ঃ স্টোনি ব্রুক ইউনিভার্সিটিতে এপ্লিকেশন জমা দিলাম। ১৫ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ টেক্সাস ডালাসে এপ্লিকেশন জমা দিলাম। ১৬ জানুয়ারী, ২০২১ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট এর ইউরি ব্রুন, মিথিলার ইন্টারভিউ নেওয়ার আগ্রহ প্রকাশ করে ইমেইল করেন। উনার কাজের সম্পর্কে জানানোর জন্য একটি ভিডিও ইমেইলে পাঠান। উনার নাম মিথিলা তার SOP তে উল্লেখ করেছিল। ০১ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যারিল্যান্ড বাল্টিমোর কাউন্টিতে এপ্লিকেশন জমা দিলাম। এই ইউনিভার্সিটি তে GRE ও টোফেলের স্কোর পাঠাতে হয়নি। আনঅফিসিয়াল স্কোর দিয়েই কাজ হয়েছে। ০২ ফেব্রুয়ারি, ২০২১ঃ নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি থেকে acceptance letter পেলাম। টিচিং এসিস্টেন্ট হিসাবে ফান্ডিং এর প্রস্তাব দিয়েছে। এপ্রিলের ১৫ তারিখের মধ্যে ভর্তি হব কিনা তা নিশ্চিত করতে হবে। ০৩ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট এর আলেক্সান্দ্রা মেলিউ ইন্টারভিউ নেওয়ার জন্য আগ্রহ দেখিয়ে মেইল দিয়েছেন। ০৩ ফেব্রুয়ারি, ২০২১ঃ নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি থেকে মিথিলা acceptance letter পেয়েছে, টিচিং এসিস্টেন্ট হিসাবে ফান্ডিং সহ। ০৩ ফেব্রুয়ারি, ২০২১ঃ ভার্জিনিয়া টেক থেকে rejection letter পেলাম। বেশ অবাক হয়েছি। লিফু হুয়াং এর সাথে ইন্টারভিউ ভাল হয়েছিল। ০৪ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট এর আলেক্সান্দ্রা মেলিউ এর সাথে ইন্টারভিউ হল। খুবই পজিটিভ ছিল। উনি ডাটা ম্যানেজমেন্ট সিস্টেম নিয়ে কাজ করেন। কাজগুলো খুবই ইন্টারেস্টিং এবং উনাকে খুবই চমৎকার মনে হয়েছে। ০৫ ফেব্রুয়ারি, ২০২১ঃ নর্থ ক্যারোলিনা স্টেট ইউনিভার্সিটি থেকে ফেলোশিপ দিয়েছে প্রথম বছরের জন্য। ফেলোশিপের মোট পরিমান চার হাজার ডলার। ০৬ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্টের ওয়েব সিস্টেমে আমার এডমিশন হয়েছে, এমন বার্তা দেখানো হচ্ছে। কিন্তু এখনো কোন ই মেইল আসেনি। ফান্ডিং নিয়েও কিছু বলা হয়নি। ০৯ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ কলোরাডো বোল্ডার থেকে তামারা সামনার ইন্টারভিউ এর আগ্রহ দেখিয়ে মেইল করেছেন। উনার নাম আমি SOP তে উল্লেখ করেছিলাম। উনি আমার আন্ডারগ্রাড সুপারভাইজর আরাফাত সুলতানের পিএইচডি সুপারভাইজর ছিলেন। ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট থেকে মেইল এসেছে। এডমিশন নিশ্চিত, ফান্ডিং দিয়েছে টিচিং এসিস্টেন্ট হিসাবে। ১০ ফেব্রুয়ারি, ২০২১ঃ ভার্জিনিয়া টেক থেকে মিথিলার এডমিশন নিশ্চিত করে মেইল এসেছে, ফান্ডিং দিয়েছে টিচিং এসিস্টেন্ট হিসাবে। ১১ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ কলোরাডো বোল্ডার থেকে তামারা সামনার ইন্টারভিউ নিলেন। তার একটি প্রজেক্টের ব্যাপারে বিস্তারিত জানালেন। আমার প্রজেক্টটি বেশ ভাল লেগেছে। ১৩ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যারিল্যান্ড বাল্টিমোর কাউন্টি থেকে ক্যারেন চেন ইন্টারভিউ নিতে আগ্রহ জানিয়ে ইমেইল করেছেন। কিন্তু যেহেতু ইতিমধ্যেই দুইটি বিশ্ববিদ্যালয় থেকে ভর্তিপ্রস্তাব পেয়েছি, তাই তাকে মানা করে দিয়েছি। দুইজনেরই সময় নষ্ট করার কোন অর্থ হয় না। ১৮ ফেব্রুয়ারি, ২০২১ঃ ইউনিভার্সিটি অফ ম্যারিল্যান্ড বাল্টিমোর কাউন্টি থেকে ভর্তির প্রস্তাব পেয়েছি। তবে এই ইমেইলটি স্বয়ংক্রিয় ভাবে এসেছে। এজন্যই হয়ত ফান্ডিং এর ব্যাপারে কিছু জানায় নাই। ২৩ ফেব্রুয়ারি, ২০২১ঃ স্টোনি ব্রুক ইউনিভার্সিটি থেকে আমি আর মিথিলা দুইজনই rejection letter পেলাম। ওরাও ভার্জিনিয়া টেকের মত সরাসরি সাইটের মাধ্যমে প্রত্যাখ্যান করেছে। ০৫ মার্চ, ২০২১ঃ ইউনিভার্সিটি অফ টেক্সাস ডালাস থেকে acceptance ইমেইল পেয়েছি। ফান্ডিং এর বিষয়ে পরবর্তীতে ইমেইল আসবে, এরকমই বলা হয়েছে। ০৯ মার্চ, ২০২১ঃ ইউনিভার্সিটি অফ কলোরাডো বোল্ডার থেকে আমি আর মিথিলা দুইজনই rejection letter পেলাম। সাইটের মাধ্যম্যে প্রত্যাখান করেছে ওরাও। ১৬ মার্চ, ২০২১ঃ ইউনিভার্সিটি অফ সাউদার্ন ক্যালিফোর্নিয়ার থেকে rejection letter পেলাম। সাইটের মাধ্যমে প্রত্যাখান করেছে। ০২ এপ্রিল, ২০২১ঃ ইউনিভার্সটি অফ টেক্সাস ডালাস থেকে আজকে গ্রাজুয়েট এসিস্টেন্টশিপ অফার করল। গ্রহণ করার জন্য ১২ এপ্রিল পর্যন্ত সময় দিয়েছে। ০৯ এপ্রিল, ২০২১ঃ ইউনিভার্সিটি অফ টেক্সাস ডালাস থেকে মিথিলাকে rejection letter পাঠিয়েছে। ১০ এপ্রিল, ২০২১ঃ ইউনিভার্সিটি অফ ম্যাসাচুসেটস এমহার্স্ট এর অফার আমি আর মিথিলা দুইজনই আজকে অফিসিয়ালি accept করেছি। ১৬ এপ্রিল, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া সান্টা ক্রুজ থেকে rejection letter পেলাম। সাইটের মাধ্যমে। ১৭ এপ্রিল, ২০২১ঃ I-20 ফর্মের জন্য ইউমাস এ অনুরোধ পাঠালাম আমি আর মিথিলা। আমরা ইলেকট্রনিক I-20 এর জন্য আবেদন করেছি। ২১ এপ্রিল, ২০২১ঃ রেনসেলার পলিটেকনিক ইন্সটিটিউট থেকে rejection letter পেলাম। ২২ এপ্রিল, ২০২১ঃ জর্জিয়া টেক থেকে rejection letter পেলাম। ২৭ এপ্রিল, ২০২১ঃ I-20 ফর্ম পেলাম ইমেইলের মাধ্যমে। ০৬ মে, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া আরভাইন থেকে rejection letter পেলাম। ১৮ মে, ২০২১ঃ ইউনিভার্সিটি অফ ক্যালিফোর্নিয়া রিভারসাইড থেকে rejection letter পেলাম।"},{"type":"Blog","title":"অটোমেটেড জাজে সমস্যা সমাধান করার প্রয়োজনীতা","url":"/posts/2020/08/necessity-of-oj/","date":"Aug 2020","meta":"Bangla · Competitive Programming CP","text":"(কেন প্রোগ্রামিং কন্টেস্ট ভাল না লাগলেও আপনার বিভিন্ন অনলাইন জাজে সমস্যা সমাধান করা উচিৎ) অনেকদিন ধরে প্রোগ্রামিং কন্টেস্ট এর সমস্যা সমাধান এবং এর জাজিং এর সাথে থাকার কারনে এর ভাল এবং খারাপ দিকগুলো আমার কাছে বেশ পরিষ্কার বলে আমার মনে হয়। আমার ছাত্রদেরকে আমি সবসময়ই উৎসাহ দিই প্রোগ্রামিং কন্টেস্ট এর সমস্যা গুলো সমাধান করার। তবে আমার ধারণা বলার সময় অতি উৎসাহের কারনেই অনেকে হয়ত আমার কথাগুলোকে ভুল ভাবে নিতে পারে। আমার ছাত্রদেরকে আমি প্রায় প্রতি ক্লাসেই একবার করে এই কথাগুলো বলি। পরে যখন ক্লাসের রিভিউ নিই, তখন একবার এরকম কথা একজন বলেছিল যে আমি এই বিষয়টা নিয়ে অতিরিক্ত জোর দিই। এমন হতে পারে, অনেকেই ভাবে আমি সবাইকে প্রোগ্রামিং কন্টেস্ট করতে বলি। তবে সেটি কিন্তু ভুল। যদিও প্রোগ্রামিং কন্টেস্ট করার অনেকগুলো উপকার আছে, কিন্তু আমি সবাইকে প্রোগ্রামিং কন্টেস্ট করতে বলি না। আমি যেটা বলতে চাই তা হল, “সবার (বাংলাদেশী কম্পিউটার বিজ্ঞানের ছাত্র) উচিৎ বিভিন্ন অনলাইন জাজে যেসব সমস্যা আছে সেগুলো সমাধান করার জন্য প্রচুর পরিশ্রম করা” বিজ্ঞান এবং প্রযুক্তি বিষয়ের সব ছাত্রের জন্য আসলে প্রব্লেম সল্ভিং এর স্কিল থাকা খুব গুরুত্বপূর্ণ। তবে আমি যেহেতু কম্পিউটার বিজ্ঞানের মানুষ, কাজেই এটা পূর্ণ আত্মবিশ্বাস দিয়ে বলতে পারি যে কম্পিউটার বিজ্ঞানের একজন ছাত্রের জন্য প্রব্লেম সল্ভিং স্কিল একদম অপরিহার্য। এবং এই কথাটি শুধু মাত্র যারা একাডেমিক বা রিসার্চ এর কাজ করবেন তারাই নয়, আজকের ইন্ডাস্ট্রিতেও এই স্কিল না থাকলে সামনে আগানো বেশ কঠিন। তবে এখানে প্রব্লেম সল্ভিং স্কিল বলতে কি বোঝানো হয় সেটা পরিষ্কার করা দরকার। আমার মতে, দৈনন্দিন বিভিন্ন কাজে আমরা যেসব সমস্যার মুখোমুখি হই সেগুলোকে মডেল করতে পারার ক্ষমতাই আসলে প্রব্লেম সল্ভিং স্কিল। মডেল করা বলতে কি বুঝাচ্ছি? আমাদের সবার জ্ঞানের পরিধি কিন্তু সীমিত। ধরে নিই, এই সীমিত জ্ঞানের পরিধিতে যেসব প্রক্রিয়া আমরা জানি বা পারি সেগুলো হচ্ছে আমাদের দক্ষতা, যাকে ইংরেজিতে আমরা Skill-set বলতে পারি। যেমন, কুমারের আছে মাটির পাত্র বানানোর দক্ষতা, কামারের আছে লোহা নিয়ে কাজ করার দক্ষতা, কৃষকের আছে চাষ করার দক্ষতা। কম্পিউটার বিজ্ঞানের ছাত্রদের আছে প্রোগ্রামিং, অ্যালগোরিদম, ডাটা-স্ট্রাকচার, ইত্যাদি বিষয়ক দক্ষতা। কোন একটা সমস্যাকে, নিজের দক্ষতা অনুযায়ী সমাধান করার জন্য, পরিবর্তিতরূপে চিন্তা করাটাই হল ঐ সমস্যাকে মডেল করা। মজার ব্যাপার হল, বিভিন্ন দক্ষতা মানুষের থাকলেও, প্রব্লেম সল্ভিং স্কিল বা সমস্যা সমাধানের দক্ষতা কিন্তু বেশিরভাগেরই নেই। (to be continued)"},{"type":"Blog","title":"FAQ of Competitive Programming/Programming Contest (কম্পিটিটিভ প্রোগ্রামিং/প্রোগ্রামিং কন্টেস্ট এর সচরাচর জিজ্ঞাস্য)","url":"/posts/2020/07/cp-faq/","date":"Jul 2020","meta":"Bangla · Competitive Programming CP","text":"অনলাইনে বিভিন্ন ফোরামে প্রায়শই বেশ কিছু প্রশ্ন ঘুরে ফিরে অনেকেই জিজ্ঞেস করেন। কম্পিটিটিভ প্রোগ্রামিং এর ব্যাপারে এসব কিছু প্রশ্ন (এবং কিছু সম্পূরক প্রশ্ন) এর উত্তর দেওয়ার জন্য এই ব্লগ। এই ব্লগের পুরো অংশেই ধারণা করে নেওয়া হচ্ছে যে প্রশ্নকর্তা প্রোগ্রামিং শিখতে চান কম্পিটিটিভ প্রোগ্রামিং বা কন্টেস্ট করার জন্য। অন্যান্য ক্ষেত্রে এই পরামর্শগুলো যথাযথ নাও হতে পারে। প্রশ্ন ১ঃ আমি প্রোগ্রামিং খুব একটা পারি না, কিভাবে শুরু করা উচিৎ? কোন ল্যাঙ্গুয়েজ শেখা শুরু করা উচিৎ? উত্তরঃ প্রোগ্রামিং এর বিভিন্ন ল্যাঙ্গুয়েজগুলো মধ্যে আসলে অনেক সাদৃশ্য আছে। যার কারণে একটি ল্যাঙ্গুয়েজ শিখলে অন্যটি শিখতে খুব বেশি সময় দরকার হয় না। তবে অবশ্যই কিছু স্পেশাল ল্যাঙ্গুয়েজ আছে, যেগুলো আমাদের মূলধারার প্রোগ্রামিং ল্যাঙ্গুয়েজগুলো থেকে অনেকখানিই আলাদা। যদি আপনার খুব বেশি কঠিন না মনে হয়ে থাকে, তাহলে আপনার সি/সি++ শেখা উচিৎ। কম্পিটিটিভ প্রোগ্রামিং এর জন্য এটি সবচেয়ে বহুল ব্যবহৃত এবং বেশিরভাগ বিচারক এই ল্যাঙ্গুয়েজেই কোড করে থাকেন। যদিও অন্যান্য ল্যাঙ্গুয়েজ যেমন, জাভা বা পাইথনও বিভিন্ন প্রোগ্রামিং কন্টেস্টে ব্যবহার করা হয়ে থাকে, কিন্তু সি/সি++ সার্বজনীন ভাবে প্রায় সব মূল ধারার প্রোগ্রামিং কন্টেস্টে ব্যবহৃত হয়। কাজেই আপনি যদি এর মধ্যেই অন্য কোন ল্যাঙ্গুয়েজ শেখার জন্য সময় না দিয়ে থাকেন, তাহলে সি/সি++ শেখাটাই হবে বুদ্ধিমানের কাজ। প্রশ্ন ২ঃ আমি সি/জাভা/পাইথন পারি। আমার কি সি++ শেখা উচিৎ? উত্তরঃ সি/জাভা/পাইথন ইত্যাদি ল্যাঙ্গুয়েজ দিয়ে কম্পিটিটিভ প্রোগ্রামিং করা খুবই সম্ভব। তবে কন্টেস্টে এর ক্ষেত্রে সি++ সবচেয়ে জনপ্রিয় ভাষা হওয়ার পিছনে কিছু কারণ রয়েছে। সি++ আসলে একমাত্র ল্যাঙ্গুয়েজ যেটি একই সাথে অনেক দ্রুত (প্রায় সি এর মত) এবং যার STL এর মত সমৃদ্ধ লাইব্রেরী আছে (জাভা/পাইথনের মত)। আসলে দুই ক্ষেত্রেই এটি একটি মধ্যম অবস্থা যার কারণে কন্টেস্ট্যান্টরা দ্রুত উন্নতি করতে পারে। সি বা জাভার সাথে সি++ এর সিনট্যাক্সের প্রচুর মিল থাকায়, শিখতে অতটা সময় লাগে না। পাইথনের সাথে যদিও মিল কম, কিন্তু পাইথনের ধীরগতি আসলে অনেক সময়ই কন্টেস্টের জন্য বেশ অসুবিধাজনক। তবে আমি সি++ শিখতে জোর দিয়ে চাই মূলত একটি কারণে। অনলাইনে কম্পিটিটিভ প্রোগ্রামিং এর যত রিসোর্স পাওয়া যায় তার ৯৫ ভাগের বেশি আসলে সি++ এর কথা মাথায় রেখে লেখা। কাজেই সি++ কোডাররা এইসব ক্ষেত্রে একটু অতিরিক্ত সুবিধাভোগী হন বলে আমার ধারনা। প্রশ্ন ৩ঃ সি++ এ আমার কি কি শেখা উচিৎ? উত্তরঃ প্রথম ধাপে, ভ্যারিয়েবল, ইফ-এলসইফ, লুপ, অ্যারে এবং স্ট্রিং পর্যন্ত শেখাই যথেষ্ঠ। এগুলো জানলে এবং ভালমত ব্যবহার করতে পারলে কন্টেস্টের প্রায় সব প্রব্লেমই সমাধান করা সম্ভব। দ্বিতীয় ধাপে, গুছিয়ে প্রোগ্রাম লেখার জন্য ফাংশন, স্ট্রাকচার ও STL (Standard Template Library) শেখা দরকার। তৃতীয় ধাপে, কিছু ডাটা স্ট্রাকচারের জন্য পয়েন্টার এবং ডায়নামিক মেমোরি অ্যালোকেশন শেখা দরকার হতে পারে। প্রোগ্রামিং এর অনেক উচ্চতর ধারণা আসলে কম্পিটিটিভ প্রোগ্রামিং এ ব্যবহার করে খুব একটা সুবিধা পাওয়া যায় না। যেমনঃ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, ফাংশনাল প্রোগ্রামিং ইত্যাদি। যেহেতু কন্টেস্টের বেশিরভাগ প্রোগ্রাম আসলে তুলনামূলক ছোট হয় কাজেই সেগুলোতে এইসব কৌশল ব্যবহার করার উপযোগিতা কম। এজন্যই সি++ এর ক্লাস বা অবজেক্ট ওরিয়েন্টেড বিষয়গুলো না জানলেও চলবে। সি++ এর সি সাবসেটটুকু এবং STL জানাটাই যথেষ্ঠ হবে। প্রশ্ন ৪ঃ সি++ কোন বই থেকে শিখলে সব থেকে ভাল হবে? উত্তরঃ বাংলা ইংরেজী যে কোন বই থেকেই শিখতে পারেন। বা অনলাইনেও সার্চ করে শিখতে পারেন। তবে একটু শেখার পর পরই নিজে নিজে সমস্যা সমাধানে গুরুত্ব দিতে হবে। না হলে শুধু পড়ে গেলে কোন লাভ হবে না। বাংলায়, তামিম শাহরিয়ার সুবিনের বইটি শুরু করার জন্য বেশ কাজের। এছাড়া eshikkha.net এও বাংলায় টিউটোরিয়ালের পাশাপাশি সমস্যা সমাধানের সুযোগ রয়েছে। ইংরেজী বই এর ক্ষেত্রে অনেকেই Herbert Schildt এর বইটি পছন্দ করেন। প্রশ্ন ৫ঃ কন্টেস্ট কখন এবং কিভাবে শুরু করা উচিৎ? আমার কি আগে প্রোগ্রামিং ভাষা পুরোপুরি আয়ত্ব্ করে তারপর কন্টেস্ট শুরু করা উচিৎ? উত্তরঃ কন্টেস্ট শুরু করার জন্য সবথেকে ভাল উপায় হল কোন একটা অনলাইন জাজ ব্যবহার শুরু করা। নিয়মিত প্রোগ্রামিং কন্টেস্ট হয় এরকম কিছু অনলাইন জাজ হলঃ codeforces.com codechef.com atcoder.com তবে শুরুতে এই জাজগুলোতে কন্টেস্ট করতে গেলে কঠিন মনে হওয়াটা খুব স্বাভাবিক। কাজেই যারা নতুন শুরু করছেন, তারা নিচের কোন একটি “সহজ” অনলাইন জাজ দিয়ে শুরু করতে পারেনঃ eshikkha.net urionlinejudge.com.br dimikoj.com algo.codemarshal.org/problems এর বাইরেও বেশ কিছু অনলাইন জাজ আছে, যেগুলোতে প্রচুর প্র্যাকটিস প্রব্লেম রয়েছে। ICPC বা সমমানের প্রতিযোগিতাগুলোতে ভাল করতে চাইলে এই জাজগুলোতে নিয়মিত প্র্যাকটিস করা বেশ জরুরী। এই জাজগুলো হলঃ lightoj.com onlinejudge.org spoj.com acm.timus.ru প্রোগ্রামিং এর সামান্য ধারণা হওয়া মাত্রই কোন একটি অনলাইন জাজ থেকে সমস্যা সমাধান করা শুরু করা দরকার। সে ক্ষেত্রে শুরুতে আপনি “সহজ” অনলাইন জাজগুলো দিয়ে শুরু করতে পারেন। আস্তে আস্তে স্কিল এবং কনফিডেন্স বৃদ্ধি পেলে তখন অন্যান্য অনলাইন জাজ থেকে সমস্যা সমাধান ও কন্টেস্ট করা শুরু করতে পারেন। প্রোগ্রামিং ভাষা ভালভাবে আয়ত্ব করার জন্যই আসলে বিভিন্ন জাজে সমস্যা সমাধান করা খুব জরুরী। কাজেই দেরি না করে, যত দ্রুত পারা যায় শুরু করে দেওয়াই উত্তম। প্রশ্ন ৬ঃ আমি প্রব্লেম পড়ে বুঝতে পারি না। কি করা উচিৎ? উত্তরঃ প্রব্লেম পড়ে না বুঝতে পারার আসলে বেশ কয়েকটি ধাপ আছে। আমাদের বেশিরভাগের ক্ষেত্রে যে সমস্যাটি হয় তা হল আমরা সাধারণত ইংরেজী পড়ে খুব বেশি অভ্যস্ত নই। বিশেষ করে যারা বাংলা মিডিয়াম স্কুল/কলেজ থেকে আসি, বা এখনো পড়ছি তাদের ক্ষেত্রে এই সমস্যা বেশ প্রকট। এই সমস্যার ক্ষেত্রে আসলে প্রচুর ইংরেজি প্রব্লেম পড়ার কোন বিকল্প নেই। এইজন্য শুরুতে খুব বেশি বাছাবাছি না করে, প্রতিদিনই কিছু কিছু প্রব্লেম পড়ার অভ্যাস করতে পারলে খুব কাজে দিবে। এক্ষেত্রে ঠিক বুঝতে পেরেছেন কিনা সেটা হয়ত আপনার কোন বন্ধু বা সিনিয়র কারো সাথে কথা বলে নিশ্চিত হয়ে নিতে পারেন। তবে আপনার ইংরেজীর দূর্বলতা যদি অনেক বেশি হয়, তাহলে ইংরেজী বই, মুভি এগুলো দেখলেও আপনি উপকার পেতে পারেন। খেয়াল রাখবেন ইংরেজী না শিখে, পাশ কাটিয়ে আপনি কিন্তু সমস্যা সমাধান করতে পারবেন না। কাজেই শুরুতে যদি কষ্ট হয়ও একটু ধৈর্য্য ধরে আপনাকে এই কাজগুলো করে যেতে হবে। প্রব্লেম ঠিক মত বুঝতে পেরেছেন কিনা, সেটা বোঝার জন্য প্রব্লেমের স্যাম্পল ইনপুটগুলো থেকে আউটপুট কিভাবে আসল সেটা খাতা কলমে লিখে যাচাই করতে পারেন। তবে সেটার পরেও যদি নিশ্চিত হতে চান, তাহলে কারো সাথে কথা বলতেই হবে। এ ক্ষেত্রে কাছের বন্ধু বা সিনিয়ররা সাহায্য করতে পারেন। এরকম কেউ না থাকলে ফেসবুকের বিভিন্ন প্রোগ্রামিং কন্টেস্ট সম্পর্কিত গ্রুপে জিজ্ঞেস করতে পারেন। তবে এরকম জায়গায় জিজ্ঞেস করার সময়, “কিছুই বুঝতে পারি নি, পুরোটা বুঝিয়ে দেন” এ ধরনের প্রশ্ন করলে সাহায্য পাওয়ার সম্ভাবনা কম। বরং ঠিক যে জায়গার আপনার খটকা লাগছে, সেটা তুলে ধরতে পারলেই আপনি উত্তর পেয়ে যাবেন। প্রশ্ন ৭ঃ আমি C/C++ শিখেছি। আমি প্রবলেম পড়ে লজিক বের করতে পারি। কিন্তু কোড করতে পারি না। এখন আমার কী করা উচিত? উত্তরঃ প্রোগ্রামিং শেখার পর যে কোন লজিককে কোড করতে গিয়ে শুরুতে অনেকেই আটকান। এই অবস্থার পরিবর্তনের জন্য আসলে এক একজনের ক্ষেত্রে এক এক রকম সময় লাগে। যদি আপনার কাছে মনে হয় যে আপনার এই সমস্যা এখনো আছে, তাহলে কোড কিভাবে করবেন সেটা বোঝার জন্য কারো সাহায্য নিতে পারেন। তবে সেক্ষেত্রে সরাসরি কোড না দেখে, হিন্ট নেওয়াটাই ভাল। সবচেয়ে ভাল হয় যদি আপনি যতটুকু কোড লিখেছেন সেখানে কোথায় ভুল আছে এবং সেটাকে কিভাবে আরো ভাল করা যায় সে ব্যাপারে কেউ আপনাকে সাহায্য করতে পারেন। এছাড়াও সমস্যা কাটিয়ে ওঠার জন্য একই ধরনের অনেক প্রব্লেমের কোড করাটাও জরুরী। প্রশ্ন ৮ঃ কোড করে যদি প্রব্লেম না মিলে তখন আমি ডিবাগ করে ভুল বের করতে পারি না। এই অবস্থা উন্নতির জন্য কি করব? উত্তরঃ ডিবাগিং একটা খুবই গুরুত্বপূর্ণ দক্ষতা। তবে বেশি প্র্যাকটিস করা হয় না বলে অনেক অভিজ্ঞ প্রোগ্রামারও ডিবাগিং এ দূর্বল থাকে। কোডের কোথায় ভুল আছে সেটি বোঝার জন্য কিছু টিপস নিচে দেওয়া হলঃ বিভিন্ন ইনপুট দিয়ে দেখা যেতে পারে। এক্ষেত্রে সাধারণত ইনপুটের সীমার সবচেয়ে ছোট বা বড় মানগুলো দিয়ে দেখা যায়। তবে এর বাইরেও বিভিন্ন রকম কেস দিয়ে চেষ্টা করা যায়। শুরুর দিকে ওভারফ্লো বেশ সমস্যা করে। কাজেই সেরকম কোন ইনপুট দিয়ে চেষ্টা করা যায় যে আপনার কোডে কোন ওভারফ্লো হচ্ছে কিনা। আপনার কোডটি উপর থেকে নিচে না পড়ে, বরং নিচ থেকে উপর দিকে পড়ুন। অনেক সময় এভাবে বানান ভুল বের হয়ে আসে। লজিক্যাল ভুল বের করার জন্য, আপনি কি করেছেন সেটা জোরে জোরে কাউকে বোঝানো খুব কাজের। এরকম ভাবে বোঝাতে গেলে অনেক সময় ভুলটি বের হয়ে আসে। যদি আপনার কাছে তখন কোন মানুষ না থাকে, তখন কেউ আছে এরকম ধরে নিয়েও যদি বোঝান সেটাও অনেক সময় কাজে লাগে। একে বলা হয় রাবার ডাক ডিবাগিং। ডিবাগিং এর দক্ষতা বৃদ্ধি করার জন্য বিভিন্ন ফোরাম বা গ্রুপে অন্য প্রোগ্রামাদেরকে সাহায্য করাটা বেশ কাজে দেয়। কারন এর মাধ্যমে অন্যদের কোড পড়ে তার ভুল বের করার দক্ষতা ব্রদ্ধি পায়। তবে, এক্ষেত্রে কোডের কোন লাইনটি ভুল সেটা না বলে আপনি যদি কোন ইনপুটের জন্য এই কোডটি ভুল আউটপুট দিবে সেটা বলতে পারেন তাহলে আপনি এবং যার প্রোগ্রাম তারা দুইজনই বেশি উপকৃত হবেন। প্রশ্ন ৯ঃ কোন প্রব্লেম না পারলে অন্যদের কোড কি দেখা উচিৎ? এডিটোরিয়াল কি সাথে সাথেই পড়া উচিৎ? উত্তরঃ একটি প্রব্লেম সমাধান করার আগ পর্যন্ত অন্য কারো কোড দেখা আসলে ক্ষতিকর। যথেষ্ট পরিমান চেষ্টা না করে এডিটোরিয়াল পড়াটাও আসলে কিছুটা ক্ষতি করে। আমি ব্যক্তিগতভাবে বিশ্বাস করি, নিজে থেকে কোন সমস্যা সমাধান করার জন্য পরিশ্রমটাই আসলে সবচেয়ে ভালভাবে শিখতে সাহায্য করে। তবে কোন একটি সমস্যা অনেকভাবে চেষ্টা করার পরও যদি সমাধান না করা যায়, তবে এডিটোরিয়াল পড়া যেতে পারে। তবে কখনই অন্য কারো কোড দেখে ঐ সমস্যা সমাধান করার চেষ্টা করা উচিৎ না। একেবারেই নিরুপায় হলে শেষ উপায় হিসাবে দেখা যেতে পারে। তবে আপনি যদি এডিটোরিয়াল পড়ে বা অন্য কোন হিন্ট দেখে/শুনে বুঝতে পারেন যে এই সমস্যার জন্য প্রয়োজনীয় অ্যালগোরিদমটি আপনার জানা নেই, সেক্ষেত্রে প্রথমে ঐ অ্যালগোরিদমটিকে আগে ভাল ভাবে বোঝার চেষ্টা করা উচিৎ। প্রয়োজনে ঐ অ্যালগোরিদম দিয়ে সমাধান করা যায় এমন সহজতর সমস্যা আগে সমাধান করে তারপর আবার এই প্রব্লেমটি সমাধান করার চেষ্টা করতে হবে। তবে একটি সমস্যা সমাধান করে ফেলার পর, অন্য (বিশেষ করে অভিজ্ঞ এবং পারদর্শী) কন্টেস্ট্যান্টরা সেটা কিভাবে সমাধান করেছে সেটা দেখা উচিৎ। এভাবে নতুন নতুন অনেক কিছু শেখা সম্ভব। এবং এই উপায়ে শেখা টেকনিকগুলো সাধারণত অনেকদিন মনে থাকে। বিগিনার অবস্থায় অনেক প্রব্লেমই না পারলে সাময়িক ভাবে বাদ দেওয়াটাও খারাপ নয়। ছয় মাস বা এক বছর পর আবার সেই প্রব্লেম চেষ্টা করা যেতে পারে। সেক্ষেত্রে সফল হলে নিজের উন্নতি সম্পর্কে আস্থা পাওয়া যায় যা বেশ উপকারী। প্রশ্ন ১০ঃ একজন বিগিনারের জন্য কোন অ্যালগোরিদম শুরুতে শেখা উচিৎ? উত্তরঃ একদম শুরুতে শেখার জন্য নাম্বার থিওরি, গ্রিডি, সর্টিং, সার্চিং এই অ্যালগোরিদম গুলো ভাল। এগুলোতে খুব বেশি কোডিং দরকার হয় না। আবার লজিক্যালি বুঝতেও বেশ সহজ। এগুলো দিয়ে করা যায় এমন প্রব্লেমও প্রচুর আছে। কোডিং এ একটু হাত পাকলে গ্রাফ, ডিপি, ডাটা স্ট্রাকচার এগুলোর বেসিক লেভেলের অ্যালগোরিদম শেখা যেতে পারে। প্রশ্ন ১১ঃ ভাল কম্পিটিটিভ প্রোগ্রামার হওয়ার জন্য দিনে কি পরিমাণ সময় প্রোগ্রামিং করা উচিত? কিভাবে প্র্যাকটিস করা উচিৎ? উত্তরঃ দিনে একটা নির্দিষ্ট ঘন্টা প্র্যাকটিস করতেই হবে এমন কোন কথা নেই। তবে প্রতিদিনই অল্প সময় হলেও দেওয়া উচিৎ। সেটা যদি এক ঘন্টাও হয় তাহলেও হবে। প্রব্লেম সমাধান করাটাকে একটা অভ্যাসে পরিণত করে নিতে পারলেই আপনি বেশি উপকৃত হবেন। যখন অন্যান্য কাজে অনেক বেশি ব্যস্ত থাকবেন, তখন সুযোগ করে একটা প্রব্লেম পড়ে সেটা চিন্তা করতে থাকবেন। তাহলে আপনার প্র্যাকটিসে বড় কোন ছেদ পরবে না। কাজেই মোটামুটি একটা রুটিন করে প্রতিদিনই প্র্যাকটিস করাটা জরুরী। ভাল করার জন্য অন্যান্য প্রোগ্রামারদের সাথে নিয়মিত কথা বলাটাও খুব উপকারী। আপনার থেকে বেশি ভাল করছেন এমন কারো সাথে কথা বললে আপনি নতুন নতুন জিনিস শিখতে পারবেন। আবার আপনি যাদের থেকে ভাল অবস্থায় আছেন তাদেরএক সাহায্য করতে গেলেও আপনি শিখবেন। কাউকে বোঝাতে গেলে আসলে আপনি যা পারেন তা আরো গভীর ভাবে বোঝা হয়, যা খুবই কাজের। তবে আইসিপিসি এর মত টিম কন্টেস্টে ভাল করার জন্য পাঁচ ঘন্টার টিম কন্টেস্ট বেশি বেশি করে প্র্যাকটিস করা খুব জরুরী। এতে টিমের অন্য মেম্বারদের সাথে বোঝাপড়া ভাল হয়। এবং পাঁচ ঘন্টা মাথা খাটানোর মত সহনশক্তিও গড়ে ওঠে। প্রশ্ন ১২ঃ আমি খুবই হতাশ। আমাকে দিয়ে কি প্রোগ্রামিং/কন্টেস্ট হবে? উত্তরঃ প্রোগ্রামিং কন্টেস্ট যারাই করেন তাদের মধ্যে হতাশা খুব স্বাভাবিক একটা বিষয়। আপনাদের বুঝতে হবে এই বিষয়টি সহজ নয়। এবং সহজ নয় বলেই এই কাজটিতে সাফল্য পেলে আমাদের বেশি ভাল লাগে। তবে এটিও মাথায় রাখতে হবে, কন্টেস্টে সাফল্য পাওয়া প্রায় সবারই এটার পেছনে বেশ বড় একটা সময় পরিশ্রম করতে হয়েছে। আপনি সেরকম সময় বা পরিশ্রম না দিলে সাফল্য পাওয়া কঠিন হবে এটাই স্বাভাবিক। মনে রাখবেন, প্রায় দুই তিন বছর নিয়মিত পরিশ্রম ছাড়া আইসিপিসিতে সাফল্য পাওয়ার নজীর খুব কম। ইউনিভার্সিটি প্রথম বর্ষেই যারা ভাল করে তাদের অনেকের ক্ষেত্রেই তারা আগে থেকে প্রোগ্রামিং বা অন্যান্য অলিম্পিয়াড করার অভিজ্ঞতা সম্পন্ন হয়ে থাকেন। কাজেই খামাকা অন্যদের সাথে তুলনা করে নিজের হতাশা বাড়াবেন না। আপনি যদি তুলনা করতেই চান, তবে আপনার তুলনা হবে সবসময় নিজের সাথে। চার থেকে ছয় মাস আগের আপনার সাথে এখনকার আপনার তুলনা করবেন। আপনি যদি পরিশ্রম করতে থাকেন, তাহলে আপনি সবসময়ই দেখবেন যে আগে আপনি যা পারতেন/জানতেন তার থেকে এখন বেশি পারেন/জানেন। যদি এই তুলনায় গিয়ে আপনি দেখেন যে আপনি একই জায়গাতেই আছেন, তাহলে আপনার প্র্যাকটিসের ধরন পরিবর্তন করতে হবে বা পরিশ্রম আরো বাড়াতে হবে। একটি বিষয় মাথায় রাখতে পারলে হয়ত আপনারা আর হতাশ হবেন না। প্রোগ্রামিং কন্টেস্টের মূল লক্ষ্য কিন্তু কন্টেস্টে সাফল্য পাওয়া বা ভাল কোন চাকরি পাওয়া না। এর মূল লক্ষ্য হল খুব কার্যকর ভাবে শিখতে সাহায্য করা। আপনি যদি সাফল্য খুব একটা নাও পান কিন্তু তিন চার বছর ধরে কন্টেস্টের জন্য প্র্যাকটিস করে যান তাহলে আপনি প্রচুর শিখবেন। এই শিক্ষা এবং দক্ষতা আর কোন উপায়ে সহজে অর্জন করা যায় না। বাংলাদেশের প্রেক্ষাপটে কম্পিউটার বিজ্ঞানের মৌলিক বিষয়গুলো আয়ত্ব করার জন্য এবং সমস্যা সমাধানের দক্ষতা অর্জন করার জন্য এর থেকে ভাল উপায় আমার এখন পর্যন্ত জানা নেই।"},{"type":"Publication","title":"Real-time 3D full body motion gesture recognition","url":"/publication/2013-12-robio-gesture","date":"2013","meta":"IEEE International Conference on Robotics and Biomimetics (ROBIO)","text":"Hasnain Heickal, Tao Zhang, and Md. Hasanuzzaman. \"Real-time 3D full body motion gesture recognition.\" IEEE ROBIO 2013, 798-803. Full-body gesture recognition with a Kinect, trained on 12 cricket-umpire gestures; reaches 98.11% accuracy with a neural-network classifier. Computer Vision Robotics HCI ABSTRACT Gesture is one of the fundamental way of human machine natural interaction. To understand this, system should be able to interpret 3D movements of human. This paper presents a real-time 3D full body gesture recognition system by tracking joints of head, neck, shoulder, arms, hands and legs. This tracking is done by Kinect motion sensor with OpenNI API and 3D full-body motion gestures are recognized. In this system, User to Kinect distance is adapted using proposed COG(center of gravity) correction method. Joint Position is normalized using the proposed 3D Joint position normalization method. For gesture recognition data mining classification algorithms such as Naive Bayes and Back Propagation Neural Network is used. The system is trained to recognize 12 gestures used by the umpires in a cricket match. It is tested with about 20000 frames of 15 users using 5-fold cross validation method. It achieved 98.11% accuracy with Neural Network based classifier and 88.84% accuracy with Naive Bayes classifier."},{"type":"Publication","title":"Computer Vision-Based Real-Time 3D Gesture Recognition Using Depth Image","url":"/publication/2015-02-ijig-gesture","date":"2015","meta":"International Journal of Image and Graphics","text":"Hasnain Heickal, Tao Zhang, and Md. Hasanuzzaman. \"Computer Vision-Based Real-Time 3D Gesture Recognition Using Depth Image.\" International Journal of Image and Graphics 15, no. 1 (2015): 1550004. Real-time 3D gesture recognition from depth images by tracking head, neck, shoulder, arm, hand and leg joints with a Kinect sensor, with centre-of-gravity correction and joint-position normalization. Computer Vision HCI ABSTRACT Gesture is one of the fundamental ways of human machine natural interaction. To understand gesture, the system should be able to interpret 3D movements of human. This paper presents a computer vision-based real-time 3D gesture recognition system using depth image which tracks 3D joint position of head, neck, shoulder, arms, hands and legs. This tracking is done by Kinect motion sensor with OpenNI API and 3D motion gesture is recognized using the movement trajectory of those joints. User to Kinect sensor distance is adapted using proposed center of gravity (COG) correction method and 3D joint position is normalized using proposed joint position normalization method. For gesture learning and recognition, data mining classification algorithms such as Naive Bayes and neural network is used. The system is trained to recognize 12 gestures used by umpires in a cricket match. It is trained and tested using about 2000 training instances for 12 gesture of 15 persons. The system is tested using 5-fold cross validation method and achieved 98.11% accuracy with neural network and 88.84% accuracy with Naive Bayes classification method."},{"type":"Publication","title":"SeqDev: An Algorithm for Constructing Genetic Elements Using Comparative Assembly","url":"/publication/2016-06-ptcb-seqdev","date":"2016","meta":"Plant Tissue Culture and Biotechnology","text":"Tanzilur Rahman, Hasnain Heickal, Sumaiya Tabrejee, M. M. K. Chowdhury, S. M. Sarwar, and Mohammad Shoyaib. \"SeqDev: An Algorithm for Constructing Genetic Elements Using Comparative Assembly.\" Plant Tissue Culture and Biotechnology 26, no. 1 (2016): 105-121. SeqDev builds contigs from raw reads using reference sequences, combining a weighted-frequency consensus (BlastAssemb) with suffix arrays and gap-filling search; demonstrated on Pokkali rice promoter sequences. Bioinformatics ABSTRACT With the availability of recent next generation sequencing technologies and their low cost, genomes of different organisms are being sequenced frequently. Therefore, quick assembly of genome, transcriptome, and target contigs from the raw data generated through the sequencing technologies has become necessary for better understanding of different biological systems. This article proposes an algorithm, namely SeqDev (Sequence Developer) for constructing contigs from raw reads using reference sequences. For this, we considered a weighted frequency?based consensus mechanism named BlastAssemb for primary construction of a sequence with gaps. Then, we adopted suffix array and proposed a gap filling search (GFS) algorithm for searching the missing sequences in the primary construct. For evaluating our algorithm, we have chosen Pokkali (rice) raw genome and Japonica (rice) as our reference data. Experimental results demonstrated that our proposed algorithm accurately constructs promoter sequences of Pokkali from its raw genome data. These constructed promoter sequences were 93 - 100% identical with the reference and also aligned with 96 - 100% of corresponding reference sequences with eValue ranging from 0.0 - 2e -14 . All these results indicated that our proposed method could be a potential algorithm to construct target contigs from raw sequences with the help of reference sequences. Further wet lab validation with specific Pokkali promoter sequence will boost this method as a robust algorithm for target contig assembly. Plant Tissue Cult. &amp; Biotech. 26(1): 105-121, 2016 (June)"},{"type":"Publication","title":"User Authentication from Mouse Movement Data Using Multiple Classifiers","url":"/publication/2017-02-icmlc-mouse","date":"2017","meta":"International Conference on Machine Learning and Computing (ICMLC)","text":"Masud Karim, Hasnain Heickal, and Md. Hasanuzzaman. \"User Authentication from Mouse Movement Data Using Multiple Classifiers.\" ICMLC 2017, 122-127. User authentication from mouse movement trajectories, using twelve movement features with SVM, k-nearest-neighbour and naive Bayes classifiers. Security ABSTRACT The biometric authentication is becoming very familiar due to its unique characteristics. This paper presents a user authentication system using mouse movement data. The mouse movement data are captured using an existing tool named Jitbit macro recorder. The acquired data are preprocessed and sampled into N blocks based on specific number of actions and stored in database. From each block twelve features are generated: Number of Points in the trajectory, Delay Time, Number of Delay, Number of Action, STDEV of Trajectory Length, Total Length of Trajectory, STDEV of Slope, STDEV of Slope to Slope Difference, Number of Curvatures, Curvature of Trajectory, Number of Changes in Horizontal Position and Number of Changes in Vertical Position. This system uses three separate classifiers: SVM, K-Nearest Neighbor and Naive Bayes to recognize the user. The system is trained and tested using a benchmark data. The experimental result shows that K-nearest Neighbor has the lowest error rate."},{"type":"Publication","title":"Segmentation of Heterogeneous Documents into Homogeneous Components using Morphological Operations","url":"/publication/2018-06-icis-segmentation","date":"2018","meta":"IEEE/ACIS International Conference on Computer and Information Science (ICIS)","text":"Nasid Habib Barna, Tisa Islam Erana, Shabbir Ahmed, and Hasnain Heickal. \"Segmentation of Heterogeneous Documents into Homogeneous Components using Morphological Operations.\" ICIS 2018, 513-518. A language-independent document segmentation system that splits printed pages into halftones and graphics, tables with their cells, and text blocks. Computer Vision ABSTRACT The research on document layout analysis has been widespread over a large arena recently and is craving for more efficiency day by day. Document segmentation is an important preprocessing step before analyzing the layouts. This paper presents a language-independent document segmentation system that segments a heterogeneous printed document into homogeneous components like halftones and graphics, texts and tables including its individual cells. From an input document page homogeneous components are segmented in three steps with three separate modules, which are- extraction of halftone images, extraction of tables and segmentation of text blocks. These modules altogether build the whole page segmentation system which takes an input image of heterogeneous document page and produces an output with explicitly indicated homogeneous segments with colored bounding boxes. The modules use morphological operations to detect the components. To improve the performance of image segmentation Residual Image Fragments Retrieval (RIFR) is proposed. The paper also proposes Text Extraction from Table Cells (TETC). Combining RIFR and TETC together we get an overall accuracy of 93%. Table and cell detection have a higher accuracy of 96% whereas image and texts have around 90% accuracy."},{"type":"Publication","title":"Deep Learning Based Bangla Speech-to-Text Conversion","url":"/publication/2018-07-stt_tt","date":"2018","meta":"2018 5th International Conference on Computational Science/Intelligence and Applied Informatics (CSII)","text":"Tausif, Md Tahsin, Sayontan Chowdhury, Md Shiplu Hawlader, Md Hasanuzzaman, and Hasnain Heickal. \"Deep learning based bangla speech-to-text conversion.\" In 2018 5th International Conference on Computational Science/Intelligence and Applied Informatics (CSII), pp. 49-54. IEEE, 2018. A Bangla (or Bengali) Speech-to-Text conversion system using deep recurrent neural networks. NLP & Speech ABSTRACT Speech-To-Text conversion is the process of recognizing speech in audio and producing a text transcript for it. Due to speech being such an intuitive medium of communication, this technology can have far reaching effects in easing the interaction between humans and machine. This paper presents a complete speech-to-text conversion system for the Bangla language (also known as Bengali) using Deep Recurrent Neural Networks. Possible optimization such as Broken Language Format has been proposed which is based on properties of the Bangla Language for reducing the training time of the network. A simple deep recurrent neural network architecture has been used for speech recognition. It was trained with collected data and which yielded over 95% accuracy in case of training data and 50% accuracy in case of testing data."},{"type":"Publication","title":"End-to-End Speech Synthesis for Bangla with Text Normalization","url":"/publication/2018-07-tts_ti","date":"2018","meta":"2018 5th International Conference on Computational Science/Intelligence and Applied Informatics (CSII)","text":"Pial, Tanzir Islam, Shahreen Salim Aunti, Shabbir Ahmed, and Hasnain Heickal. \"End-to-End Speech Synthesis for Bangla with Text Normalization.\" In 2018 5th International Conference on Computational Science/Intelligence and Applied Informatics (CSII), pp. 66-71. IEEE, 2018. An end-to-end speech synthesis system in Bangla (or Bengali) using minimal training and zero language specific knowledge. NLP & Speech ABSTRACT Text to speech synthesis is a well-researched area, yet no system has been developed which can claim to be as convincing as a human voice. An end-to-end system in the context of speech synthesis denotes a system capable of synthesizing speech from text using training data as minimal as transcribed audio data without any language-specific knowledge and phoneme dictionaries. But an end-to-end system should also have the capability to integrate any language-specific rules to improve its performance. In this paper, we propose an end-to-end speech synthesis system for Bangla (also known as Bengali) which uses a minimal front end and a neural network as its statistical parametric model. We also propose a Text Normalization Procedure(TNP) for Bangla and incorporate it to the end-to-end system. We have conducted extensive experiments using different models. From the feedback from the participants of the experiment, we have found out that they felt more positively towards the system if TNP is incorporated. A Wilcoxon signed-rank test was conducted to validate the results of the experiment and the probability of the results being like this because of experimental errors rather than TNP was calculated to be less than 5%."},{"type":"Publication","title":"A framework for developing graphically programmable low-cost robotics kit for classroom education","url":"/publication/2018-10-icetc-robotics","date":"2018","meta":"International Conference on Education Technology and Computers (ICETC)","text":"Mehedi Hasan Masum, Tanvir Shahriar Rifat, Saifuddin Md Tareeq, and Hasnain Heickal. \"A framework for developing graphically programmable low-cost robotics kit for classroom education.\" ICETC 2018, 22-26. A framework for building a low-cost educational robotics kit programmed through a visual language, so students can apply programming concepts without worrying about syntax. AI in Education Robotics ABSTRACT The purpose of this paper is to present a project that provides a framework to build educational robotics kit with low cost components and interface the kit with a visual programming language. A robotics kit is inaccessible to many third world schools due to its high cost. This paper provides a “Do It Yourself” (DIY) approach to produce graphically programmable robots with low cost components. The framework consists of the low-cost hardware components, back-end software and the visual programming editor to interface the hardware. The editor consists of interlocking graphical blocks to represent programming concepts such as Variables, Logical expressions, Conditions, Loops, Lists, Event Listeners, Parallel Programming and many more. Using this editor a student can graphically reprogram the robotics kit firmware and manipulate it. It allows young adults to apply programming concepts without having to worry about the syntax and makes programming easy and fun."},{"type":"Publication","title":"An Automatic Abstractive Text Summarization System","url":"/publication/2021-07-ats_barna","date":"2021","meta":"Dhaka University Journal of Applied Science and Engineering","text":"Barna, Nasid Habib, and Hasnain Heickal. \"An Automatic Abstractive Text Summarization System.\" Dhaka University Journal of Applied Science and Engineering 6, no. 2 (2021): 39-48. An abstractive text summarization system using pointer generator network and topical feature extraction. NLP & Speech ABSTRACT Abstractive text summarization is one of the most interesting problems in the research field of Natural Language Processing. Recent advances in sequence to sequence model have made it possible to apply new approaches for abstractive text summarization and perform significantly. But most of the existing systems suffer from some drawbacks like word repetition, producing inaccurate or irrelevant information etc. In this work we propose a novel architecture incorporating advanced word embedding layer and topical feature with a pointer generator network to generate more topic oriented summaries in a logically sequenced way. Adding a word embedding layer with the model can capture semantic features of words in the input sequence more accurately. Also our proposed system with incorporated topical features ensures that the summaries focus on the most important parts of the source document. We applied our model to the CNN/Daily Mail dataset and outperformed the baseline model by all the ROUGE"},{"type":"Publication","title":"Generating Feedback-Ladders for Logical Errors in Programming using Large Language Models","url":"/publication/2024-07-edm","date":"2024","meta":"Educational Data Mining","text":"Hasnain Heickal and Andrew Lan. \"Generating Feedback-Ladders for Logical Errors in Programming using Large Language Models.\" Educational Data Mining 2024, 947-951. Using large language models (LLMs) to generate a \"feedback-ladder,\" providing multiple levels of feedback for programming assignments based on student submissions. The approach aims to offer progressively detailed feedback while considering the learning context of students, addressing limitations of existing methods that provide overly direct, one-size-fits-all feedback. AI in Education LLMs ABSTRACT In feedback generation for logical errors in programming assignments, large language model (LLM)-based methods have shown great promise. These methods ask the LLM to generate feedback given the problem statement and a student’s (buggy) submission. There are several issues with these types of methods. First, the generated feedback messages are often too direct in revealing the error in the submission and thus diminish valuable opportunities for the student to learn. Second, they do not consider the student’s learning context, i.e., their previous submissions, current knowledge, etc. Third, they are not layered since existing methods use a single, shared prompt for all student submissions. In this paper, we explore using LLMs to generate a ``feedback-ladder’’, i.e., multiple levels of feedback for the same problem-submission pair. We evaluate the quality of the generated feedback-ladder via a user study with students, educators, and researchers. We have observed diminishing effectiveness for higher-level feedback and higher-scoring submissions overall in the study. In practice, our method enables teachers to select an appropriate level of feedback to show to a student based on their personal learning context, or in a progressive manner to go more detailed if a higher-level feedback fails to correct the student’s error."},{"type":"Publication","title":"Improving User Engagement and Learning Outcomes in LLM-Based Python Tutor: A Study of PACE","url":"/publication/2025-04-chi-pace","date":"2025","meta":"CHI Conference on Human Factors in Computing Systems (Extended Abstracts)","text":"Muhtasim Ibteda Shochcho, Mohammad Ashfaq Ur Rahman, Shadman Rohan, Ashraful Islam, Hasnain Heickal, AKM Mahbubur Rahman, M. Ashraful Amin, and Amin Ahsan Ali. \"Improving User Engagement and Learning Outcomes in LLM-Based Python Tutor: A Study of PACE.\" CHI EA 2025. PACE, a Python tutor built on small language models that gives step-by-step guidance and adaptive feedback, evaluated for engagement and learning outcomes. AI in Education LLMs HCI ABSTRACT Large Language Models (LLMs) are increasingly being adopted for educational applications, but sometimes, limited internet access and budget constraints restrict their accessibility. Small Language Models (SLMs) have emerged as viable alternatives, capable of providing effective tutoring in resource-constrained contexts. This paper introduces PACE (Python AI Companion for Enhanced Engagement), a system leveraging SLMs to deliver step-by-step guidance and adaptive feedback for teaching Python. An evaluation with varying levels of learners showed PACE’s effectiveness, achieving a System Usability Scale (SUS) score of 77.28. While participants were generally satisfied with its clarity and personalized feedback, they identified some areas for improvement, such as loss of context during lengthy conversations. This study examines (1) the PACE system’s effectiveness in programming education according to learners, (2) learners’ trust in PACE versus traditional resources, and (3) design recommendations to enhance engagement and learning outcomes. PACE contributes to advancing cost-effective, scalable programming education."},{"type":"Publication","title":"Learning Code-Edit Embeddings to Model Student Debugging Behavior","url":"/publication/2025-07-aied","date":"2025","meta":"International Conference on Artificial Intelligence in Education","text":"Hasnain Heickal and Andrew Lan. \"Learning Code-Edit Embeddings to Model Student Debugging Behavior\" International Conference on Artificial Intelligence in Education 2025, 91-98. This work presents an encoder–decoder model that learns code-edit embeddings from consecutive student submissions, using test case outcomes to fine-tune large language models. The approach enables personalized code suggestions that preserve student style while improving correctness, and reveals common debugging patterns through clustering analysis. AI in Education LLMs ABSTRACT Providing effective feedback for programming assignments in computer science education can be challenging: students solve problems by iteratively submitting code, executing it, and using limited feedback from the compiler or the auto-grader to debug. Analyzing student debugging behavior in this process may reveal important insights into their knowledge and inform better personalized support tools. In this work, we propose an encoder-decoder-based model that learns meaningful code-edit embeddings between consecutive student code submissions, to capture their debugging behavior. Our model leverages information on whether a student code submission passes each test case to fine-tune large language models (LLMs) to learn code editing representations. It enables personalized next-step code suggestions that maintain the student’s coding style while improving test case correctness. Our model also enables us to analyze student code-editing patterns to uncover common student errors and debugging behaviors, using clustering techniques. Experimental results on a real-world student code submission dataset demonstrate that our model excels at code reconstruction and personalized code suggestion while revealing interesting patterns in student debugging behavior."},{"type":"Publication","title":"A Classroom Study of LLM-Generated Feedback Intervention in Introductory Programming","url":"/publication/2026-07-iraise","date":"2026","meta":"IRAISE 2026, Festival of Learning (AIED, EDM & L@S)","text":"Hasnain Heickal and Andrew Lan. \"A Classroom Study of LLM-Generated Feedback Intervention in Introductory Programming.\" IRAISE 2026, Festival of Learning (AIED, EDM & L@S), 2026. A randomized classroom deployment comparing natural-language hints, AI-generated failing test cases and no AI feedback in introductory Python labs, with the ProgFeed dataset of 6,693 submissions from 215 students; natural-language feedback is linked to higher completion and faster convergence to correct solutions. AI in Education LLMs ABSTRACT Large language models (LLMs) are increasingly used to provide automated feedback in introductory programming courses, yet empirical evidence from authentic classroom deployments comparing different feedback modalities remains limited. In this work, we present a large-scale classroom study in which AI-generated feedback was deployed through a randomized protocol in an introductory Python programming course. Students received one of three feedback conditions on incorrect submissions: natural language hints, AI-generated failing test cases, or no AI feedback. We release the resulting dataset, ProgFeed, which captures 6,693 submissions from 215 consenting students across 17 labs, including feedback conditions, execution-based performance measures, and fine-grained temporal information. Using this data, we analyze learning trajectories, feedback quality, and submission behavior over repeated attempts. We find that natural language feedback is significantly associated with higher completion rates and faster convergence to correct solutions. Test case feedback, by contrast, exhibits heterogeneous effects that depend critically on feedback validity. Our results suggest that the form of AI-generated feedback matters, and that evaluating feedback quality – not just its presence – is essential for understanding its pedagogical impact."},{"type":"Teaching","title":"Lecturer in CSE, EU","url":"/teaching/2014-eu","date":"2014","meta":"Department of Computer Science and Engineering, Eastern University","text":"I have worked as a lecturer at the Department of Computer Science and Engineering at Eastern University for a semester."},{"type":"Teaching","title":"Lecturer in CSE, DU","url":"/teaching/2014-du","date":"2014","meta":"Department of Computer Science and Engineering, University of Dhaka","text":"I have worked as a lecturer in CSE, DU from May 2014 to February 2018. The courses I have taught are listed below. System Programming, Fall 2017 (Undergrad) Design and Analysis of Algorithms, Fall 2016 (Undergrad) Fundaments of Computers and Computing, Spring 2016 (Undergrad) Numerical Analysis, Fall 2015 (Undergrad) Distributed Systems, Fall 2015 (Undergrad) Programming Fundamentals, Spring 2015 (Undergrad) Distributed Systems, Fall 2014 (Undergrad)"},{"type":"Teaching","title":"Assistant Professor in CSE, DU","url":"/teaching/2018-du","date":"2018","meta":"Department of Computer Science and Engineering, University of Dhaka","text":"I have worked as an Assistant Professor in CSE, DU from February 2018 till now. Right now I am in study leave for the PhD. The courses I have taught are listed below. Design and Analysis of Algorithms - I, Fall 2020 (Undergrad) Data Structures and Algorithms, Spring 2020 (Undergrad) Fundamentals of Programming, Fall 2019 (Undergrad) Multivariable Calculus and Geometry, Spring 2019 (Undergrad) Advanced Algorithms, Fall 2018 (Grad) Design and Analysis of Algorithms - I, Fall 2018 (Undergrad) Data Structures and Algorithms, Spring 2018 (Undergrad)"},{"type":"Teaching","title":"Teaching Associate in CS, UMass Amherst","url":"/teaching/2026-teaching-associate-in-cs-umass-amherst/","date":"2025","meta":"Department of Computer Science, University of Massachusetts Amherst","text":"I have worked as a Teaching Associate in CS, UMass Amherst in Fall, 2025. I taught an undergraduate introductory programming course along with 5 other instructors. The course teaches Python to CS and non-CS majors. It had around 50 students. I delivered the lectures and created the labs."},{"type":"Page","title":"About me","url":"/","date":"","meta":"","text":"I am a MS/PhD student at UMass Amherst. I am interested to work on artificial intelligence systems to fascilitate and enhance educational outcomes for students. I come from Bangladesh, which is one of the most populous country in the world. Due to lack of resources, students suffer a lot in education. My vision is to build effective technological solutions which would enable students to learn and achieve excellence. I have worked as a judge and problem-setter in the ICPC Dhaka Regional and other national-level contests for many years. I had the honor of being the Judging Director of ICPC Dhaka Regional 2019, hosted by SEU, and I was a judge at the ICPC Asia West Final 2019. I was the team leader of the Bangladesh IOI team in 2014, and I worked as the academic coordinator for the National High School Programming Contest (NHSPC) from 2015 to 2017. My best memory as a contestant was winning NCPC 2011 with my team DU_Resonance (with Anna Fariha and Md. Shiplu Hawlader). Despite coming very close multiple times, I never qualified for the ICPC World Finals, but I coached teams from the University of Dhaka and Jahangirnagar University that made it there. I am more proud of those achievements."}
]
