ഗേറ്റ് 198 തവണ പ്രവർത്തിച്ചു. ഞാൻ അതിനെ "ജോലി ചെയ്യുന്നു" എന്ന് വിളിച്ചു.

മോശം കോഡുകളെ തടയാൻ ഞാൻ ഒരു ഗേറ്റ് നിർമ്മിച്ചു. അത് 198 കോഡുകളെ തടഞ്ഞു. ഗേറ്റ് നന്നായി പ്രവർത്തിക്കുന്നു എന്നാണ് ഞാൻ കരുതിയത്. ഉയർന്ന ബ്ലോക്ക് കൗണ്ട് കണ്ടപ്പോൾ ഞാൻ വിജയിച്ചതായി തോന്നി.

പിന്നീട് ഞാൻ യഥാർത്ഥ കേസുകൾ പരിശോധിച്ചു. ആ ബ്ലോക്കുകളിൽ പലതും തെറ്റുകളാണെന്ന് ഞാൻ തിരിച്ചറിഞ്ഞു. ഗേറ്റ് നല്ല കോഡുകളെയാണ് നിരസിച്ചിരുന്നത്. ഘടന അസാധാരണമായി തോന്നുന്നു എന്നതുകൊണ്ട് മാത്രം എല്ലാ നിബന്ധനകളും പാലിക്കുന്ന ജോലികളെ അത് തടഞ്ഞു.

ഞാൻ ഒരു സാധാരണ തെറ്റ് ചെയ്തു. പ്രവർത്തനത്തെ (activity) ശരിതത്വവുമായി (correctness) ഞാൻ തെറ്റിദ്ധരിച്ചു.

ഒരു ഗേറ്റിന് ഒരേസമയം വളരെ സജീവമായും എന്നാൽ വളരെ തെറ്റായ രീതിയിലും പ്രവർത്തിക്കാൻ കഴിയും. ഉയർന്ന ബ്ലോക്ക് കൗണ്ട് അതിന്റെ മൂല്യം തെളിയിക്കുന്നില്ല. അത് ഗേറ്റ് പ്രവർത്തിക്കുന്നു എന്ന് മാത്രമേ കാണിക്കുന്നുള്ളൂ.

ഒരു ഗേറ്റ് യഥാർത്ഥത്തിൽ അതിന്റെ ജോലി ചെയ്യുന്നുണ്ടോ എന്ന് എങ്ങനെ തിരിച്ചറിയാമെന്ന് ഞാൻ പഠിച്ച രീതി ഇതാ:

  • ബ്ലോക്കുകൾക്കുള്ള കാരണങ്ങൾ പരിശോധിക്കുക. അവ യഥാർത്ഥ പിഴവുകൾ കണ്ടെത്തുന്നുണ്ടോ? അതോ ഉപരിപ്ലവമായ പാറ്റേണുകളിൽ മാത്രം തടസ്സപ്പെടുന്നുണ്ടോ?
  • റീട്രൈകൾ (retries) ശ്രദ്ധിക്കുക. ഒരു റീട്രൈ യഥാർത്ഥ പ്രശ്നം പരിഹരിക്കുന്നുണ്ടോ? അതോ ഗേറ്റിനെ തൃപ്തിപ്പെടുത്താൻ വേണ്ടി കോഡ് അതിന്റെ രൂപം മാറ്റുകയാണോ ചെയ്യുന്നത്? മെച്ചപ്പെടാതെ കോഡ് രൂപം മാത്രം മാറ്റുകയാണെങ്കിൽ, ആ ഗേറ്റ് ഒരു പ്രശ്നമാണ്.
  • അന്തിമമായ ഫലം (final convergence) പരിശോധിക്കുക. ജോലി അതിന്റെ ഗുണമേന്മ കൊണ്ട് തന്നെ ഒടുവിൽ പാസാവുന്നുണ്ടോ? ജോലി പാസാകാൻ വേണ്ടി നിങ്ങൾക്ക് ഗേറ്റിന്റെ നിയന്ത്രണങ്ങൾ ലഘൂകരിക്കേണ്ടി വരുന്നുണ്ടെങ്കിൽ, ആ ഗേറ്റ് തെറ്റായിരുന്നു.

നന്നായി പ്രവർത്തിക്കുന്ന ഒരു ഗേറ്റ് സിസ്റ്റത്തെ മെച്ചപ്പെടുത്തുന്നു. എന്നാൽ മോശം ഗേറ്റ് സിസ്റ്റത്തെ ഗേറ്റിന് അനുസൃതമായി മാറാൻ പ്രേരിപ്പിക്കുന്നു. ഇതിന്റെ ഫലമായി, യഥാർത്ഥത്തിൽ നല്ല കോഡിന് പകരം വാലിഡേറ്ററെ (validator) തൃപ്തിപ്പെടുത്താൻ വേണ്ടി രൂപപ്പെടുത്തിയ കോഡാണ് നിങ്ങൾക്ക് ലഭിക്കുന്നത്.

ആകെ എണ്ണം (total count) നോക്കുന്നത് നിർത്തുക. ആകെ എണ്ണം കാണിക്കുന്നത് പ്രവർത്തനത്തെയാണ്. സാമ്പിൾ കാണിക്കുന്നത് സത്യത്തെയാണ്.

നിങ്ങളുടെ ഗേറ്റുകൾ, ലിന്ററുകൾ (linters) അല്ലെങ്കിൽ ഫിൽട്ടറുകൾ തടയുന്നവയുടെ ഒരു സാമ്പിൾ ഓഡിറ്റ് ചെയ്യുക. മോശം ഇൻപുട്ടുകൾ ഉപയോഗിച്ച് മാത്രം നിങ്ങൾ പരിശോധിക്കുകയാണെങ്കിൽ, അനുകൂലമായ ഉത്തരങ്ങൾ മാത്രം ലഭിക്കുന്ന രീതിയിലുള്ള ചോദ്യങ്ങൾ മാത്രമേ നിങ്ങൾ ചോദിക്കുന്നുള്ളൂ. നല്ലതും എന്നാൽ അസാധാരണവുമായ ഇൻപുട്ടുകളെ അവ അനുവദിക്കുന്നുണ്ടോ എന്നും നിങ്ങൾ പരിശോധിക്കണം.

നിങ്ങൾ നിങ്ങളുടെ ബ്ലോക്ക് കൗണ്ടുകൾ ഓഡിറ്റ് ചെയ്യാറുണ്ടോ? ഒരു നിരസിക്കൽ ന്യായമാണോ എന്ന് നിങ്ങൾ എങ്ങനെ തീരുമാനിക്കുന്നു?

Source: https://dev.to/josephyeo/the-gate-fired-198-times-i-called-it-working-45fk

Optional learning community: https://t.me/GyaanSetuAi