header

header

Sunday, November 17, 2013

වස්තු පාදක පද්ධති සංවර්දනය-2

විවිද ක්‍රමලේකන ශෛලීන්
හැම ක්‍රමලේකන බාශාවකටම මොකක් හරි ස්ටයිල් එකක් තියෙනවා.එහි තොරතුරු සංවිදානය  කරන විදියට බලපාන්නේ ඔය කියන ස්ටයිල් එක.එහෙම නැත්තම් ක්‍රමලේකන සුසමාදර්ශය(programming paradigm).ඕනෑම වැඩසටහනක් තුල විචල්‍යක්(variable) ලෙස හෝ නියතයක්(constant) ලෙසින් දත්ත(ඉන්පුට් කරන දේ) දැකගන්න පුළුවන්.ඒවගේම පරිගණක වැඩසටහනක් තුල ඔපරෙටර්ස්(operators) ,ඔපරන්ඩ්ස්(operands),එක්ස්ප්රෙශන්ස්(expressions),ස්ටේට්මන්ට්ස්(statements) බාවිතා වෙනවා.මම මෙතැනදී ඒවා ගැන සවිස්තරව කියන්න යන්නේ නැහැ.ඒ මොකද ඕනෑම පරිගණක බාශාවක් ඉගෙනගන්නකොට මුලින්ම උගන්වන්නේ මේ ටික නිසා.අපේ මේ බලාපොරාත්තුව පරිගණක බාශවල පරිනාමයත් එක්ක වස්තු පාදක සංකල්පයන්ගේ ආගමනය පැහැදිලි කරගන්න.නැත්තම්  මාතෘකාව එහෙම්ම තියෙද්දී මේ  මොනවද කියන්නේ කියලා අපේ පාඨකයෝ කල්පනා කරනවා පුළුවන්.හරි.කරුණු වශයෙන් දැක්වුවොත් කියවන්න ලේසි වෙයි කියලා හිතනවා.
  • පලවෙනි පරම්පරාවේ පරිගණක බාෂා(1954-1958) බාවිතා කලේ සංඛ්‍යා සුලුකිරීම් වගේ සරල වැඩසටහන් හදන්න.ප.ප පරිගණක බාශාවන් බාවිතයෙන් ලියනු ලබන වැඩසටහන්වල සුවිශේශි ලක්ශනය වුනේ මේවයේ සබ්ප්රෝග්‍රම්ස්(subprograms) නැහැ.මේන්(main) ප්‍රෝග්‍රෑම් එකෙන් ග්ලෝබලි අවේලබල්(globally available) ඩේටා ඇක්සෙස්(access) කරනවා විතරයි.දත්ත සැගවීම්(data hiding) වැනි දෑ දකින්න ලැබෙන්නේ නැහැ.
  • දෙවෙනි පරම්පරාවේ පරිගණක බාශාවන්(1959-1961) තුල උක්ත සබ්ප්රෝග්‍රම්ස් දැකගන්න පුළුවන්(ෆන්ක්ෂන්ස්(functions),ප්‍රෝසිජර්ස්(procedures),සබ්රුටින්ස්(subroutines) කියන්නෙත් මෙවටමයි).මෙයින් සිදු වුනු මහගු මෙහෙය වුනේ නැවත නැවත වැඩසටහන තුල එකම කෝඩ් ලිවිය යුතු නොවීමයි.දෙ.ප. පරිගණක බාශාතුල තොරතුරු සැගවීම පළමුවරට දැකගත හැකිවුනා.එලෙස සගවනු ලැබුයේ  සබ්ප්රෝග්‍රම්ස්වල ඉම්ප්ලිමන්ටෙෂන් ඩිටේල්ස්(implementation details).නමුත් සබ්ප්රෝග්‍රම්ස් බාවිතායෙන් දත්ත ෂෙයාර් කිරීම දත්ත සැගවීමේ න්‍යාය බිඳිනු ලබනවා.එම නිසා දත්ත සැගවීමේ ක්‍රමවේදය සාර්ථක වෙන්නේ සම්පුර්ණයෙන්ම ආර්ථක කරගන්න ලැබෙන්නේ නැහැ.
  • තුන්වෙනි පරම්පරාවේ පරිගණක බාශාවන් (1962-1970)(උදාහරණ විදියට පැස්කල් ,C) තුල බාවිතා වෙන්නේ අනුක්‍රමිකව(sequential) ලියනු ලබන  කෝඩ් එකක්.මෙහි ග්ලෝබල් ඩේටා, ලෝකල් ඩේටා හා ෆන්ක්ෂන්ස් බාවිතා වෙනවා.සම්පුර්ණ වැඩසටහන මොඩියුල්(module) කිහිපයකට කඩා ව්‍යුහගත ලෙස ක්‍රමලේකනය කරනු ලබනවා.පළමුව ගැටලුව විසැදීමට අලෝගරිතමයක් සකස් කර ගන්නවා.තේරුම් ගැනීමට වැඩසටහනක් සදහා පහත සමීකරණය දක්වන්න පුළුවන්.alogarithm+data structures=program.දත්ත හා සබ්ප්රෝග්‍රම්ස් තියෙන්නේ වෙනම.මේන් ප්‍රෝග්‍රෑම් එකේදී සබ්ප්රෝග්‍රම්ස් වලට කෝල්(call) කරනවා.මෙම ස්ට්‍රක්චර්ඩ් ප්රෝග්‍රමින්ග් අප්රෝච්(structured programming approach) එකේ පහත ලක්ෂණ දැකගන්න පුළුවන්.
  1. හැම ෆන්ක්ෂන් එකකටම ඊට අදාල ලෝකල් ඩේටා හා අලෝගරිතම්(alogarithm) එකක් තියෙනවා.
  2. හැම ෆන්ක්ෂන් එකක්ම අනික් ෆන්ක්ෂන් එකෙන්  ස්වායත්තයි.
  3. ෆන්ක්ෂන් වල පැරාමිටර් පාසින්ග්(parameter passing) දකින්න පුළුවන්.
  4. යුසර් ඩිෆයින්ඩ් ඩේටා ටයිප්ස්(user defined datatypes) බාවිතා කරන්න පුළුවන්.
  5. දියුණු කරන ලද කන්ට්‍රෝල් ස්ට්‍රක්චස්(control structures-අනුක්‍රමික ගලායාම පාලනය කරන ඉෆ්,එල්ස්,ෆොර් ලුප්ස්  වයිල් ලුප්ස් මෙනමින් හැදින්වෙයි)දකින්න පුළුවන්.
වෙරියබල්ස් සදහා ස්කෝප්(scope) එකක්(ග්ලෝබල් හා ලෝකල් වෙරියබල්ස්) පවත්නා නිසා දත්ත සැගවීමට සහය දක්වනවා.නමුත් බහුල වශයෙන් පවතින සබ්ප්රෝග්‍රම්ස් නිසා වැඩසටහන නඩත්තුව ප්‍රායෝගිකව අපහසු වෙනවා.ඒ අනුව මෙම ව්‍යුහගත ක්‍රමලේකනයෙදී වඩා වැදගත් කමක් ලැබුනේ සබ්ප්‍ර්රෝග්රම් වලට.ඒවා සමග කාර්යක්ෂම ලෙස දියුනුකෙරුණු අලෝගරිතම බාවිතයෙන් වඩා උසස් වැඩසටහන් ලිවිය හැකි වුනා.මේ ගැටළු විසදීමට බහුලවම බාවිතා වුනේ ටොප්-ඩවුන් අප්රෝච්(top down approach)එකයි.පළමුව සංකීර්ණ ගැටලුව කුඩා ගැටළු සමුහයකට කඩා ගන්නවා.මෙම කුඩා ගැටළුවක් වරකට එක බැගින් විසදීම සදහා ක්‍රමලේකනය කරනු ලබනවා.
  • 1970-1980 වකවානුව තුල තවත් බොහෝ පරිගණක බාෂා පැමිණියද මෘදුකාංග සංවර්දනයට ඒවා බාවිතා වුයේ කිහිපයක් පමණයි.
මෘදුකාංගයක සංකීර්ණභාවය(complexity of softwares)

 1990 ට පෙර ලියවුනු බොහෝ පරිගණක වැඩසටහන් ලියවුනේ සරල ගැටළු විසදීමට.නමුත් අද අභ්‍යවකාශ 
 ගමන්(field of space),ආරක්ෂක(defense),පර්යේෂණ(research),ඉංජිනේරු(engieering),
