Go Back to All Articles ইউনিভার্সিটি লাইফে আমাদের কি শুধু এলগরিদম ও প্রবলেম সল্ভিং শেখা উচিৎ

আজকে একটা বিষয়ে লিখছি। বিষয়টা হল ইউনিভার্সিটি লাইফে আমাদের কি শুধু এলগরিদম ও প্রবলেম সল্ভিং শেখা উচিৎ কিনা।

আমি আমার নিজের ইউনিভার্সিটি লাইফে ৮০% সময় এলগরিদম ও প্রবলেম সল্ভিং এর পিছনে দিয়েছি। এর ফলাফলও যথেষ্ট ভালো পেয়েছি। বাকি ২০% আমি সফটওয়্যার ইঞ্জিনিয়ারিং ও সফটওয়্যার ডেভেলপমেন্টে খরচ করতাম। এটাও আমাকে অনেক সাহায্য করেছে।

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

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

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

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

কিন্তু সমস্যা হল, একটা ধারণা তৈরি হচ্ছে যে এটাই এলিট প্রোগ্রামারদের লক্ষন। এটা ভুল ধারণা। আপনি যদি মারটিন ফাউলার, রবার্ট সি মারটিন দের প্রেজেন্টেশান দেখেন, কখনো দেখবেন না এই বাঘা সফটওয়্যার ইঞ্জিনিয়াররা এলগরিদম নিয়ে কখনো কথা বলছেন। তারা OOP, Design Pattern, Architecture নিয়ে সেমিনার করতে করতে মুখে ফেনা তুলে ফেলছেন। সবচেয়ে বড় বিপদের কথা, আমি এটা লক্ষ্য করেছি ও অন্য কোম্পানির মালিকদের কাছে শুনেছি যে খুব ভালো এলগরিদম প্রবলেম সল্ভার কিন্তু ২ বছর সময় দেবার পরও সে ভালো সফটওয়্যার ইঞ্জিনিয়ার হতে পারেনি। বরং এমন দেখা যায়, সফটওয়্যার ইঞ্জিনিয়ারিংএর জ্ঞান না থাকায় চোখের সামনে থাকা N Square Loop তারা দেখতে পান না আর এমন কোড লেখেন যেটা অনেক আন অপটিমাইজড। অথচ তাদের ত এমন কোড লেখার কথা নয়। আবার যেখানে প্রয়জন নেই সেখানে অনেক বেশি অপটিমাইজড করতে গিয়ে অজথা ডেড লাইন মিস করেন। কারণ কনটেস্টের ১০০ লাইন কোড আর সফটওয়্যার এর ১ লক্ষ লাইন কোড এর চাপ এক হতে পারে না। সফটওয়্যার এ এলগরিদম রহিম আর করিমের গল্প হিসাবে আসে না, অনেকে যারা সফটওয়্যার এর সাথে অপরিচিত তাই এই কোডগুল ঠিকমত ম্যাপ করতে পারেন না আর তার এলগরিদমের জ্ঞান থাকা সত্ত্বেও কোড হয় নিম্ন মানের। তবে এটা সবার জন্য প্রযোজ্য নয়। আমার বলার উদ্দেশ্য এটা তুলে ধরা যে এলগরিদমে খুব ভাল হলেই সে ভাল মানের কোড লেখে না। আমার অভিজ্ঞতা এই বিষয়ে এখন পর্যন্ত খুবই খারাপ বা উল্টো বলা যায়।

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

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

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

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

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

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

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

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

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

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

মোঃ জালাল উদ্দিন,

প্রতিষ্ঠাতা ও সিইও, ডেভস্কিল.কম

Share with Your Friends