மேம்பாடு என்பது புதிய மற்றும் பயனுள்ள ஒன்றைத் தொடர்ச்சியாக உருவாக்கும் செயல்முறையாகும்.
மேம்பாடு என்று நாம் நினைக்கும்போது, புதிய தயாரிப்பு மேம்பாடு அடிக்கடி நினைவுக்கு வருகிறது. இது தனிப்பட்ட தயாரிப்புகளை உருவாக்கும் உற்பத்தி முறையிலிருந்து வேறுபடுகிறது; மாறாக, இது தயாரிப்புகளுக்கான வடிவமைப்பு விவரக்குறிப்புகள் அல்லது அச்சுகளை உருவாக்குவதைச் சார்ந்தது.
இதனால், புதிய தயாரிப்பு மேம்பாட்டின் மூலம் உருவாக்கப்பட்ட நீல அச்சு வரைபடங்கள் அல்லது அச்சுகள், ஒரே மாதிரியான பல தயாரிப்புகளைத் தயாரிக்க தொழிற்சாலைகளில் மீண்டும் மீண்டும் பயன்படுத்தப்படுகின்றன.
தனிப்பட்ட திறன்களை மேம்படுத்துவது அல்லது சமூகம் மற்றும் நாடுகளை மேம்படுத்துவது போன்ற பிற பயன்பாடுகளும் உள்ளன. இவை, ஒருவரிடம் இருக்கும் பொருட்கள் அதிகரிப்பதை மட்டும் குறிக்கவில்லை; மாறாக, மேம்படுத்தப்பட்ட திறன்களை மீண்டும் மீண்டும் பயன்படுத்தி பலன் பெறும் திறனைக் குறிக்கின்றன.
தனிநபர்கள் மற்றும் சமூகங்களின் பொருளாதார வலிமை, பொருளாதார நிலைகளைப் பொறுத்து மாறுபடலாம், ஆனால் மேம்படுத்தப்பட்ட திறன்கள் அடிப்படையில் நிரந்தரமானவை.
அவை குறைந்தாலும், அது பொருளாதார செழிப்பின் ஏற்ற இறக்கங்களாகக் கருதப்படாமல், சரிவாகவே பார்க்கப்படுகிறது.
இவற்றுக்கும் அப்பால், தொழில்நுட்பம் மற்றும் அறிவின் மேம்பாடும் உள்ளது. தனிநபர்கள் அல்லது குறிப்பிட்ட சமூகங்களின் திறன்களைப் போலன்றி, இவை எளிதாகப் பகிரக்கூடிய ஒரு சிறப்பம்சத்தைக் கொண்டுள்ளன.
மேலும், இந்த மேம்பாடுகளின் விளைவாக வரும் தயாரிப்புகள், திறன்கள், அறிவு மற்றும் தொழில்நுட்பங்களில் சில, அடுத்தடுத்த மேம்பாட்டிற்குப் பங்களிக்கக்கூடியவையாகும்.
இத்தகைய பயனுள்ள வெளியீடுகளை மேம்படுத்துவதன் மூலம், மேம்பாட்டின் நோக்கம் விரிவடைகிறது, மேலும் செயல்திறன் மற்றும் தரமும் மேம்படுகிறது.
AI-இயக்கப்படும் மென்பொருள் மேம்பாடு
பொதுவாக, மேம்பாட்டிற்கு குறிப்பிடத்தக்க நேரமும் முயற்சியும் தேவைப்படுகிறது. குறிப்பாக சமூகம் முன்னேறும்போது, பல்வேறு விஷயங்கள் மேலும் நுட்பமாக மாறுவதால், புதிய விஷயங்களை உருவாக்குவது இன்னும் கடினமாகிறது.
இருப்பினும், உற்பத்தி AI (generative AI) வருகையுடன், இந்த நிலைமை மாறி வருகிறது. தற்போது, உற்பத்தி AI-யின் உயர் நிரலாக்கத் திறன்கள் காரணமாக மென்பொருள் மேம்பாடு வியத்தகு மாற்றங்களுக்கு உட்பட்டுள்ளது.
இந்தச் சூழலில், உற்பத்தி AI-யை அடிப்படையாகக் கொண்ட தன்னாட்சி முகவர்கள் (autonomous agents), மென்பொருள் பொறியாளர்களாக மென்பொருள் மேம்பாட்டின் மையமாக மாறும் எதிர்காலக் கண்ணோட்டம் ஏற்கனவே நிஜமாகி வருகிறது.
நாம் தற்போது ஒரு மாறுதல் கட்டத்தில் இருக்கிறோம். மேம்பாட்டை முழுமையாக உற்பத்தி AI-யிடம் ஒப்படைக்க முடியாவிட்டாலும், உற்பத்தி AI-யை திறமையாகப் பயன்படுத்துவதன் மூலம் மென்பொருள் மேம்பாட்டை சக்திவாய்ந்த முறையில் முன்னெடுத்துச் செல்ல முடியும்.
இது AI-இயக்கப்படும் மென்பொருள் மேம்பாடு என்று குறிப்பிடப்படுகிறது.
வளர்ச்சி சார்ந்த மேம்பாடு (Developmental Development)
உருவாக்கும் AI (generative AI) மென்பொருள் மேம்பாட்டை மிகவும் திறமையானதாக்கும் போது, அது இறுதி இலக்கு மென்பொருளின் மேம்பாட்டை மட்டுமல்லாமல், மேம்பாட்டிற்கு உதவும் மென்பொருளின் மேம்பாட்டையும் சீரமைக்க முடியும்.
முன்னர் குறிப்பிட்டபடி, மேம்பாட்டை எளிதாக்கும் வெளியீடுகள் அதன் நோக்கத்தை விரிவுபடுத்துகின்றன, மேலும் செயல்திறனையும் தரத்தையும் மேம்படுத்த உதவுகின்றன. மேலும், திறம்பட உருவாக்கப்பட்டால், அவை மற்ற மேம்பாட்டுத் திட்டங்களிலும் மீண்டும் பயன்படுத்தப்படலாம்.
ஆகவே, மென்பொருள் மேம்பாட்டுச் செயல்பாட்டின் போது மேம்பாட்டிற்கு உதவும் மென்பொருளை உருவாக்குவதன் மூலம், ஒட்டுமொத்த செயல்திறனை அதிகரிக்க முடியும், மேலும் இந்தச் சொத்துக்கள் எதிர்கால மேம்பாட்டிற்கும் பயன்படுத்தப்படலாம்.
வழக்கமாக, இதுபோன்ற துணை மென்பொருளை உருவாக்குவது ஒரு பொதுவான நடைமுறையாக இருந்தது, ஆனால் அதற்கு அதன் சொந்த மேம்பாட்டு நேரமும் முயற்சியும் தேவைப்பட்டது, இது கவனமாக பரிசீலனை மற்றும் செறிவான செயலாக்கத்தை அவசியமாக்கியது.
உருவாக்கும் AI-யைப் பயன்படுத்துவதன் மூலம், மனதில் தோன்றும் சிறிய பணிகளை தானியங்குபடுத்த எளிய மென்பொருளை விரைவாக உருவாக்க முடியும். பணி தெளிவான செயலாக்கத்தைக் கொண்டிருந்தால், உருவாக்கும் AI கிட்டத்தட்ட பிழையின்றி நிரலைத் துல்லியமாக உருவாக்க முடியும்.
இதன் விளைவாக, மென்பொருள் மேம்பாட்டுச் செயல்பாட்டின் போது மேம்பாட்டிற்கு உதவும் மென்பொருளை உருவாக்குவது முன்பை விட எளிதாகிவிட்டது.
மேலும், இதை ஆழமாகச் சிந்திப்பதன் மூலம், மேம்பாட்டிற்கான பயனுள்ள கருவிகள் செயல்முறையின் போது தொடர்ந்து உருவாக்கப்பட்டு, மேம்பாட்டு முறையையே மாற்றியமைக்கும் ஒரு மேம்பாட்டு பாணி உருவாகிறது.
இதை நாம் "வளர்ச்சி சார்ந்த மேம்பாடு" என்று அழைப்போம்.
வளர்ச்சி சார்ந்த மேம்பாட்டைப் பயிற்சி செய்ய, ஒருவர் தங்கள் சொந்த மென்பொருள் மேம்பாட்டை புறநிலையாகக் கவனிக்கும் பழக்கம், எந்தப் பகுதிகளை மென்பொருளால் கையாள முடியும் மற்றும் எந்தப் பகுதிகளை மனிதர்களால் மட்டுமே கையாள முடியும் என்று கருதுவது, அத்துடன் அத்தகைய துணை மென்பொருளை உருவாக்கும் திறனையும் கொண்டிருக்க வேண்டும்.
மேலும், உருவாக்கும் AI இந்த மென்பொருள் கருவிகளில் இணைக்கப்படலாம். அதை மென்பொருளுக்குள் உட்பொதிப்பதன் மூலம், உருவாக்கும் AI முகவர்களைப் போலன்றி, செயலாக்கத்தின் நோக்கத்தை ஓரளவு சுருக்கலாம் மற்றும் பாதைகளை வரையறுக்கலாம்.
AI முகவர்கள் தூண்டுதல்கள் (prompts) மூலம் ஒத்த முடிவுகளை அடைய முடியும் என்றாலும், உட்பொதிக்கப்பட்ட உருவாக்கும் AI கொண்ட மென்பொருள் நிரல்கள் மற்றும் தூண்டுதல்கள் இரண்டையும் இணைப்பதன் மூலம் துல்லியத்தை எளிதாக அதிகரிக்க முடியும்.
இதுபோன்ற வளர்ச்சி சார்ந்த மேம்பாட்டைப் பயிற்சி செய்ய முடிந்தால், முதல் திட்டத்துடன் ஒப்பிடுகையில் இரண்டாவது திட்டத்தில் தரம் மற்றும் செலவு இரண்டிலும் மேம்பாடுகளைக் காண முடியும். மேலும், அடுத்தடுத்த ஒவ்வொரு திட்டத்திலும் - மூன்றாவது, நான்காவது மற்றும் பலவற்றிலும் - மேம்பாடுகள் தொடர்ந்து குவியும்.
இது வெறுமனே உருவாக்கும் AI-யைப் பயன்படுத்தி மென்பொருளை உருவாக்குவதிலிருந்து முற்றிலும் வேறுபட்டது. உருவாக்கும் AI கருவிகளை மட்டும் தேர்ச்சி பெறும் குழுக்களுக்கும், வளர்ச்சி சார்ந்த மேம்பாட்டைப் பயிற்சி செய்யும் குழுக்களுக்கும் இடையே காலப்போக்கில் ஒரு குறிப்பிடத்தக்க இடைவெளி உருவாகும்.
மறுசீரமைப்பு-உந்தப்பட்ட சோதனை (Refactoring-Driven Testing)
சோதனை-உந்தப்பட்ட மேம்பாடு (Test-Driven Development - TDD) என்ற ஒரு கருத்து உள்ளது. இதில், விவரக்குறிப்புகளின் அடிப்படையில் சோதனைகள் முதலில் வடிவமைக்கப்பட்டு, பின்னர் அந்த சோதனைகளில் தேர்ச்சிபெற மென்பொருள் உருவாக்கப்படுகிறது.
ஆரம்பத்தில், உருவாக்கும் AI-யைப் பயன்படுத்துவதன் மூலம், தானியங்கு சோதனைக்கான சோதனை நிரல்களை உருவாக்குவது எளிதாக இருக்கும் என்றும், இது TDD-ஐ சாத்தியமாக்கும் என்றும் நானும் நினைத்தேன்.
ஆனால், வளர்ச்சி சார்ந்த மேம்பாட்டைப் (developmental development) பயிற்சி செய்யத் தொடங்கியபோது, சோதனைகளைச் செயல்படுத்துவதற்கு முன் அவற்றைப் பற்றி சிந்திப்பது எப்போதும் மிகவும் பொருத்தமான அணுகுமுறை அல்ல என்று நான் நம்பத் தொடங்கினேன்.
குறிப்பாக, பயனர் அனுபவம் (usability) மற்றும் காட்சி வடிவமைப்பு (visual design) போன்ற அகநிலைப் பகுதிகளை உள்ளடக்கிய வலைப் பயன்பாடுகள் போன்ற மென்பொருளுக்கு, ஒன்றோடு நேரடியாகச் செயல்படும்போது, விரிவான சோதனைகளை விட மென்பொருளை உண்மையில் இயக்கி அதனுடன் செயல்படுவது முன்னுரிமை பெறும் என்பதை உணர்ந்தேன்.
ஏனென்றால், அதனுடன் செயல்பட்ட பிறகு UI/UX மட்டத்தில் குறிப்பிடத்தக்க அதிருப்தி இருந்தால், கட்டமைப்பு (framework), அடிப்படை கட்டமைப்பு (basic architecture), தரவு மாதிரி (data model) அல்லது பயன்பாட்டு சூழல்கள் (use cases) போன்ற அடிப்படைக் கூறுகளை மாற்ற விரும்பும் வாய்ப்பு உள்ளது.
எனது தற்போதைய தனிப்பட்ட மென்பொருள் மேம்பாட்டுத் திட்டத்தில், அம்சங்களின் நெகிழ்வுத்தன்மை மற்றும் செயல்திறன் ஆகியவற்றில் சிக்கல்களைக் கவனித்தேன், இதனால் இரண்டு கட்டமைப்புகளை வெவ்வேறுவற்றிற்காக மாற்ற வேண்டியதாயிற்று.
செயல்திறனற்ற நினைவகப் பயன்பாடு காரணமாக சில பகுதிகளில் செயலாக்கத்தை முழுமையாக மறுபரிசீலனை செய்ய வேண்டியிருந்தது.
மறுசீரமைப்பு (refactoring) செய்யும் இத்தகைய தருணங்களில்தான், சோதனை முதன்முதலில் ஒரு நனவான பரிசீலனையாக மாறுகிறது.
இது மேம்பாட்டின் ஆரம்ப கட்டத்தில் இருந்தால், அல்லது செயல்பாடுகள் மற்றும் விவரக்குறிப்புகள் எப்படியும் கணிசமாக மாறப்போகின்றன என்றால், சோதனைகள் தேவையில்லாமல் போகலாம்.
இருப்பினும், மேம்பாடு ஏற்கனவே மிகவும் முன்னேறி, சரிபார்க்க வேண்டிய பல உருப்படிகள் இருந்தால், மறுசீரமைப்பு செயல்பாட்டு குறைபாடுகளை அல்லது பிழைகளை அறிமுகப்படுத்தவில்லை என்பதை உறுதிப்படுத்த சோதனைகள் அவசியமாக இருக்கும்.
எனவே, மேம்பாடு ஒரு குறிப்பிட்ட அளவிற்கு முன்னேறி, மறுசீரமைப்பு அவசியமாகும்போது சோதனை நிரல்களை உருவாக்கும் அணுகுமுறை ஒரு தவறான யோசனை அல்ல.
இந்த கட்டத்தில், அனைத்து குறியீடுகளுக்கும் சோதனைகளை உருவாக்குவது முக்கியமல்ல, மாறாக எதிர்காலத்தில் அதிகம் மாற வாய்ப்பில்லாத முதிர்ந்த பகுதிகளுக்கு சோதனை செய்வதில் கவனம் செலுத்துவதும், மாறும் பகுதிகளை தானியங்கு சோதனைகள் இல்லாமல் விடுவதும் முக்கியம்.
இதை மறுசீரமைப்பு-உந்தப்பட்ட சோதனை (Refactoring-Driven Testing) என்று அழைக்கலாம்.
முடிவுரை
உருவாக்கும் AI (Generative AI) மென்பொருள் மேம்பாட்டை வியத்தகு முறையில் மாற்றியமைத்து வருகிறது.
முந்தைய ஒரு கட்டுரையில், ஒரு பாரம்பரிய முழு-ஸ்டேக் பொறியாளரைத் தாண்டி, பல்வேறு களங்கள் (domains), உள்கட்டமைப்புகள் (infrastructures) மற்றும் இயக்கச் சூழல்களை (execution environments) ஒருங்கிணைக்கும் அமைப்புகளை உருவாக்கக்கூடிய ஒரு "எல்லாத் திசைசார் பொறியாளராக" (Omni-directional Engineer) ஆக வேண்டும் என்ற முக்கியத்துவத்தைப் பற்றி நான் எழுதியிருந்தேன்.
மேலும், விவரக்குறிப்புகளைச் செயல்படுத்துவதோடு இணைப்பதில் கவனம் செலுத்தாமல், மென்பொருளின் நடத்தை மூலம் பயனர் அனுபவத்தை மேம்படுத்துவதில் கவனம் செலுத்தும் "அனுபவம் மற்றும் நடத்தை-மைய மேம்பாடு" (Experience & Behavior-centric Development) சகாப்தத்திற்குள் நாம் நுழைந்து கொண்டிருக்கிறோம் என்று பரிந்துரைக்கும் ஒரு கட்டுரையையும் நான் எழுதினேன்.
வளர்ச்சி சார்ந்த மேம்பாடு (developmental development) மற்றும் மறுசீரமைப்பு-உந்தப்பட்ட சோதனை (refactoring-driven testing) ஆகியவைதான் மென்பொருள் மேம்பாட்டில் இந்த புதிய எல்லைகளை நோக்கி இட்டுச் செல்கின்றன.