වෛද්‍ය(medicine),කර්මාන්ත(industry),ව්‍යාපාර(business) අමතරව සංගීතය(music),පින්තාරු කලාව(painting) වැනි බොහෝ ක්ෂේත්‍රයන් වල වඩා සංකීර්ණ ගැටළු විසදීමට මෘදුකාංග යොදා ගනු ලබනවා.උදාහරණයක් විදියට චන්ද්‍රිකාවක් ගුවන්ගත කිරීම අද සන්පුර්නයෙන්ම පාහේ සිදු කෙරෙන්නේ පරිගණක මෘදුකාංග ආශ්‍රිත ගණනය කිරීම් වලින්.මෙම නිසා ලෝකය තුල මෙවැනි විවිද මෘදුකාංග නිපදවීම සදහා මෘදුකාංග සංවර්දන සමාගම් පවතී.මෙම සමාගම් වල සේවය කරනු ලබන්නේ ඉතා ඉහල සුදුසුකම් සහිත  මෘදුකාංග සන්වර්ධකයින්.ප්‍රායෝගිකව මෘදුකාංගයක් සංවර්දනය කිරීමේදී බොහෝ ගැටළු ඇතිවෙනවා.ඒ එහි පවතින සංකීර්ණත්වය හේතුවෙනි.මෙම සංකීර්ණත්වයට බලපාන සාධක කිහිපයක් මෙලෙස දක්වන්න පුළුවන්.
  • ගැටලුව පිළිබද නිසි අවබෝධයක් නොවීම-නිවැරදිව පරිශීලක අවශ්‍යතාවන්(user requirements) උකහා ගැනීම සාර්ථක මෘදුකාංගයක් නිපදවීමේදී අවශ්‍යයෙන්ම සිදුවිය යුත්තක්.මෘදුකාංග සන්වර්දකයින් හා පරිශීලකයන් අතර සන්නිවේදනය(communication) නිවැරදිව සිදු නොවුනොත් ඔවුන්ගේ අවශ්‍යතාව නිසි පරිදි තෘප්ත කල නොහැකි වෙනවා.
  • මෘදුකාංග සංවර්දන අවධිය තුලදී පරිශීලක අවශ්‍යතා වෙනස් වීම-සමහර රාජ්‍ය ප්‍රතිපත්ති(gavernment policies) හා කර්මාන්ත සංරෝධනයන්(industry constraints) මේ සදහා හේතුවෙනවා. 
  • පවතින පද්ධති(ලෙගසි-legacy පද්ධතීන්) සංරක්ෂණය-බොහෝ අවස්ථාවල සිදුවන්නේ පවතින පද්ධතිය නව අවශ්‍යතා වෙනුවෙන් දිගු කර යලි බාවිත කිරීමයි.මෙවෙන්නක් සෑම විටම කල නොහැක්කේ පවතින පද්ධතිය පිළිබද විශේෂඥ දැනුමක් ඇති අයගේ හිගකම නිසයි.තවද පවතින පද්ධති සමග අලුතෙන් දියුණු කල පද්ධති සම්බන්ද කිරීමෙදීද බොහෝ තාක්ෂණික ගැටළු උද්ගත වෙනවා.

  • සංවර්දන ක්‍රියාවලිය කළමනාකරණය(management)-පද්ධතීන් වඩාත් විශාල වන්නට වන්නට එම මොඩියුල කළමනා කරණය ,සම්බන්දීකරනය(coordination),සමෝදානය(integrate) කිරීමේ ප්‍රයෝගික ගැටළු පැනනැගී.

  • සම්මතයන්(standards) නොමැති වීම නිසා පවතින නම්‍යශීලිත්වය-මෘදුකාංග සංවර්දනයට නිශ්චිත ක්‍රියා පටිපාටියක් නැහැ.මෘදුකාංග සංවර්දනක්ෂේත්‍රය තුල ඇත්තේ ඉතා ස්වල්ප සම්මතයන් සමුහයක් පමණයි.මේ නිසා මෘදුකාංග සංවර්දනය වඩා සංකීර්ණ වෙනවා.
  • වියුක්ත පද්ධති(discrete systems) වල හැසිරීම-සතත පද්ධතියක(continuous systems) හැසිරීම පිළිබද අපට අනාවැකි අපල කරන්න පුළුවන්.උදාහරණයක් ලෙස චන්ද්‍රිකාවක් ගොඩබැස්සවීම සංකීර්ණ පද්දතියක් වුනත් සමීකරණ බාවිතයෙන් එය අපට නිශ්චිතව ප්‍රකාශ කරන්න පුළුවන් .නමුත්  සමහර මෘදුකාංග ක්‍රියාත්මක වීමේදී පද්ධතීන් ප්‍රභින්න(discrete) තත්වයකට පත්වෙයි.කුඩා කොටස් වලට කඩා තිබියදීත් සංක්‍රමණයන්(phase transitions) පුරෝකථනය කිරීමට නොහැකි වෙයි.සමහර විට අනපේක්ෂිත බාහිර සිද්ධින්(external events) මුළු පද්ධතියම විනාශ කරනවා.
  • මෘදුකාංග පරික්ෂාව(testing)-මෘදුකාංගයක බොහෝ විචල්‍යයන්,කන්ට්‍රෝල් ස්ට්‍රක්චර්ස් සහ ෆන්ක්ෂන්ස් බාවිත කරනවා.මේ නිසා සමහරවිට මෙය ක්‍රියාත්මක කිරීමේදී බලාපොරොත්තු නොවූ ප්‍රතිපල(unexpected outcomes) උද්ගත වෙන්න පුළුවන්.ප්‍රයෝගිකව ගොඩනැගු පද්ධතියේ සෑම කොටසක්ම පරික්ශාවට ලක් කරන්නත් බැහැ.මේ අනුව මෘදුකාංග පරීක්ෂාව හේතුකරගෙනත් මෘදුකාංග සංවර්දනය කිරීමේදී  සංකීර්ණතාවයක් පැනනගිනවා.
 ප.ලි.මෙහි සදහන් කරුණු පිලිබදව ගැටළුවක් ඇත්නම් කමෙන්ට් ලෙස අසන්න.කරුණු තවත් පැහැදිලි කරගැනීමට අතිරේක ලින්ක්ස් පහත දැක්වෙයි.
ලෝ ලෙවෙල් හා හයි ලෙවෙල් ඩිස්ක්රිප්ෂන්ස්
තවත් කොටසක් බලාපොරොත්තු වන්න.

Saturday, November 9, 2013

වස්තු පාදක පද්ධති සංවර්දනය-1

අපේ මාතෘකාව වස්තු පාදක පද්ධති සංවර්දනය(OOSD).පද්ධතියක් කිව්වම පරිගණක පාදක පද්දති(computer-based systems) වන හාඩ්වෙයාර් සොෆ්ට්වෙයාර් ප්‍රෝසේසස්(processes) කියන ඔක්කොම අයිති වෙනවා.නමුත් අපි මෘදුකාංග සංවර්දනය ,වස්තු පාදක ක්‍රමලේකනය(object-oriented programming) ඔස්සේ අද්‍යනය කිරීමටයි බලාපොරොත්තු වෙන්නේ.ඇත්තටම මේ පද්දති සංවර්දනය කියන මාතෘකාව අපේ පලවෙනි සිමෙස්ටර් එකේ තිබ්බේ සිස්ටම් ඇනලිසිස් ඇන්ඩ් ඩිසයිනින්ග්(SAD) කියලා.එතැනදී තොරතුරු පද්ධති ගැන හැදින්වීමක්,SDLC,ඉන්ට්‍රොඩක්ෂන් ටු ප්‍රොජෙක්ට් මැනේජ්මන්ට්(project management),රික්වයමන්ට්ස් අනලිසිස්(requirement analysis) ,මෝඩ්ලින්ග් විත් DFD(data flow diagrams) වගේ මාතෘකා ගැන ඉගෙනගත්තා.ඇත්තටම මේ සබ්ජෙක්ට් එක ඉගෙන ගනිද්දී මට දැනුනු දෙයක් තමයි මේක ඉතාම ප්‍රායෝගික විෂයක්.ටිකක් විතර බිස්නස් එන්වයමන්ට්(business envionment) වල වැඩ කෙරෙන හැටි ගැන දැනුමක් තියෙන්න ඕන.ඊට පස්සේ දෙවෙනි සිමෙස්ටර් එකේ තියෙන්නේ දැන් අපේ මාතෘකාව වන වස්තු පාදක පද්ධති සංවර්දනය.මේ ගැන ඇත්තටම මට ලොකු දැනුමක් නැහැ නමුත් මට වැටහෙන විදියට කරුණු ටිකක් දක්වන්නයි,මගේ බලාපොරොත්තුව.ඊලගට තවත් දෙයක්.මේ ලිපි වල අඩංගු කරුණු තේරුම් ගැනීමට කිහිපවරක් කියවන්න කියලා මුලින්ම කියන්න කැමතියි.ඒ මොකද මම මේවා ලියන්නේ නියම ශාස්ත්‍රීය වචන බාවිතා කරලා නෙවෙයි.උදාහරණයක් හැටියට දැන් මේ මාතෘකාවේ දක්වලා තියෙන්නේ object oriented system development කියන වචනයේ තේරුම ,එතනදී වස්තු පාදක කියලා යොදාගත්තත් එය වස්තු දිශානත කියන ඒකයි වඩා සුදුසු ඒ මොකද වස්තු පාදක(object based) කියලත් වෙනම සංකල්පයක්(concept) තියෙනවා .ඉදිරියේදී අපි ඒ ගැන කතා කරමු.ඔබට තොරතුරු පද්ධති පිලිබදව තව දුරටත් මුලික දැනුමක් මේ ලින්කුවෙන් ලබාගන්න පුලුවන්.ඔබට යම් කරුණක් ගැන ගැටළුවක් මතු වුනොත් ඒ ගැන කමෙන්ට් එකක් දාලා ඒ ගැන මම දැනුවත් කරන්න.යම් සංකල්පයක ස්වබාවය වැටහෙන වචනවලින් උදාහරණ ඇසුරෙන් තේරුම් කරන්න තමයි උත්සාහ කරන්නේ.හරි එහෙනම් දැන් වැඩේ පටන්ගනිමු. 
හැදින්වීම
ගැටළු වැඩ ඉක්මනින් හා නිවැරදිව(accurate) විසදගන්න පරිගණක වැඩසටහන්(computer programs) බාවිතා කරන බව ඔබ හොදටම දන්නා කරුණක්.මෙම ගැටළු විසදන ආකාරය පරිගණකයට ලබාදීම සදහා පරිගණක වැඩසටහන් බාවිතා කරනවා.සුවිශේෂ කාර්යක් ඉටුකර ගැනීමට එසේ ලියනු ලබන වැඩසටහන් සමුහයකට මෘදුකාංගයක් කියල කියනවා.පද්දති මෘදුකාංග කියල කියන්නේ මෙහෙයවීම ,පාලනය කිරීම,සැකසුම් ක්‍රියාවලින් කාර්යක්ෂමව ප්‍රයෝජනයට ගැනීම වැනි කාර්යන් කිරීම සදහා නිර්මාණය කරනු ලබන මෘදුකාංග.ඒ සදහා උදාහරණයක් තමයි මෙහෙයුම් පද්දති(operating systems).සැම මෙහෙයුම් පද්දතියක්ම පාහේ පරිශීලක කළමනාකරණය(user management),ගොනු පද්ධති කළමනාකරණය(file management),මතක කළමනාකරණය(memory management) වැනි කාර්යන් කරගත හැකි පරිගණක වැඩසටහන් අන්තර්ගත වෙනවා.
දෘඩාංග(hardware) කොටස් වලට හදුනා ගන්න පුළුවන් යාන්ත්‍රික කේත(machine codes) විතරයි.ඒ කියන්නේ 1 හා 0 සහිත කේත.ආරම්බයේ පවතී පහල මට්ටමේ පරිගණක බාශාවන්(low level computer languages) මෙම කේතයන් බාවිතයෙන් තමයි ලියුවේ.1,0  පමණක් බාවිතයෙන් ලියනු ලබන වැඩසටහන් අවබෝද කරගැනීමට අපහසු බැවින් ඉංග්‍රීසියට ආසන්න බාවිතයෙන් වැඩසටහන් කළහැකි පරිගණක බාෂ දියුණු වුන.ඒ වගේම මේ බශා  ගැටළු විසදීමට  අලෝගරිතමයක්(alogarithm) බාවිතා කරනවා.ඒ කියන්නේ පියවරෙන් පියවර(step by step) ඒ ගැටලුව විසදන ක්‍රමවේදයක්.අල්ගොරිතමයක් බාවිතයෙන් වඩාත් සංකීර්ණ ගැටළු විසදනවිට බොහෝ අපහසුතා මතුවුනා.මෙන්න මෙතනදී තමයි,සංකීර්ණ ගැටළු විසදන්න  වස්තු දිශානත පරිගණක ක්‍රමලේකනය(OOP) කියන සංකල්පය කලඑළි බැස්සේ.

