TechWire

Tag - Engineering

ලොව ජයගත හැකි සාර්ථක මෘදුකාංග ඉංජිනේරුවෙකු විය හැක්කේ කෙසේද?

දැනට වසර දෙක තුනක සිට පවතින ලෝක ආර්ථිකයේ පසුගාමී ස්වභාවය හමුවේ පවා “මෘදුකාංග ඉංජිනේරු” (Software Engineering) වෘත්තියෙහි රැකියා අවස්ථාවන් මේ ගෙවීයන දශකය (2011 – 2020) තුළදී 30% කින් වර්ධනය වනු ඇති බව එක්සත් ජනපදයේ කම්කරු සංඛ්‍යාලේඛන කාර්යාංශය පවසයි [1]. මෙය එරට සමස්ත රැකියා වර්ධනය පිළිබඳ බලාපොරොත්තු වන අගය (14%) මෙන් දෙගුණයකටත් වැඩිය. තවද Wall Street Journal පුවත්පත පළ කර ඇති සංගණනයක් මගින් එක්සත් ජනපදයේ වෘත්තීන් 200 ක් අතුරින් හොඳම වෘත්තිය ලෙස මෘදුකාංග ඉංජිනේරු වෘත්තිය නම් කර ඇත [2]. ලෝක ආර්ථිකයේ වත්මන් මන්දගාමී තත්ත්වය යටතේ පරිගණක මෘදුකාංග පද්ධති සහ සේවා සඳහා ඇති වෙළඳපොල තව තවත් වර්ධනය වනු ඇති බව ද වාර්තා වී තිබේ. වෘත්තියක් ලෙස මෘදුකාංග ඉංජිනේරු ශිල්පය සඳහා ඇති ඉල්ලුම පසුගිය දශක දෙක පමණ ඔස්සේ අඛණ්ඩ වර්ධනයක් ලැබූ අතර එය ඉදිරියටත් තව තවත් වර්ධනය වන බව ඉහත තොරතුරු මගින් මනාව සනාථ වේ. එම ශිල්පය මැනවින් අධ්‍යයනය කිරීමට සහ වෘත්තීය (professional) මෘදුකාංග ඉංජිනේරුවෙකු වශයෙන් සාර්ථකත්වයට පත්වීමට අවශ්‍ය කරන කුසලතා ගැන යම්කිසි මග පෙන්වීමක් ලබා දීම මෙම ලිපියේ අරමුණයි.

මෘදුකාංග ඉංජිනේරු වෘත්තිය යනු තොරතුරු තාක්ෂණ (IT) ක්ෂේත්‍රයේ ඇති විවිධ වූ වෘත්තීන් අතරින් එකකි. දෘඩාංග (hardware), පරිගණක ජාලකරණ (networking), දත්ත-ගබඩා (databases), පරිගණක පද්ධති (systems engineering) ආදී විවිධ අනු ක්ෂේත්‍ර රැසක විහිදී ඇති ඉංජිනේරු වෘත්තීන් රැසක් අතර මෘදුකාංග ඉංජිනේරු ශිල්පය ද එක් විශේෂිත (specialized) වෘත්තියකි. මේ එක් එක් අනු ක්ෂේත්‍රයක් සැලකුවද ඒවායේ අතිමහත් දැනුම් සම්භාරයක් දැනමටත් ගොඩ නැගී ඇත. එසේම තොරතුරු තාක්ෂණට අයත් වන ඉංජිනේරු හා තාක්ෂණ විෂයයන් අතිමහත් වේගයකින් වර්ධනය වන බැවින් නව දැනුම් හා ක්‍රමවේදයන් එක් වීමත් පවතින ක්‍රමවේදයන් භාවිතයෙන් ඉවත් වීමත් ඉතා ඉක්මනින් සිදුවේ. තත්ත්වය මෙසේ හෙයින් එක් පුද්ගලයෙකුට මේ සියළුම ක්ෂේත්‍රයන්හි පරතෙරට පැමිණීම ට නොහැකි බව ඉතා පැහැදිලිය. මේ සියළුම විෂයයන් සඳහා පොදු වන යම් දැනුම් ප්‍රමාණයක් ඇති නමුත් එක් එක් විෂයයෙහි ගැඹුරට යන විට එම විෂය සඳහාම සීමිත වන විශේෂිත දැනුම් සහ කුසලතාවන් අවශ්‍ය වේ. එසේම එක් විෂයයක විශේෂඥ වෘත්තිකයකු (expert professional) වීම සඳහා සෑම ක්ෂේත්‍රයකම ප්‍රවීණයෙකු වීම අවශ්‍ය නොවන බවත් මෙහිදී සඳහන් කල යුතුය. ඔබත් අනාගතයේ තොරතුරු තාක්ෂණ වෘත්තිකයකු වීමට බලාපොරත්තුවන අයෙකු නම් මෙහි දැක්වූ විවිධ අනු-ක්ෂේත්‍ර පිළිබඳ දැනුවත් විය යුතු අතර තම වාත්තීය අධ්‍යාපනයේ යම් අවස්ථාවක (උදාහරණයක් ලෙස, තොරතුරු තාක්ෂණ උපාධියක් හදාරණ සිසුවෙකු අවසන් වසරේ අධ්‍යයන කටයුතු ආරම්භ කරන කාලය වන විට) මේ එක් විශේෂිත ක්ෂේත්‍රයක් තමන් විසින් තෝරා ගැනීම යෝග්‍ය බවත් ප්‍රථමයෙන් ම ලබා දිය යුතු වෘත්තීය මාර්ගෝපදේශනය බව කිව හැකිය.

