Go Back to All Articles ভালো সফটওয়্যার ইঞ্জিনিয়ার হওয়ার কিছু দিকনির্দেশনা

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

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

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

তো শুরু করা যাক…

আমি প্রথমে শুরু করবো চারিত্রিক গুণাবলী দিয়ে, কারণ এটা খুবই গুরুত্বপূর্ণ কিন্তু আমাদের দেশে এসব নিয়ে আমরা মাথা ঘামাই না।

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

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

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

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

এবার আসা যাক কোর বিষয়ে,

আমি ক্যারিয়ারের ধাপগুলোকে যেভাবে দেখি তা হলঃ

১) ভালো প্রোগ্রামার

২) ভালো সফটওয়্যার ডেভেলপার

৩) ভালো সফটওয়্যার ইঞ্জিনিয়ার

৪) ভালো সফটওয়্যার আর্কিটেক্ট

ভালো প্রোগ্রামার হওয়ার জন্য আপনি যা যা করতে পারেনঃ

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

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

৩) প্রচুর প্র্যাকটিস করতে হবে। এটাতো সবাই বলে, কিন্তু কিভাবে প্র্যাকটিস করবেন। এলগরিদম প্রবলেম সল্ভ করতে পারেন, শুরুতে এটা খুবই কাজে দিবে। অন্তত ৩০০ প্রবলেম সল্ভ করুন। এর জন্য ২ নম্বর পয়েন্ট আগে শেষ করে আসতে হবে। ছোট ছোট সফটওয়্যার তৈরি করতে চাইলে যে আপনাকে এখনি ফ্রেমওয়ার্ক শিখতে হবে তা কিন্তু নয়। মানুষ অনেক সফটওয়্যার ব্যাবহার করে যেগুলো কনসোলে চলে। যেমন Hangman, TicTacToe, লুডু ইত্যাদি গেম তৈরি করতে পারেন। টেক্সট ফাইলে ডাটা রিড/রাইট করে আপনি আরও জটিল সফটওয়্যারও কনসোলে তৈরি করতে পারেন, যেমন পয়েন্ট অফ সেল, ইনভেন্টরি ম্যানেজমেন্ট। এমনকি এম এল এম সফটওয়্যারও তৈরি করতে দেখেছি।

ভালো সফটওয়্যার ডেভেলপার হওয়ার জন্য আপনি যা যা করতে পারেনঃ

১) ইউনিভার্সিটি জীবনে অন্তত ২য় বছর থেকে ক্যারিয়ার নিয়ে চিন্তাভাবনা করা শুরু করতে হবে। আরও আগে করলে ভালো। ক্যান্সার ৩য় স্টেজে যাবার পর যদি রোগী ডাক্তারকে চিকিৎসা করতে বলে, তাহলে ডাক্তার হয়ত ফিরিয়ে দিবে না তবে আমরা জানি সেটা খুব একটা কাজে দেয় না। সফটওয়্যার ডেভেলপমেন্টের জন্য আপনাকে একটা প্লাটফর্ম বেছে নিতে হবে। যেমন আপনি কি ধরণের সফটওয়্যার তৈরিতে আগ্রহী। এখানে সর্টটার্ম ও লংটার্ম গোল থাকতে পারে। তবে এটা পরিবর্তনশীল তবে ভুল বুঝতে পারলে দ্রুত পরিবর্তন করা জরুরী। এই বিষয়ে ধারণা পাওয়ার জন্য আপনাকে জবসাইট নিয়ে ঘাটাঘাটি করতে হবে আর সেটা ২য় বছর থেকেই করা দরকার। এতে আপনি জানতে পারবেন যে কি কি আপনাকে জানতে হবে ঐ প্ল্যাটফর্মে কাজ করতে হলে আর কোন ধরণের জব বেশি ও সেটার সেলারি কিরকম বা কোন কোন কোম্পানি এই প্ল্যাটফর্মে কাজ করে। এটা খবুই গুরুত্বপূর্ণ। আপনি যদি খালি এই জিনিষগুলো জেনে বসে থাকেন তাও আপনি অন্যদের থেকে অনেক এগিয়ে থাকবেন। কারণ এই ধারণা পাওয়ার জন্য আপনাকে ১ বছর জব সাইটে রেগুলার আনাগোনা করতে হবে। অন্য কেউ পাস করার পর ১-২ মাসে এই ধারণা জোগাড় করতে পারবে না।

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

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

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

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

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

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

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

ভালো সফটওয়্যার ইঞ্জিনিয়ার হওয়ার জন্য আপনি যা যা করতে পারেনঃ

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

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

আপনি যখন এই পর্যায় চলে আসবেন তখন আপনার আসলে আমার কাছ থেকে খুব বেশি সাজেশন নেবার প্রয়োজন পরবে না। আপনি নিজেই বুঝতে পারবেন যে আপনাকে কি করতে হবে। সেটা করা না করা তখন আপনার ব্যাপার।

তবে যারা নতুন কিন্তু নিজের ভবিষ্যৎ দেখতে চাচ্ছেন তাদের বলি, OOP, Design Pattern, Architecture, Methodology, Software Development Process, Software Testing, Continuous Integration, Docker, Cloud Computing, IoT, Big Data এই টপিকগুলো ঘুরেফিরে হয়ত আসবে। কিন্তু যারা নতুন তারা এই পর্যায় আসতে যদি আরও ৪-৫ বছর লেগে যায়, তাহলে এই লিস্টের কিছু জিনিষ হয়ত পরিবর্তন হয়ে যেতে পারে। তবে আশা করছি এগুলো আরও ১০ বছর বা অন্তত ৫ বছর টিকে থাকবে।

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

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

ভালো সফটওয়্যার আর্কিটেক্ট হওয়ার জন্য আপনি যা যা করতে পারেনঃ

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

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

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

৩) আর্কিটেক্ট হতে হলে আপনাকে দেশে বিদেশে অনেক কাজ করতে হবে। Enterprise লেভেলের সফটওয়্যার নিয়ে অনেক কাজ করতে হবে। শতশত প্রোগ্রামারের টিম নিয়ে কাজ করতে হবে। দেশে বিদেশে কনফারেন্স, সেমিনার করে বেড়াতে হবে। আমাদের দেশে আপাতত এই বিষয়ে কোন ট্রেনিং এর বেবস্থা নেই বলে আমি মনে করি। তাই বিদেশে গিয়ে শিখতে হবে। দেশ বিদেশের অন্য সফটওয়্যার ইঞ্জিনিয়ার ও আর্কিটেক্টদের সাথে মিশতে হবে, মতবিনিময় করতে হবে।

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

ক্যারিয়ার নিয়ে কোন প্রশ্ন থাকলে আপনি আমাকে জানাতে পারেন। আমি পরবর্তী লেখাতে সেগুলো তুলে ধরার চেষ্টা করবো।

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

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

Share with Your Friends