കളിമണ്ണിലൊരുക്കണം സോഫ്റ്റ്‌വെയര്‍

എങ്ങനെയാണ് ഇത്ര ചെറിയ പ്രോഗ്രാമുകളും വേഗമേറിയ സൈറ്റുകളും വികസിപ്പിക്കുന്നത് എന്ന് പലരും ചോദിക്കാറുണ്ട്. ഉള്ളടക്കമെന്നു പറയാന്‍ ഒന്നുമില്ലാത്ത സൈറ്റുകള്‍ പോലും പതുക്കെ മാത്രം സ്ക്രീനിലെത്തുന്ന കാലത്ത് ഈ ആശ്ചര്യം സ്വാഭാവികം. കളിമണ്ണുകുഴച്ച് സോഫ്റ്റ്‌വെയറുണ്ടാക്കാനറിയുമെങ്കില്‍ ഈ ആശ്ചര്യം വഴിമാറും.

ഒന്നോര്‍ത്തുനോക്കൂ, പത്തുവര്‍ഷം മുമ്പത്തെ മികച്ച ഡെസ്ക്ടോപ്പ് കംപ്യൂട്ടറുകളേക്കാള്‍ പത്തോ നൂറോ മടങ്ങ് ശേഷിയുണ്ട് ഇന്നത്തെ ഫോണുകള്‍ക്കുപോലും. ഇന്റര്‍നെറ്റ് കണക്ഷന്റെ വേഗവും ഇതുപോലെ പലമടങ്ങായി. എന്നിട്ടും പ്രവര്‍ത്തനവേഗത്തിന് ഒരു മാറ്റവും വന്നിട്ടില്ലെങ്കില്‍ എന്താണ് കാരണം? ലഭ്യമായ സൌകര്യങ്ങളും കൂടിയല്ലോ എന്ന് വാദിക്കാം. എന്നാല്‍ മറ്റൊന്നാണ് ശരിയുത്തരം -- തെറ്റായ സോഫ്റ്റ്‌വെയര്‍ നിര്‍മാണ പാഠങ്ങള്‍.

സോഫ്റ്റ്‌വെയറിന്റെ വേഗം കൂട്ടുന്നത് രണ്ടുരീതിയിലാണ്. ഒന്ന്, മികച്ച അല്‍ഗരിതങ്ങള്‍ തെരഞ്ഞെടുക്കുക വഴി. രണ്ട്, ആവശ്യമില്ലാത്ത ഘടകങ്ങളൊന്നും സോഫ്റ്റ്‌വെയറില്‍ ഉള്‍പ്പെട്ടിട്ടില്ല എന്നുറപ്പാക്കുക വഴി. ഈ കുറിപ്പില്‍ തത്കാലം രണ്ടാമത്തെ കാര്യം മാത്രം പറയാം. കാരണം, ഭൂരിഭാഗം തുടക്കക്കാരിലും ആദ്യം മാറാനുള്ളത് ഈ പ്രശ്നമാണ്.

സോഫ്റ്റ്‌വെയര്‍ നിര്‍മാണത്തിന് പല രീതികളുണ്ട്. ചിപ്പുകളോട് സംവദിക്കുന്ന യന്ത്രഭാഷാനിര്‍ദേശങ്ങളായി അതെഴുതാം. മനുഷ്യന് കുറേക്കൂടി മനസ്സിലാകുന്ന പൈത്തണ്‍ പോലുള്ള പ്രോഗ്രാമിങ് ഭാഷകളിലെഴുതാം. നിലവിലുള്ള ആപ്പുകളെ വെറുതേ കൂട്ടിക്കെട്ടി പുതിയതൊന്നായി അവതരിപ്പിക്കാം.

ഇതില്‍ സാദ്ധ്യതയേറുന്നത് പൈത്തണ്‍ പോലുള്ള "ഹൈ ലെവല്‍" പ്രോഗ്രാമിങ് ഭാഷകളില്‍ എഴുതുമ്പോഴാണ്. എന്നാല്‍ സിയിലോ പൈത്തണിലോ ഒക്കെ ഒരു ആപ്പ് വികസിപ്പിക്കുമ്പോള്‍ ആപ്പ് ചെയ്യുന്ന മുഴുവന്‍ ജോലിയും സത്യത്തില്‍ നമ്മള്‍ എഴുതിയുണ്ടാക്കുന്നില്ല. അങ്ങനെ എല്ലാം സ്വയം എഴുതിയുണ്ടാക്കാനിരുന്നാല്‍ വൃത്തിയുള്ള ഒരു കാല്‍ക്കുലേറ്റര്‍ പോലും ഒരു ജീവിതകാലം കൊണ്ട് ഉണ്ടാക്കാനാവില്ല. അതിശയോക്തിയല്ല, അത്ര സങ്കീര്‍ണമാണ് കംപ്യൂട്ടര്‍.

സങ്കീര്‍ണത മാത്രമല്ല വിഷയം. ഒരു ബന്ധവുമില്ലാത്ത ആപ്പുകളില്‍പ്പോലും പൊതുവായ ചില കാര്യങ്ങളുണ്ട്. ഉദാഹരണത്തിന്, ഒരു കാല്‍ക്കുലേറ്ററിലും ഇമേജ് എഡിറ്ററിലും ബട്ടണുകള്‍ ആവശ്യമുണ്ട്. ഒരു വേഡ് പ്രൊസസറിനും ബ്രൌസറിനും സ്ക്രീനില്‍ ചിത്രങ്ങള്‍ കാണിക്കേണ്ടതുണ്ട്. ഒരുപാടുതരം സൈറ്റുകളില്‍ ലോഗിന്‍ സംവിധാനം വേണ്ടതുണ്ട്. ഇതെല്ലാം എന്തിന് വെവ്വേറെയെഴുതി സമയം കളയണം? പങ്കുവയ്ക്കാമല്ലോ. അതതുഘടകങ്ങള്‍ മികച്ചതും സുരക്ഷിതവുമാണെന്ന ഗുണം കൂടിയുണ്ടാവും.

