বাংলাদেশে ২/৩ বছর আগেও মেশিন লার্নিং রিলেটেড জব পোস্ট খুব একটা চোখে পড়তো না। ইদানিংকালে ইন্টার্ন পজিশনে, জুনিওর পজিশনে কিংবা সিনিওর পজিশনেও মেশিন লার্নিং ইঞ্জিনিয়ার/ডাটা সায়েন্টিস্ট রোলের জন্য চাকরির বিজ্ঞপ্তি দিতে দেখা যাচ্ছে বিভিন্ন কোম্পানিকে।
বর্তমান সময়ে CS গ্র্যাড কিংবা CS গ্র্যাড ছাড়াও অনেকেরই ফাইনাল ইয়ার থিসিস টপিক মেশিন লার্নিং ওরিয়েন্টেড হয়ে থাকে। আর হালের ক্রেজ হিসেবেও মেশিন লার্নিং-কে বিবেচনা করতে পারি আমরা। Software Engineer রোলের জন্য কিভাবে নিজেকে প্রস্তুত করতে হয়, সিভি কিভাবে তৈরি করতে হয় আর ইন্টার্ভিউ প্রিপারেশন কিভাবে নিতে হয় তা নিয়ে যথেষ্ট লিখা থাকলেও, এই নতুন মেশিন লার্নিং রিলেটেড জব পজিশনের জন্য যথেষ্ট ভালো রিসোর্স পাওয়া দুষ্কর। এই লিখাতে সেই জায়গার শূন্যস্থান পূরণের একটা চেষ্টা করবো মাত্র(বাংলাদেশের কন্টেক্সটে)।
মেশিন লার্নিং
মেশিন লার্নিং রিলেটেড পোস্টে অবশ্যই মেশিন লার্নিং নিয়ে প্রশ্ন করা হবে। মেশিন লার্নিং এর মতো বড় ডোমেইনের ক্ষেত্রে সে প্রশ্নগুলি কোথা থেকে আসতে পারে, তা জেনে ইন্টার্ভিউ এর আগে নিজেকে প্রস্তুত করা একটু কঠিন কাজ হতে পারে। এক্ষেত্রে সাজেশন হলোঃ - আপনার যেখানে ইন্টার্ভিউ, তারা কি নিয়ে কাজ করে তা একটু ঘেঁটে দেখেন। ধরেন, আপনি ব্যাংকিং অথবা ফাইনান্সিয়াল সেক্টরে মেশিন লার্নিং ইঞ্জিনিয়ার রোলের জন্য এপ্লাই করে ইন্টার্ভিউ এর জন্য কল পেয়েছেন। সেখানে ট্যাবুলার ডাটা নিয়ে কাজ করার সম্ভাবনা বেশি। আর সেক্ষেত্রে ট্রেডিশনাল মেশিন লার্নিং (স্ট্যাটিস্টিক্যাল লার্নিং ) এর গুরুত্ব হয়তো বেশি হবে। Logistic Regression, Linear Regression , Tree Based Algorithms - এর খুঁটিনাটি দেখে গেলে হয়তো সুবিধা পাবেন( SQL নিয়ে পূর্ব অভিজ্ঞতা থাকলে সেটাও এখানে কাজে দিতে পারে )। আবার যারা কম্পিউটার ভিসন নিয়ে কাজ করেন তাদের কোম্পানিতে ইন্টার্ভিউ দেয়ার সময় CNN এর টুকিটাকি সম্পর্কে জানা থাকা ভালো। তবে এখানে বলে রাখা ভালো যে, আপনি হয়তো CNN নিয়ে আগে কাজ করেন নি, সেটা ইন্টার্ভিউতে যাওয়ার আগে দেখে ভারি ভারি শব্দ ইন্টার্ভিউয়ারকে শোনাতে যাবেন না, হিতের বিপরীত হতে পারে। - (এই পয়েন্ট না বললেও চলতো, তাও লিখে রাখছি ) নেট ঘেঁটে দেখতে পারেন আপনি যে কোম্পানিতে ইন্টার্ভিউ দিতে যাচ্ছেন সেই কোম্পানিতে ইন্টার্ভিউ দেয়ার অভিজ্ঞতা কেউ ব্লগ আকারে পাবলিশ করেছে কিনা। সেখান থেকে ভালো একটা ধারণা পাবেন। - আরেকটা খুব গুরুত্বপূর্ণ পয়েন্ট হলো - আপনি সিভিতে নিজের কাজ সম্পর্কে যা লিখেছেন তা সম্পর্কে স্পষ্ট ধারণা রাখা। আপনি বর্তমান কর্মক্ষেত্রে যা নিয়ে কাজ করছেন, নিজের অবসর সময়ে বানানো যে প্রজেক্ট সম্পর্কে লিখেছেন, নিজের ভার্সিটির যে প্রজেক্ট/থিসিস/রিসার্চ পেপারের কথা সিভিতে উল্লেখ করেছেন, সেগুলো ইন্টার্ভিউতে যাওয়ার আগে আরেকবার দেখে যাওয়া। ঐসব কাজের জন্যই হয়তো আপনাকে ইন্টার্ভিউতে ডাকা হয়েছে, অথচ ইন্টার্ভিউতে সে সম্পর্কে যদি আপনি বিস্তারিত না বলতে পারেন সেটা নিজের কাছেই হয়তো খারাপ লাগবে।
এতো গেলো কি কি বিষয় দেখা যেতে পারে, কিন্তু কতটুকু দেখবেন? আপনি যদি মেশিন লার্নিং রিসার্চার পজিশনে এপ্লাই করে থাকেন তাহলে অবশ্যই থিওরেটিকাল প্রশ্নের জন্য প্রস্তুত থাকতে হবে। বাংলাদেশে ভার্সিটিগুলোর RA পজিশন ছাড়া আর কোন কোম্পানি শুধুমাত্র RnD এর জন্য জব সার্কুলার ছেড়েছে এমন চোখে পড়েনি। আর মেশিন লার্নিং ইঞ্জিনিয়ার/ রিসার্চার , ডাটা সায়েন্টিস্ট/ এনালিস্ট ইত্যাদি গাল ভারী করা নামগুলোর পার্থক্যটা জানা থাকলেও আপনার হয়তো সুবিধা হবে, কোন জবের সাথে আপনার ইন্টারেস্ট ম্যাচ করে তা বুঝে এপ্লাই করার জন্য।
মেশিন লার্নিং ইঞ্জিনিয়ারিং রোলের জন্য হয়তো আপনার বিভিন্ন মেশিন লার্নিং এলগোরিদমের নাড়ীনক্ষত্র (ম্যাথেমেটিকাল ইকুয়েশন, প্রুফ) জানা থাকা আবশ্যিক না, তবে জানলে ক্ষতি নেই। আবার তাই বলে শুধু হাই-লেভেল এপিয়াই কল করে কাজ করার যোগ্যতা থাকলেই চলবে তা মনে করার কারণ নেই। মেশিন লার্নিং এর বেসিক যে কনসেপ্টগুলো, যেগুলো যেকোন অনলাইন কোর্সের প্রথমেই কভার করে সে সম্পর্কে জানা থাকতে হবে(যেমনঃ ওভার ফিটিং, আন্ডার ফিটিং, ডাটা ট্রেইন/ভ্যালিডেশন/টেস্ট সেটে ভাগ করা, লস ফাংশনের কাজ, ব্যাক প্রোপাগেশন, ভ্যানিশিং গ্র্যাডিয়েন্ট, এক্সপ্লোডিং গ্র্যাডিয়েন্ট ইত্যাদি)। আর যেসব মেশিন লার্নিং এল্গো, আর্কিটেকচার নিয়ে কাজ করেছেন সেগুলোর সম্পর্কে intuitive (মানে কোনটা কখন ভালো কাজ করে, কেন করে) ধারনা থাকা অত্যন্ত জরুরি। তা নাহলে কোন প্রবলেম সল্ভ করার জন্য কখন কোনটা ব্যবহার করা উচিত তা বুঝবেন না।
সফটওয়্যার ইঞ্জিনিয়ারিং
এই লিখাটা মূলত মেশিন লার্নিং ইঞ্জিনিয়ারদের কথা মাথায় রেখেই লিখা। সেক্ষেত্রে সফটওয়্যার ইঞ্জিনিয়ারিং একটা গুরুত্বপূর্ণ অংশ। আগেই বলেছি মেশিন লার্নিং নিয়ে শুধু রিসার্চ করার মতো স্কোপ বাংলাদেশে কম, আর বাহিরেও স্টার্টাপগুলোতে মেশিন লার্নিং নিয়ে যারা কাজ করে তাদেরকে মডেল তৈরি করার কাজও করতে হয়, এবং সেই মডেলকে ডিপ্লয় দেয়ার কাজও করতে হয়। আর ডিপ্লয় করার পরবর্তীতে সেই মডেলের পার্ফর্মেন্স মনিটরিং করে তাকে রিট্রেইন করার কাজটুকুও করতে হয়। এই সকল কাজের জন্য সফটওয়্যার ইঞ্জিনিয়ারিং রিলেটেড জ্ঞান থাকা অত্যন্ত জরুরি।
আপনি কোন পজিশনের জন্য এপ্লাই করছেন তার উপর নির্ভর করবে এইখানে আপনার কতটুকু দক্ষতা ইন্টার্ভিউয়ার চাচ্ছেন। জুনিওর পজিশনে বেসিক কিছু জিনিস জানা থাকলেই হবে, যেগুলো অন্যান্য সফটওয়্যার ইঞ্জিনিয়ারিং জবের জন্যও চাওয়া হয়ে থাকে। যেমনঃ OOP রিলেটেড জ্ঞান, REST API নিয়ে কাজ করার অভিজ্ঞতা, ইত্যাদি।
আপনি যদি মিড লেভেল কিংবা সিনিওর পজিশনের জন্য এপ্লাই করে থাকেন, সেক্ষেত্রে AWS অথবা অন্য কোন ক্লাউড প্লাটফর্মে কাজ করার অভিজ্ঞতা একটি বাড়তি চাওয়া হতে পারে।
প্রবলেম সল্ভিং
এর মাধ্যমে আসলে দেখা হয় আপনি কিভাবে একটা সমস্যাকে সমাধান করার চেষ্টা করছেন, আপনি যখন কোন একটা সমস্যা সমাধান করার চিন্তাটা ইন্টার্ভিউ বোর্ডে শেয়ার করবেন - সেই চিন্তা নিয়েও হয়তো আপনার সাথে ইন্টার্ভিউ বোর্ডের অন্য মানুষদের আলোচনা হবে। এর মাধ্যমে আপনারা উভয় পক্ষই বুঝতে পারবেন, আপনারা একসাথে কাজ করলে কেমন হতে পারে।
আপনি কি তাদের প্রশ্ন বুঝতে পারছেন? আপনি কি তাদের উল্লেখিত সমস্যা সম্পর্কে আরেকটু গভীরে চিন্তা করে কোন কর্নার কেস নিয়ে প্রশ্ন করছেন? আপনি হয়তো একটা সমাধান দিলেন সেই সমাধানের কোথাও অপ্টিমাইজেশনের সুযোগ আছে, সেটা বলার পরে কি আপনি সেটা নিয়ে চিন্তা করে সঠিক পথে এগুতে পারছেন? এমন টুকটাক জিনিসের মাধ্যমে আপনাকে বিচার করা তাদের জন্য সহজ হয়ে উঠে।
এর জন্য আপনি LeetCode, HackerRank, HackerEarth এর বিভিন্ন প্রবলেম সল্ভ করে নিজেকে তৈরি করতে পারেন। একই ধরনের সমস্যা অনেকগুলো সমাধান না করে, বিভিন্ন ধরনের সমস্যা কয়েকটা বুঝে সমাধান করা বেশি জরুরি। আর আপনি নিজের মতো করে সমাধান করার পরে ডিসকাশনে মানুষের সমাধানও গুলো পড়ে দেখতে পারেন, নিজের চিন্তায় কোথায় আর উন্নতির সুযোগ আছে জানার জন্য। উল্লেখ না করলেই নয়, আপনি যে সমাধান দিচ্ছেন তার টাইম কমপ্লেক্সিটি এবং স্পেস কমপ্লেক্সিটি নিয়েও আপনাকে প্রশ্ন করা হতে পারে।
বোনাস সাজেশন
আপনি এখন যেই পজিশনের চাকরিই খুঁজছেন না কেন, দেশের ভিতররের এবং বাহিরের সেই একই পজিশনের জব পোস্টগুলি ঘেঁটে দেখেন। সেই অনুযায়ী নিজেকে প্রস্তুত করুন। নিজেকে প্রস্তুত করার বারটা একটু উপরেই রাখুন।
অন্যান্য অভিজ্ঞ মানুষের মতামত জানার জন্য, মেশিন লার্নিং কিংবা সফটও্যার ইঞ্জিনিয়ারিং রিলেটেড আপডেট, বেস্ট প্র্যাকটিসেস জানার জন্য LinkedIn , Twitter এ সব ফিল্ডের অভিজ্ঞ মানুষদের ফলো করা শুরু করুন। অনেক কিছু শিখতে পারবেন।
আপনি যদি CS ব্যাকগ্রাউন্ডের কেউ না হয়ে থাকেন, কিন্তু মেশিন লার্নিং নিয়ে কাজ করতে আগ্রহী, সেক্ষেত্রে অনলাইন কোর্সের সহায়তায় কোর কম্পিউটার সায়েন্সের কোর্সগুলি করে ফেলতে পারেন(ডাটা স্ট্রাকচার, এলগোরিদম ইত্যাদি)
লিখাটা অনেক হাই-লেভেল ওভারভিউ হিসেবে চিন্তা করতে পারেন। প্রতিটা ভাগ নিয়ে আরও বিস্তারিত লিখার কিংবা কথা বলার সুযোগ আছে। তবে সেইগুলো নিয়ে আলোচনার লক্ষ্য এই ব্লগ পোস্ট নয় এবং তা নিয়ে লিখার পর্যাপ্ত অভিজ্ঞতাও এখনও অর্জন করি নি। তবে নিজে যতোটুকু পড়ে জেনেছি, কাজ করতে গিয়ে যতোটুকু অনুধাবন করেছি, তার প্রেক্ষিতে এই ব্লগ পোস্টটি লিখা।