ඉහත සඳහන් විවිධ ක්ෂේත්‍ර අතරින් මෘදුකාංග ඉංජිනේරු ශිල්පය නම් විශේෂිත වූ ක්ෂේත්‍රය දෙස දැන් අපගේ අවධානය යොමු කරමු. ප්‍රථමයෙන්ම මෘදුකාංග ඉංජිනේරුවෙකුට දෘඩාංග සම්බන්ධයෙන් අවශ්‍ය වන දැනුම හා අවබෝධය කෙබඳු දැයි සලකා බලමු.

Software Engineering

රූපයේ දක්වා ඇති පරිදි පරිගණකයක් සම්බන්ධයෙන් දෘඩාංග (hardware) හා මෘදුකාංග (software) යනුවෙන් ප්‍රධාන අංග දෙකක් අපට හඳුනාගත හැකිය. මෘදුකාංගයක් යනු ගොඩනැගිල්ලක් නම්, CPU චිපය, මතකය (memory), දෘඩ තැටිය (hard disk) යනාදී උපාංග සියල්ලේ සංකලනය එම ගොඩනැගිල්ලේ අඩිතාලම (platform) ලෙස සැලකිය හැකිය. සාර්ථක මෘදුකාංග ඉංජිනේරුවෙකු වීම සඳහා දෘඩාංග නිර්මාණය (design) හා නිපදවීමට (construction) හැකි තරමි දැනුමක් අවශ්‍ය නොවේ. එවැනි දැනුමක් අවශ්‍ය වන්නේ දෘඩාංග ඉංජිනේරුවෙකු වීම සඳහායි. (පරිගණකයක උපාංග එකලස් කිරීම, අළුත් මතක පතක් සවිකිරීම වැනි ක්‍රියා hardware engineering නොවන බවත් ඒවා සරල නඩත්තු ක්‍රියා බවත් මෙහිදී විශේෂයෙන් සඳහන් කල යුතුය). දක්ෂ මෘදුකාංග ඉංජිනේරු‍වෙකුට අවශ්‍ය වන්නේ දෘඩාංග මගින් මෘදුකාංග වල නිවැරදි හා ඉක්මන් ක්‍රියාකාරීත්වය සඳහා සපයන සේවා හා යටිතල පහසුකම් පිළිබඳ නිරවුල් අවබෝධය යි. උදාහරණයක් ලෙස, මතක පද්ධතියේ වේගය හා විශාලත්වය අනුව ඇති වන ධූරාවලිය  (memory hierarchy) සහ ක්‍රියාත්මක වන මෘදුකාංගයක් මගින් එම ධූරාවලියේ විවිධ ස්ථර වල ඇති දත්ත කියවන/ලියන වේගයන් (read/write speeds) පිළිබඳ දැනුම දැක්විය හැක. විවිධ මතක චිපයන් හි දත්ත ගබඩා කෙරෙන තාක්ෂණය හා එක් එක් ස්ථරයේ මතක ගබඩා වල පිරිවැය (cost) පිළිබඳ දැනුවත් වීමද වැදගත් වේ. පිරිවැය පිළිබඳ දැනුවත්කම මගින් තමන් විසින් නිර්මාණය කරන මෘදුකාංගයක  ඉක්මන් හා සුමට ක්‍රියාකාරීත්වය සඳහා අධිබල CPU චිපයක් හෝ විශාල RAM චිපයක් මත පමණක්ම යැපීමේ අවධානම වැටහෙයි. බාල ගණයේ මෘදුකාංගයක් නිපදවා එහි ක්‍රියාකාරීත්වය වැඩිදියුණු කිරීම සඳහා මිළ වැඩි දෘඩාංග යොදා ගන්නට යැයි සේවාදායකයන්ට පවසන්නේ නම් එවැනි අයෙක් දක්ෂ මෘදුකාංග ඉංජිනේරුවෙකු වශයෙන් සැලකිය නොහැකිය. පරිගණක මතකය ගැන ගත් උදාහරණයට සමාන උදාහරණ අනෙකුත් දෘඩාංග සම්බන්ධයෙනුත් අදාළ වේ. රූප සටහනේ පහතින්ම දක්වා ඇත්තේ මෘදුකාංගයක ක්‍රියාකාරීත්වය සඳහා ඉතාම වැදගත් වන දෘඩාංග කුලකයන් ය. ඒ එක එකක් ගැන විස්තර වශයෙන් සඳහන් කිරීමට මෙම ලිපියේ ඉඩ නැති නමුත් මෘදුකාංග ඉංජිනේරුවකුට දෘඩාංග ගැන අවශ්‍ය වන දැනුම ගැන යම් වැටහීමක් දැන් තිබිය යුතුය.

