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