ප්‍රශ්න වසම හා විසදුම් වසම(problem domain and solution domain)

ප්‍රශ්නයක් කියන්නේ කිසියම් අපේක්ෂිත ප්‍රතිපලයක් ලබා ගැනීම සදහා වන කාර්යාත්මක විශේෂීකරණයක්(functional specification).තව දුරටත් කිව්වොත් SDLC එකේ පළවෙනියට තියෙන්නේ අවශ්‍යතා විශේෂීකරණය හා විශ්ලේෂණය ,ඊට පස්සේ හදන ඩොකියුමන්ට් එක තමයි,SRS(Software Requirement Specification) කියන්නෙ.පහත උදාහරණය සලකා බලන්න.කොලබ ඉදලා මාතරට යන්න දුම්රිය ටිකට් එකක් ලබා ගැනීම ගැටලුව යැයි හිතුවොත් අදාළ දුම්රිය කවුන්ටරයට ගිහිල්ල ටිකට් පතක් මිලදී ගැනීම ඊට විසදුම ලෙසින් දක්වන්න පුළුවන්.මෙතන ප්‍රතිපලය(output) වෙන්නේ වෙන් කරන ලද ටිකට් පතක්.ප්‍රශ්නයට අදාළ වසම සලකද්දී දුම්රිය මාර්ග හා ගාස්තු පිළිබද දැනීමක් අවශ්‍ය වෙනවා.ප්‍රශ්නයක් මතුවෙන්නේ කිසියම් අවශ්‍යතාවයක් විශේෂීකරණය කර විටදී.ප්‍රශ්නයක් හා සම්බන්දව වසමක් පවතිනවා වගේම එහි විසදුම සදහාද යම් වසමක් පවතිනවා.එහි අන්තර්ගත වෙන්නේ අපේක්ෂිත ප්‍රතිපලය ලබා ගැනීම සදහා වන ක්‍රමවේද(procedures) හා උපක්‍රම(strategies).විසදුම හා සම්බන්ද වෙන පුද්ගලයෝ කව්ද කියලා දැන් සලකමු.තාර්කික විසදුම ලබා දෙන්නේ ඩොමේන් එක්ස්පර්ට්ලා(domain experts) .ඊලගට වැඩසටහන ඩිවෙලොප් කරන්නේ ඩිවෙලොපර්ස්ලා(developers) එහෙම නැත්තම් මේ අය සප්ලයර්(supplier), ප්රෝග්‍රමර්(programmer) ,ඉම්ප්ලිමන්ටර්(implementer) යන නම් වලින් හදුන්වනවා. ඒ අනුව ප්‍රශ්නයක් විසදීම කියන්නේ ප්‍රොබ්ලම් ඩොමේන් එක සොලුයුෂන් ඩොමේන් එකට මැප්කිරීම(mapping) ලෙස හදුන්වන්න පුළුවන්.සරල ගැටළුවක් විසදීමට මෙන් නෙවෙයි ගැටලුව සංකීර්ණ(complex) වෙනකොට එක විසදන්න යම් ක්‍රමානුකුල ප්‍රවේශයක් අවශ්‍ය වෙනවා. ගැටළුවක් විසදන්න තියෙන ප්‍රවේශයන් කිහිපයක් පහත දැක්වේ.
  • ප්‍රශ්න ඇසීම.(ask questions)
යම් ගැටළුවක් ගැන කුමක්ද,කොහොමද ඇයි වගේ ප්‍රශ්න ඇසීමෙන් ඊට විසදුම හොයා ගන්න පුළුවන්.
  • සමානතා සොයා බැලීම.(look for things similar)
යම් ගැටලුවකට අලුතෙන්ම විසදුමක් නොසොයා ඒ හා සමාන ගැටලුවකට ලද විසදුමක් ප්‍රයෝජනයට ගන්න පුළුවන්.උදාහරණක් හැටියට යම් සංක්‍යා කුලකයක වැඩිම අගය සෙවීම ,පන්තියේ සිසුන්ගෙන් ලබාගත් වැඩිම ලකුණ සෙවීම,දිනයේ උපරිම උෂ්ණත්වය සෙවීම කියන ගැටළු තුන සැලකුවහොත් ඒ තුනටම විසදුම් සොයන්න අවශ්‍ය වෙන්නේ එකම සංකල්පයක්.ඒ තමයි දී ඇති සංඛ්‍යා එකතුවක විශාලතම සංඛ්‍යාව සෙවීම කියන එක.
  • පසුපසට විසදාගෙන යාම හෙවත් බොටම්-අප් ඇප්රෝච්(work backwards or bottom-up approach)
ඒ කියන්නෙ අපි අපේ ගෝල්(goal) එකෙන් පටන් අරගෙන ස්ටාර්ටින්ග් පොයින්ට්(starting point) එකට විසදගෙන එනවා.උදාහරණයක් මතක් කලොත් අපි ගණිතයේදී සමහර ගැටළු දකුණෙන් පටන් අරගෙන වම් පෙත්තේ උත්තරේ දක්වා සුළු කරන්නේ,මේ අප්රෝච් එක අන්න ඒ වගේ.සමහර සංකීර්ණ ගැටළු විසදන්න ඇත්තටම මේක පහසු මගක්.නොදන්නා තෙනකින් පටන් අරගෙන දන්නා තෙනකොට මග සලකුණු කරගෙන යනඑක,දන්නා තෙනකින් පටන් අරගෙන නොදන්නතෙනකට එනවට වඩා පහසුයි.ඒකට හේතුව තමයි,දන්නා තැනක තියෙන සලකුණු වලින් අපට අවබෝදයක් ලැබෙනවා මේ ඇවිල්ල ඉන්නේ විසදුම කිට්ටුව කියලවත්.එහෙම නැති වුනොත් අපි නොදන්නා තැනක මග සලකුනුවත් අපි නොදන්නා නිසා ඒ කිට්ටුවට ආවත් අපි ඒ ගැන දන්නේ නැහැ.
  • ගැටලුව කොටස් වලට කඩා ගැනීම හෙවත් ටොප්-ඩව්න් අප්රෝච්(decomposition or top-down approach)
මෙහිදී ප්‍රශ්නය කුඩා කොටස් වලට කඩනවා.ඒ කොටස් තව දුරටත් කඩාගෙන යනවා,අන්තිමේදී හසුරවලියහැකි කුඩා එකක දක්වාම. දැන් සංකීර්ණ ප්‍රශ්නයක් වුනත් කුඩා පරශ්න ගොඩක් බවට පත්වෙනවා.මේකටම තමයි,ස්ටේප්වයිස් රිෆයින්මන්ට්(stepwise refinement),මොඩියුලර් ඩිකොම්පොසිෂන්(modular decomposition),ස්ට්‍රක්චර්ඩ් අප්රෝච්(structured approach)  නැත්තම් අලෝගරිතමික් අප්රෝච්(algorithmic approach) කියන්නෙත්.
ප.ලි.මෙහි අන්තර්ගත කරුණුවල නොගැලපෙන,සාවද්‍ය යමක් ඇත්නම් ඒ පිළිබද දැනුමැත්තෙකු විසින් පෙන්වාදෙනු ලබන නිවැරදිකිරීමක් කෘතඥපුර්වකව පිළිගන්නෙමි.
තවත් කොටසක් ඉදිරියේදී බලාපොරොත්තු වන්න.

