এক ভাইয়ের পোস্ট-ই এখানে কপি করলাম। কথাগুলো কতোটুকু যুক্তিযুক্ত ? 

 

কম্পিটিটিভ প্রোগ্রামিং problem-solving শেখার কি আদৌ প্রয়োজন আছে?

C & C++ শিখে software engineer হওয়া যায়?

problem-solving দিয়ে software engineering জব পাওয়া সম্ভব কিনা?

গতকালকে পোস্টের পর আমাকে অনেকেই ইনবক্সে অনেক কিছু জানতে চেয়েছেন তার মধ্যে একজন জানতে চেয়েছেন যে problem-solving দিয়ে software engineering জব পাওয়া সম্ভব কিনা তারই উত্তর

হ্যাঁ যায়! আমি বলব প্রবলেম সলভিং এ ফোকাস না করে, software development স্কিল develop করে সফটওয়্যার ইঞ্জিনিয়ারিং জব পাওয়া যায়। কীভাবে?

আমাদের দেশে যারা কম্পিউটার সাইন্সে পড়েন অথবা যারা প্রোগ্রামিংয়ে আসতে চান নিজেকে আইটি ইন্ডাস্ট্রি তে একটা জায়গা করে নেওয়ার জন্য। এখানে একটা খুবই ভুল ধারণা আছে যে, প্রবলেম সলভ করতে হবে, কম্পিটিটিভ প্রোগ্রামিং শিখতে হবে, C & C++ শিখতে হবে। তাহলেই একটা ভালো শুরু হল। কিন্তু আদৌ কি তাই? 1) যারা CSE এ তারা structured-programing-language হিসেবে C পড়বেন এবং সেখানে কিছু প্রবলেম সলভ করবেন। 2) অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ Java পড়ার সময়ও প্রবলেম সলভ করলেন। আবার 3) ডাটা স্ট্রাকচার ও 4) অ্যালগরিদম সাবজেক্ট সলভ করবেন। এই চারটা course এ এত প্রবলেম সলভ করার পরেও ফাইনাল ইয়ার প্রজেক্ট আপনারা করতে হিমশিম খেয়ে যান এবং তার মানে কি দাঁড়ালো যে আপনার প্রবলেম সলভিং ক্যাপাবিলিটি দিয়ে আপনি ফাইনালের প্রজেক্ট করতে পারবেন না এবং সেটা থেকে বলা যায় যে আপনি আপনার প্রবলেম সলভিং ক্যাপাবিলিটি দিয়েও আপনি বাংলাদেশ আইটি ইন্ডাস্ট্রি তে software engineer হতে পাবেন না। এর কারণ হচ্ছে আপনি আসলে জানেন না সফটওয়্যার কিভাবে বানাতে হয় এবং অবশ্যই problem-solving করে আপনি সফটওয়্যার বানাতে পারবেন না। প্রবলেম সলভিং, ডাটা স্ট্রাকচার ও অ্যালগরিদম বাংলাদেশের কনটেক্সটে আমি মনে করি শুধুমাত্র 4 সাবজেক্ট, CSE পাস করার জন্যই প্রয়োজন। এটা আসলে বাস্তবে কোন প্রয়োগ নেই বললেই চলে। তবে হ্যাঁ প্রয়োগ আছে যদি আপনি মাইক্রোসফ্ট গুগোল অ্যামাজন ফেসবুকে চাকরি পেতে চান। এই ছাড়া প্রবলেম সলভিং কম্পিটিটিভ প্রোগ্রামিং, C & C++ প্রয়োজন পড়েনা।

