புரோகிராமிங் என்றால் என்ன? தொடர் 5
ஒரு வேலையை முடிப்பதற்காக, நமது மூளையானது செய்யவேண்டிய செயல்களை எந்த வரிசைப்படி செய்தால் என்னென்ன result கிடைக்கும் என்பதை பரிசோதித்து, நிறைய plan கள் போட்டு அதிலிருந்து சிறந்த பிளானை தேர்வுசெய்து நமக்கு கட்டளைகளை வரிசைக்கிரமமாக தந்துகொண்டிருக்கிறது என்பதையும் அதுதான் Software engineering method for problem solving என்பதற்கு அடிப்படை என்பதையும் முந்தைய பாகத்தில் பார்த்தோம். இனி...
Software engineering method என்றால் என்ன?
நமக்கு தரப்பட்ட problem or requirement ற்கு ஏற்ப program எழுதுவதற்காக நாம் கையாளும் பல்வேறு technique க்குகளை software engineering method for problem solving எனலாம். இந்த method ல் ஐந்து கட்டங்கள் உள்ளன. இவற்றை நாம் பின்பற்றினால் நம்மால் தரமான program ஐ கொடுக்க முடியும்.
நமக்கு தரப்பட்ட problem or requirement ற்கு ஏற்ப program எழுதுவதற்காக நாம் கையாளும் பல்வேறு technique க்குகளை software engineering method for problem solving எனலாம். இந்த method ல் ஐந்து கட்டங்கள் உள்ளன. இவற்றை நாம் பின்பற்றினால் நம்மால் தரமான program ஐ கொடுக்க முடியும்.
1. முதலில் Requirements என்ன என்பதை தெளிவாக அறிந்துகொள்வது. Requirements முழுமையானதாக இருக்க வேண்டும் அரைகுறையாகவோ அல்லது தெளிவற்றதாகவோ இருக்கக்கூடாது. அதாவது என்ன விசயத்துக்காக நாம் புரோகிராம் எழுதப் போகிறோம் என்பதை தெளிவாக தீர்மானித்துக் கொள்ளவேண்டும். இல்லையென்றால் என்ன செய்யப் போகிறோம் என்பதே நமக்கு தெரியவில்லை என்றுதான் அர்த்தம். என்ன செய்யப்போகிறோம் என்பதே தெரியாத நிலையில் நம்மால் அடுத்த கட்டத்துக்கு போகமுடியாது.
2. இரண்டாவது Analysis செய்வது. அதாவது requirements கிடைத்தவுடன் அதை ஆய்வு செய்வது. Requirement சரியாக இருக்கிறதா? அதற்கு தேவையான input க்கள் என்னென்ன? output க்கள் என்னென்ன? அதனை செய்து முடிக்க தேவையான இதர விசயங்கள் என்னென்ன என அனைத்தையும் ஆய்வு செய்வது.
3. மூன்றாவது Design செய்வது. அதாவது நம்முடைய Logic மற்றும் idea க்களை பயன்படுத்தி எப்படி result ஐ கொண்டுவரப் போகிறோம் என்பதை நமக்கு புரிகிற மாதிரி எழுதுதல் (Algorithm writing). இது மனிதர்களுக்கு விளங்குகின்ற மொழியில் எழுதுவது. ஆரம்பத்தில் இதை நீங்கள் தமிழில் கூட எழுதலாம். இதுதான் மிக முக்கியமான கட்டம் ஆகும். ஏனென்றால் இங்குதான் நமது program எப்படி வேலை செய்யப் போகிறது என்பது தீர்மானிக்கப்படுகிறது.
சில சமயம் requirements ஸும் அதற்காக நாம் செய்யவிருக்கும் program மும் மிகப்பெரியதாக இருந்தால் முழுப் program முடைய அனைத்து concept or idea ஆரம்பத்திலேயே தெரியாதே என்ற கேள்வி எழலாம். கேள்வி சரிதான், பல்வேறு சமயங்களில் algorithm எழுதுவது சற்று சிரமமாகத்தான் இருக்கும். ஏனென்றால் ஒரு புரோகிராம் எழுதி execute பண்ணுவதற்கு முன்பே அதைப்பற்றி அவ்வளவாக நமக்கு idea இருக்காதுதான். அதற்காக அதை விட்டுவிட முடியுமா? அவ்வாறு நமக்கு புரியாத விசயங்களை high level steps களாக வகைப்படுத்த வேண்டும். அதன் பின்னரும் விளங்கவில்லையென்றால் ஒவ்வொரு high level step ஐயும் சிறிது சிறிதாக பிரித்து (divide into smaller steps) அவற்றை ஆய்வு செய்யவேண்டும். அதற்கடுத்து அதையும் சிறிது சிறிதாக பிரித்து எழுதுவது இவ்வாறு எழுதும்போது பெரிய விசயங்கள் எல்லாம் சிறிய சிறிய பகுதிகளாக பிரிக்கப்பட்டு விடுவதால் idea நமக்கு எளிதாக கிடைக்கும்.
நான்கு மாடுகள் ஒற்றுமையுடன் இருந்தபோது சிங்கத்தால் அவற்றை கொல்ல முடியவில்லை. சிங்கம் யோசித்தது. மாடுகளை தனித்தனியாக முதலில் பிரித்தது. பின்னர் சுலபமாக அனைத்தையும் கொன்றது. என்ன சிறுவயதில் பள்ளி புத்தகத்தில் படித்த நீதிக்கதை ஞாபகம் வருதா? இந்த கதையிலிருந்து ஒவ்வொருவரும் ஒவ்வொரு படிப்பினை பெறும் வேளையிலே, சிங்கத்தின் logic or algorithm சரியாக வேலை செய்தது என்று ஒரு programmer சொல்வார். Algorithm சரியில்லையென்றால் என்னவாகியிருக்கும்? சிங்கத்துக்கு உணவு கிடைச்சிருக்காது, உதைதான் கிடைச்சிருக்கும்.
இதைத்தான் divide and conquer method என்று சொல்வார்கள்.
4. நான்காவது implement the algorithm. அதாவது algorith தத்தை programming command டுகளாக மாற்றி எழுதுவது. இங்கு ஒரு விசயத்தை நாம் புரிந்து கொள்ளவேண்டும். algorithm என்பதை எல்லோரும் போடலாம். ஏன் நமது கதையில் சிங்கம் கூட போட்டது. ஆனால் இந்த algorith தத்தை computer விளங்காது. அதற்கென உள்ள சில பிரத்யேகமான command டுகளை நாம் பயன்படுத்தி program எழுதவேண்டும். இதற்குதான் நாம் c, delphi, visual basic, java என்று படிக்கிறோம். அதாவது programmer என்பவருக்கு algorithm + programming commands இரண்டையும் எப்படி எழுதவேண்டும் என்பது தெரிந்திருக்க வேண்டும்.
5. அடுத்து Test செய்வது. என்னதான் சிறப்பாக algorithm எழுதி அதை program ஆக மாற்றினாலும் அதில் ஏதாவது bug (சிக்கல்) இருக்கத்தான் செய்யும். அதைத் தவிர்க்கமுடியாது. என்ன... பழகப் பழக... அதாவது experience கிடைக்க கிடைக்க bug வேண்டுமானால் குறையலாம். எனவே கவலைப்படத் தேவையில்லை. Bug குகளை களைய வேண்டுமானால் நாம் நிறைய test செய்யவேண்டும். ஒரு கோணத்திலிருந்து test செய்தால் ஒருவேளை program சரியாக செயல்பட்டு நமக்கு தேவையான result ஐ கொடுக்கலாம். உடனே ஆஹா என்னுடைய program எதிர்பார்த்த result ஐ கொடுத்துவிட்டது என்று எண்ணக்கூடாது...
என்னது! program correct result கொடுத்தாலும் வேலை முடிஞ்சிடுச்சுன்னு சொல்லக்கூடாதா... என்னங்க சொல்றீங்க.... என்று நீங்கள் கேட்பது புரிகிறது....
இங்குதான் நீங்கள் ஒரு எதார்த்தத்தை புரிந்து கொள்ளவேண்டும். அது என்னவென்றால் அனைவரும் (ஏன் நாம் கூட எல்லா நேரமும்) ஒரே மாதிரியா சிந்திக்கிறோம்? இல்லையே!.
உதாரணத்திற்கு ஒருவர் தன்னுடைய குதிரையை நல்ல விலைக்கு விற்க பழக்கப்படுத்துகிறார். அதாவது குதிரையில் ஏறி அமர்ந்து அப்பாடா என்றால் ஓடும், கடவுளே காப்பாத்து என்றால் நிற்கும். இப்படியாக ஒவ்வொரு தடவையும் தனது தோட்டத்திற்குள்ளேயே (அதாவது ஒரு கோணத்திலியே) அவர் குதிரையை test செய்கிறார். குதிரையும் test செய்ததில் pass ஆகியிருந்தது.
இவரிடம் ஒருவர் வந்து குதிரையை விலைக்கு வாங்கி ஏறி உட்கார்ந்து test செய்தார் சரியாக இருந்தது. சந்தோஷத்துடன் குதிரை மேலேறி ரோட்டிற்கு சென்றார். அப்பாடா என்றார், குதிரை ஓடத்துவங்கியது. கொஞ்சதூரம் போனபிறகு அவருக்கு என்ன சொல்லி நிறுத்துவதென்பது மறந்து போய்விட்டது. என்னென்னமோ சொல்லிப் பார்க்கிறார். குதிரை நின்றபாடில்லை. வழியில் குறுக்கிட்ட ஆற்றை நோக்கி குதிரை ஓடிக்கொண்டிருந்தது. கொஞ்சநேரத்தில் ஆற்றுக்குள் விழப்போகிறோம் என்பது இவருக்கு விளங்கிவிட்டது. பயத்தில் கடவுளே காப்பாத்து என்று கத்த ஆற்றங்கரையில் குதிரை நின்றுவிட்டது. மனுசனுக்கு இப்பத்தான் கொஞ்சம் நிம்மதி வந்துச்சு... சந்தோசத்துல அப்பாடா என்றார்... என்னவாகியிருக்கும்???.... பதில் தெரியலைன்னா மீண்டும் கதையை முதலிலிருந்து படித்துக் கொள்ளுங்கள்.
எதற்கு சம்பந்தமி்ல்லாம குதிரை கதையை இங்கு சொல்கிறேன் என்று பார்க்கிறீர்களா? Test செய்யும்போது ஒரே மாதிரியே யோசிக்கக்கூடாது. ஏனென்றால் ஒவ்வொருவரும் வித்தியாசமான கோணத்தில் உங்கள் program ஐ கையாளும் போது அவர்கள் நீங்கள் போட்டிருக்கும் rule களை அப்படியே follow பண்ணுவார்கள் என்று நினைப்பது அபத்தம். இப்படி test செய்து பார்த்தால் என்ன விடை கிடைக்கும். அப்படி test செய்து பார்த்தால் என்ன விடை கிடைக்கும் என பல கோணங்களிலிருந்து உங்கள் program ஐ நீங்களே test செய்து பார்க்கும்போதுதான் அதில் உள்ள பிரச்சனைகள் என்னென்ன என்பதும் அதை solve செய்ய எப்படி நமது algorithm த்தை மாற்ற வேண்டும் என்ற ஐடியாவும் கிடைக்கும்.
இப்போ குதிரை கதையில் உள்ள bug என்னன்னு பார்ப்போம். அப்பாடா என்றால் ஓடவேண்டும் என்று algorithm எழுதிய அந்த நபர் ரோட்டிலேயும் குதிரையை test செய்து பார்த்திருந்தால் ஏதாவதொரு சூழ்நிலையில் அப்பாடா என்றதற்கு தவறான result டினை பெற்றிருப்பார். ஆஹா!!! அப்பாடா என்றால் ஓடவல்லவா பழக்கியிருக்கிறோம் இந்த சமயத்தில் ஓடக்கூடாதே என யோசித்து அதிலிருந்து மீள்வதற்கான வழியை ஆராய்ந்து குதிரையை இன்னும் சிறப்பாக பழக்கியிருப்பார். அதாவது குதிரையும் அப்பாடா என்றவுடன் ஓடாமல் எதிரில் இருக்கின்ற சூழ்நிலைக்கு தக்கவாறு நடந்துகொள்ள பழகியிருக்கும். எனவே நிறைய கோணங்களில் நாம் யோசிக்கவும் test செய்யவும் பழகிக்கொள்ள வேண்டும்.
2. இரண்டாவது Analysis செய்வது. அதாவது requirements கிடைத்தவுடன் அதை ஆய்வு செய்வது. Requirement சரியாக இருக்கிறதா? அதற்கு தேவையான input க்கள் என்னென்ன? output க்கள் என்னென்ன? அதனை செய்து முடிக்க தேவையான இதர விசயங்கள் என்னென்ன என அனைத்தையும் ஆய்வு செய்வது.
3. மூன்றாவது Design செய்வது. அதாவது நம்முடைய Logic மற்றும் idea க்களை பயன்படுத்தி எப்படி result ஐ கொண்டுவரப் போகிறோம் என்பதை நமக்கு புரிகிற மாதிரி எழுதுதல் (Algorithm writing). இது மனிதர்களுக்கு விளங்குகின்ற மொழியில் எழுதுவது. ஆரம்பத்தில் இதை நீங்கள் தமிழில் கூட எழுதலாம். இதுதான் மிக முக்கியமான கட்டம் ஆகும். ஏனென்றால் இங்குதான் நமது program எப்படி வேலை செய்யப் போகிறது என்பது தீர்மானிக்கப்படுகிறது.
சில சமயம் requirements ஸும் அதற்காக நாம் செய்யவிருக்கும் program மும் மிகப்பெரியதாக இருந்தால் முழுப் program முடைய அனைத்து concept or idea ஆரம்பத்திலேயே தெரியாதே என்ற கேள்வி எழலாம். கேள்வி சரிதான், பல்வேறு சமயங்களில் algorithm எழுதுவது சற்று சிரமமாகத்தான் இருக்கும். ஏனென்றால் ஒரு புரோகிராம் எழுதி execute பண்ணுவதற்கு முன்பே அதைப்பற்றி அவ்வளவாக நமக்கு idea இருக்காதுதான். அதற்காக அதை விட்டுவிட முடியுமா? அவ்வாறு நமக்கு புரியாத விசயங்களை high level steps களாக வகைப்படுத்த வேண்டும். அதன் பின்னரும் விளங்கவில்லையென்றால் ஒவ்வொரு high level step ஐயும் சிறிது சிறிதாக பிரித்து (divide into smaller steps) அவற்றை ஆய்வு செய்யவேண்டும். அதற்கடுத்து அதையும் சிறிது சிறிதாக பிரித்து எழுதுவது இவ்வாறு எழுதும்போது பெரிய விசயங்கள் எல்லாம் சிறிய சிறிய பகுதிகளாக பிரிக்கப்பட்டு விடுவதால் idea நமக்கு எளிதாக கிடைக்கும்.
நான்கு மாடுகள் ஒற்றுமையுடன் இருந்தபோது சிங்கத்தால் அவற்றை கொல்ல முடியவில்லை. சிங்கம் யோசித்தது. மாடுகளை தனித்தனியாக முதலில் பிரித்தது. பின்னர் சுலபமாக அனைத்தையும் கொன்றது. என்ன சிறுவயதில் பள்ளி புத்தகத்தில் படித்த நீதிக்கதை ஞாபகம் வருதா? இந்த கதையிலிருந்து ஒவ்வொருவரும் ஒவ்வொரு படிப்பினை பெறும் வேளையிலே, சிங்கத்தின் logic or algorithm சரியாக வேலை செய்தது என்று ஒரு programmer சொல்வார். Algorithm சரியில்லையென்றால் என்னவாகியிருக்கும்? சிங்கத்துக்கு உணவு கிடைச்சிருக்காது, உதைதான் கிடைச்சிருக்கும்.
இதைத்தான் divide and conquer method என்று சொல்வார்கள்.
4. நான்காவது implement the algorithm. அதாவது algorith தத்தை programming command டுகளாக மாற்றி எழுதுவது. இங்கு ஒரு விசயத்தை நாம் புரிந்து கொள்ளவேண்டும். algorithm என்பதை எல்லோரும் போடலாம். ஏன் நமது கதையில் சிங்கம் கூட போட்டது. ஆனால் இந்த algorith தத்தை computer விளங்காது. அதற்கென உள்ள சில பிரத்யேகமான command டுகளை நாம் பயன்படுத்தி program எழுதவேண்டும். இதற்குதான் நாம் c, delphi, visual basic, java என்று படிக்கிறோம். அதாவது programmer என்பவருக்கு algorithm + programming commands இரண்டையும் எப்படி எழுதவேண்டும் என்பது தெரிந்திருக்க வேண்டும்.
5. அடுத்து Test செய்வது. என்னதான் சிறப்பாக algorithm எழுதி அதை program ஆக மாற்றினாலும் அதில் ஏதாவது bug (சிக்கல்) இருக்கத்தான் செய்யும். அதைத் தவிர்க்கமுடியாது. என்ன... பழகப் பழக... அதாவது experience கிடைக்க கிடைக்க bug வேண்டுமானால் குறையலாம். எனவே கவலைப்படத் தேவையில்லை. Bug குகளை களைய வேண்டுமானால் நாம் நிறைய test செய்யவேண்டும். ஒரு கோணத்திலிருந்து test செய்தால் ஒருவேளை program சரியாக செயல்பட்டு நமக்கு தேவையான result ஐ கொடுக்கலாம். உடனே ஆஹா என்னுடைய program எதிர்பார்த்த result ஐ கொடுத்துவிட்டது என்று எண்ணக்கூடாது...
என்னது! program correct result கொடுத்தாலும் வேலை முடிஞ்சிடுச்சுன்னு சொல்லக்கூடாதா... என்னங்க சொல்றீங்க.... என்று நீங்கள் கேட்பது புரிகிறது....
இங்குதான் நீங்கள் ஒரு எதார்த்தத்தை புரிந்து கொள்ளவேண்டும். அது என்னவென்றால் அனைவரும் (ஏன் நாம் கூட எல்லா நேரமும்) ஒரே மாதிரியா சிந்திக்கிறோம்? இல்லையே!.
உதாரணத்திற்கு ஒருவர் தன்னுடைய குதிரையை நல்ல விலைக்கு விற்க பழக்கப்படுத்துகிறார். அதாவது குதிரையில் ஏறி அமர்ந்து அப்பாடா என்றால் ஓடும், கடவுளே காப்பாத்து என்றால் நிற்கும். இப்படியாக ஒவ்வொரு தடவையும் தனது தோட்டத்திற்குள்ளேயே (அதாவது ஒரு கோணத்திலியே) அவர் குதிரையை test செய்கிறார். குதிரையும் test செய்ததில் pass ஆகியிருந்தது.
இவரிடம் ஒருவர் வந்து குதிரையை விலைக்கு வாங்கி ஏறி உட்கார்ந்து test செய்தார் சரியாக இருந்தது. சந்தோஷத்துடன் குதிரை மேலேறி ரோட்டிற்கு சென்றார். அப்பாடா என்றார், குதிரை ஓடத்துவங்கியது. கொஞ்சதூரம் போனபிறகு அவருக்கு என்ன சொல்லி நிறுத்துவதென்பது மறந்து போய்விட்டது. என்னென்னமோ சொல்லிப் பார்க்கிறார். குதிரை நின்றபாடில்லை. வழியில் குறுக்கிட்ட ஆற்றை நோக்கி குதிரை ஓடிக்கொண்டிருந்தது. கொஞ்சநேரத்தில் ஆற்றுக்குள் விழப்போகிறோம் என்பது இவருக்கு விளங்கிவிட்டது. பயத்தில் கடவுளே காப்பாத்து என்று கத்த ஆற்றங்கரையில் குதிரை நின்றுவிட்டது. மனுசனுக்கு இப்பத்தான் கொஞ்சம் நிம்மதி வந்துச்சு... சந்தோசத்துல அப்பாடா என்றார்... என்னவாகியிருக்கும்???.... பதில் தெரியலைன்னா மீண்டும் கதையை முதலிலிருந்து படித்துக் கொள்ளுங்கள்.
எதற்கு சம்பந்தமி்ல்லாம குதிரை கதையை இங்கு சொல்கிறேன் என்று பார்க்கிறீர்களா? Test செய்யும்போது ஒரே மாதிரியே யோசிக்கக்கூடாது. ஏனென்றால் ஒவ்வொருவரும் வித்தியாசமான கோணத்தில் உங்கள் program ஐ கையாளும் போது அவர்கள் நீங்கள் போட்டிருக்கும் rule களை அப்படியே follow பண்ணுவார்கள் என்று நினைப்பது அபத்தம். இப்படி test செய்து பார்த்தால் என்ன விடை கிடைக்கும். அப்படி test செய்து பார்த்தால் என்ன விடை கிடைக்கும் என பல கோணங்களிலிருந்து உங்கள் program ஐ நீங்களே test செய்து பார்க்கும்போதுதான் அதில் உள்ள பிரச்சனைகள் என்னென்ன என்பதும் அதை solve செய்ய எப்படி நமது algorithm த்தை மாற்ற வேண்டும் என்ற ஐடியாவும் கிடைக்கும்.
இப்போ குதிரை கதையில் உள்ள bug என்னன்னு பார்ப்போம். அப்பாடா என்றால் ஓடவேண்டும் என்று algorithm எழுதிய அந்த நபர் ரோட்டிலேயும் குதிரையை test செய்து பார்த்திருந்தால் ஏதாவதொரு சூழ்நிலையில் அப்பாடா என்றதற்கு தவறான result டினை பெற்றிருப்பார். ஆஹா!!! அப்பாடா என்றால் ஓடவல்லவா பழக்கியிருக்கிறோம் இந்த சமயத்தில் ஓடக்கூடாதே என யோசித்து அதிலிருந்து மீள்வதற்கான வழியை ஆராய்ந்து குதிரையை இன்னும் சிறப்பாக பழக்கியிருப்பார். அதாவது குதிரையும் அப்பாடா என்றவுடன் ஓடாமல் எதிரில் இருக்கின்ற சூழ்நிலைக்கு தக்கவாறு நடந்துகொள்ள பழகியிருக்கும். எனவே நிறைய கோணங்களில் நாம் யோசிக்கவும் test செய்யவும் பழகிக்கொள்ள வேண்டும்.
மேலே நாம் பார்த்த ஐந்து கட்டங்களில் மூன்றாவது கட்டமான Program design செய்வதுதான் software engineering method for problem solving ல் முக்கியமான கட்டம் என்பதை தெரிந்துகொண்டோம். அதிலே Design என்றால் Alogithm எழுதுவது என்று பார்த்தோம். அதென்ன Algorithm அதை எப்படி எழுதுவது என்பதை அடுத்து பார்ப்போம்...
எக்ஸ்செலென்ட்! சூப்பர்!!
பதிலளிநீக்கு