Saturday, October 26, 2013

පරිගණකයේ ඉතිහාසය-අසන්ෂිප්ත සටහන 3

පරිගණක ඉතිහාසය පිලිබදව ගෙන ඈ ලිපි පෙළ මෙම ලිපියත් සමග  නිම කිරීමට බලාපොරොත්තු වෙයි.1950 වර්ෂයේ සිට 1980 දක්වා කාලය තුල පරිගණක ඉතිහාසය තුල ඇති සුවිශේෂී සන්ධිස්තාන මෙමගින් දැක්වේ.
ජෝන් වොන් නියුමාන්
  • මේ අතර ජෝන් වොන් නියුමාන්(John Von Neumann) නැමැත්තකු විසින් 1945 දී ලියු ලිපියකින් පරිගණක සදහා නව නිර්මාණ ක්‍රමවේදයක් විධිමත් ලෙස ඉදිරිපත් කෙරිණි.මෙය ආචිත ප්‍රක්‍රම ක්‍රමවේදය(Stored program architecture) හෙවත් වොන් නියුමාන් ක්‍රමවේදය(Von neumann architecture) ලෙස හැදින්වේ.මෙම නිර්මානශිල්පය බාවිතා කරමින් නව පරිගණක දියුණු කිරීමට ව්‍යාපෘති කිහිපයක්ම අරබුණි.ජෝන් නියුමාන් යනු සැබවින්ම පුදුම සහගත දක්ෂතා දැක්වූවෙකි.ඔහු 8 වැනි වියේදී ගණිතයෙහි එන කලනය(calculus) ගැටළු විසදුවේය.දුරකතන නාමාවලියෙහි(phone directory) පිටුවක් කියවා යලි එය කටපාඩමින් කියවීමට තරම් මතක ශක්තියක් තිබුණි.වරක් ඔහු ගනිත ගැටළුවක් විනාඩි 6ක් තුළ විසදුයේ ගණන උපකරනක්ද සහිතව මහාචාර්යවරයෙකුට එය විසදීමට පැය ගණනක් ගතවද්දීය!.1948 දී එංගන්තයේ මැන්චෙස්ටර්(Manchester) විශ්ව විද්‍යාලයේ පර්යේෂණ කණ්ඩායමක් විසින්  SSEM( Manchester Small-Scale Experimental Machine) නමින් පළමු වරට යන්ත්‍රයක් නිපදවීය.ඉන් වසරකට පසුව කේම්බ්‍රිජ්(Cambridge) සරසවියෙන්   EDSAC( Electronic Delay Storage Automatic Calculator ) නැමැති පරිගණකයක් නිපදවීය.නුතන පරිගණකවල පවා යම් ආකාරයකට ආචිත ප්‍රක්‍රම ක්‍රමවේදය දැකගත හැකිවිය.1940 පළමු general purpose පරිගණකය දක්වා  තාක්ෂනයන් පැහැදිලි ලෙස වෙනස් වුවද වොන් නියුමාන් ආකෘතිය සහිත පරිගණකයේ සිට අද පරිගණකය එතරම් වෙනස් නොවේ.

  • 1950 ආරම්බයේදී සෝවියට් විද්‍යාඥයන් පිරිසක් ත්‍රිමය (-1,0,1) සංඛ්‍යා පද්ධතියකින් යුතු පරිගණකයක් නිපදවීය.එය නමින් සෙටුන්(Setun) නම් විය.මෙය මොස්කව් රාජ්‍ය විශ්ව විද්‍යාලයේ දියුණු කරන ලද්දකි.නමුත් එය තව දුරටත් දියුණු නොවුයේ ද්විමය පරිගණක පද්ධති(binary computer systems) ක්ෂේත්‍රයේ බොහෝ ජයග්‍රහණ ලබා තිබු බැවිනි.

  • 1950 අවසාන බාගය වනවිට තව දුරටත් පරිගණක උපාංග විශ්ව විද්‍යාල(universities) හා රජයේ පර්යේෂනාගර(government research labs) සතු බුක්තියක් නොවීය.එකර්ට්(Eckert) හා මොෂ්ලී(Mauchley) පෙන්සිල්වෙනියා(Pennsylvania) සරසවියෙන් ඉවත්ව තමන්ගේම සමාගමක් තැන ගත්හ.එහි පළමු වන නිෂ්පාදනය වුයේ යුනිවැක්(UNIVAC) නම් වාණිජ පරිගණකයයි(commercial computer).දත්ත ගබඩා කිරීම සදහා පළමුවරට චුම්බක පටි(magnetic tapes) බාවිත කරන ලද්දේ යුනිවැක් පරිගනකයේය.පසුව ඇතිවූ මුල්‍ය අර්බුද නිසා මොෂ්ලී හා එකර්ට් සුසන්ගතයෙන් ඇරබු සමාගම අඩු මුදලකට විකුණා දමන්නට සිදුවිය.1955 වනවිට IBM සමාගම ක්ෂේත්‍රයේ බොහෝ ආධිපත්‍යක් අත් කර ගෙන සිටියේය.තවද තමන් නිර්මාණය කරනු ලබන පුද්ගලික පරිගණක(personal computers) සදහා මෘදුකාංග නිර්මානය කිරීමට IBM සමාගම විසින් මයික්‍රොසොෆ්ට්(Microsoft) සමාගම කුලියට ගන්න ලදී.මෙම වාසි සහගත කොන්ත්‍රාත්තුව මගින් විශාල ආදායමක් උපයා ගැනීමට මයික්‍රොසොෆ්ට් සමාගමට හැකිවිය.2000 වසර වනවිට මයික්‍රොසොෆ්ට් සතුව පැවති වෙළදපොල ප්‍රාග්දන සම්පාදනය(market capitalization) IBM සමාගම මෙන් දෙගුණයක් විය.
 
    ස්ට්‍රෙච් පරිගණකය.
  • IBM ස්ට්‍රෙච්(stretch) පරිගණකය 1959 වසරේදී නිපදවීය.මෙහි 150000ක ට්‍රාන්සිස්ටර් අන්තර්ගත විය.ට්‍රාන්සිස්ටර් බාවිතා කලද මෙම පරිගණකය පවා අඩි 33ක පමණ දිගකින් යුතුවුයේ ඒවා එකිනෙකින් වෙන්ව සම්බන්ද කර තිබු නිසයි.1980 මුල් බාගයේදී ට්‍රාන්ස්සිස්ටර් එක්කොට සන්ගෘහිත පරිපථ(integrated circuits) තැනීම ආරම්බ කෙරිණි.

  •  ඔබ 1970 දශකයේ පරිගණක සදහා  ලියු වැඩසටහන් පිළිබද විමසන්නේ නම් එය අද මේන්ෆ්‍රේම් පරිගණක සදහා ලියන ඒවාට සමක කොට දැක්විය හැක. උදාහරණ ලෙස  IBM 7090,IBM 360,IBM 370 දැක්විය හැකිය.මෙවැනි පරිගණකයකට යමක් ඇතුල් කිරීමට පැවති එක් ක්‍රමවේදයක් වුයේ ටෙලිටයිප්(teletype) නම් ක්‍රමයයි.තමන් අවශ්‍ය වගන්තියක් ඇතුල් කල විට ඒ සදහා පරිගනකයෙන්ද යම් ප්‍රතිචාරයක් රැගත් සිදුරු සහිත කඩදාසි පටියක් ලැබෙයි.
අල්ටෙයාර් 8800 පිලිබදව පළවූ සගරාවක මුල් පිටුව.
  • නමුත් කාලයත් සමග තාක්ෂනය වඩා පහසු මගකට යොමුවිය.1990 වනවිට විශ්ව විද්‍යාල සිසුන්ට පුද්ගලික පරිගණක බාවිතය පැමිණියේය.මෙතරම් පහසු මගකට තාක්ෂනය යොමු වුයේ තවත් අද්විතීය සොයා ගැනීමක් හේතුවෙනි.එනම් ක්ෂුද්‍ර ප්‍රොසෙසරයයි(micro processor).ලොව පළමු ක්ෂුද්‍ර ප්‍රොසෙසරය නිපදවනු ලැබුවේ 1971 වර්ෂයේදී ඉන්ටෙල් ආයතනය මගිනි.ට්‍රාන්ස්සිස්ටර් 2300ක් රැගත් එම පරිගණකය INTEL 4004 නම් විය.එහි ගටිකා වේගය(clock speed) කිලෝ හර්ට්ස් 108(108 kHz)කි.අද පෙන්ටියම් 4(Pentium 4) පරිගනකයක ට්‍රාන්ස්සිස්ටර් මිලියන 42ක් ඇති අතර ගිගා හර්ට්ස් දෙකක ගටිකා වේගයකින් යුතුවෙයි.
    ක්ෂුද්‍ර ප්‍රොසෙසරයක්.
    මේ අතර ඉන්ටෙල් නිපදවූ 4004 චිප පෘතුවියෙන් ඈතින්ම පිහිටි මානව නිර්මාණිත අබ්යවකාශ යානය(space craft) වන "පයනියර් 10(pioneer 10)" නැමැති යානයේද පවතියි!.පසුව ඉන්ටෙල් ආයතනය INTEL 8008 හා ඉන්ටෙල් 8080 යනුවෙන් ප්‍රොසෙසර් දෙකක් නිපදවීය.ලොව පළමු පුද්ගලික පරිගණකය වන "අල්ටෙයාර් 8800(Altair 8800)" පරිගණකයේ බාවිත වුයේ INTEL 8080 ප්‍රොසෙසරයයි. 1968 දී ඇරබු මෙම සමාගම DRAM හා EPROM නැමැති මතක තාක්ෂනයන්ගේද නිර්මාපකයෝ වෙයි.