ചുരുക്കിപ്പറഞ്ഞാല്‍ പൊതുവായ സംഗതികള്‍ പുനരുപയോഗിച്ചാണ് പ്രായോഗികമനോഭാവമുള്ള ഏത് സോഫ്റ്റ്‌വെയര്‍ സംരംഭവും മുന്നേറുന്നത് (അത് സ്വതന്ത്രസോഫ്റ്റ്‌വെയറായാലും അല്ലെങ്കിലും). അതിനുള്ള രണ്ടു വഴികളാണ് ലൈബ്രറികളും ഫ്രെയിംവര്‍ക്കുകളും. ഇവിടെയാണ് കളിമണ്ണും വെണ്ണക്കല്ലും കടന്നുവരുന്നത്.

മറ്റാളുകള്‍ മൂന്‍കൂട്ടിയെഴുതിവച്ച കോഡ് ശകലങ്ങളാണ് ലൈബ്രറികളില്‍ ഉണ്ടാവുക. ഉദാഹരണത്തിന്, പിങ് (പിഎന്‍ജി) ഫോര്‍മാറ്റിലുള്ള ചിത്രങ്ങള്‍ വായിച്ചെടുക്കാന്‍ libpng എന്ന ലൈബ്രറിയുണ്ട്. ജെയ്പെഗ് ഫോര്‍മാറ്റിലുള്ള ചിത്രങ്ങള്‍ വായിച്ചെടുക്കാന്‍ libjpeg ഉണ്ട്. മിക്ക ഇമേജ് വ്യൂവറുകളും എഡിറ്ററുകളും ഇത്തരം ലൈബ്രറികള്‍ ഉപയോഗിച്ചാണ് ഇത്രയേറെ ഫോര്‍മാറ്റുകള്‍ കൈകാര്യം ചെയ്യുന്നത്. ആപ്പ് നിര്‍മാതാക്കള്‍ക്ക് ഫയലിന്റെ ഘടന പോലുള്ള സൂക്ഷ്മമായ കാര്യങ്ങളില്‍ സമയം ചെലവാക്കുന്നതിനുപകരം സൌകര്യങ്ങളിലും കാണാനുള്ള ഭംഗിയിലുമെല്ലാം ശ്രദ്ധചെലുത്താം.

ഫ്രെയിംവര്‍ക്കുകള്‍ ഒരുപടികൂടി മുകളിലാണ്. ഒരു മൊത്തം ആപ്പുതന്നെ ഒറ്റ ക്ലിക്കില്‍ തയ്യാറാവുന്ന ചട്ടക്കൂടുകളാണ് പലതും. പുതിയതൊന്നും ചേര്‍ക്കേ​ണ്ടിവരില്ലെന്നല്ല. പക്ഷേ അതിനേക്കാള്‍ സമയം ചെലവാക്കേണ്ടത് ആവശ്യമില്ലാത്തത് ചെത്തിക്കളയാനാണ്. മറ്റു വാക്കുകളില്‍പ്പറഞ്ഞാല്‍, വെണ്ണക്കല്ലുകൊണ്ട് പ്രതിമയുണ്ടാക്കുന്ന പോലെയാണ് ഫ്രെയിംവര്‍ക്കുകള്‍. ലോകത്തെ എല്ലാ ശില്പവും ഒരു കല്ലിലുണ്ട്. ആവശ്യമുള്ളതൊഴിച്ച് മറ്റു ശില്പങ്ങളെല്ലാം ചെത്തിക്കളയാനാണ് അറിയേണ്ടത്.

വെണ്ണക്കല്ലുകൊണ്ട് പ്രതിമയുണ്ടാക്കുന്നതില്‍ തെറ്റൊന്നുമില്ല. ഡേവിഡും പിയത്തെയുമെല്ലാം വെണ്ണക്കല്‍പ്രതിമകളാണല്ലോ. എല്ലാ ശില്‍പിയും മൈക്കലാഞ്ജലോയല്ല എന്നതിലാണ് പ്രശ്നം. അവസാനത്തെച്ചീളും കൊത്തിക്കളയുന്നവനാണ് മൈക്കലാഞ്ജലോ. ആദ്യത്തെച്ചീളുപോലും കൊത്താനറിയാത്തവരെയാണ് നമ്മുടെ സോഫ്റ്റ്‌വെയര്‍ പാഠശാലകള്‍ വാര്‍ത്തെടുക്കുന്നത്.

അതുകൊണ്ട്, ചെറുതും വേഗമേറിയതുമായ സോഫ്റ്റ്‌വെയറാണ് വേണ്ടതെങ്കില്‍ അത്യാവശ്യമുള്ള കളിമണ്ണുമാത്രമെടുത്ത് പ്രതിമയുണ്ടാക്കുക. വെണ്ണക്കല്ലില്‍ത്തുടങ്ങാം, ആവശ്യമുള്ള ശില്പം ശിലയ്ക്കകത്തുണ്ടെന്ന് ഉറപ്പുണ്ടെങ്കില്‍. കണ്ണിന് വേണ്ടത്ര തെളിച്ചവും ഉളിക്ക് മതിയായ മൂര്‍ച്ചയുമുണ്ടെങ്കില്‍.


Tags: software, programming, libraries, frameworks, cms, opinions

Read more from Nandakumar at nandakumar.org/blog/