Thursday, April 7, 2016

Programming Interview with A Asif Khan Chowdhury

ইন্টারভিউ সিরিজের আগের লিখাগুলা এই লিঙ্কে পাওয়া যাবে । প্রোগ্রামিং কন্টেস্ট এর ব্যাপারে প্রথম কিভাবে জানছিলা মনে আছে ?
প্রোগ্রামিং কনটেস্টের ব্যাপারে শুনছি প্রথম রুয়েটে এসেই। কিন্তু প্রোগ্রামিং ল্যাংগুয়েজ ব্যবহার করে প্রবলেম সলভিং করার ব্যাপারটা জানছিলাম HSC এর প্রথম বর্ষেই। আমার একটা ফ্রেন্ড শুভর মাধ্যমে। সেই প্রথম আমাকে কম্পিউটার সায়েন্সের মজাটা বুঝিয়েছিলো। তার সাথে থেকেই বিভিন্ন ছোটখাটো প্রবলেম সলভ করছিলাম, যদিও তখন competitive programming এর বিশাল জগৎ সম্পর্কে কিছুই জানতাম না। DOS স্ক্রীনে C দিয়ে “Hello World” লিখেই বুঝতে পারছিলাম যে এটা নিয়েই পড়াশুনা করতে চাই।


প্রথম অনসাইট কনটেস্ট কথা মনে আছে ?
আসলে জীবনের প্রথম কনটেস্টই ছিলো ICPC. তখন রুয়েট থেকে আসার মত টীম ছিলো না খুব বেশি। তাই সুযোগ পেয়ে গেছিলাম। ওই সময় কনটেস্ট PC^2 এ হতো। মজার বিষয় হলো আমরা আগে কখনও PC^2 দেখিও না। অনেক সময় গেছিলো PC^2 এ সাবমিট কিভাবে করে সেটা বুঝতে। :D


প্রোগ্রামিং কনটেস্ট এ কোন মজার কোন স্মৃতি আছে যেইটা মনে করলে এখনো হাঁসি পায় ?
মজার একটা স্মৃতি ছিলো ICPC-2013 তে। ঢাবির শাফায়েত ভাইয়াদের টীম কনটেস্ট শেষ হওয়ার এক ঘন্টা আগে ৬ প্রবলেম সলভ করে সবার আগে ছিলো। ভাইয়া আমাদের সামনেই বসেছিলেন, আমি উনাকে উঠে দাড়িয়ে তখনই কংগ্রাচুলেট করা শুরু করছিলাম। ভাইয়া রীতিমত লজ্জায় পড়ে গেছিলেন এটা দেখে। কনটেস্ট শেষ হওয়ার পর দেখি ভাইয়াদের টীম আর একটা সলভ করতে পারে নাই, SUST_Attoprottoyee ৭ টা প্রবলেম সলভ করে চ্যাম্পিওন হয়েছিলো। কনটেস্ট শেষে শাফায়েত ভাই আমার দিকে একটা দৃষ্টি নিয়ে তাকিয়েছিলো সেটা দেখে খুব লজ্জায় পড়ছিলাম। তারপর ভাইয়ার সাথে লজ্জায় আর কখনও কথা বলতে পারি না। কথাগুলো মনে পড়লে এখনও খুব মজা (এবং লজ্জাও) পাই।

কি টাইপের প্রবলেম সল্ভ করতে বেশি  ভাল লাগে ?
DP এবং algorithmic প্রবলেম সলভ করতে খুব বেশি ভালো লাগে। তবে যেকোন টপিকেই নতুন কিছু শিখে ম্যারাথন দিয়ে প্রবলেম সলভ করতে পছন্দ করি।

কোন প্রবলেম সল্ভ এর সময় "Thinking Process" কি থাকে প্রবলেম পড়ার পর ?
শাহরিয়ার মঞ্জুর ভাইয়ের কাছ থেকে প্রবলেম সলভ করার একটা পদ্ধতি শিখছিলাম, LDC (Learn, Divide, Convert). Basically এই পদ্ধতির প্রথম ধাপে প্রবলেমটা ভাল ভাবে শেখা, testcases নিয়ে নড়াচড়া করে দেখা হয় কিভাবে সলুশন আসতেছে। দ্বিতীয় ধাপে প্রবলেমটাকে ছোট ছোট sub-problem এ ভাগ করা হয়। কোন একটা sub-problem যদি মনে হয় সলভ করার আইডিয়া নাই তাইলে প্রবলেম skip করা। তৃতীয় ধাপে আছে convert, এটার মানে হলো sub-problem গুলো known বিভিন্ন প্রবলেমের সাথে মিল রেখে step-by-step সলভ করার চেষ্টা করা।


কোন প্রবলেম Accepted না হলে কি কি ব্যাপার দেখেন ?    
কয়েকটা কাজ করে দেখি যেমন, প্রথমে type check করি, overflow হয় কিনা দেখি, constrains গুলো ভাল ভাবে চেক করি। যদি তাতেও কাজ না হয় তখন প্রবলেমটাতে খুটিনাটি বিষয়গুলো ঘেটে দেখি। তারপর brute force কোড করি তারপর random case এর জন্য brute force আর আমার সুলশনের সাথে মিলিয়ে পার্থক্যগুলো দেখি।