ලිපි පෙළ කියවූ ඔබට ස්තුති වන අතරම මීලගට "වස්තු පාදක පද්දති නිර්මාණය (OOSD)" පිලිබදව ලිපි පෙළක් බලාපොරොත්තු වන්න.

Tuesday, October 15, 2013

පරිගණකයේ ඉතිහාසය-අසන්ෂිප්ත සටහන 2

අපි ගිය ලිපියෙන් අවසන් කලේ ඇනලොග් පරිගණක පිලිබදව පොඩි අවබෝදයක් ලබාගෙන.මේ කාලයේදී පරිගණක තාක්ෂණයේ සුවිශේෂී හැරවුමක් සිදුවෙනවා.ඒ තමයි විද්‍යුත් ඩිජිටල් පරිගණක(digital computers) පිළිබද සංකල්පයන් ඉදිරිපත් වීම.
  • මානව මැදිහත් වීමකින් තොරව(without human intervention)සමීකරන විසදිය හැකි යන්ත්‍රයක් 1936 දී ඇලං ටියුරින්(Alan Turing) විසින් නිපදවීය.ඔහුගේ මෙම නිර්මාණය නුතන ඩිජිටල් පරිගණක සදහා පුර්වගාමි වූ න්‍යායික(Theoretical) ඉලෙක්ට්‍රොනික පරිගණකය ලෙස දැක්විය හැකිය.ටයිප් රයිටරයක්(type writer) ලෙසින් පෙනුණු මෙහි ගණනයන් සදහා දත්ත ඇතුලත් කරනු ලැබුවේ අකුරු මගින් නොව සංකේත(symbols) ලෙසිනි.මෙයට එවකට පැවැති සියලු මැෂින් වලින් කල හැකි කටයුතු කල හැකිවුණා.මේ නිසා ඇලන් ටියුරින් නුතන පරිගණක විද්යාවේ පියා (Father of Computer Science)ලෙස සලකනු ලබනවා.
  • 1936-1938 වකවානුව තුල ජර්මන් ජාතික කොන්ද්‍රාද් සුස්(Kondrad Zuse) නිපදවූ Z1 පරිගණකය පළමු විද්‍යුත් යාන්ත්‍රික ද්විමය ක්‍රමලේකිත ක්‍රියාකාරී තත්වයේ පැවති(electro-mechanical binary programmed functional computer) පරිගණකය ලෙස හදුනාගත හැක.
  • ඒකජ සමීකරණ පද්ධති(Linear Equation Systems) විසදීම සදහා යොදාගත හැකි පරිගණකයක් 1937 දී වා රාජ්‍ය විශ්ව විද්යාලයෙහි මහාචාර්ය ආටන්සොෆ්(Attansoff) හා එහි උපාධිදාරියෙකු වූ  බේරි(Berry) සමග එක්ව නිර්මාණය කෙරිණි.සමාන්තර පරිගණනය(Parallel computing) නම් තාක්ෂනය බාවිත වූ මෙය ලොව පළමු විද්යුත් ඩිජිටල් පරිගනකය(First Digital Electronic Computer) ලෙස දැක්විය හැක.මෙහි වැකුම් නල(Vaccum tubes),ද්විමය සංඛ්‍යා(Binary numbers)  හා පුනර්ජනන ධාරිත්‍රක මතකය(Regenerative capacitor memory) යන තාක්ෂණ බාවිතා කෙරිණි.එය අද DRAM තුල දත්ත රදවන ක්‍රමයට සමක වියමෙමගින් අඥාත රාශි 29ක් ඇති සමගාමී සමීකරණ 29ක් විසදිය හැකිවුණා.නමුත් මෙහි පැවති මුලික දෝෂයක් වුයේ එය තව දුරටත් වැඩසටහන්කරණය(programmable) කල නොහැකිවීමයි.
ABC පරිගණකය

  • ලොව පළමු වැඩසටහන් කල හැකි පරිගණකය වුයේ  1941 දී කොන්ද්‍රාද් සුස්(Kondrad Zuse) විසින්ම නිපදවූ Z3 නම් පරිගණකයයි.මෙහි ද්විමය අංක ගණිතය(Binary arithmetic) (ඉපිලෙන ලක්ෂ්‍ය අංකගණිතය(Floating point arithmetic)) බාවිතයෙන් ගණනය කිරීම් සිදුකලා.සුස් සතු සුවිශේෂී ප්‍රතිබානය වන්නේ ඔහු අනෙකුත් නිර්මාණකරුවන්ගේ ආභාශයක් නොලබා තම නිපදවීම් සිදුකිරීමයි.දෙවන ලෝක යුද සාමය තුල මෙම නිර්මාණ සිදුකලේ ඇමරිකානු හා බ්‍රිතාන්‍ය ප්‍රමුක සෙසු ලෝකයාගෙන් සැගවෙමිනි.එම නිසා එවකට ඇමෙරිකාවේ හෝ බ්‍රිතාන්‍යයේ තුල දියුණුව පැවති තාක්ෂණ පිලිබදව අවබෝදයක් නොවීය. සංඛ්‍යා සදහා ද්විමය නිරුපනයත්,බැබේජ්ගේ ක්‍රමලේකන සංකල්පයත් ඔහු විසින් නිපදවූ Z පරිගණක පෙළ තුල දක්නට ලැබිණි.ඒ අනුව සලකා බලනවිට මෙම නිර්මාණය පරිගණක ඉතිහාසයේ අද්විතීය සන්ධිස්ථානයකි.
කොලෝසිස් පරිගණකයේ චායරුපයක්

  • මේ අතර ලොව පළමු වැඩසටහන් ගත කල හැකි ඉලෙක්ට්‍රොනික පරිගණකය(Programmable electronic computer) වුයේ 1943 දී තෝමස් ෆ්ලවර්ස්(Thomas Flowers) විසින් නිපදවූ කොලෝසිස්(Colossus) නම් පරිගණකයයි.මීට ඉලෙක්ට්‍රොනික ලෙස වැඩසටහන් කරණය සදහා සීමිත හැකියාවක් තිබිණි.එමෙන්ම සාපේක්ෂව විශ්වාසදායි(reliable) ප්‍රතිපල ලබාදුනි.මෙය දෙවන ලෝක සමයේ ජර්මානු යුද පණිවිඩ විකේතනය(decode) කිරීමට යොදාගැනුනි.

මාර්ක් 1 පරිගණකයේ චායරුපයක්
  • 1944 දී හාර්වර්ඩ්(Harvard) IBM සමාගම හා එක්වී මාර්ක් 1(Mark 1) නමින් පරිගණකයක් නිපදවූවා.මෙය එක්සත් ජනපදයේ එවකට නිපදවූ පළමු ක්‍රමලේකනය කළහැකි ඩිජිටල් පරිගණකයයි(First programmable digital computer).මෙහි භෞතික ප්‍රමාණය සදහන් කළහොත් බරින් ටොන් 50ක්ද සැතපුම් 500ක දිගින් යුත් වයර්ද ,උසින් ආදී 8ක් ,දිගින් ආදී 51ක්ද සහ ආදී 50ක් දිගින් යුත් බ්‍රමණ ඊශාවකින්ද(rotating shaft) මෙය සමන්විත වුනා.මේ සදහා වැඩසටහන් සකස් කල කාන්තා ප්‍රාථමික ප්රෝග්‍රමර් වරියක(programmer) වුයේ ග්‍රේස් හොපර්(Grace Hopper) ය.ඇය විසින් පළමු පරිගණක දෝෂය(Bug) සොයාගැනුනි.මෙහි පටි කියවනයේ  මියගිය ඉපියෙකු සිරවීමෙන් ඉහත දෝෂය හටගැනුනි.පසුව පරිගණක දෝෂ නිරාකරණයට දිබගින්ග්(Debugging) වැනි යෙදුම් බාවිතයට ආරම්බය සැකසුනේ එලෙසිනි.පළමු ඉහල මට්ටමේ පරිගණක බාශාවක් පවා නිර්මානය කලේ උක්ත කත විසිනි.එය ආරම්බයේ ෆ්ලෝමැටික්(Flowmatic) යනුවෙන් හැදින්වූ අතර පසුව එය සුප්‍රසිද්ද කොබෝල්(COBOL) බවට පත්විණි.මාර්ක් 1 ට අංක 23කින් යුතු සංඛ්‍යා විසදිය හැකිව තිබිණි.මේ සදහා සංඛ්‍යා දෙකක් එකතු කිරීමට හා අඩු කිරීමට තත්පරයෙන් 3/10ක කාලයක්ද  ගුණකිරීමට තත්පර 4ක  කාලයක්ද බෙදීමට තත්පර 10ක කාලයක්ද ගතවිය!