বাংলাদেশের হিসেবে যেহেতু আপনি আপনার ফাইনাল ইয়ারের প্রজেক্ট করতে হিমশিম খেয়ে যাচ্ছেন সেহেতু মাইক্রোসফট গুগোল ফেসবুক এইসব কোম্পানিতে চাকরি পাওয়ার মত problem-solving ক্যাপাসিটি আপনার নেই। আপনার যদি টার্গেট থাকে আপনি কম্পিউটার সাইন্স পাস করে আপনি software engineering জব পেতে চান তারা প্রথমেই আপনাকে আপনার ফাইনালের প্রজেক্ট করা জানতে হবে। আর তাও যদি অন্য কারো কাছ থেকে ম্যানেজ করে ডিগ্রী পাস করেন, তাহলে মনে রাখবেন বাংলাদেশের জব ইন্ডাস্ট্রিতে হিসেবে আপনি job পাবেনই না। জব পাওয়ার জন্য আপনাকে সফটওয়্যার বানানো শিখতে হবে এবং তার জন্য আপনাকে অবশ্যই C, C++, problem-solving thought এর বাইরে আসতে হবে কারণ বাংলাদেশের C/C++ সফটওয়্যার তৈরি করা হয় না বললেই চলে। আমি জার্মানিতে থাকি। জার্মানিতে C/C++ অনেক চাহিদা আছে। অনেক ইঞ্জিনিয়ার আছে যারা C/C++ ব্যবহার করে automotive সফটওয়্যার ইন্ডাস্ট্রিতে ইমবেডেড সিস্টেমে কাজ করেন শুধু তাই নয় জার্মানিতে অনেক বড় বড় ইন্ডাস্ট্রিয়াল কন্ট্রোলের জন্য, রোবটিক্স এর জন্য C, C++ ব্যবহার করা হয় অনেক বেশি করে যেগুলোর ক্ষেত্র আসলে বাংলাদেশে এখনো হয়ে ওঠেনি। তাই C এবং C++ এবং problem-solving এ চলবে এই জিনিসটা আসলে আমাদের মাথা থেকে বের করে ফেলা উচিত এটা সম্পূর্ণ মিসগাইডেড একটা ব্যাপার যেটা ক্যারিয়ার বিল্ডিংয়ে কোনো হেল্প করবে না।

 এখন আসি ক্যারিয়ার বিল্ডিং এর জন্য আপনি কি করবেন? আপনি যেহেতু জাভা শিখছেন সেহেতু জাভা / আপনাকে প্রথমে তা object-oriented ল্যাঙ্গুয়েজ শিখতে হবে এবং শুধু তাই নয় সেটাকে আপনার ডাটাবেজ কানেক্ট করে একটা ডাটাবেজ বেস্ট persistant storage অ্যাপ্লিকেশন বানানো শিখতে হবে। তার জন্য আমি বলব C# এবং এসকিউএল সার্ভার দিয়ে আপনি ডেস্কটপের প্লিকেশন বানান অথবা ওয়েব অ্যাপ্লিকেশন বানান অথবা অ্যান্ড্রয়েড অ্যাপ্লিকেশন বানান অথবা আপনি গেম বানান ভার্চুয়াল রিয়েলিটি অগমেন্টেড রিয়েলিটি অ্যাপ্লিকেশন বানান সবই বানাতে পারবেন।

মূল কথা হচ্ছে আপনাকে প্রিপেয়ার করতে হবে একটা কোম্পানিতে জুনিয়র সফটওয়্যার ইঞ্জিনিয়ার হিসেবে জব পাওয়ার জন্য যেখানে, আপনি প্রথম দিন থেকেই কাজ করার যোগ্যতা রাখেন। তার জন্য অবশ্যই আপনাকে ফ্রেমওয়ার্ক based object-oriented programing কোন দক্ষতা থাকতে হবে এবং তার সাথে raw এসকিউএল ডাটাবেজ নয় বরঞ্চ ORM (object-relational-mapper) ডাটাবেইজ software বিল্ডিং ক্যাপাসিটি grow করতে হবে। পাশাপাশি সবচেয়ে গুরুত্বপূর্ণ সেটা হচ্ছে রিকোয়ারমেন্ট অনুযায়ী আপনাকে সফট্ওয়ারে বানানো শিখতে হবে।

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

জার্মানিতে এমন বুটক্যাম্পপের অনেক জনপ্রিয়তা আছে। বুটক্যাম্পপে স্কিল অর্জন করে যে কেউই সফটওয়্যার ইঞ্জিনিয়ার, backend, front-end, full-stack, android, ios developer জব পায়।

আশা করি আমার পোস্টটি আপনাদেরকে ভালো একটা বাস্তবিক দিক নির্দেশনা দেবে।