स्वतःच्याच कॅल्क्युलेटरशी विसंगत असलेले एक उदाहरण
मी घर सुधारणा खर्चाच्या (home improvement cost) कॅल्क्युलेटरसाठी एक वेबसाइट चालवतो.
प्रत्येक पेजवर खर्च चार ठिकाणी दाखवला जातो:
- एक इंटरअॅक्टिव्ह विजेट (interactive widget).
- एक स्टॅटिक संदर्भ तक्ता (static reference table).
- मजकुरातील लिखित उदाहरणे.
- एक FAQ विभाग.
मला एक मोठा बग (bug) आढळला. एका लिखित उदाहरणात प्रकल्पाचा खर्च $६२,३०० सांगितला होता. विजेटमध्ये त्याच प्रकल्पाचा खर्च $५६,७७९ दाखवला होता.
त्यामध्ये $५,५०० चा फरक होता.
हे आकडे योगायोगाने आलेले नव्हते. ते वेगवेगळ्या सुप्त गृहितकांमधून (hidden assumptions) आले होते. लिखित मजकुरात नवीन HVAC युनिट गृहीत धरले होते. विजेटमध्ये सध्याची यंत्रणाच वापरली जाईल असे गृहीत धरले होते. दोन्ही गोष्टी योग्य होत्या, पण त्यांच्यात समन्वय नव्हता.
ही एक सामान्य चूक आहे. जेव्हा तुम्ही एकच तथ्य दोन वेगवेगळ्या ठिकाणी साठवता, तेव्हा त्यांच्यात तफावत निर्माण होते. तुम्ही केवळ मजकूर (content) डुप्लिकेट करत नाही आहात, तर तुम्ही डेटा (data) डुप्लिकेट करत आहात.
मी 'source-first' नावाच्या नियमाने हे सुधारले. याचे दोन भाग आहेत.
भाग एक: खर्च फक्त एकाच ठिकाणी अस्तित्वात असावा.
मी मजकूर आणि तक्त्यांमध्ये आकडे टाईप करणे थांबवले. आता, कॅल्क्युलेटर फंक्शन (calculator function) हा एकमेव स्रोत आहे. बिल्ड प्रक्रियेदरम्यान (build process), तक्ते आणि लिखित उदाहरणे थेट त्या फंक्शनमधून आकडे घेतात. जर फंक्शन बदलले, तर पेजवरील प्रत्येक आकडा आपोआप बदलतो. आकडे एकाच मूल्याचे असल्याने त्यात तफावत असणे शक्य नाही.
भाग दोन: प्रत्येक आकड्याने त्याचा उगम (origin) दर्शवला पाहिजे.
खर्चाचा डेटा हा कायमस्वरूपी तथ्य नसतो. तो कालबाह्य होतो. मी प्रत्येक गणनेमध्ये एक छोटा डेटा ऑब्जेक्ट (data object) जोडला आहे. तो खालील गोष्टी दर्शवतो:
- वापरलेले परिमाण (scenario).
- डेटाचा स्रोत.
- तो ज्या तारखेला वापरला गेला.
- डेटाची पुनरावलोकन कधी केले पाहिजे.
यामुळे डेटा अचूक राहतो. जर मूळ डेटा चुकीचा असेल, तर संपूर्ण साइट चुकीची असेल. पण किमान साइटमध्ये सुसंगतता (consistency) असेल. वापरकर्त्याला विसंगती लगेच लक्षात येते आणि त्यामुळे विश्वास उडतो.
धडा साधा आहे:
- जर पेजवरील दोन ठिकाणी एकच आकडा दिसत असेल, तर एकाने तो 'इंपोर्ट' (import) करावा. तो पुन्हा टाईप करू नका.
- डेटा सिंक (sync) करण्यासाठी तुमच्या बिल्ड प्रक्रियेचा वापर करा. यामुळे शिस्तीची समस्या तांत्रिकदृष्ट्या अशक्य बनवली जाते.
- फंक्शन आधीच मोजत असलेले आकडे स्वतः हाताने लिहिणे थांबवा.
मी आकडे लिहिण्याऐवजी ते हटवण्यात एक दिवस घालवला. माझा कोडबेस (codebase) आता लहान झाला आहे आणि तो माझ्या वापरकर्त्यांशी खोटे बोलत नाही.
स्रोत: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9