Friday, March 17, 2017

সফটওয়্যার ডেভেলপার এবং সফটওয়্যার ইঞ্জিনিয়ারের মধ্যে পার্থক্য কী (What is the difference between software developer and software engineer)

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

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

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

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

সহজ কথায় বলতে গেলে -

সফটওয়্যার ইঞ্জিনিয়ার = ইঞ্জিনিয়ারিং প্রিন্সিপাল + ডিসিপ্লিন + আরও অনেক কিছু + সফটওয়্যার ডেভেলপার।

সফটওয়্যার ডেভেলপারেরও এই প্রিন্সিপাল ও ডিসিপ্লিন থাকতেও পারে, সেক্ষেত্রে সেগুলো সে নিজে নিজে শিখে নিতে পারে। 

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

তবে টাইটেল নিয়ে খুব বেশি বিচলিত হওয়ার কিছু নেই। বিভিন্ন কোম্পানি বিভিন্নভাবে নামকরণ করে থাকে। 

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

এখানে একটি বিষয় মনে রাখতে হবে যে, সফটওয়্যার ইঞ্জিনিয়ারিং শুধুমাত্র প্রোগ্রামিং নয় ।

পরবর্তী পর্বে সফটওয়্যার ইঞ্জিনিয়ারিং পুরো পক্রিয়া ব্যাখ্যা করার চেষ্টা করবো।