එනියැක් පරිගණකයේ චායාරුපයක්
  •  1946 දී ENIAC නමින්වඩා දියුණු පරිගණකයක් බිහිවුණා.එනියැක් පරිගණකය නිපදවන ලද්දේ පෙන්සිල්වේනියා සරසවියේ ජෝන් මොෂ්ලි(John Mochley) හා ප්රෙස්පර් එකර්ට්(Presper Ekart) විසිනි.යුද දෙපාර්තමේන්තුව(war department) මගින් ඔවුන්ට පැවරුණු කාර්යබාරය වුයේ නිවැරදි ඉලක්කයන්ටම  පහරදීම් සිදුකිරීමට යොදා ගන්නා ,එවකට අතින් සකස් කෙරුණු ගණන වගු(calculation tables)  සැකසීම සදහා යන්ත්‍රයක් නිපදවීමයි.එනියැක් පරිගණකය ටොන් 30 ක බරින් යුතු ,වැකුම් නල 18000 ක් යොදා ගැනුණු පරිගණකයකි. මෙය ක්‍රියාත්මක වනවිට ශබ්දයක් නොනගුනද අධික තාපයක් නිපදවිණි.නමුත් මෙය මාර්ක් 1  පරිගණකයට වඩා වේගයෙන් ගුනකිරීම්(multiplication) ඇතුළු ගණිත කර්ම සිදු කල හැකිවිය.
තවත් කොටසක් ඊලග ලිපියෙන් බලාපොරොත්තු වන්න........

Tuesday, October 1, 2013

පරිගණකයේ ඉතිහාසය -අසන්ෂිප්ත සටහන 1


පරිගණකයේ ඉතිහාසය(history of computer)
මේ ගැ න  නම් මොකටද කියල එක පාරටම අපේ කියවන්නෙකුට හිතෙන්න පුළුවන් .නමුත් පරිගණක විද්‍යාව ක්‍රමානුකුලව හදාරන කෙනෙක් මේ ගැන අනිවාර්යෙන්ම දැ න ගෙන ගෙන ඉන්න ඕන.කාලනුරුපීව මිනිස් සිත් සතන් තුල වැඩ  කටයුතු පහසු කරගන්න ,ස්වයංක්‍රීය ව ක්‍රියාත්මක වන බාහිර උපකරණ නිපදවා ගැ නීමේ නොසිදෙන ආශාව වගේම එයින්ම අභිප්‍රේරණය වන අපුර්ව බුද්ධි මහිමය පිලිබදවත්   හොද අදහසක් ගන්න ඒක වැදගත් වෙනවා.


සීමාසහිත ක්‍රියාකාරිත්වයක් සහිත පරිගණක(limited-functionearly computers)
නුතන පරිගණකයේ ඉතිහාසය ප්‍රධාන තාක්ෂණ(technologies) දෙකක් ඔස්සේ දක්වන්න පුළුවන්.එනම් ,ස්වයංක්‍රීය ගණනය හා වැඩසටහන් කල හැකි වීමයි .
  • ඉතිහාසය දෙස බලනකොට මින් ගණනයට(calculation) සමත්කම් දක්වන පළමු යාන්ත්‍රික උපකරණය ලෙස අපට හමු වන්නේ 2500BC  හීදී පමණ  නිපදවූ සුමේරියානු ඇබකසයයි.
  • වැඩසටහන් කල හැකි යාන්ත්‍රික පද්ධතියක් අපිට වාර්තා ගත ඉතිහාසයේ පළමු වරට හමුවන්නේ (10-70)AD පමණ කාලයේදීයි.ඒ ග්‍රීක ගණිතඥයෙකු විසින් තැටි හා කඹ(ropes and drums) යොදා නිර්මාණය කල න්රුත්යශාලාවයි(theater).එහිදී පද්ධතියේ කුමන කොටස කිනම් කාලයේදී ක්‍රියා කල යුතු දැයි වැඩසටහන්(programmed) ගත කර තිබිනා.

ඊලගට පරිගණක ඉතිහාසයේ ප්‍රධාන කඩයිම් කිහිපයක් මෙහිදී කතා  කිරීමට බලාපොරොත්තු වෙනවා.ඒ ඒ නිමැවුම කඩයිමක් වෙන්නේ ඇයි කියන එක අවබෝද කරගැනීමයි ඉතා වැ දගත් .

  • 1642දී බ්ලේස් පැ ස්කල්(Braise Pascal) විසින් නිපදවූ පැ ස්කල් පරිගණකය පළමු හොද ක්රිකාරිත්වයක් සහිත ගනකයයි.මෙයින් මුලික ගණිත කර්ම කල හැකිවිය. මෙම නිමැ වුම චාල්ස් බැබේජ් ගේ පලමු න්‍යායික  පරිගණකය වැනි වඩා ශක්තිම(strong)ත් හා නම්යශීලී(flexible) ගණකයන් බිහිවීමට  අඩිතාලම එක කළා  .

පොදු කාර්ය පරිගණක(general purpose computers)
  • 1801දි ජෝසෙප් මාරී ජැකාර්ඩ්(Joseph Marie Jackard) විසින් වැඩිදියුණු කරන ලද රෙදි මහන යන්ත්‍රයට ඊට ඇතුලත් කරන සිදුරු සහිත කාර්ඩ් පත්(punch cards) මගින් සංකීර්ණ මැහුම් රටා මැසීමට හැකියාව තිබිණි.මෙය වැදගත් පියවරක් ලෙස සැලකිය හැක්කේ එමගින් යන්ත්‍රයක් ස්වයංව ක්‍රියාකිරීමට  වැඩසටහන්(programs) කළහැකි බව කියාපාන නිසා.මේ ය මුලින් සදහන් කල තාක්ෂණ යුග්මයේ එක්වීමක් ලෙසද හදුන්වන්න පුළුවන් .
සංකීර්ණ රටාවන් මහන අයුරු
ජකර්ඩ් බාවිත කල කාර්ඩ්පත්


බැබෙජ්ගේ difference engine  කොටසක චායාරුපයක්
  • 1837 දී චාර්ල්ස් බැබේජ්(Charles Babbage) විසින් පළමු සම්පුර්ණයෙන්ම වැඩසටහන් කල පරිගණකය වන ඇනලිටිකල් එන්ජින්(Analytical Engine) නිර්මාණය කලා. නිර්මාණය කලා කිව්වට ඇත්තටම ඔහු එය සංකල්පයක්(concept) ලෙස නිර්මාණය කලා පමණයි,මුල්‍ය අර්බුද ආදිය නිසා ඔහුට එය ඉම්ප්ලිමන්ට්(implement) කල නොහැකි වුනා.
  • 1842-1843 කාල වලදී ඇඩා ලව්ලේස්(Ada Lovelace) නම් තැනැත්තියක් විසින් ලුයිගි(Luigi) නැමැති ඉන්ජිනේරුවෙකුගේද සහය ඇතිව බැබේජ්ගේ විශ්ලේෂණ යන්ත්‍රය විශ්ලේෂණය කොට ලිපියක් සකස් කළේය.එහි ගණනය හැරෙන්නට පරිගණකය තවත් දියුනුකලහැකි ඉසව් මෙන්ම පළමු ලිඛිත පරිගණක වැඩසටහන යයි සැලකියහැකි අල්ගොරිදමයක්(Algorithm)ද අන්තර්ගතවුණා.
  • 1880 දී හර්මන් හොලරිත්(Herman Hollerith) විසින් දත්ත පසුව කියවීමට හැකි ලෙස පටිගත කිරීමට(record) මාධ්‍යයක් සොයාගත්තා.එනම් සිදුරු සහිත කර්ඩ්පත්(punch cards).මීට පෙර අප සදහන් කල පරිදි ජැකාර්ඩ් විසින්ද ඔහුගේ රෙදි මහන යන්ත්‍රය වැඩසටහන්කරණය(programmed) සදහා මෙම කාර්ඩ්පත් ක්‍රමය බාවිතා කරතිබුනා.හර්මන් මෙම පන්ච් කාර්ඩ්ස් සැකසීම සදහා ටැබියුලර්(Tabular) නැමැති උපකරණයක්ද නිපදෙව්වා.නුතන පරිගණකය සතු තොරතුරු සකස් කිරීමේ හැකියාව සහිත යන්ත්‍ර යක් බිහිවුණු පළමු අවස්ථාව මෙය නිසා පරිගණක ඉතිහාසයෙ මෙය සුවිශේෂී සංදිස්ථානයක් ලෙස සලකන්න පුළුවන්.මෙම නිමවුමේ මහා පරිමාන(Large-scale) බාවිතයක් වුයේ 1890 වර්ෂයේ එක්සත් ජනපදයේ පැවති ජනසන්ගනනයෙදී එම කටයුතු පහසු කර ගැනීමට මෙම උපකරණය බාවිතා කිරීමයි.තවද හොලරිත්ගේ Tabulating Machine Company ආයතනය තවත් ආයතන දෙකක් එක්ව Computing-Tabulating-Recording Company නමින් සමාගමක් පිහිටුවා ගනු ලබනවා.පසුව එය 1924 දී සුප්‍රසිද්ධ International Business Machines (IBM) නමින් තම නම වෙනස් කර ගත්තා.
හොලරිත් නිපදවූ පරිගණකය
සංගනනය සදහා සිදුරු සහිත කර්ඩ්පත් සාදන අයුරු 

