ইদানিং কোডফোর্সেস এর বিভিন্ন পোস্টে এবং মন্তব্যে অনেকেই প্রোগ্রামিং কনটেস্টের সমালোচনা করছেন। সেগুলোর জবাবেই আমি এই নোট লিখছি।
এই বিষয়ে আমার দৃষ্টিভঙ্গি আসলে বেশ ইতিবাচক। আমি হয়তো বা পুরোপুরি নিরপেক্ষ হতে পারবো না - তারপরও চেষ্টা করছি।
আমি মাইক মির্জায়ানভ রাসিহোভিচ। আমাকে আপনি নাও চিনতে পারেন, আমি হচ্ছি সারাতভ স্টেট ইউনিভার্সিটির অলিম্পিয়াড ট্রেইনিং প্রোগ্রামের প্রধান। আমাকে বেশিরভাগ মানুষ চেনে কোডফোর্সেস প্রজেক্টের প্রতিষ্ঠাতা এবং দলনেতা হিসেবে। কোডফোর্সেস আমি বলবো আমার করা একটা দারুণ কাজ এবং খুবই আনন্দের সাথে জানাতে চাই, আমিই এর একমাত্র ডেভেলপার নই - আমার একটা অসাধারণ ডেভেলপার টিম আছে। আমি অনেকদিন ধরে প্রোগ্রামিং কনটেস্টের সাথে জড়িত, যতদূর মনে পড়ে বিশ্ববিদ্যালয়ের প্রথম বছর থেকেই। এসিএম আইসিপিসির ফাইনালে আমি ভালো করেছি, আমার কোচ করা দলগুলোও উল্লেখযোগ্য সাফল্য পেয়েছে। আমি বলতে পারি যে, আমি প্রোগ্রামিং কনটেস্টের একদম ভিতরের একজন লোক। ‘কমার্শিয়াল প্রোগ্রামিং‘ কেও আমি বেশ কাছ থেকে দেখেছি। প্রায় ছ‘মাসের মতো SaaS-প্রোডাক্ট কোম্পানি গ্রিড-ডায়নামিক্সের একটা গ্রুপের নেতৃত্বে ছিলাম। উল্লেখ্য, কোডফোর্সেসও আসলে বিশাল অংশে একটা ইন্ডাস্ট্রিয়াল এবং ইঞ্জিনিয়ারিং ডিজাইন।
যাই হোক, মূল প্রসংঙ্গে ফিরে আসি। দশ বছরেরও বেশি সময় প্রোগ্রামিং কনটেস্টের সাথে কমবেশি জড়িত থাকার পর আমার অভিমত হচ্ছে, প্রোগ্রামিং কনটেস্ট ছাত্রদের জন্যে খুবই গুরুত্বপূর্ণ এবং লাভজনক। আমি এর কারণগুলো কোন বিশেষ ক্রম না মেনে একে একে বলছি।
১. প্রোগ্রামিং কনটেস্ট অ্যালগোরিদম শেখায়। আমাদের দেশে অলিম্পিয়াড (বা কনটেস্ট) ছাড়া প্রায় কোথাওই ভালোভাবে অ্যালগোরিদম শেখানো হয় না। হয়তো দু-একটা ব্যতিক্রম আছে। প্রোগ্রামিং কনটেস্ট এমন একটা আন্দোলন, যেটা থেকে একটা ছেলে বা মেয়ে শিখতে পারে ডায়নামিক প্রোগ্রামিং, ডাটা স্ট্রাকচার, স্ট্রিং অ্যালগোরিদম - এরকম আরো অনেক কিছু। লক্ষণীয় ব্যাপার হল, কনটেস্টেন্টরা রেফারেন্স হিসেবে অনেকেই কোরমেনের বই অনুসরণ করে - যেটা আমাদের দেশের অ্যালগোরিদম কোর্সের পাঠ্যবই। কিন্তু এখানে (আমার বিশ্বাস বাইরের দেশেও) এই রকম একটা কোর্সে যথেষ্ট গভীরে গিয়ে পড়ানো হয় না এবং এই তত্ত্বীয় জ্ঞানের ব্যবহারিক প্রয়োগ কৌশলও খুব একটা শেখানো হয় না। অন্যদিকে এই অ্যালগরিদম বা ডাটা স্ট্রাকচারগুলোকে বাস্তব পৃথিবীর সমস্যা সমাধানের জন্য ব্যবহার করতে সক্ষম হওয়াই হচ্ছে প্রোগ্রামিং কন্টেস্টের মূল ব্যাপার।
২. কনটেস্ট দিয়েই অনেকে প্রোগ্রামিং শুরু করে। আমার ছাত্রদের মধ্যে এরকম অনেকেই ছিল যারা আগে প্রোগ্রামার ছিল না। কেউ কেউ ম্যাথ করত, কয়েকজন আবার ছিল গেমার। এইরকম ব্যাকগ্রাউন্ডের ছেলেমেয়েরা অনেকেই খুব আগ্রহ জাগানোর মতো ইন্টারেস্টিং প্রবলেম দেখে বা কন্টেস্টের খবর পেয়ে প্রোগ্রামিংয়ে আগ্রহী হয়। যেহেতু এখন আইটি ইন্ডাস্ট্রি অত্যন্ত দ্রুত এগিয়ে যাচ্ছে, কাজের ভালো সুযোগও তৈরি হচ্ছে। ফ্রেশ গ্র্যাজুয়েট প্রোগ্রামারদের ভালো বেতনের চাকুরী মোটামুটি নিশ্চিত। আমার দৃঢ় বিশ্বাস, যদি প্রোগ্রামিং কনটেস্ট না থাকতো, তাহলে ওরা হয়তো প্রোগ্রামিং শুরু করতো আরো কম ইন্টারেস্টিং বা কম সৃজনশীল পথে। অথবা তারা প্রোগ্রামিং এ আসার আগ্রহই হয়তো পেতো না।
৩. প্রোগ্রামিং কনটেস্ট প্রোগ্রামারদের বাগ-ফ্রি কোড লিখতে শেখায়, সব ধরণের কেস চিন্তা করতে শেখায়, শেখায় প্রোডাক্টিভ হতে। আমি এরকম অনেক দেখেছি, একজন নন কনটেস্টেন্ট ডেভেলপার কোড লিখছে, ব্রাউজার রিফ্রেশ করছে (ক্লিক করছে, ফর্ম ফিল আপ করছে) এবং শেষে চেঁচিয়ে উঠছে “ধুর ছাই” বলে। তারপর সবকিছু আবার একদম গোড়া থেকে শুরু থেকে করছে। এই ব্যাপারটা তার জন্যে খুবই স্বাভাবিক। ঠিক একই জায়গায় একটা প্রোগ্রামিং কন্টেস্টেন্ট হয়তো হুবহু এই কাজগুলো করবে না। কারণ প্রোগ্রামিং কনটেস্টেন্টরা ডিবাগিং যাতে না লাগে (অথবা কম লাগে) সেজন্যে শুরুতেই বাগ-ফ্রি কোড লেখার চেষ্টা করে।
৪. প্রোগ্রামিং কনটেস্টের খুব গুরুত্বপূর্ণ দিক হচ্ছে এটা টিমওয়ার্ক শেখায়। একা কাজ করা আর একটা দলে অন্য মানুষদের সাথে কাজ করা - এই দুইয়ের মাঝে বিস্তর ফারাক। কোন কিছু নিয়ে অন্যদের সাথে মিলেমিশে গঠনমূলক আলোচনা করা এবং কোন সমস্যার সমাধান বের করা - এই ব্যাপারগুলো সবার মধ্যে সহজাতভাবে থাকে না। টিম কনটেস্ট এই জিনিসগুলো শেখায়। শেখায় অন্যদের কথা শুনতে, তাদের শক্তিমত্তা, দূর্বলতা এবং ব্যক্তিগত বৈশিষ্ট্যগুলোকে মাথায় রাখতে।
৫. প্রোগ্রামিং কনটেস্টেন্টদের বেসিকের ভিত মজবুত থাকে। তাছাড়া কনটেস্ট প্রাতিষ্ঠানিক শিক্ষা ছাড়া বেড়ে ওঠা প্রোগ্রামারদের বেসিক জিনিসগুলো শেখায়। আমি একবার একটা চাকরীর ইন্টারভিউ নিতে গিয়েছিলাম। অনেকেই বলতে পেরেছিল ডেটাবেইজ ইন্ডেক্স কি, কিন্তু খুব কম জনই বলতে পেরেছিল এটা কিভাবে ইমপ্লিমেন্ট করা যায় (অন্তত অ্যাপ্রক্সিমেটলি)। আপনি কি বলবেন, এটা জানার কোন প্রয়োজন নেই? আমি অনেককেই দেখেছি অনেক কনসেপ্ট, আর্কিটেকচার বা প্যাটার্ন জানে কিন্তু খুব সহজ কোন অ্যালগোরিদমের কম্পলেক্সিটি ক্যালকুলেট করে বের করতে পারে না।
৬. প্রোগ্রামিং কনটেস্ট থেকে পাওয়া মেডেল/সার্টিফিকেট ভালো চাকরি পেতে সাহায্য করে।
৭. প্রোগ্রামিং কনটেস্ট খুব ইন্টারেস্টিং মানুষজনের বন্ধুত্ব করার সুযোগ তৈরি করে। আমার সবচেয়ে কাছের বন্ধুরা - আমার প্রোগ্রামিং টিমমেটরা, যাদের সাথে থেকে আমি শিখেছি, যাদের কাছ থেকে শিখেছি। এরা সবাই খুবই ইন্টারেস্টিং, শিক্ষিত এবং চমৎকার কিছু মানুষ।
৮. শুধু বন্ধুত্ব নয়, কনটেস্ট করে অনেক ধরণের মানুষের সাথে পরিচিত হওয়া যায়। এই পরিচিতি যে কোন সময়ে কাজে লাগতে পারে।
৯. প্রোগ্রামিং কনটেস্ট ভ্রমণের সুযোগ করে দিতে পারে।
১০. প্রোগ্রামিং কনটেস্ট দ্রুত চিন্তা করতে শেখায়।
১১. খুব বেশি জায়গা নেই যেটাতে আমাদের দেশ (বা বিশ্ববিদ্যালয়) বিশ্বের আর সবার চাইতে এগিয়ে। দেশের (বা স্কুল বা বিশ্ববিদ্যালয়ের) এই রকম কোন অর্জনে আপনি যদি কোন ভূমিকা রাখতে পারেন, সেটা হবে ভীষণ মর্যাদাপূর্ণ এবং আপনি না চাইলেও সবার শ্রদ্ধা পাবেন। আমার ছাত্ররা যখন তাদের কোন পুরষ্কার নিতে মঞ্চে ওঠে, আমি আমার বুকের মাঝে তীব্র দেশপ্রেম অনুভব করি । যারা দেশের জন্যে গৌরব বয়ে আনে, তারা সত্যিকারের দেশপ্রেমিক। এই জয়গুলো খুব দরকারি - একটা ইতিবাচক ধারণা তৈরি করার জন্য। যেটা ছাড়া একটা অঞ্চলে বিনিয়োগ আকৃষ্ট করা বা ঐ অঞ্চলের সম্ভাবনা ফুটিয়ে তোলা কঠিন।
১২. প্রোগ্রামিং কনটেস্টেন্টদের মধ্যে একটা প্রথা চালু আছে। পুরনো কন্টেস্টেন্টরা বিশ্ববিদ্যালয়েই থেকে যান এবং শিক্ষকতা করেন। এটা খুবই প্রয়োজনীয় এবং খুবই ঠিক কাজ। মানতেই হবে, প্রোগ্রামিং খুবই পরিবর্তনশীল একটা ক্ষেত্র এবং প্রাচীনপন্থী বুড়ো প্রফেসররা নিত্যনতুন জ্ঞান দিতে পারেন না। তরুণ বিশ্ববিদ্যালয় শিক্ষকদের সম্পৃক্ততা - আইটি-শিক্ষা উন্নতির একমাত্র উপায়। দেখা গেছে সেরা গ্র্যাজুয়েটদের বিশ্ববিদ্যালয় ছেড়ে না যাবার পেছনে প্রোগ্রামিং কনটেস্টের একটা ভূমিকা আছে। এটা দারুণ একটা ব্যাপার।
১৩. প্রোগ্রামিং কনটেস্ট খুবই ইন্টারেস্টিং একটা জিনিস! প্রোগ্রামিং কন্টেস্টের সেই মুহুর্তগুলোকে আমি কখনো ভুলতে পারি না, যখন একটা প্রবলেম সলভ করার পর আমরা ওয়ার্ল্ড র্যাঙ্কিংয়ের শীর্ষে চলে গিয়েছিলাম। আমরা জানতাম চীনারা আমাদের ঘাড়ে নিঃশ্বাস ফেলছে…। কনটেস্ট থেকে আমি অনেক গুরুত্বপূর্ণ এবং ইন্টারেস্টিং জিনিস শিখেছি।
১৪. প্রোগ্রামিং কনটেস্টে ইন্ডাস্ট্রিয়াল ডেভেলপমেন্টের কিছু শেখানো হয় না ঠিক, কিন্তু দেখা গেছে যারা কনটেস্ট করেছে তারা খুব তাড়াতাড়িই সব কিছু শিখে নিতে পারছে। নিজ থেকে শেখা, দ্রুত চিন্তা করতে পারা এবং দ্রুত কোড করতে পারার কারণেই তাদের পক্ষে এটা সম্ভব হচ্ছে।
১৫. বিভিন্ন আইটি কোম্পানির ইন্টারভিউতে যেসব পাজল সলভ করতে দেওয়া হয়, সেগুলো প্রোগ্রামিং কনটেস্টেন্টদের পক্ষে সলভ করা সাধারণত খুব সহজ হয়। এধরণের কোম্পানিগুলো এমন লোকজন চায়, যারা কেবল কোন নির্দিষ্ট ল্যাঙ্গুয়েজ বা ফ্রেমওয়ার্কই জানে না, নিজে থেকে চিন্তাও করতে জানে।
এটা সত্যি যে, প্রোগ্রামিং কনটেস্টে উল্লেখযোগ্য সাফল্য পায় খুব কম ছাত্রই। এবং সেটা তারা পায় তাদের মেধা, পার্ফরমেন্স, ট্রেইনিং এবং কনটেস্ট করে যেসব অ্যালগরিদম আর টেকনিক শিখেছে, সেসবের জোরেই। হয়তো এই অল্প কিছু মানুষের সাফল্য পাওয়াটা আপনাদের অনেকের কাছেই প্রোগ্রামিং কনটেস্টের মূল্যকে কমিয়ে দিচ্ছে। কিন্তু ভুলে যাবেন না, প্রোগ্রামিং কনটেস্টের সাথে অনেকেই জড়িত, ছাত্রদের একটা বিশাল বাহিনী আছে, যাদের কাছে প্রোগ্রামিং কনটেস্ট ইন্টারেস্টিং, কাজের এবং প্রয়োজনীয়। আপনাদের যদি মনে হয় প্রোগ্রামিং কন্টেস্ট কোন কাজের কিছু না - বেশ তো, সেক্ষেত্রে আপনারা প্রোগ্রামিং কন্টেস্ট নাই করলেন! :) অনুগ্রহ করে বাকি সবার হয়ে সিদ্ধান্ত নেবেন না।
সবশেষে বলবো, সারাতভ স্টেট ইউনিভার্সিটির অলিম্পিয়াড ট্রেইনিং প্রোগ্রামে অনেক ছাত্রকে আমরা ট্রেইন করি। এদের মধ্যে অনেকেই কোনভাবেই আমাদের বিশ্ববিদ্যালয়ের সাথে জড়িত না। আমরা লেকচার দিই, কনটেস্ট নিই। আমরা প্রতিনিয়ত ছাত্রদের সময়ের সাথে সাথে আরো ভালো হয়ে উঠতে দেখি। আমাদের খুব বিরক্ত লাগে যখন কাউকে কাউকে বলতে শুনি যে, প্রোগ্রামিং কনটেস্টের কোন দরকার নেই। হ্যাঁ, আমাদের ছাত্রদের একটা বড় অংশ কোন পুরষ্কার পাবে না, কিন্তু সবাই একটা স্কিলসেট নিয়ে এখান থেকে বের হবে। এবং আমাদের এই প্রোগ্রামে তারা এটা পেয়ে যাচ্ছে বিনামূল্যে, খুব ইন্টারেস্টিং উপায়ে। এই যে ‘অপ্রয়োজনীয়‘ শিক্ষাটা, এটা ছাত্রদের চাকরি পেতে এবং চাকরীক্ষেত্রে অন্যদের তুলনায় এগিয়ে রাখছে। ছাত্রদের শেখাবার এর চাইতে ভালো উপায় আর কীইবা হতে পারে?