Software and Hardware

දෘඩාංග විසින් සැපයෙන අත්තිවාරම උඩ ක්‍රියාත්මක වන මෘදුකාංග ද විවිධ ස්ථර කිහිපයක ට වෙන් කර හඳුනාගත හැකිය. භාවිත මෘදුකාංග (application software) හා පද්ධති මෘදුකාංග (system software) යන ප්‍රධාන කුලක දෙකකට මේවා වර්ගීකරණය වේ. මෘදුකාංග ඉංජිනේරුවෙකුට මේ කාණ්ඩ දෙකටම අයත් ස්ථර වල නිර්මෘණකරණයේ යෙදිය හැකි මුත් සාමාන්‍යයෙන් මෙම ක්ෂේත්‍රයේ රැකියා ඇත්තේ ඒවායින් එක කාණ්ඩයකට සීමා වන ලෙසයි. මේ විවිධ ස්ථර මෘදුකාංග ශිල්පයේ උප විශේෂිකරණයන් (sub specialization) ලෙස හැඳින්විය හැකිය.

පරිගණකයක පරිශීලකයා (user) හට අවසන් වශයෙන් අවශ්‍ය වන්නේ විවිධ කාර්යයන් ඉටු කර දෙන මෘදුකාංග (application software) ය. සිලිකන් පරිපථ හා චුම්භක කොටස් යනාදිය එකතු කොට නිපදවා ඇති උපාංග හරහා විදුලි ධාරාවන් ගමන් කරන විට ක්‍රියාත්මක වන දෘඩාංග සමූහයක් මත ධාවනය වන මෙහෙයුම් පද්ධතියක් (operating system) සහ තවත් විශේෂිත මෘදුකාංග සැකිලි (software frameworks) මත දිවෙන මෘදුකාංගයක් තමන් භාවිතා කරන බව පරිශීලිකයා හට දෘෂ්‍යමාන නොවේ. නවීන වාහනයකට නැග බොත්තමක් ඔබා එය පණ ගන්වා, ස්වයංක්‍රීය ගියරය දමා, වාහනය අභ්‍යන්තරයේ සිදුවන දහසකුත් එකක් ක්‍රියා ගැන කිසිදු අවබෝධයක් නැතිව ‍ එය ධාවනය කරවන රියදුරෙකුත් සාමාන්‍ය පරිගණක භාවිතා කරන්නෙකුත් අතර එතරම් වෙනසක් නැත. ඒ එසේ නමුත්, මෘදුකාංග නිර්මාණකරුවෙකුට තම වෘත්තියේ විශේෂඥයකු වීම සඳහා මේ විවිධ අන්තර් ස්ථර පිළිබඳ ඉතා නිරවුල්, ගැඹුරු අවබෝධයක් තිබීම අත්‍යවශ සාධකයක් වේ. සෑම අවස්ථාවක ම බිම් මට්ටමේ සිට සියළුම මෘදුකාංග තමන් විසින් ම නිර්මාණය කර ගත යුතු බවක් මින් අදහස් නොකෙරේ. යම් යම් අය විසින් පෙර නිමවා ඇති යටිතල මෘදුකාංග හා මෘදුකාංග සැකිලි යොදා ගනිමින් භාවිත මෘදුකාංග නිර්මාණය කිරීමෙහි කිසිම වරදක් නැත. ඵලදායි මෘදුකාංග නිර්මාණකරණයක් සඳහා එසේ යොදා ගැනීමත් අත්‍යවශ්‍ය කාරණයකි. අප විසින් නොකල යුත්තේ එම පහත ස්ථරයන් ගැන අනවබෝධයෙන්, උඩින් පල්ලෙන් අතගාමින් මෘදුකාංග නිර්මාණකරනයේ යෙදීම යි. තමන් නිපදවූ මෘදුකාංගය නිසි පරිදි ක්‍රියාත්මක නොවන මොහොතක ඒ ඇයිදැයි සොයා බැලීමට බිමි මට්ටමට එබී බලා ඒ නිවැරදි කිරීමේ හැකියාව හා අවබෝධය (ability to look under the hood) ඇතිව ඒවා යොදා ගැනීම දක්ෂ මෘදුකාංග ශිල්පියෙකුගේ ලක්ෂණය යි. එසේ නොමැතිව, යම් මෙහෙයුම් පද්ධතියක් මත දුවන අතථ්‍ය යන්ත්‍රයක (virtual machine) සේවා යොදා ගනිමින් ලියා ඇති මෘදුකාංග සැකිල්ලක ආධාරයෙන් යම් භාවිත මෘදුකාංගයක් නිපදවූ පමණින් තමන් මෘදුකාංග ඉංජිනේරුකරණයේ යෙදුනු බව සිතා නොගත යුතුය. සැබැවින්ම එය සරල වූ වැඩසටහන්කරණයක් (a mere programming job) පමණි.

