ഏറ്റവും മികച്ച കോഡ് എന്നത് നിങ്ങൾ ഒരിക്കലും എഴുതാത്ത കോഡാണ്. മറ്റൊരാളുടെ ആവേശം വർഷങ്ങളോളം പരിപാലിക്കേണ്ടി വരുന്നതുവരെ ഈ ആശയം മടിക്ക് നൽകുന്ന ഒരു ഒഴികഴിവ് പോലെ തോന്നും. സോഫ്റ്റ്വെയർ നിർമ്മാണം ഒരു നിർമ്മാണ പ്രവർത്തനമായി തോന്നാമെങ്കിലും, അത് ഒരു തോട്ടം പരിപാലിക്കുന്നത് പോലെയാണ്. തനിയെ വിട്ടാൽ, നിങ്ങൾ ആഗ്രഹിച്ചാലും ഇല്ലെങ്കിലും ഒരു തോട്ടം വളരും. കോഡിന്റെ കാര്യവും അതുതന്നെയാണ്. എപ്പോൾ പ്ലാൻ ചെയ്യുന്നത് നിർത്തണമെന്ന് അറിയുന്നതാണ് യഥാർത്ഥ വൈദഗ്ധ്യം.
നിങ്ങളുടെ കോഡ് ഒരു ബാധ്യതയാണ്
നിങ്ങൾ കമ്മറ്റ് ചെയ്യുന്ന ഓരോ വരിയും തുടർച്ചയായ ചില ഉത്തരവാദിത്തങ്ങൾ സൃഷ്ടിക്കുന്നു. രാത്രി വൈകിയുള്ള ഒരു പ്രശ്നസമയത്ത് നിങ്ങൾ അത് വീണ്ടും വായിക്കേണ്ടി വരും. സ്ട്രിംഗ് ഹാൻഡ്ലിംഗിൽ മാറ്റം വരുത്തുന്ന ഒരു മൈനർ വേർഷൻ അപ്ഡേറ്റ് വന്നാൽ നിങ്ങൾ അത് ടെസ്റ്റ് ചെയ്യേണ്ടി വരും. പ്രൊഡക്ഷനിൽ നിന്നുള്ള ലോഗുകൾക്ക് അർത്ഥമില്ലാതാകുമ്പോൾ നിങ്ങൾ അത് ഡിബഗ് ചെയ്യേണ്ടി വരും. കഴിഞ്ഞ ആഴ്ച വന്ന ഒരു സഹപ്രവർത്തകനോടോ, അല്ലെങ്കിൽ പന്ത്രണ്ട് മാസങ്ങൾക്ക് ശേഷം ആ കോഡിന്റെ പശ്ചാത്തലം മറന്നുപോയ നിങ്ങളുടെ തന്നെയോടോ നിങ്ങൾ അത് വിശദീകരിക്കേണ്ടി വരും.
ഇത് കോഡ് സങ്കീർണ്ണമാക്കാനുള്ള വാദമല്ല. ഇതൊരു ജ്യാമിതീയ സത്യമാണ്. ബഗുകൾ ഒളിച്ചിരിക്കാൻ ഇടം ആവശ്യമാണ്. നിങ്ങളുടെ കോഡിന്റെ വ്യാപ്തി എത്രത്തോളം കുറവാണോ, അത്രത്തോളം പരാജയങ്ങൾ സംഭവിക്കാനുള്ള സാധ്യത കുറയും. എൺപത് വരികളും ആറ് നെസ്റ്റഡ് കണ്ടീഷനുകളുമുള്ള ഒരു ഫംഗ്ഷൻ വായിക്കാൻ പ്രയാസമുള്ളത് മാത്രമല്ല; അത് നിങ്ങളെ അപ്രതീക്ഷിതമായി കുടുക്കാൻ സാധ്യതയുമുണ്ട്. നിയന്ത്രണം എന്നത് പരിശ്രമത്തിന്റെ അഭാവമല്ല. എഴുതാത്ത കോഡിന് ഒരു പിഴവും (defects) ഉണ്ടാകില്ല എന്ന തിരിച്ചറിവാണ് അത്.
ബുദ്ധിപരമായ നീക്കങ്ങൾ ഒരു ബാധ്യതയാകുമ്പോൾ
ചില ബിസിനസ്സ് നിയമങ്ങൾ ഉപയോഗിച്ച് ഒരു ഓർഡർ ടോട്ടൽ കണക്കാക്കുന്ന കാര്യം പരിഗണിക്കുക: ഡിസ്കൗണ്ട് നൽകുക, ടാക്സ് ഉള്ളവ പരിശോധിക്കുക, നീക്കം ചെയ്തവ ഒഴിവാക്കുക. ഒരു ഡെവലപ്പർ ഇതിനായി ഒറ്റ എക്സ്പ്രഷൻ എഴുതുന്നു. അത് ഒരു സങ്കീർണ്ണമായ ഫിൽട്ടർ ചെയിനിലൂടെ ലിസ്റ്റ് പ്രോസസ്സ് ചെയ്യുന്നു, ഒരു ഹെൽപ്പർ ലൈബ്രറി ഉപയോഗിക്കുന്നു, റിസൾട്ട് ഫോൾഡ് ചെയ്യുന്നു, ഒടുവിൽ തുക നൽകുന്നു. അത് വളരെ ചുരുങ്ങിയതാണ്. ഒരുപക്ഷേ അക്കാദമിക് രീതിയിൽ അത് മനോഹരമായിരിക്കാം. എന്നാൽ അത് വായിക്കാൻ, ആ ഹെൽപ്പർ ലൈബ്രറിയുടെ ഇംപ്ലിസിറ്റ് കാസ്റ്റിംഗും, സ്ട്രീമിനുള്ളിലെ ഓപ്പറേഷൻ ക്രമവും, ബിസിനസ്സ് ലോജിക്കും ഒരേസമയം മനസ്സിലാക്കേണ്ടി വരും. നിങ്ങൾക്ക് അതിന്റെ ഇടയിൽ ഒരു ബ്രേക്ക് പോയിന്റ് വെക്കാൻ കഴിയില്ല. ചെയിൻ തകരാതെ ഒരു ലോഗ് സ്റ്റേറ്റ്മെന്റ് ചേർക്കാനും കഴിയില്ല. ആ കോഡ് പേജിൽ ചെറുതാണെങ്കിലും മനസ്സിലാക്കാൻ വളരെ പ്രയാസമാണ്.
മറ്റൊരു ഡെവലപ്പർ ഒരു സാധാരണ ലൂപ്പ് എഴുതുന്നു. അവർ ഒരു റണ്ണിംഗ് ടോട്ടൽ പ്രഖ്യാപിക്കുന്നു, ഐറ്റങ്ങൾ പരിശോധിക്കുന്നു, ടാക്സ് വേണോ എന്ന് തീരുമാനിക്കാൻ ഒരു സാധാരണ if സ്റ്റേറ്റ്മെന്റ് ഉപയോഗിക്കുന്നു. കോഡ് വരികൾ കൂടുതലായിരിക്കാം, പക്ഷേ അതിന്റെ ഉദ്ദേശ്യം വ്യക്തമാണ്. അഞ്ച് അബ്സ്ട്രാക്ഷനുകൾ തലയിൽ വെക്കാതെ തന്നെ നിങ്ങൾക്ക് അത് മുകളിൽ നിന്ന് താഴേക്ക് വായിക്കാം. ഒരു ഡിബഗ്ഗറിൽ നിങ്ങൾക്ക് അത് സ്റ്റെപ്പ് ബൈ സ്റ്റെപ്പ് പരിശോധിക്കാം. മുഴുവൻ എക്സ്പ്രഷനും മാറ്റാതെ തന്നെ നാലാമത്തെ വരിയിൽ നിങ്ങൾക്ക് ലോഗിംഗ് ചേർക്കാം.
ബുദ്ധിപരമായ കോഡുകൾ ഒരു പുൾ റിക്വസ്റ്റിൽ (pull request) പത്ത് മിനിറ്റോളം മിടുക്കനായി തോന്നും. ലളിതമായ കോഡ് ബോറടിപ്പിക്കുന്നതായി തോന്നും, എന്നാൽ പുലർച്ചെ രണ്ട് മണിക്ക് പ്രശ്നങ്ങൾ പരിഹരിക്കുമ്പോൾ നിങ്ങൾക്ക് വേണ്ടതും ആ ബോറടിപ്പിക്കുന്ന ലളിതമാണ്. നിങ്ങളുടെ ലക്ഷ്യം വ്യക്തതയാണ്, ബുദ്ധി പ്രകടിപ്പിക്കലല്ല.
സിസ്റ്റങ്ങൾക്ക് ഘടനയാണ് വേണ്ടത്, വീരന്മാരെയല്ല
ഈ തത്വം ആർക്കിടെക്ചറിലേക്കും വ്യാപിപ്പിക്കാം. ഒരു ബുദ്ധിപരമായ സിസ്റ്റം ഒരുപക്ഷേ കൈകൊണ്ട് എഴുതിയ കൺസെൻസസ് ലോജിക്കിനെയും, പ്രത്യേകമായി തയ്യാറാക്കിയ ഓർക്കസ്ട്രേഷൻ സ്കരിപ്റ്റുകളെയും, ഒരു എഞ്ചിനീയർക്ക് മാത്രം അറിയാവുന്ന ഡോക്യുമെന്റേഷൻ ഇല്ലാത്ത കാഷിംഗ് ഷോർട്ട്കട്ടുകളെയും ആശ്രയിച്ചേക്കാം. അങ്ങനെയുള്ള ഒരു സിസ്റ്റം തനിയെ പ്രവർത്തിക്കില്ല; അത് ആ സിസ്റ്റം നിലനിർത്തുന്ന വ്യക്തിയുടെ നിരന്തരമായ ബുദ്ധിശക്തിയെ ആശ്രയിച്ചിരിക്കും. ആ വ്യക്തി അവധിയിലോ പുതിയ ജോലിയിലോ പോയാൽ സിസ്റ്റം തകരാൻ തുടങ്ങും.
എന്നാൽ മികച്ച രീതിയിൽ രൂപകൽപ്പന ചെയ്ത സിസ്റ്റങ്ങൾ ഘടനയെയും നിയന്ത്രണങ്ങളെയും ആശ്രയിക്കുന്നു. അവ തെറ്റായ ഡാറ്റ നിരസിക്കുന്ന ഡാറ്റാബേസ് സ്കീമകളും, അതിരുകൾ നിർവചിക്കുന്ന API കോൺട്രാക്റ്റുകളും, ഡിപ്ലോയ്മെന്റിന് മുമ്പ് പിഴവുകൾ കണ്ടെത്തുന്ന ടൈപ്പ് സിസ്റ്റങ്ങളും, ഉദ്ദേശിച്ച പാത വ്യക്തമാക്കുന്ന മോഡ്യൂൾ വേർതിരിവുകളും ഉപയോഗിക്കുന്നു. അവ സ്ഥിരത നിലനിർത്താൻ അസാധാരണമായ പരിശ്രമങ്ങൾ ആവശ്യമില്ല. തളർന്ന മനുഷ്യർ കൈകാര്യം ചെയ്യുമ്പോഴും തകരാതെ നിൽക്കാൻ അവ രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു; കാരണം പ്രൊഡക്ഷനിൽ സോഫ്റ്റ്വെയർ പ്രവർത്തിപ്പിക്കുന്നത് തളർന്ന മനുഷ്യരാണ്.
AI വർദ്ധിപ്പിക്കുന്ന പ്രശ്നങ്ങൾ
ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസ് കോഡിംഗ് അസിസ്റ്റന്റുകൾ ഈ പാഠത്തിന്റെ പ്രാധാന്യം വർദ്ധിപ്പിക്കുന്നു. ഈ ടൂളുകൾ വേഗത്തിൽ ടെക്സ്റ്റ് നിർമ്മിക്കുന്നു. നിങ്ങൾ ഒരു ലളിതമായ പ്രശ്നം നൽകിയാൽ, അവ പലപ്പോഴും സങ്കീർണ്ണമായ ഒരു പരിഹാരം നൽകും. നിങ്ങളുടെ പക്കൽ നിലവിലുള്ള യൂട്ടിലിറ്റികൾക്ക് പകരം പുതിയവ ഇംപോർട്ട് ചെയ്യാനും, നിങ്ങളുടെ ഡൊമെയ്നിൽ ഇല്ലാത്ത എഡ്ജ് കേസുകൾ കൈകാര്യം ചെയ്യാനും, നിങ്ങൾ രണ്ട് വർഷം മുമ്പ് ഉപേക്ഷിച്ച ഒരു ഫ്രെയിംവർക്ക് പതിപ്പിലെ രീതികൾ ഉപയോഗിക്കാനും അവ ശ്രമിക്കും. AI ഉടനടിയുള്ള ജോലിയെ മാത്രം നോക്കുന്നു. എന്നാൽ നിങ്ങൾ മുഴുവൻ സിസ്റ്റത്തെയും നോക്കണം.
ദീർഘകാല പ്രത്യാഘാതങ്ങൾ പരിഗണിക്കാതെ എല്ലാ നിർദ്ദേശങ്ങളും സ്വീകരിച്ചാൽ, കോഡ് ജനറേഷൻ അമിതമായ വളർച്ചയ്ക്ക് (inflation) കാരണമാകും. കംപൈൽ ചെയ്യാനും ടെസ്റ്റുകൾ പാസാകാനും കഴിയുന്നതും എന്നാൽ ആർക്കും ശരിക്കും മനസ്സിലാകാത്തതുമായ കോഡുകൾ കൊണ്ട് നിങ്ങളുടെ റിപ്പോസിറ്ററി നിറയും. അപകടം വലിയ സിന്റാക്സ് എററുകളല്ല. അവ റിവ്യൂവിൽ പിടിക്കപ്പെടും. അപകടം കോഡ്ബേസിന്റെ ക്രമാനുഗതമായ കനം കൂടുന്നതാണ്; അവിടെ ഓരോ ഫയലും ഒറ്റപ്പെട്ട നിലയിൽ നോക്കുമ്പോൾ ശരിയാണെന്ന് തോന്നുമെങ്കിലും, ആകെ മൊത്തം നോക്കുമ്പോൾ ഒരു മനുഷ്യന്റെ തലച്ചോറിന് ഉൾക്കൊള്ളാൻ കഴിയാത്ത വിധം അത് സങ്കീർണ്ണമാകും. ഇതാണ് എഞ്ചിനീയറിംഗ് വേഗതയെ ഇല്ലാതാക്കുന്നത്. ഒരു വലിയ തകർച്ചയിലൂടെയല്ല, മറിച്ച് ആർക്കും പൂർണ്ണമായി മനസ്സിലാകാത്ത കാര്യങ്ങളിൽ തൊടാൻ ഭയപ്പെടുന്നതുകൊണ്ട് ആരും നീക്കം ചെയ്യാൻ തയ്യാറാകാത്ത വസ്തുക്കളുടെ നിശബ്ദമായ ശേഖരണത്തിലൂടെയാണ് ഇത് സംഭവിക്കുന്നത്.
ഡിലീഷൻ ഒരു ഡിസൈൻ നൈപുണ്യമാണ്
മികച്ച എഞ്ചിനീയർമാർ മറ്റുള്ളവരേക്കാൾ വേഗത്തിൽ ടൈപ്പ് ചെയ്തുകൊണ്ടല്ല തങ്ങളെ തെളിയിക്കുന്നത്. ലളിതത തിരഞ്ഞെടുക്കുന്നതിലൂടെയും, കൂട്ടിച്ചേർക്കുന്നതിനേക്കാൾ ഉപരിയായി നീക്കം ചെയ്യുന്നതിനെ (deletion) തിരഞ്ഞെടുക്കുന്നതിലൂടെയുമാണ് അവർ വിജയിക്കുന്നത്. കോഡ് നീക്കം ചെയ്യുന്നതിന് അത് കൃത്യമായി മനസ്സിലാക്കേണ്ടതുണ്ട്. ഡാറ്റാ ഫ്ലോ ട്രാസ് ചെയ്യുകയും, ആ ഫീച്ചറിനെ വിളിക്കുന്ന മറ്റ് ഭാഗങ്ങൾ ഇല്ലെന്ന് ഉറപ്പുവരുത്തുകയും, ബിസിനസ്സ് ആവശ്യങ്ങൾ മാറിക്കഴിഞ്ഞുവെന്ന് പരിശോധിക്കുകയും വേണം. കൂട്ടിച്ചേർക്കുന്നതിനേക്കാൾ പ്രയാസമാണ് നീക്കം ചെയ്യുന്നത്, കാരണം അതിന് കൃത്യമായ ഉറപ്പ് ആവശ്യമാണ്.
ടീമുകൾ പലപ്പോഴും പുതിയ ഫീച്ചറുകൾ പുറത്തിറക്കുന്നതിനെയും വലിയ പുൾ റിക്വസ്റ്റുകൾ കൊണ്ടുവരുന്നവരെയും ആഘോഷിക്കാറുണ്ട്. എന്നാൽ നാലായിരം വരികളുള്ള ഉപയോഗശൂന്യമായ ലോജിക് നീക്കം ചെയ്ത് സിസ്റ്റത്തെ കൂടുതൽ വേഗതയുള്ളതും വിശകലനം ചെയ്യാൻ എളുപ്പവുമാക്കുന്ന എഞ്ചിനീയറെ ആഘോഷിക്കുന്ന ടീമുകൾ കുറവാണ്. എന്നാൽ ആ നെഗറ്റീവ് ലൈൻ കൗണ്ട് പലപ്പോഴും സ്ഥാപനത്തിന്റെ ഭാവിക്ക് വലിയ സേവനമാണ്.
ചിലവേറിയ ഭാഗം
കോഡ് ഇപ്പോൾ വിലകുറഞ്ഞതാണ്. ആർക്കും നിമിഷങ്ങൾക്കുള്ളിൽ പേജുകൾ കണക്കിന് കോഡ് നിർമ്മിക്കാം. എന്നാൽ വിലകൂടിയ വിഭവം വ്യക്തതയാണ് (clarity). ഒരു സിസ്റ്റം മനസ്സിലാക്കാൻ എളുപ്പമുള്ള രീതിയിൽ നിലനിർത്താൻ സമയവും വിവേചനബുദ്ധിയും നിയന്ത്രണവും ആവശ്യമാണ്. യഥാർത്ഥ എഞ്ചിനീയറിംഗ് നടക്കുന്നത് എഡിറ്റിംഗിലാണ്, അല്ലാതെ ഡ്രാഫ്റ്റിംഗിലല്ല.
കുറച്ച് എഴുതുക. കൂടുതൽ നീക്കം ചെയ്യുക. ലളിതമായി ഡിസൈൻ ചെയ്യുക.
