সফটওয়্যার ইঞ্জিনিয়ার/ প্রোগ্রামার ইন্টারভিউ - যেসব বিষয়ে গুরুত্ব দেয়া জরুরী
"আমি সফটওয়্যার ইঞ্জিনিয়ার/প্রোগ্রামার হতে চাই, কিভাবে প্রস্তুতি নিব?" - সিএসই পড়ুয়া কিংবা ফ্রেশ গ্র্যাজুয়েটদের এটা একটা কমন প্রশ্ন। ভালো সফটওয়্যার কোম্পানিগুলো এসব পোস্টের জন্য সাধারনত ভালো প্রোগ্রামিং স্কিল আছে এমন কর্মী নিয়োগ করতে চায়। একারনে প্রোগ্রামার বা সফটওয়্যার ইঞ্জিনিয়ার হিসেবে ক্যারিয়ার গড়তে চাইলে শুরু থেকেই প্রোগ্রামিং চর্চা করা প্রয়োজন। এজন্যে বেশ কিছু জনপ্রিয় ভার্চুয়াল অনলাইন জাজ যেমন UVa, Codeforces, LightOJ এর মাধ্যমে নিজের প্রবলেম সল্ভিং স্কিল বাড়ানোর উপর গুরুত্ব দিতে হবে। অনলাইন জাজের মাধ্যমে শুরু করতে চাইলে আমি রিকমেন্ড করব UVa এর ১০০৭১ নম্বর প্রবলেম Back to High School Physics - এই সহজ প্রবলেমটার মাধ্যমে শুরু করার জন্য। যেহেতু এটা সহজ একটা প্রবলেম তাই সহজেই সল্ভ করা যাবে এবং একই সাথে অনলাইন জাজ এর ব্যবহার সম্পর্কে ধারনা পাওয়া যাবে।
সে যাই হোক, আজ মূলত আলচনা করব প্রোগ্রামার বা সফটওয়্যার ইঞ্জিনিয়ার পোস্টগুলোর নিয়োগের জন্য সফটওয়্যার কোম্পানিগুলো সাধারনত কি ধরনের এবং কি কি টপিকসের ওপর গুরুত্ব দিয়ে থাকে তা নিয়ে। এন্ট্রি কিংবা মিড লেভেলের জন্য বেসিক প্রোগ্রামিং, OOP, ডাটা স্ট্রাকচার, ডিবিএমএস, সফটওয়্যার ইঞ্জিনিয়ারিং ইত্যাদি বিষয়ের উপর গুরুত্ব দেয়া হয়। যেসব টপিকসের উপর গুরুত্ব দিতে হবে সেগুলো হলঃ
বেসিক প্রোগ্রামিংঃ বেসিক প্রোগ্রামিং এর জন্য ভালো প্রোগ্রামিং স্কিল থাকা দরকার যেটা লেখার শুরুতে বলছিলাম। কেননা এক্ষেত্রে সাধারনত কোন ট্রিকি প্রবলেম সল্ভ করতে বলা হতে পারে কিংবা কোন প্রোগ্রামের আউটপুট চাওয়া হয়ে থাকতে পারে। এছাড়া ছোট ছোট কোড সেগমেন্ট দিয়েও তার আউটপুট কি হবে বের করতে বলা হতে পারে। এজন্যে ডাটা টাইপ, ভ্যারিয়েবলস অ্যান্ড ইটস স্কোপ , ফাংশন, অ্যারে, টোকেন, পয়েন্টার, অপারেটর সম্পর্কে বেসিক ধারনা থাকতে হবে। প্রোগ্রামিং এর চর্চা থাকলে এগুলো সম্পর্কে এমনিতেই বেসিক ধারনা তৈরি হয়ে যায়। তাই যারা প্রোগ্রামিং চর্চার বাইরে ছিল, তাদের এই বিষয় গুলোর খুঁটিনাটি দিকগুলো ভালোভাবে রপ্ত করে নেয়া জরুরী।
OOP: অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বা OOP এর বেসিক কনসেপ্ট গুলো সম্পর্কে সঠিক ধারনা থাকা অত্যন্ত জরুরী যা কেবল রিটেন/ভাইভা ফেইস করবার জন্যই কেবল নয়, বরং সফটওয়্যার ইঞ্জিনিয়ার/ প্রোগ্রামার হিসেবে ভালো পারফর্ম করার জন্যেও জরুরী। যাই হোক, OOP এর যেসব টপিকসের উপর সচ্ছ ধারনা থাকা জরুরী সেগুলো হচ্ছে - ক্লাস, অবজেক্ট, বেসিক OOP প্রিন্সিপালস*, পাবলিক-প্রাইভেট-প্রটেক্টেড ফাংশন*, এবস্ট্রাক্ট ক্লাস*, স্ট্যাটিক* ক্লাস, মেথড এবং ভ্যারিয়েবল, ভার্চুয়াল ফাংশন, ফ্রেন্ড ফাংশন, ফাংশন ওভারলোডিং* এবং ওভাররাইডিং*, এক্সেপশন হ্যান্ডেলিং ইত্যাদি।
এর মধ্যে * চিহ্নিত গুলো অত্যধিক গুরুত্বপূর্ণ টপিক যেগুলোর উদাহরন সহকারে বুঝিয়ে দিতে পারবার মত স্বচ্ছ ধারনা থাকতে হবে।
ডাটা স্ট্রাকচারঃ ডাটা স্ট্রাকচার থেকে কিছু লজিকাল প্রশ্ন থাকতে পারে। এর মধ্যে গুরুত্বপূর্ণ টপিকস গুলো হল- লিঙ্কড লিস্ট, স্ট্যাক, কিউ, ট্রি। এক্ষেত্রে লিঙ্কড লিস্ট ইমপ্লিমেন্ট করতে কোড লিখতে বলা হতে পারে। স্ট্যাক, কিউ এগুলো ইমপ্লিমেন্টেশনের কোড লিখা ছাড়াও পুশ পপ কমান্ড চালানোর পর স্ট্যাক বা কিউ এর অবস্থা কি হবে- এ ধরনের প্রশ্ন করা হয় থাকতে পারে। ট্রি থেকে ট্রি এর টারমিনলজি এবং ম্যাথম্যাটিক্যাল প্রবলেম থাকতে পারে।
DBMS: সফটওয়্যার কোম্পানিগুলো তাদের সফটওয়্যার ইঞ্জিনিয়ার/ প্রোগ্রামার রিক্রুটমেন্টের জন্য ডাটাবেজ ম্যানেজমেন্ট থেকে প্রশ্ন করে থাকে। DBMS থেকে অবশ্যই দেখে নিতে হবে - ই-আর ডায়াগ্রাম/মডেল, কিই(Key), রিলেশনশিপ, ইন্ডেক্সিং, নরমালাইজেশন (e.g: 1NF, 2NF...), এসকিউএল কুয়েরি (জয়েনিং, সারচিং, সর্টিং, এগ্রিগেট ফাংশন...)। এই সেগমেন্টে দেখা যায় কোন প্রতিষ্ঠানের আর্থিক কর্মকাণ্ডের কিংবা গ্রাহকদের সাথে ডিপেন্ডেন্সি বা সম্পর্ক তুলে ধরে ছোট বর্ণনা দিয়ে তার E-R ডায়াগ্রাম তৈরি করতে বলা হয়। এছাড়া স্যাম্পল ডাটাবেজ টেবিল তুলে ধরে বিভিন্ন ধরনের এসকিউএল কুয়েরি লিখতে বলা হয়।
সফটওয়্যার ইঞ্জিনিয়ারিংঃ এই সেগমেন্ট থেকে ভার্সেটাইল প্রশ্ন থাকে। এর মধ্যে কমন একটি প্রশ্ন হল SDLC এর স্টেপগুলোর বর্ণনা। এছাড়া ডিজাইন প্যাটার্ন (e.g: MVC), সফটওয়্যার ডেভেলপমেন্ট মেথডলজি (e.g: Agile, Waterfall...), সফটওয়্যার টেস্টিং(e.g: ব্ল্যাকবক্স, হোয়াইটবক্স, ইউনিট টেস্টিং...) , সিকিউরিটি (এসকিউএল ইনজেকশন, CSRF টোকেন ফর ওয়েব অ্যাপস) - এই বিষয়গুলোর ধারনা থাকতে হবে।
মূলত এসব বিষয় ভালভাবে রপ্ত করা থাকলে সফটওয়্যার ইঞ্জিনিয়ার/ প্রোগ্রামার ইন্টারভিউতে ভালো করা সম্ভব। যদিও কোম্পানি ভেদে প্রশ্নের ধরনে ভিন্নতা থাকতে পারে। যেমন ভাল পর্যায়ের কোম্পানিগুলো মুল ফোকাস দেয় প্রবলেম সল্ভিং স্কিলের উপর। আবার এমনও কোম্পানি পাওয়া যাবে যারা উপরের উল্লেখকৃত কোন কিছুই না জিজ্ঞেস করে কেবল মাত্র লাইভ প্রোজেক্ট কি কি আছে সেগুলো সম্পর্কে জানতে চাইবে। আমি ফ্রেশারদের রিকমেন্ড করব, কেবল লাইভ প্রোজেক্ট সম্পর্কে জানতে চাওয়া প্রতিষ্ঠানগুলোকে এড়িয়ে যেতে।
কোন কিছু বাদ পরলে কিংবা জিজ্ঞাসা থাকলে অনুরোধ থাকবে কমেন্টের মাধ্যমে জানাতে। আর্টিক্যালটি পড়বার জন্য ধন্যবাদ।
Thanks for your helpful article.
Thanks for your comment @Nurul Amin
How many ratings do you think to need in codeforces for getting a job in Bangladesh's good software firm?
You may catch attention of top level software companies if you ever achieve a good position (1 to 20) in ACM ICPC Dhaka Regional. However, rating above 1800 implies a good Codeforces profile. Thank you for your comment @Md. Ashraful Haque
Thank you for an excellent reply. Have a nice life to you brother @Shohaglive
চমৎকার লিখেছিস। অনেক ভালো হয়েছে। নতুনদের জন্য খুবই ভালো একটি আর্টিকেল।
You are welcome @Md. Ashraful Haque
অসংখ্য ধন্যবাদ বন্ধু @Ross Nebula
Thanks brother for your great articles. Wait for another article about this topics in detail . Please take a interview who already a software engineer in any company . May be, it is very interesting for us .
Thank you for your suggestion. I'll try writing more on this. You may subscribe so that you won't miss my future posts @Md.Golam Muktadir