SW_languages

රූප සටහනේ දක්වා ඇති විවිධ ස්ථර පිළිබඳ නිවැරදි දැනුම ට අමතරව මෘදුකාංග නිර්මාණකරනය ට අදාළ වන විෂයයන් හා මෙවලම් ගැන හොඳ න්‍යායාත්මක හා ප්‍රායෝගික දැනුමක්ද තිබීම අත්‍යවශ වේ. Computer Architecture, Operating Systems, Data Structures and Algorithms, Object Oriented Analysis and Design, Compiler Theory, Programming Theory සහ Database Designing වැනි විෂයයන් ගැන නිවැරදි දැනුම දක්ෂ මෘදුකාංග ඉංජිනේරුවෙකුගේ දැනුම් ගබඩාවේ නිත්‍ය හා ප්‍රමුඛ අංගයන් වේ. එසේම compilers, debuggers සහ test tools වැනි මෙවලම් (මේවාද තවත් විශේෂිත මෘදුකාංගයන් ය) ගැන ප්‍රායෝගික දැනුම ද මෘදුකාංග නිර්මාණ ක්‍රියාවලිය (software development life cycle) ගැන අවබෝධය ද ඉතා වැදගත් වේ.

මේ කරුණු සලකා බලන විට විවිධ කෙටිකාලීන පරිගණක පාඨමාලා හැදෑරීම හරහා මාසිකව ලක්ෂ ගණනින් ආදායම් උපයා ගත හැකි මෘදුකාංග ඉංජිනේරුවන් විය හැකි බව පවසමින් සිසුන් නොමග යවන විවිධ දැන්වීම වර්තමානයේ දැකිය හැකි වීම කණගාටුවට කරුණකි. මෙබඳු වෙළෙන්දන් ගෙන් මුලා නොවීමට සිසුන් හා දෙමව්පියන් වග බලා ගත යුතු අතර එබඳු පාඨමාලා යම් කිසි ප්‍රමිතිකරණයකට හා නියාමනකට ලක් කිරීමට බලධාරීන් ක්‍රියා කල යුතු බව අපගේ අදහසයි.