অনেক সময় দেখা যায় কয়েকদিন কারো কনটেস্ট ভাল না হইলে অনেক এ হতাশ হয়ে কনটেস্ট ছেড়ে দেয় বা অন্যভাবেও বলা হয় সব কনটেস্টেন এর লাইফে হতাশার একটা পিরিয়ড থাকে , এই সময় কিভাবে নিজেকে মোটিভেট করা উচিত ?
আমার পরিচিত এমন কোন প্রবলেম সলভার দেখি নাই যারা প্রবলেম সলভিং করতে গিয়ে মাঝপথে হতাশ হয় নাই। Competitive programming এবং হতাশা হাতে হাত রেখে চলে। এই সময় যারা ছেড়ে দিয়েছে তাদের অনেকের সাথে কথা বলে দেখেছি, সবারই একটাই মন্তব্য থাকে তারা এটা ছেড়ে দিয়ে ভুল কাজ করেছে, এই ব্যাপারটা মাথায় রাখলে মনে হয় মোটিভেটেড থাকা যাবে। আবার যারা ফলাফলের আশায় প্রবলেম সলভিং করে তারা আরও বেশি হতাশ হয়। প্রবলেম সলভিং ক্রিকেট-ফুটবল-টেবিল টেনিস ইত্যাদি খেলার মত করেই দেখা উচিৎ। তুমি মজা পাও বলে প্রবলেম সলভিং করো, রেজাল্টের আশায় না। :)
আইওআই যারা না করে ভার্সিটি থেকে কনটেস্ট করে তারা দেখা যায় আইওআই যারা করেছেন তাদের থেকে পিছাইয়া থাকে , অনেক সময়ই পিছাইয়াই থাকে । যারা ভার্সিটি তে মাত্র কনটেস্ট নিয়ে জানল তাদের কি করা উচিত এই দুরুত্ব কমানোর জন্য ?
এটা ঠিক যে তারা পিছিয়ে থাকে। তবে এই পিছিয়ে থাকাটা রিকভার যায় না এটা ভাবাটা ভুল হবে, শুধু dedication টা বেশি থাকতে হবে অন্যদের চেয়ে। বাংলাদেশের competitive programming এ যত কিংবদন্তি আছে তাদের সিংহভাগই তো IOI করেন নাই।

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

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



প্রোগ্রামিং কনটেস্ট এ ইন্সপারেশন এর কেউ আছে , কাউকে ফলো করতে ?
আমি মোটামুটি সবাইকেই, যারা প্রবলেম সলভ করতে পছন্দ করেন তাদেরকে, ইন্সপারেশন হিসেবে দেখি। তবে তালিকায় প্রথমে যারা আছেন তারা হলেন শান্ত ভাইয়া, শাহরিয়ার মঞ্জুর ভাইয়া, রুয়েটের সামাদ ভাইয়া (তাকে ছাড়া হয়তো আমরা কেও competitive programming জড়িত হইতেই পারতাম না), মইনুল শাওন, সাকিব, মারুফ, ধনঞ্জয়, শাকিল ( :) ), শাফায়েত ভাইয়া, জুবায়ের ভাইয়া, নাফিস এবং আরও অনেককেই।


নতুন যারা কনটেস্ট শুরু করতেছে তাদের কোন সাজেশন ? কিভাবে ভাল করবে ?
আসলে কনটেস্টে ভাল করার কোন শর্টকাট কেও দেখাতে মনে হয় পারবে না। প্রচুর প্রবলেম সলভ করতে হবে ভাল করতে হলে। অনেক টেকনিক আর অ্যালগরিদম শিখতে হবে। আর অবশ্যই যেটা মাথায় রাখতে হবে প্রবলেম সলভাররা অন্যদেরকে সাহায্য করতে সব সময় প্রস্তুত থাকে। একা একা কোন জিনিস শিখতে অনেক সময় লাগতে পারে, সেখানে যারা আরও বেশি এক্সপেরিয়েন্সড তাদের কাছ থেকে শিখে নিলে সময়টা অনেক কম লাগবে। এমনকি প্রবলেম সলভারদের জীবনে করা ভুলগুলো শুনলেও অনেক কিছু শিখতে পারবে, অনেক ভুল আগে থেকেই শুধরে নিতে পারবে। সুতরাং সব সময় শেখার জন্য open mind রাখা উচিৎ।
রুয়েট এর কনটেস্ট কালচার তৈরির জন্য অনেক কষ্ট করছ এবং করে যাচ্ছ। আগামী ২/৩ বছর পর রুয়েটকে কোথায় দেখতে চাও ?
রুয়েট থেকে অনেক কিছু পেয়েছি, শিখতে পারছি। স্বপ্ন ছিল একদিনের যেদিন দেখবো আমারই ছোট ভাইগুলো WF করতেছে। এই স্বপ্নের জন্য যতটুকু করতে পেরেছি ততটুকু করেছি। তবে আরও অনেক কিছু করার ইচ্ছা ছিলো যেগুলো করে যেতে পারি নাই।
রুয়েটের জুনিয়ররা এখন অনেক আগ্রহী কনটেস্ট করতে। এত বিশাল সংখ্যক কনটেস্টেন্ট রুয়েট কখনও দেখে নাই এর আগে। তাদের পরিশ্রম দেখে অনেক ভালই লাগে। ইনশা’আল্লাহ সামনে ১-২ বছরের মধ্যে অনেক ভাল একটা পজিশনে দেখতে পারবো রুয়েটকে। :)

প্রোগ্রামিং বাদে কোন হবি ? ফ্রি টাইমে কি করেন ? 
আমি প্রচুর মুভি আর টিভি সিরিজ দেখি ফাকা সময়ে। ইদানিং youtube এ মুভি ট্রেইলারস, টেক, সায়েন্স videos ইত্যাদি দেখে ফাকা সময় কাটাচ্ছি। :P




2 comments:

  1. One Of The Legend Of RUET. Thanks a lot Asif Vai For Your Dedication.

    ReplyDelete
  2. আমাদের আসিফ ভাই। ^_^

    ReplyDelete