উন্নয়ন হলো বারবার নতুন এবং দরকারী কিছু তৈরি করা।
যখন আমরা "উন্নয়ন" শব্দটি শুনি, তখন প্রায়শই নতুন পণ্য তৈরির কথা মনে আসে। এটি স্বতন্ত্র পণ্য উৎপাদন থেকে ভিন্ন; এর অর্থ হলো পণ্যের নকশা বা ছাঁচ তৈরি করা, যা আমরা বলতে পারি।
অতএব, নতুন পণ্য তৈরির মাধ্যমে যে নকশা ও ছাঁচ তৈরি হয়, তা কারখানায় বারবার ব্যবহৃত হয়ে একই পণ্য প্রচুর পরিমাণে উৎপাদিত হয়।
"উন্নয়ন" শব্দটির অন্যান্য ব্যবহারও আছে, যেমন ব্যক্তিগত ক্ষমতা বা সমাজ ও জাতির উন্নয়ন। এর অর্থ কেবল যা আছে তার বৃদ্ধি নয়, বরং বিকশিত ক্ষমতাগুলোকে বারবার ব্যবহার করে উপকৃত হওয়ার সক্ষমতা।
যদিও ব্যক্তি ও সমাজের অর্থনৈতিক ক্ষমতা অর্থনৈতিক অবস্থার সঙ্গে ওঠানামা করতে পারে, তবে বিকশিত ক্ষমতাগুলো সাধারণত স্থায়ী হয়।
যদি সেগুলো হ্রাসও পায়, তবে তাকে অর্থনৈতিক সমৃদ্ধির মতো উত্থান-পতন নয়, বরং একটি পতন হিসেবে দেখা হয়।
এছাড়াও রয়েছে প্রযুক্তি ও জ্ঞানের উন্নয়ন। ব্যক্তি বা নির্দিষ্ট সমাজের ক্ষমতার মতো নয়, এগুলোর একটি বৈশিষ্ট্য হলো সহজেই ভাগ করে নেওয়া যায়।
এবং এই উন্নয়নগুলোর ফলাফলের মধ্যে—পণ্য, ক্ষমতা, জ্ঞান এবং প্রযুক্তি—কিছু পরবর্তী উন্নয়নের জন্য উপযোগী হতে পারে।
এই ধরনের উপযোগী ফলাফল বিকাশের মাধ্যমে, উন্নয়নের পরিধি প্রসারিত হয় এবং দক্ষতা ও গুণমানও উন্নত হয়।
এআই-চালিত সফটওয়্যার ডেভেলপমেন্ট
সাধারণত, উন্নয়নের জন্য যথেষ্ট সময় এবং প্রচেষ্টা প্রয়োজন হতো। বিশেষত, যখন সমাজ উন্নত হয় এবং বিভিন্ন জিনিস আরও পরিশীলিত হয়ে ওঠে, তখন নতুন কিছু তৈরি করা ক্রমশ কঠিন হয়ে পড়ে।
তবে, জেনারেটিভ এআই-এর আগমনের সাথে সাথে এই পরিস্থিতি পরিবর্তিত হচ্ছে। বর্তমানে, জেনারেটিভ এআই-এর উচ্চ প্রোগ্রামিং সক্ষমতার সুফলস্বরূপ সফটওয়্যার ডেভেলপমেন্টে নাটকীয় পরিবর্তন ঘটছে।
একটি ভবিষ্যৎ দৃষ্টিভঙ্গি যেখানে জেনারেটিভ এআই ভিত্তিক স্বায়ত্তশাসিত এজেন্টরা সফটওয়্যার ইঞ্জিনিয়ার হিসাবে সফটওয়্যার ডেভেলপমেন্টের কেন্দ্রে চলে আসবে, তা ইতিমধ্যেই বাস্তবে পরিণত হচ্ছে।
আমরা বর্তমানে একটি ক্রান্তিকালীন সময়ে আছি। যদিও আমরা সম্পূর্ণরূপে জেনারেটিভ এআই-এর উপর ডেভেলপমেন্টের ভার ছেড়ে দিতে পারি না, তবে জেনারেটিভ এআই-কে দক্ষতার সাথে ব্যবহার করলে তা সফটওয়্যার ডেভেলপমেন্টকে শক্তিশালীভাবে এগিয়ে নিয়ে যেতে পারে।
এটিকে এআই-চালিত সফটওয়্যার ডেভেলপমেন্ট বলা হয়।
ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট
যখন জেনারেটিভ এআই সফটওয়্যার ডেভেলপমেন্টকে সুবিন্যস্ত করে, তখন এটি শুধুমাত্র চূড়ান্ত লক্ষ্য সফটওয়্যারের ডেভেলপমেন্টকে আরও কার্যকর করে তোলে না, বরং ডেভেলপমেন্টে সহায়তাকারী সফটওয়্যারের ডেভেলপমেন্টকেও সহজ করে।
যেমনটি আগে উল্লেখ করা হয়েছে, ডেভেলপমেন্টে সহায়তাকারী ফলাফলগুলি ডেভেলপমেন্টের পরিধি প্রসারিত করে এবং দক্ষতা ও গুণমান বৃদ্ধিতে অবদান রাখে। উপরন্তু, যদি কার্যকরভাবে তৈরি করা হয়, তবে সেগুলোকে অন্যান্য ডেভেলপমেন্ট প্রকল্পে পুনরায় ব্যবহার করা যেতে পারে।
অতএব, সফটওয়্যার ডেভেলপমেন্টের সময় দরকারী সফটওয়্যার ডেভেলপ করার মাধ্যমে, সামগ্রিক দক্ষতা চূড়ান্তভাবে বৃদ্ধি করা যায় এবং এই সম্পদগুলি ভবিষ্যতের ডেভেলপমেন্টের জন্যও ব্যবহার করা যেতে পারে।
ঐতিহ্যগতভাবে, এই ধরনের ডেভেলপমেন্টে সহায়তাকারী সফটওয়্যার তৈরি করা এই ক্ষেত্রে একটি সাধারণ অনুশীলন ছিল, তবে এর জন্য নিজস্ব ডেভেলপমেন্ট সময় এবং প্রচেষ্টা প্রয়োজন ছিল, যার ফলে সতর্ক মূল্যায়ন এবং লক্ষ্যভিত্তিক বাস্তবায়ন অপরিহার্য ছিল।
জেনারেটিভ এআই ব্যবহার করে, ছোট, তাৎক্ষণিক কাজগুলি স্বয়ংক্রিয় করার জন্য সহজ সফটওয়্যার দ্রুত তৈরি করা যেতে পারে। সুস্পষ্ট প্রক্রিয়াযুক্ত কাজগুলির জন্য, জেনারেটিভ এআই প্রায় কোনো ত্রুটি ছাড়াই সঠিক প্রোগ্রাম তৈরি করতে পারে।
এটি সফটওয়্যার ডেভেলপমেন্টের সময় ডেভেলপমেন্টে সহায়তাকারী সফটওয়্যার তৈরি করাকে আগের চেয়ে সহজ করে তোলে।
এবং গভীরভাবে প্রতিফলিত করার পর, একটি ডেভেলপমেন্ট শৈলী উদ্ভূত হয় যেখানে ডেভেলপমেন্ট প্রক্রিয়ার সময় দরকারী সরঞ্জামগুলি ক্রমাগতভাবে ডেভেলপ করা হয়, যার ফলে ডেভেলপমেন্টের পদ্ধতিটি নিজেই রূপান্তরিত হয়।
আমরা এটিকে ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট বলব।
ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট অনুশীলন করার জন্য, নিজের সফটওয়্যার ডেভেলপমেন্টকে উদ্দেশ্যমূলকভাবে পর্যবেক্ষণ করার অভ্যাস প্রয়োজন, যাতে কোন অংশগুলি সফটওয়্যারের উপর ছেড়ে দেওয়া যায় এবং কোন অংশগুলি কেবল মানুষই করতে পারে তা বিবেচনা করা যায়, সাথে ডেভেলপমেন্টে সহায়তাকারী সফটওয়্যার তৈরি করার দক্ষতাও প্রয়োজন।
উপরন্তু, জেনারেটিভ এআই এই সফটওয়্যার সরঞ্জামগুলিতে একত্রিত করা যেতে পারে। সফটওয়্যারের মধ্যে এটিকে এম্বেড করার মাধ্যমে, একটি স্বতন্ত্র জেনারেটিভ এআই এজেন্টের বিপরীতে, প্রক্রিয়াকরণের পরিধি কিছুটা সংকীর্ণ করা যায় এবং একটি সুস্পষ্ট পথ নির্ধারণ করা যায়।
যদিও এআই এজেন্টরা প্রম্পটিংয়ের মাধ্যমে অনুরূপ ফলাফল অর্জন করতে পারে, তবে জেনারেটিভ এআই একত্রিত করা সফটওয়্যার প্রোগ্রাম এবং প্রম্পট উভয়কে একত্রিত করে নির্ভুলতা বৃদ্ধি করা আরও সহজ করে তোলে।
যদি ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট অনুশীলন করা যায়, তবে প্রথম প্রকল্পের তুলনায় দ্বিতীয় প্রকল্পটি গুণমান এবং খরচ উভয় ক্ষেত্রেই উন্নতি দেখাবে। উপরন্তু, প্রতিটি পরবর্তী প্রকল্পের সাথে – তৃতীয়, চতুর্থ, এবং আরও – উন্নতি ক্রমাগত বৃদ্ধি পাবে।
এটি কেবল জেনারেটিভ এআই ব্যবহার করে সফটওয়্যার ডেভেলপ করার থেকে সম্পূর্ণ ভিন্ন। জেনারেটিভ এআই সরঞ্জামগুলি কেবল আয়ত্তকারী দল এবং ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট অনুশীলনকারী দলগুলির মধ্যে সময়ের সাথে সাথে একটি উল্লেখযোগ্য ব্যবধান তৈরি হবে।
রিফ্যাক্টরিং-চালিত পরীক্ষা
টেস্ট-ড্রাইভেন ডেভেলপমেন্ট (TDD) নামে একটি ধারণা আছে, যেখানে প্রথমে স্পেসিফিকেশনের উপর ভিত্তি করে পরীক্ষা ডিজাইন করা হয় এবং তারপর সেই পরীক্ষাগুলো পাশ করার জন্য সফটওয়্যার তৈরি করা হয়।
প্রথমদিকে, আমিও ভেবেছিলাম যে জেনারেটিভ এআই স্বয়ংক্রিয় পরীক্ষার জন্য টেস্ট প্রোগ্রাম তৈরি করা সহজ করে দেয়ায়, টেস্ট-ড্রাইভেন ডেভেলপমেন্ট সম্ভব হতে পারে।
তবে, যখন আমি ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট অনুশীলন শুরু করলাম, তখন আমার মনে হলো যে বাস্তবায়নের আগে পরীক্ষা ডিজাইন করার পদ্ধতি সবসময় উপযুক্ত নাও হতে পারে।
বিশেষ করে ওয়েব অ্যাপ্লিকেশনের মতো সফটওয়্যারের ক্ষেত্রে, যেখানে ব্যবহারযোগ্যতা এবং ভিজ্যুয়াল ডিজাইনের মতো বিষয়ভিত্তিক দিক জড়িত থাকে যা কেউ ইন্টারঅ্যাকশনের মাধ্যমে অনুভব করতে পারে, আমি বুঝতে পারলাম যে বিস্তারিত পরীক্ষার চেয়ে সফটওয়্যারটি চালানো এবং এর সাথে ইন্টারঅ্যাক্ট করাকে অগ্রাধিকার দেওয়া উচিত।
কারণ, ইন্টারঅ্যাকশনের পর যদি UI/UX স্তরে উল্লেখযোগ্য অসন্তুষ্টি থাকে, তবে ফ্রেমওয়ার্ক, মৌলিক স্থাপত্য, ডেটা মডেল বা ব্যবহারের কেসগুলির মতো মৌলিক অংশগুলি পরিবর্তন করার প্রয়োজন হতে পারে।
আমার বর্তমান ব্যক্তিগত সফটওয়্যার ডেভেলপমেন্ট প্রকল্পে, আমিও কার্যকারিতার নমনীয়তা এবং কর্মক্ষমতা নিয়ে সমস্যা লক্ষ্য করেছি, যার ফলে আমাকে দুটি ফ্রেমওয়ার্ক পরিবর্তন করে ভিন্ন ফ্রেমওয়ার্ক ব্যবহার করতে হয়েছে।
মেমরি ব্যবহারের দক্ষতা খারাপ এমন একটি অংশও ছিল, যার জন্য পুরো প্রক্রিয়াকরণ পদ্ধতির সম্পূর্ণ সংস্কারের প্রয়োজন হয়েছিল।
এই রিফ্যাক্টরিংয়ের সন্ধিক্ষণেই পরীক্ষা সচেতনভাবে বিবেচিত হয়।
যদি এটি ডেভেলপমেন্টের প্রাথমিক পর্যায়ে হয়, অথবা যদি বৈশিষ্ট্য এবং স্পেসিফিকেশনগুলি উল্লেখযোগ্যভাবে পরিবর্তিত হতে থাকে, তবে পরীক্ষার প্রয়োজন নাও হতে পারে।
তবে, যদি ডেভেলপমেন্ট ইতিমধ্যেই অনেকদূর এগিয়ে যায় এবং অনেক কিছু পরীক্ষা করার থাকে, তাহলে ফাংশনাল ত্রুটি বা বাদ পড়া অংশ না থাকার বিষয়টি নিশ্চিত করতে রিফ্যাক্টরিংয়ের সময় পরীক্ষার প্রয়োজন হবে।
অতএব, ডেভেলপমেন্ট একটি নির্দিষ্ট পরিমাণে অগ্রসর হওয়ার পর যখন রিফ্যাক্টরিং প্রয়োজনীয় হয়ে ওঠে, তখন টেস্ট প্রোগ্রাম তৈরির ধারণাটি মন্দ নয়।
এই পর্যায়ে, গুরুত্বপূর্ণ হলো সমস্ত কোডের জন্য পরীক্ষা তৈরি না করে, বরং সেই পরিপক্ক অংশগুলির উপর পরীক্ষা কেন্দ্রীভূত করা যা ভবিষ্যতে খুব বেশি পরিবর্তন হওয়ার সম্ভাবনা নেই, এবং এখনো পরিবর্তনশীল অংশগুলিকে স্বয়ংক্রিয় পরীক্ষা ছাড়াই রেখে দেওয়া।
এটিকে রিফ্যাক্টরিং-চালিত পরীক্ষা বলা যেতে পারে।
উপসংহার
জেনারেটিভ এআই সফটওয়্যার ডেভেলপমেন্টকে নাটকীয়ভাবে রূপান্তরিত করছে।
পূর্ববর্তী নিবন্ধগুলিতে, আমি সর্বমুখী প্রকৌশলী হওয়ার গুরুত্ব নিয়ে লিখেছিলাম, যিনি ঐতিহ্যবাহী ফুল-স্ট্যাক প্রকৌশলীর ভূমিকা ছাড়িয়ে বিভিন্ন ডোমেন, অবকাঠামো এবং এক্সিকিউশন পরিবেশকে একত্রিত করে সর্বমুখী সিস্টেম তৈরি করতে পারেন।
আমি আরও একটি নিবন্ধ লিখেছিলাম, যেখানে পরামর্শ দিয়েছিলাম যে আমরা এখন অভিজ্ঞতা ও আচরণ-চালিত ডেভেলপমেন্টের যুগে প্রবেশ করছি, যা স্পেসিফিকেশনের সাথে বাস্তবায়নের ঐতিহ্যবাহী সফটওয়্যার ডেভেলপমেন্ট পদ্ধতির পরিবর্তে সফটওয়্যার আচরণের মাধ্যমে ব্যবহারকারীর অভিজ্ঞতা বাড়ানোর উপর জোর দেয়।
ডেভেলপমেন্ট-চালিত ডেভেলপমেন্ট এবং রিফ্যাক্টরিং-চালিত পরীক্ষা হলো সেই পদ্ধতিগুলি, যা সফটওয়্যার ডেভেলপমেন্টের এই নতুন দিগন্তের দিকে আমাদের নিয়ে যাবে।