ഒരു ശൂന്യമായ App.js-ഉം മിന്നിമറയുന്ന ഒരു കഴ്സറും അനന്തമായ സാധ്യതകളായി തോന്നും. നിയന്ത്രണങ്ങളില്ല. എന്തുചെയ്യണമെന്ന് നിർദ്ദേശിക്കുന്ന ബോയ്ലർപ്ലേറ്റ് (boilerplate) കോഡുകളില്ല. എന്നാൽ ആ ശൂന്യമായ ക്യാൻവാസ് സ്വാതന്ത്ര്യമല്ല. അത് പൂജ്യത്തിൽ നിന്ന് പ്രപഞ്ചത്തെ വീണ്ടും നിർമ്മിക്കാനുള്ള ഒരു ക്ഷണമാണ്.
ബ്ലാങ്ക് സ്ക്രീൻ ടാക്സ് (The Blank Screen Tax)
ഒരു കമ്പൈലറും (compiler) ടെക്സ്റ്റ് എഡിറ്ററും മാത്രം ഉപയോഗിച്ച് ഒരു പ്രോജക്റ്റ് തുടങ്ങുക. ആദ്യ ദിവസം വളരെ ആവേശകരമായിരിക്കും. നിങ്ങൾ ഫോൾഡർ ഘടനയും (folder structure), പേരിടുന്ന രീതിയും (naming convention), ഡിസേബിൾ ചെയ്ത ബട്ടണുകൾക്ക് വേണ്ട കൃത്യമായ ഗ്രേ നിറവും തിരഞ്ഞെടുക്കുന്നു. മൂന്നാം ദിവസം എത്തുമ്പോഴേക്കും ആ ആവേശം കുറയുകയും യഥാർത്ഥ ജോലി ആരംഭിക്കുകയും ചെയ്യുന്നു.
ഒരു ലളിതമായ ലിസ്റ്റ് നിർമ്മിക്കുക എന്നത് വെറുമൊരു map ഫംഗ്ഷൻ എഴുതുന്ന കാര്യമല്ലെന്ന് നിങ്ങൾ തിരിച്ചറിയുന്നു. ഡാറ്റ ലോഡ് ചെയ്യുമ്പോൾ അതിന്റെ ഘടന (skeleton) എങ്ങനെയായിരിക്കണം, അത് പൾസ് ചെയ്യണോ അതോ സ്ലൈഡ് ചെയ്യണോ, ഡാറ്റ കാണുന്നതിന് മുൻപ് എത്ര സമയം കാത്തിരിക്കണം എന്നിവ നിങ്ങൾ തീരുമാനിക്കണം. സ്ക്രോൾ ചെയ്യുന്നതിനിടയിൽ നെറ്റ്വർക്ക് പരാജയപ്പെട്ടാൽ എന്തുചെയ്യണം എന്നതും നിങ്ങൾ തീരുമാനിക്കണം. അത് സ്വയമേവ വീണ്ടും ശ്രമിക്കണോ (retry)? ഒരു ബട്ടൺ കാണിക്കണോ? മുൻപത്തെ പേജ് എപ്പോഴും കാഷെ (cache) ചെയ്യണോ? രണ്ട് ആക്ടീവ് ഫിൽട്ടറുകൾ എങ്ങനെ പരസ്പരം പ്രവർത്തിക്കണം എന്നതും, ആ കോമ്പിനേഷൻ ഉപയോഗിക്കുമ്പോൾ ഫലങ്ങൾ ഒന്നും ലഭിക്കാത്ത അവസ്ഥ (empty state) എങ്ങനെയായിരിക്കണം എന്നതും നിങ്ങൾ തീരുമാനിക്കണം. പൂജ്യം ഫലങ്ങൾ ലഭിക്കുക എന്നാൽ ഉപയോക്താവിന് അത് എന്താണ് അർത്ഥമാക്കുന്നത് എന്ന് പോലും നിങ്ങൾ തീരുമാനിക്കേണ്ടി വരും.
ഇവയെ ഫോർമലൈസേഷൻ പ്രശ്നങ്ങൾ (formalization problems) എന്ന് വിളിക്കാം. ഒരു അവ്യക്തമായ ആശയത്തെ കൃത്യവും സ്ഥിരതയുള്ളതും ആവർത്തിക്കാവുന്നതുമായ ഒരു പെരുമാറ്റമാക്കി മാറ്റുന്നതാണ് സോഫ്റ്റ്വെയർ നിർമ്മാണത്തിലെ ഏറ്റവും കഠിനമായ ഭാഗം. കോഡ് എന്നത് ആ തീരുമാനങ്ങളുടെ വെറും ഒരു രേഖപ്പെടുത്തൽ മാത്രമാണ്. അതുകൊണ്ടാണ് അനന്തമായ കസ്റ്റമൈസേഷൻ (customization) എന്നത് ഒരു ഫീച്ചർ അല്ലാത്തത്. അതൊരു ടാക്സ് ആണ്, നിങ്ങൾ പ്രതീക്ഷിക്കുന്നതിനേക്കാൾ വേഗത്തിൽ വർദ്ധിച്ചുകൊണ്ടിരിക്കുന്ന ചെറിയ തീരുമാനങ്ങളുടെ രൂപത്തിലാണ് ആ ബില്ല് വരുന്നത്.
തുടർച്ചയായ തീരുമാനങ്ങൾ
ഓരോ ആർക്കിടെക്ചറൽ തീരുമാനത്തെയും ഒരു സബ്സ്ക്രിപ്ഷൻ പോലെ കാണുക. ആദ്യത്തെ ഇംപ്ലിമെന്റേഷൻ എഴുതുമ്പോൾ നിങ്ങൾ ആദ്യ ഗഡു അടയ്ക്കുന്നു. പിന്നീട് മാസമാമാസം നിങ്ങൾ അത് തുടർന്നും അടച്ചുകൊണ്ടിരിക്കണം.
ഒരു പുതിയ എഞ്ചിനീയർ വരുമ്പോൾ, സ്റ്റാൻഡേർഡ് ലൈബ്രറിക്ക് പകരം നിങ്ങൾ എന്തിനാണ് ഈ കസ്റ്റം റീട്രൈ ലോജിക് (custom retry logic) തിരഞ്ഞെടുത്തതെന്ന് ചോദിക്കുമ്പോൾ, ആർക്കും അത് ഓർമ്മയില്ലാത്ത അവസ്ഥയിൽ നിങ്ങൾ അതിന്റെ വില നൽകുന്നു. ബ്രൗസർ അപ്ഡേറ്റ് കാരണം നിങ്ങളുടെ കൈകൊണ്ട് നിർമ്മിച്ച ടച്ച് ഹാൻഡ്ലർ (touch handler) തകരാറിലാകുമ്പോൾ, ആ ത്രെഷോൾഡ് (threshold) എന്തുകൊണ്ടാണ് 48 പിക്സൽ ആയി നിശ്ചയിച്ചത് എന്ന് ആർക്കും രേഖപ്പെടുത്തിയിട്ടില്ലെങ്കിൽ നിങ്ങൾ അതിന്റെ വില നൽകുന്നു. ഒരു സെക്യൂരിറ്റി പാച്ച് കാരണം നിങ്ങളുടെ കസ്റ്റം ഓതന്റിക്കേഷൻ ഫ്ലോ (authentication flow) മാറ്റേണ്ടി വരുമ്പോൾ, റിഫ്രഷ് ടോക്കൺ റൊട്ടേഷൻ (refresh token rotation) നിങ്ങൾ മുൻകൂട്ടി കാണാത്തതുകൊണ്ട് നിങ്ങൾ അതിന്റെ വില നൽകുന്നു.
നിങ്ങൾക്ക് വേണ്ടി ഒന്നും തീരുമാനിക്കപ്പെട്ടിട്ടില്ലെങ്കിൽ, എല്ലാം നിങ്ങളുടെ പ്രശ്നമായി മാറും. നിങ്ങൾക്ക് ആവശ്യമുള്ളത് എന്തും നിർമ്മിക്കാനുള്ള സ്വാതന്ത്ര്യം എന്നത് അത് എന്നെന്നേക്കുമായി ഏറ്റെടുക്കേണ്ടി വരുന്ന ഭാരവുമായി വേർപെടുത്താൻ കഴിയില്ല. വർഷങ്ങൾക്ക് മുമ്പ് ഇൻഡസ്ട്രി പരിഹരിച്ച പാറ്റേണുകളെക്കുറിച്ച് നിങ്ങൾ ഏക അധികാരിയായി മാറുന്നു. വീട് പണിയുന്നതിന് പകരം അടിത്തറകൾ പരിപാലിക്കുന്നതിനായി നിങ്ങൾ നിങ്ങളുടെ സമയം ചെലവഴിക്കുന്നു.
AI: ഒരു വേഗതയുടെ കെണി
ആർട്ടിഫിഷ്യൽ ഇന്റലിജൻസ് ഈ സാഹചര്യം കുറയ്ക്കുന്നതിന് പകരം കൂടുതൽ അപകടകരമാക്കുന്നു. ഒരു ലാർജ് ലാംഗ്വേജ് മോഡലിന് (LLM) മുപ്പത് സെക്കൻഡിനുള്ളിൽ ഒരു പൂർണ്ണമായ ഓതന്റിക്കേഷൻ മോഡ്യൂൾ നിർമ്മിക്കാൻ കഴിയും. നിങ്ങളുടെ കോഫി തണുക്കുന്നതിന് മുമ്പ് തന്നെ അതിന് ഒരു സ്റ്റേറ്റ് ലെയർ (state layer) തയ്യാറാക്കാനും, കാഷിംഗ് സ്ട്രാറ്റജി (caching strategy) രൂപകൽപ്പന ചെയ്യാനും, നാവിഗേഷൻ ഗാർഡുകൾ (navigation guards) എഴുതാനും കഴിയും.
എന്നാൽ ഇവിടെയാണ് ചതിക്കുഴി. തീരുമാനങ്ങൾ എടുക്കുന്നതിനുള്ള ചിലവ് കുറയ്ക്കുമ്പോൾ, അവയുടെ ഉത്തരവാദിത്തം ഏറ്റെടുക്കുന്നതിനുള്ള ചിലവ് പഴയതുപോലെ തന്നെ നിലനിർത്താൻ AI-ക്ക് കഴിയുന്നു. ചരിത്രത്തിലെ മറ്റേതൊരു ടീമിനേക്കാളും വേഗത്തിൽ സാങ്കേതിക കടം (technical debt) സൃഷ്ടിക്കാൻ നിങ്ങൾക്ക് ഇപ്പോൾ കഴിയും. ഡെമോ ദിവസം കോഡ് പ്രവർത്തിക്കും. അത് ടെസ്റ്റുകളിൽ വിജയിക്കും. എന്നാൽ ആറ് മാസം കഴിഞ്ഞ്, OAuth പ്രൊവൈഡർ ഒരു എൻഡ്പോയിന്റ് (endpoint) നിർത്തലാക്കുകയോ അല്ലെങ്കിൽ സ്ലോ കണക്ഷൻ സമയത്ത് കാഷെ ഇൻവാലിഡേഷൻ ലോജിക് (cache invalidation logic) തകരാറിലാകുകയോ ചെയ്യുമ്പോൾ, നിങ്ങൾ ഒരു മെഷീന് ഏൽപ്പിച്ച തീരുമാനങ്ങളുടെ പിഴവുകൾ തിരുത്താൻ കഷ്ടപ്പെടും.
മറഞ്ഞിരിക്കുന്ന ബില്ല് എപ്പോഴും വന്നെത്തും. അത് എഞ്ചിനീയറിംഗ് മണിക്കൂറുകളിലൂടെയും, കോൺടെക്സ്റ്റ് സ്വിച്ചിംഗിലൂടെയും (context switching), വേഗതയുടെ ക്രമാനുഗതമായ കുറവിലൂടെയുമാണ് നൽകേണ്ടി വരുന്നത്.
വിരസമായവ പതിറ്റാണ്ടുകൾക്കായി വാങ്ങുക
ഒരു നല്ല ഫ്രെയിംവർക്കോ പ്ലാറ്റ്ഫോമോ ഒരു കൂട്ടല്ല. അത് സമയത്തെ വാങ്ങലാണ്.
മിക്കവാറും എല്ലാ ആധുനിക ആപ്ലിക്കേഷനുകളിലും സ്റ്റാൻഡേർഡ് ആയിട്ടുള്ള കാര്യങ്ങൾ ശ്രദ്ധിക്കുക. ഉപയോക്താക്കൾക്ക് സൈൻ ഇൻ ചെയ്യേണ്ടതുണ്ട്. ഡാറ്റ സ്ക്രീനുകൾക്കിടയിൽ മാറേണ്ടതുണ്ട്. ഇന്റർഫേസ് മന്ദഗതിയിലാകാതിരിക്കാൻ റിമോട്ട് വിവരങ്ങൾ ലോക്കലായി സംഭരിക്കേണ്ടതുണ്ട്. ആളുകൾക്ക് കോൺടെക്സ്റ്റ് നഷ്ടപ്പെടാതെ നാവിഗേറ്റ് ചെയ്യേണ്ടതുണ്ട്. ഇവ വെറും കമ്മോഡിറ്റികൾ (commodities) മാത്രമാണ്, അവ നിങ്ങളുടെ പ്രത്യേകതകളല്ല.
ഒരു പക്വതയാർന്ന ഫ്രെയിംവർക്ക് ഈ പാറ്റേണുകളെ ഒരിക്കൽ തന്നെ ഫോർമലൈസ് ചെയ്യുന്നു. അത് തീരുമാനിക്കുന്നു:
- ലോഡിംഗ് സ്റ്റേറ്റുകൾ എങ്ങനെയായിരിക്കണം എന്നും അവ എപ്പോൾ കാണപ്പെടണം എന്നും
- നെറ്റ്വർക്ക് പിശകുകൾ ഇന്റർഫേസിലേക്ക് എങ്ങനെ എത്തണം എന്നും
- രണ്ട് നാവിഗേഷൻ പാരാമീറ്ററുകൾ അല്ലെങ്കിൽ ആക്ടീവ് ഫിൽട്ടറുകൾ തമ്മിൽ സംഘർഷമുണ്ടായാൽ അവ എങ്ങനെ പരിഹരിക്കപ്പെടണം എന്നും
- അടിസ്ഥാന സേവനം അപ്ഡേറ്റ് ചെയ്യപ്പെടുമ്പോൾ ലോക്കൽ ഡാറ്റയ്ക്ക് എന്ത് സംഭവിക്കണം എന്നും
തുടർന്ന് അത് ആ പെരുമാറ്റത്തെ ഡോക്യുമെന്റ് ചെയ്യുകയും, എഡ്ജ് കേസുകൾ (edge cases) പരിശോധിക്കുകയും, നിങ്ങൾ ഉറങ്ങുന്ന സമയത്ത് പാച്ചുകൾ (patches) നൽകുകയും ചെയ്യുന്നു. നിങ്ങളുടെ ഊർജ്ജം യഥാർത്ഥത്തിൽ നിങ്ങളുടേതായ അവസാന പത്ത് ശതമാന കാര്യങ്ങൾക്കായി ഉപയോഗിക്കാൻ നിങ്ങൾക്ക് സാധിക്കുന്നു. പുതിയ രീതിയിലുള്ള ഇന്ററാക്ഷനുകൾക്കും, പ്രത്യേക ബിസിനസ് ആവശ്യങ്ങൾക്കും വേണ്ടി...