Facebook, Twitter වැනි සමාජ ජාල වල කරක් ගසමින් හෝ පරිගණක ක්‍රීඩා වල යෙදෙමින් නිකරුණේ තම අගනා කාලය අපතේ යැවීම වත්මන් සිසු පරපුර අගාධයට යවන්නක් බව කිව යුතුය. ඊමේල් යවන්නට දැන ගැනීම, අන්තර්ජාලයේ සැරිසැරීම හෝ MS Office වැනි මෘදුකාංග පැකේජයක් අත පත ගා යමක් කර ගැනීමට හැකි වීම ඉහළ මට්ටමේ තොරතුරු තාක්ෂණ වෘත්තිකයෙකු වන්නට සුදුසුකමක් නොවේ. එම දැනුම මගින් යම් අයෙකුට දත්ත ඇතුළත් කරන්නෙකු (Data Entry Operator) වැනි ආරම්භක ශ්‍රේණියක ලිපිකාර රැකියාවක් ලබා ගත හැකි වනු ඇත. කෙනෙකු ලබන අධ්‍යාපනය හා පුහුණුව අනුව ඕනෑම ක්ෂේත්‍රයක වැඩි හා අඩු වැටුප් තල වල ඇති රැකියාවන් තිබෙන අතර තොරතුරු තාක්ෂණයේදීත් මේ තත්ත්වය එලෙසම පවතී. CPU Chip Designer, Software Architect වැනි වැඩි වැටුප් ඇති වෘත්තීන් හි සිට Computer Assembler, Programmer වැනි ආරම්භක වැටුප් ඇති වෘත්තීන් දක්වා ඇති විශාල පරාසයක මෙම රැකියා විහිදේ.

SW_Programmer

සාරාංශ වශයෙන්, දෘඩාංග මගින් මෘදුකාංග වෙත සැපයෙන් සේවා ගැන පැහැදිලි අවබෝධය, විවිධ මෘදුකාංග ස්ථර සහ ඒවා අතර ඇති අන්තර්ක්‍රියා පිළිබඳ අවබෝධය සහ තම වෘත්තිය දැනුමෙහි අරටුව ලෙස සැලකිය හැකි විෂයයන් හා මෙවලම් ගැන නිවැරදි න්‍යායාත්මක හා ප්‍රායෝගික දැනුම යන කාරණා සාර්ථක මෘදුකාංග ඉංජිනේරුවෙකු වීමට අවශ්‍ය ප්‍රධාන අමුද්‍රව්‍ය ලෙස ඉදිරිපත් කළ හැකිය. මෘදුකාංග ක්ෂේත්‍රයේ දක්ෂ වෘත්තියකුට වීමට ඔබත් බලාපොරොත්තු වන්නේ නම් මෙම කරුණු පිළිබඳ හොඳ අවධානයක් යොමු කල යුතු බව පැවසිය හැකිය. ලොව ජයගන්නා සාර්ථක මෘදුකාංග ඉංජිනේරුවන් අප රටෙන් බිහි කල හැකි බව දැනටමත් සනාථ වී ඇත. ඒ කාර්යය තව තවත් ඔප් නැංවීමට යම් කිසි අත්වැළක් මෙම ලිපියෙන් සැපයෙනු දැකීම අපගේ අවසන් ප්‍රාර්ථනය යි.

 

ඉෂාන් ද සිල්වා

ඉංජිනේරු විද්‍යාවේදී‍ (ගෞරව)

ලේඛකයා මොරටුව විශ්ව විද්‍යාලයේ පරිගණක ඉංජිනේරු උපාධියෙන් ප්‍රථම පන්තියේ සාමාර්ථයක් ලබා ඇත.  ලංකාවේ ප්‍රමුඛතම මෘදුකාංග සමාගමක සේවය කරන හෙතෙම මෘදුකාංග නිපදවිමේ ක්‍රියාවලියේ විවිධ මට්ටම් වල නිරත වෙමින් වසර දහයක පමණ අත්දැකීම් ලබා ඇත්තෙකි.

 

යොමු ලිපි:

[1] http://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm#tab-6

[2] http://online.wsj.com/article/SB10001424052702303772904577336230132805276.html

Title image credits: timeunion.com