පසුව 19 සියවසේ අග බාගයේදී ප්‍රායෝගික පරිගණක(Practical computers) බාවිතයේ හා අවබෝධයේ අදහස් හා තාක්ෂණ රැසක් බිහිවුණා.ඉන් කිහිපයක් ලෙස බූලියානු වීජ ගණිතය(Boolean algebra) ,වැකුම් නල(vacuum tubes),සිදුරුසහිත කර්ඩ්පත්(punch cards) හා ටෙලිප්‍රින්ටර්(teleprinter) දක්වන්න පුළුවන්.
20 වන සියවසේ මුල් බාගය තුල බාවිතා වුනේ ඇනලොග් පරිගනකයි(Analogue Computers).නමුත් අද වර්තමානයේ සම්පුර්ණයෙන්ම බාවිතා වෙන්නේ ඩිගිටල් පරිගනකයි(Digital Computers).මෙම දෙවර්ගයේ  වෙනස දැක්වීමට උදාහරණයක් ලෙස මේස ලාම්පුවක්(table lamp) සලකන්න පුළුවන්.එනම් සමහර මේස ලාම්පු වල ඔන්/ඕෆ් දෙකට අමතරව එලිය අඩු වැඩි කරන්න පුළුවන් ස්විච් එකකුත් තියෙනවා.ඒක හරියට ඇනලොග් තාක්ෂණයට සමක කොට දක්වන්න පුළුවන්.ඩිගිටල් තාක්ෂනය තුල බාවිතා කරන්නේ තත්ත්ව දෙකයි.එක්කෝ ඔන් නැත්තම් ඕෆ් .නමුත් ඇනලොග් තාක්ෂණය තුල මේ අතරමැද තත්වයන්(සන්තතික) බාවිතා කෙරෙනවා.
තවත් කොටසක් මීලග ලිපියෙන් බලාපොරොත්තු වන්න.

Monday, September 23, 2013

පරිගණක විද්‍යාව ඉගෙනගන්නේ කොහොමද?

 ආයුබෝවන් ඔබ සියලු දෙනාටම..............මම විශ්ව විද්යාලයේ පරිගණක විද්‍යාව ඉගෙනගන්න ඇවිල්ලා දැන් එක සෙමෙස්ටර් එකකුත් ඉවරයි .මේ ක්ෂේත්‍රයේ ඉගෙනගන්නකොට අපි පුරුදු කරන්න ඕන මොන වගේ දේවල්ද මට දැනට තේරිච්ච විදියට ඔබට ඉදිරිපත් කරන්න කල්පනා කළා. .දැන්  අපි මෙතෙන් සිට ඒ මොනවද කියල කරුණු වශයෙන් සාකච්චා කරමු.


  1. ක්‍රමලේකන සුසමාදර්ශ -මෙහිදී පරිගණක බාෂාවේ පවතින ක්‍රමලේකන සුසමාදර්ශ කිහිපයක් හදුනාගන්න පුළුවන් .අපිත් පළමුවන සෙමෙස්ටර් එකේ ඉගෙනගත්තේ C  පරිගණක බාෂාව .මේක අයිති Procedural  වර්ගය යටතටයි.ඒ කියන්නේ programming කරන්න ඕන කිසියම් අනුපිළිවෙලකට .ඊලගට වස්තු පාදක ක්‍රමලේකනය(object oriented programming) මේක තමයි high ලෙවෙල්   languages වලින් ජනප්‍රියම හා ප්‍රබලතම ක්‍රමලේකන  විදිය .ජාවා,smalltalk,ruby වගේ පරිගණක බාශා වැටෙන්නේ මේ යටතට .ඊලගට තවත් functional කියලත් වර්ගයක් තියෙනවා .අපි හැමවිටම අලුතෙන් දේවල් හොයන රුචිකත්වයකින් ඉන්න ඕන,එතකොට තමයි මේ CS ක්ෂේත්‍රය රසවත් වෙන්නේ ,මම පසුව සදහන් කල Functional language යටතට වෙටෙන්නේ  HASKELL,Scheme,Erlang,OCam වගේ පරිගණක බාෂා (සැ.යු -මේ සියල්ලම විශ්ව විද්යාල විෂය නිර්දේශයක් තුල ඉගෙන්විය නොහැක .ආරම්බය ලබාදුන් පසු සොයා ගොස් ඉගෙනීම  සරසවි අධ්‍යාපනයේ මුලිකාංගයක් බව මෙම කෙටි කල තුල හදුනාගෙන සිටිමි.)මෙ හැම style එකක්ම පුරුදු වුනාම ප්‍රශ්නයක් විසදන්න හොදම මොකක්ද කියලා  ඒ වායෙ තියෙන පහසුකම් එක්ක තේරුම් ගන්න හැකියාව ලැබෙනවා.මෙ හැම එකකම features කවලම් වෙච්ච languages තුත් තියෙනවා.ඒවට උදාහරන විදියට Python,C++,Scala වගේ languages දක්වන්න පුලුවන්.
  2. සෛද්ධාන්තික පරිගනක විද්යාව-complexity theory ,optimizations, Cryptography ,Computer Aided Graphics,Compilers,Operating systems වගේ ප්‍රධාන මාතෘකා වගේම Hardware  පැත්තෙ Instruction sets,caches  සහ Architectures පිලිබදව මෙම  විශය කොටසේදි ඉගෙන ගනු ලබනවා. 
  3. Mathematics for CS-පරිගනක විද්‍යාව සම්පුර්නයෙන්ම පාහේ පදනම් වෙන්නෙ ගණිතයෙ ඉගෙන්වෙන සංකල්ප මත,ඒ නිසා CS ස්ථාවරව ඉගෙන ගන්න නම් හොද ගණිතමය පදනමක් තියෙන්නම ඕන.
  4. ඊළගට  Human Side එකෙ දේවල් ටිකක්,ඒ කියන්නෙ project management ,Design patterns,User Interface design ,Human-Computer Interaction වගෙ දේවල්,මොකද කියනවනම් ඉදිරියෙදි ‍රැකියාවක් හැටියට අපිට කරන්න වෙන්නෙ Project manager,Programmers,Software Engineers ල වගෙ අය හැටියටනෙ. එතනදි වැඩ කරන්න වෙන්නෙ මිනිස්සුත් එක්ක,ඒ නිසා හොද communication skill එකක් තියෙන්නම ඕන ප්‍රශ්න අඩුවෙන් වැඩ කරගෙන යන්න.
  5. ඊලගට නිර්මාණාත්මක බව කියන දෙයත් ඉතා වැදගත්.එ කියන්නෙ අපි ආස කරන music,dance,sport වගෙ දෙවල්වලින් ඔය කියන නිර්මානාත්මක බව,ඉවසීම වගෙ ගුනාංග වර්දනය කරගන්න පුලුවන්.අපි දැනටමත් දන්න විදියට අපෙ මිනිස් මොලයේ ඩෙපැත්තක් තියෙනවා.එක පැත්තක් logic වලට,ඒ වගේම අනිත් පැත්ත සව්න්දර්යාත්මක දේවල් වලට,මේ දෙකම හරිවිදියට සමාන්තරව යන්න ඕන.තවත් දෙයක් සදහන් කරන්න අවශ්‍යයි.ඒ තමයි CS සබ්ජෙක්ට් එක ඉගෙන ගැනීමෙදි ඉහල Analytical Skill එකක් තියෙන්න ඕන,මේක වර්දනය කරගන්න,puzzle විසදීම වගෙඩෙවල් අනුමත කරන්න පුලුවන්.විශෙශයෙන් ගණිතය ඉගෙන ගැනීමේදී Real Analysis වගෙ පාඩම් අවබෝදයෙන් ඉගැනීම වැදගත්.Real life එකෙ මුනගැසෙන ගැටලු ,විශ්ලේශනය කරල විසදන්න පුලුවන් මාර්ග පාදගන්න උනක් වගේ දෙයක් තියෙන්න ඕන.
  6. තවත් දෙයක් CS student කෙනෙක් වුනාම FOSS ප්‍රොජෙක්ට් වල වැඩ කරලා industry යෙ වැඩ කැරෙන හැටි ගැන අවබෝධයක් ලබන්න පුලුවන්.ඒ දෙ   CS major  ලා ඉහලින්ම recommend කරන දෙයක්.කන්ඩායම් වශයෙන් මෙවෙනි ප්‍රොජෙක්ට් කරන්න පුලුවන්,අනිත අතට ඒ වගෙ දෙයක් හොද Personality එකක් හැදෙන්නත් ලොකු පිටිවහලක් වෙනවා.
  7. CS field එකේ major කෙනෙක් වෙනව වගේම තවත් discipline එකක්  විදියට electrical engineering එහෙමත් නැත්තම් economics,management වගේ දෙයක් අතිරේකව ඉගෙනගන්නව නම් ගොඩක් වටිනවා.එතකොට job එකකට තියෙන demand එකත් වැඩිවෙනවා. 
ප.ලි- කතෘ බ්ලොග්කරණය සදහා ආදුනිකයෙකු වන බැවින් මෙහි අන්තර්ගතයේ බොහෝ අඩුපාඩුකම් තිබිය හැක.පරිගනක විද්‍යාව ඉගෙනගැනීම සදහා වන අනිවාර්ය ක්‍රමවේදයක් මෙයින් හුවා දැක්වීම කතෘ අපේක්ශා නොකරයි.මෙහි ඇති දෝශ අඩුපාඩු පෙන්වා දෙන්නේ නම් අතිශයින්ම කෘතවේදී වෙමි.

