𝗧𝗵𝗲 𝗖𝗼𝗱𝗲 𝗔𝗜 𝗪𝗼𝗻'𝘁 𝗪𝗿𝗶𝘁𝗲
আমি টেকনিক্যাল ইন্টারভিউ প্রশ্ন হিসেবে ফর্ম ভ্যালিডেশন (form validation) ব্যবহার করি। এটি দেখতে সহজ মনে হয়। উত্তরগুলো প্রকাশ করে যে মানুষ কীভাবে চিন্তা করে।
আমি Claude, ChatGPT এবং Gemini-তে এই সমস্যাটি পরীক্ষা করেছি। তারা সবাই একই ধরণের সমাধান দিয়েছিল।
বেশিরভাগ মানুষ বিভিন্ন অ্যাড্রেস হ্যান্ডেল করার জন্য একটি টাইপ প্যারামিটারসহ একটি সিঙ্গেল ফাংশন ব্যবহার করে। এটি কাজ করে। কিন্তু প্রতিটি নতুন নিয়ম সেই একই ফাংশনে একটি নতুন ব্রাঞ্চ (branch) যোগ করে। ফলে পার্থক্যগুলো লুকিয়ে থাকে।
আমি দেখা সবচেয়ে বুদ্ধিদীপ্ত মানুষের উত্তরটি ছিল রিকার্সন (recursion) ব্যবহার করা। এটি ডেটার গঠন বা শেপ (data shape) অনুযায়ী কাজ করে। এটি বেশ মার্জিত। কিন্তু এতে একটি ত্রুটি আছে। এটি শুধুমাত্র বিদ্যমান ফিল্ডগুলো ভ্যালিডেট করে। যদি কোনো কী (key) অনুপস্থিত থাকে, তবে ফাংশনটি তা কখনোই দেখতে পায় না। এর কোনো 'সোর্স অফ ট্রুথ' (source of truth) নেই।
তিনটি AI-ই একই ভুল করেছে। যখন আমি ত্রুটিটি ধরিয়ে দিলাম, তারা সবাই একটি স্কিমা (schema)-র পরামর্শ দিল। একটি স্কিমা-চালিত পদ্ধতি প্রযুক্তিগতভাবে সঠিক। এটি অনুপস্থিত কী (key) হ্যান্ডেল করতে পারে এবং স্কেলেবিলিটি বজায় রাখে।
কিন্তু আরও ভালো একটি উপায় আছে: কম্পোজিশন (Composition)।
একটি বিশাল ফাংশন বা জটিল স্কিমার পরিবর্তে, আপনি প্রতিটি টাইপের জন্য নির্দিষ্ট ফাংশন তৈরি করতে পারেন।
- একটি স্ট্যান্ডার্ড অ্যাড্রেসের জন্য একটি ফাংশন।
- শিপিংয়ের জন্য একটি ফাংশন।
- বিলিংয়ের জন্য একটি ফাংশন।
আপনি আপনার ভ্যালিডেটর তৈরি করতে সেগুলোকে একত্রিত করবেন।
এই পদ্ধতিটি অনুপস্থিত কী (key)-র সমস্যা সমাধান করে। বিলিং ভ্যালিডেটর সবসময় একটি VAT নম্বর চেক করে, এমনকি যদি কী (key) অনুপস্থিত থাকে তবুও। এটি কাজ করে কারণ একটি বিলিং অ্যাড্রেস হলো একটি বাস্তব ব্যবসায়িক ধারণা। এটি কেবল আপনার ডেটার কোনো প্যাটার্ন নয়।
পার্থক্যগুলো স্পষ্টভাবে প্রকাশ পায়। যখন কোনো নতুন অ্যাড্রেস টাইপ আসে, আপনি একটি নতুন ফাংশন যোগ করেন। আপনি পুরনো কোড পরিবর্তন করেন না।
AI এবং সেরা ইঞ্জিনিয়াররা প্রায়ই একই ফাঁদে পা দেন। আমাদের শেখানো হয় প্যাটার্ন খুঁজে বের করতে এবং লজিক সেন্ট্রালাইজ করতে। আমরা যেকোনো মূল্যে ডুপ্লিকেশন (duplication) দূর করার চেষ্টা করি।
AI আমাদের ট্রেনিং ডেটা থেকে এই সহজাত প্রবৃত্তিটি উত্তরাধিকারসূত্রে পায়। এটি জেনারালাইজেশনকে (generalization) অগ্রাধিকার দেয়।
সমস্যাটি এই নয় যে AI ভুল করছে। সমস্যা হলো AI খুব কমই সবচেয়ে গুরুত্বপূর্ণ প্রশ্নটি করে: এই পরিবর্তনশীলতা (variability) কি আমার কোডে নাকি আমার ডেটাতে রয়েছে?
যদি অ্যাড্রেস টাইপগুলো স্থিতিশীল হয়, তবে কম্পোজিশন ব্যবহার করুন। যদি এক্সটার্নাল ডেটার মাধ্যমে অ্যাড্রেস টাইপ পরিবর্তিত হয়, তবে স্কিমা ব্যবহার করুন।
সবচেয়ে সহজ সমাধান মানেই কম লাইনের কোড নয়। বরং এটি হলো সেই সমাধান যা আপনার বিজনেস ডোমেইনকে (business domain) সঠিকভাবে প্রতিফলিত করে।
Source: https://dev.to/iceonfire/the-code-ai-wont-write-1ieb
Optional learning community: https://t.me/GyaanSetuAi