Friday, September 20, 2013

පරිගනක විද්‍යාව --වෙන්කර හදුනා ගැනිමක්

ආයුබෝවන් ඔබ සියලු දෙනාටම..........
 පරිගනක විද්යාව,තොරතුරු හා සංනිවේදන තාක්ෂනය,පරිගනක ඉංජිනේරු විද්‍යාව මේ නම් වලින් හැදින්වෙන විශයන් වල තියෙන්නෙ එකම අන්තර්ගතයක් නෙවෙයි.උසස් අධ්‍යාපනයෙදී මේ විශය අන්තර්ගතයන් වල ඇති වෙනස හදුනාගෙන සිටීම අනාගතයෙදි අප නියැලීමට සිටින වෘත්තිය පිලිබද පොඩි හරි තීරනයක් ගන්න උදව් වෙනවා.මම නම් විශ්ව විද්යාලෙ අයදුම් කරද්දීවත් මෙ ගැන එච්චර අවබෝදයක් තිබ්බෙ නැහැ.ඒ ඒ course වල වටිනාකම තීරනය කලෙ ඇත්තටම ඊට උඩින් අවුරුද්දේ ඒ course එකට ගත්ත Z-Score එක ගැන හිතලා.ඒ කියන්නෙ Z-Score එක වැඩිනම් ඒක හොදයි කියලා හිතලා.එනිසා අපි අද මෙ විවිධ විශයන් වල අන්ත්ර්ගතයන් පිලිබදව විමසීමක් කරමු.
programming is major task of computer scientists

 පරිගනක විද්‍යාව-පරිගනක විද්‍යාව හදාරන්නෙකුගෙ  අරමුන පරිගනක යෙදවුම් වල සිද්ධාන්ත හා පසුබිම අවබෝධ කරගෙන විද්‍යාඥයෙකුගේ  කාර්යභාර්යක් ඉ‍ටුකිරීමයි.ඒ කියන්නේ රසායන,භෞතික විද්‍යාඥයන් වගේ.ලබා ගත් අවබෝධය තුලින් තොරතුරු සම්ප්‍රේශනය හා මෙහෙයවීම සදහා නව ක්‍රමවේදයන් සොයගැනීම ඔවුන්ගේ කාර්යභාර්යයි.මෙ සදහා උසස් ගනිතය,ඇලොගරිත්ම භාවිත්යෙන් පරිගනක වැඩසටහන් ක්‍රියාත්මක වන්නේ කෙසේදැයි ඔවුන් විසින් නව දැනුමක් නිර්මානය කරනු ලබනවා.එම නිසා CS හදාරන්නෙකු මෘදුකාංග නිර්මානය හා දියුනු කිරීම ,පරිගනක භාෂා වල මූලිකාංග ඉගෙනගනු ලබයි.එදිනෙදා යම්  කටයුත්තක් කරගැනීමට පරිගනක යොදවා ගත හැක්කේ කෙසේ දැයි යම් වැඩසටහනක්  ගොඩනගා එම ක්‍රමවේදය ඔවුන් විසින් පැහැදිලි කර දෙයි.කොටින්ම කියතොත් පරිගනක පද්ධතිය සමග සංනිවේදනය කරන්නේ පරිගනක විද්‍යාඥයන්ය.පරිගනක විද්‍යාඥයන්ගේ කාර්යභාර්ය අවබොධ කරගැනීමෙන් CS විශයෙහි අන්තර්ගතය පිලිබද අදහසක් ගත හැකි යයි සිතමි.මෙම විශය ධාරාව හැදෑරීමෙන් උදාවන ‍රැකියා අවස්ථා කිහිපයක්  පහත දැක්වේ.
  1. Application Software developer-යෙදවුම් මෘදුකාංග නිර්මානකරුවන්
  2. System Engineers-පද්ධති ඉංජිනේරුවන්
  3. Web Developers-ජාල සංවර්ධනය කරන්නන්.

  පරිගනක ඉංජිනේරු විද්‍යාව -පරිගනක ඉංජිනේරුවන් විසින් පරිගනක දෘඩාංග කොටස්එකතු කර පරිගනක නිර්මානය කරයි.එනම් ඉංජිනේරු කාර්යභාර්යක්.මොවුන්ගේ වගකීම වෙන්නේ පරීක්ශන කරලා hardware equipment නිර්මානය හා දියුනු කිරීම.ඒ කියන්නේ circuit boards, microchips, routers, video cards වගේ දේවල් .electrical engineering වගෙ විශය දැනුමකුත් මෙතනදි ඉගෙන ගත යුතු වෙනවා.පරිගනක ඉංජිනේරුවන් විසින් ගොඩනගනු ලබන processor architecture එකකට අනුකූලව පරිගනක විද්‍යඥයන් විසින් පරිගනක වැඩසටහන් ලියනු ලබනවා.හැකිතරම් ආර්ථිකව ලාභදායි හා වඩා කාර්යක්ශම micro processors නිර්මානය කිරීම මොවුන්ගේ වගකීමයි.ඒ අනුව පරිගනක ඉන්ජිනේරු විද්්‍යාව හදාරන්නෙකු පරිගනක විද්‍යාවේ මූලික සංකල්ප,ඉන්ජිනේරු විද්‍යාව,ගණිතය වගේ විෂයන් ඉගෙන ගත යුතු වෙනවා.මෙම විශය සංකලනයෙන් ලත් දැනුමෙන් දෘඩංග ගැටලු විසදීම හා පරිගනක පද්ධති ගොඩනැගීම සිදු කල යුතු වෙනවා.මොවුන් නියුතු වන කර්මාන්තය අනුවයි,‍රැකියා විවිධත්වයක් දකින්න පුලුවන් වෙන්නෙ.එවැනි කර්මාන්ත කිහිපයක් පහත දැක්වේ.
  1.  computer and electronic manufacturing-පරිගනක හා ඉලෙක්ට්‍රොනික නිශ්පාදනය
  2. computer systes design and related services-පරිගනක පද්ධති නිර්මානය හා ආශ්‍රිත සේවවාන්
  3. Scientific research and development services-විද්‍යාත්මක පර්යේශන හා සංවර්දන සේවාවාන්.
තොරතුරු තාක්ශනය-තොරතුරු තාක්ශනය තොරතුරු පද්ධති අධීක්ෂනය හා පද්ධති පාලනය හා සබැදි විශයක්.ඒ කියන්නෙ IT Proffessionals ට ඇත්තටම තියෙන්නෙ තාක්ශනයේ පරිශීලකයන් ලෙස ක්‍රියා කිරීමයි.පවතින මෙහෙයුම් පද්ධති,මෘදුකාංග හා යෙදවුම් භාවිතා කර ව්‍යාපාරික ගැටලු විසදීම සදහා විශාල පද්ධති සැලසුම් කිරීම මොවුන් සතු වගකීමයි. රැකියා ස්වභාවය අනුව ඔවුන්ට සේවා දායකයින් සමග ‍රැකියා ස්ථානයෙන් පිටත කටයුතු කිරීමට සිදුවෙයි.ව්‍යාපාරික අරමුනු හා අවශ්‍යතා මුදුන් පමුනුවා ගැනීම සදහා තාක්ෂනයේ උපයෝගීතාවයන් පිලිබදව පැහැදිලි කරදී සැලසුම් සෑදීම මොවුන්ගේ කාර්යභාර්යයයි.IT හදාරන්නෙකු ලෙස ජාල හා දත්ත පාදක නිර්මානය ,ව්‍යවහාරික ගනිතයේ මූලික දැනුම වගේම ශක්තිමත්  සිතීමේ හා තීරන ගැනීමේ හැකියාවක් වර්ධනය කරගත යුතු වෙනවා.ඊට අමතරව ඉහල සංනිවේදන හැකියාවක් හා පවතින සම්පත් භාවිතයෙන් අඩු-වියදම් සහිත ඉහල පලදායීතාවයක් ලබා ගැනෙමට තම සැලසුම් මෙහෙයවිය යුතු වෙනවා.කුඩා ව්‍යාපාරික අවස්ථාවේ සිට විශාල ව්‍යාපාරික අවස්ථාව දක්වාම IT භාවිතය නිසා බොහෝ ‍රැකියා අවස්ථා මොවුන් සදහා විවෘතව පවතී.ඉන් කිහිපයක් පහත දැක්වේ.
  1. Information Security Analyst
  2. Network Architect
  3. Computer Support Specialist
  4. Database Administrator
  5. System Administrator.

 සාරාංශය

  • computer engineers පරිගනක පද්ධති නිර්මානය හා ගොඩනැගීම සිදුකරයි.
  • computer scientists එම පරිගනක පද්ධති සදහා වැඩසටහන් නිර්මානය කරයි.
  • IT Professionals විසින් එම වැඩසටහන් භාවිතය හා දෝශ නිරාකරනය සිදුකරයි.
computer engineers  සැලසුම් කර නිවසක් සාදයි.Computer Scientist එම නිවසට අවශ්‍ය විදුලිය හා නලජලය ලබාදීමට විදුලි ‍රැහැන් ඇදීම හා ජල නල එලීම සිදුකරයි.IT Professionals තම ජීවන අරමුනු ඉ‍ටු කර ගැනීමට   එම නිවස භාවිතා කරන්නාට උපමා කොට දැක්විය හැකිය.