સોફ્ટવેર બનાવવું એ જાહેરમાં પ્રદર્શન કરવા જેવું લાગી શકે છે. ઇન્ટરનેટ લોન્ચ, સ્ક્રીનશોટ્સ અને ચેન્જલોગના મુદ્દાઓને પ્રોત્સાહન આપે છે. તેથી જ્યારે કોઈ ડેવલપર આખા સત્ર દરમિયાન કોઈ પ્રોજેક્ટ પર કામ કરે અને બતાવવા માટે કંઈ દેખાય નહીં, ત્યારે તેને એ દિવસનો બગાડ માનવાની વૃત્તિ હોય છે. Food Blog Platform નો તાજેતરનો ડેવ લોગ તેનાથી વિપરીત સાબિત કરે છે. પ્રદર્શિત કરવા માટે કોઈ નવી રેસીપી નહોતી, કોઈ રિડિઝાઇન કરેલા કાર્ડ્સ નહોતા, યુઝર્સ માટે ક્લિક કરવા માટે કોઈ વધારાના બટનો નહોતા. ફક્ત એવો કોડ હતો જેને વિખેરી નાખવામાં આવ્યો, તપાસવામાં આવ્યો અને પહેલા કરતા વધુ સારી રીતે ફરીથી જોડવામાં આવ્યો.
આ એ અદ્રશ્ય કામ છે જે લાંબા ગાળાના પ્રોજેક્ટ્સને જીવંત રાખે છે.
ફીચર્સને ખ્યાતિ મળે છે; રિફેક્ટરિંગ કામ ચાલુ રાખે છે
જ્યારે તમે ફૂડ બ્લોગ પ્લેટફોર્મનું સંચાલન કરો છો, ત્યારે તેની સપાટી સરળ લાગે છે. યુઝર્સ રેસીપી પોસ્ટ કરે છે, ફોટા અપલોડ કરે છે અને કેટેગરી મુજબ બ્રાઉઝ કરે છે. જોકે, તેની નીચે, તમે ઇમેજ પાઇપલાઇન્સ, સામગ્રી અને સૂચનાઓ વચ્ચેના ડેટાબેઝ સંબંધો, સર્ચ ઇન્ડેક્સ અને કેશિંગ લેયર્સનું સંચાલન કરી રહ્યા છો. સમય જતાં, ઝડપી સુધારાઓ (quick fixes)નો ઢગલો થઈ જાય છે. ત્રણ અલગ-અલગ ફાઇલોમાં કોપી કરેલું હેલ્પર ફંક્શન. એક ડેટાબેઝ ક્વેરી જે દસ પોસ્ટ માટે યોગ્ય હતી પરંતુ જ્યારે તમે હજાર પર પહોંચો છો ત્યારે ધીમી પડી જાય છે. CSS જે વ્યવસ્થિત રીતે શરૂ થયું હતું પરંતુ પાંચ ઇમરજન્સી પેચને કારણે તે એક ભુલભુલામણી બની ગયું.
રિફેક્ટરિંગ એટલે તે અસ્તવ્યસ્તતાનો સામનો કરવો. તેનો અર્થ એ હોઈ શકે કે ડુપ્લીકેટ લોજિકને એકીકૃત કરવું જેથી રેસીપી એડિટિંગ ફોર્મ અને એડમિન ડેશબોર્ડ સમાંતર સંસ્કરણો જાળવવાને બદલે એક જ વેલિડેશન લેયરનો ઉપયોગ કરે. તેનો અર્થ એ હોઈ શકે કે ઇમેજ કેવી રીતે પ્રોસેસ થાય છે તેને સરળ બનાવવું જેથી પેજ દરેક વખતે રીલોડ થાય તે બદલે કમ્પ્રેશન રૂટિન ફક્ત એક જ વાર ચાલે. અથવા તેમાં કોડબેઝનું પુનર્ગઠન સામેલ હોઈ શકે છે જેથી પાછળથી નવો કન્ટેન્ટ પ્રકાર ઉમેરવા માટે છ અસંબંધિત ડિરેક્ટરીઓમાં શોધખોળ કરવાની જરૂર ન પડે.
આમાંથી કંઈ પણ યુઝર ઇન્ટરફેસમાં દેખાતું નથી. સાઇટ પર આવનાર મુલાકાતી "ક્વેરી ઓપ્ટિમાઇઝ્ડ" અથવા "કમ્પોનન્ટ ડીકપલ્ડ" લખેલું બેનર નહીં જુએ. પરંતુ જ્યારે સાઇટ ઝડપથી લોડ થશે ત્યારે તેઓ તે અનુભવશે. જ્યારે કોઈ નવું ફીચર વિનંતી કર્યાના ત્રણ અઠવાડિયાને બદલે ત્રણ દિવસ પછી દેખાય છે, ત્યારે તેઓ તે નોંધશે. ડેવલપરે આજે નવી ક્ષમતાઓ ઉમેરી નથી. તેમણે માર્ગ સાફ કર્યો છે જેથી કોડબેઝ સાથે લડ્યા વિના ક્ષમતાઓ ઉમેરી શકાય.
ક્લીન કોડ એ ભવિષ્યની નિષ્ફળતા સામેનું રોકાણ છે
એક મહિનાથી વધુ સમય સુધી ચાલતા દરેક પ્રોજેક્ટમાં ઘર્ષણ (friction) વધતું જાય છે. તમે વિચારનું પરીક્ષણ કરવા માટે ઝડપી પ્રોટોટાઇપ બનાવો છો. પછી ખરેખર યુઝર્સ આવે છે. પછી તમારે ઓથેન્ટિકેશન લેયરની જરૂર પડે છે, અને પછી મોડરેશન ક્યુની, અને પછી મોબાઈલ લેઆઉટની. આમાંથી દરેક ઉમેરો જે માળખું પહેલેથી અસ્તિત્વમાં છે તેમાં જોડવામાં આવે છે. નિયમિત જાળવણી વિના, આર્કિટેક્ચર એવા ઘર જેવું લાગવા લાગે છે જ્યાં દરેક નવું રૂમ એક અલગ વ્યક્તિ દ્વારા ડિઝાઇન કરવામાં આવ્યું હોય જેણે ક્યારેય ફ્લોર પ્લાન જોયો ન હોય.
ટેકનિકલ ડેબ્ટ એ શિસ્તની નિષ્ફળતા નથી. તે કંઈક વાસ્તવિક મોકલવા માટે લીધેલા સમાધાન (trade-offs)નું કુદરતી પરિણામ છે. જોખમ એ નથી કે તમારો કોડ અપૂર્ણ છે. જોખમ એ છે કે તેને એટલા લાંબા સમય સુધી અપૂર્ણ છોડી દેવો કે એક વેરિએબલ બદલવાથી ત્રણ અસંબંધિત ફીચર્સ તૂટી જાય. તમે સર્ચ બારને અડકતા ડરો છો કારણ કે છેલ્લી વાર જ્યારે તમે પ્રયાસ કર્યો હતો, ત્યારે ટેગ સિસ્ટમ તૂટી ગઈ હતી. તમે મીલ-પ્લાનર વિજેટ ઉમેરવાનું મોકૂફ રાખો છો કારણ કે તમે જાણો છો કે ડેટાબેઝ સ્કીમા એક એવી ગૂંચ બની ગઈ છે જેને ઉકેલવામાં કલાકો લાગશે.
રિફેક્ટરિંગમાં એક દિવસ વિતાવવો એ વ્યાજ તમને ડૂબાડી નાખે તે પહેલાં તે દેવું ચૂકવવા જેવું છે. તે નાની સમસ્યાઓને મોટી સમસ્યાઓમાં રૂપાંતરિત થતી અટકાવે છે. જ્યારે Food Blog Platform આખરે તેનું આગામી મુખ્ય ફીચર ઉમેરશે, ત્યારે ડેવલપરે બરડ (brittle) કોડની આસપાસ ફરવું નહીં પડે. તેઓ નવું લોજિક લખશે, તેને ક્લીન ઇન્ટરફેસમાં પ્લગ કરશે અને આગળ વધશે. તે રોકાણ પરનું વળતર (return on investment) છે.
નાના પગલાં, સાચું શિક્ષણ
સોફ્ટવેર ડેવલપમેન્ટ વિશે એક એવી માન્યતા છે કે પ્રગતિ એટલે પ્રતિભાશાળી બ્રેકથ્રુ અને મેરેથોન કોડિંગ સત્રો જે રાતોરાત બધું જ ફરીથી લખી નાખે છે. મોટાભાગના કામ કરતા ડેવલપર્સ તમને કહેશે કે તે એક કલ્પના છે. સાચી પ્રગતિ મંગળવારના બપોરના એ 'ડિફ' (diff) જેવી લાગે છે જ્યાં ત્રણ ફંક્શન ટૂંકા થયા, એક બિનજરૂરી ડિપેન્ડન્સી દૂર કરવામાં આવી, અને એક મૂંઝવણભર્યું વેરિએબલ નામ બદલવામાં આવ્યું જેથી આગામી વાંચનાર ખરેખર સમજી શકે કે તે શું કરે છે.
Food Blog Platform નો ડેવ લોગ આ લયને સંપૂર્ણ રીતે પકડે છે. સોફ્ટવેર બનાવવું એ નાના, સતત સુધારાઓ વિશે છે. તમે દરેક પડકારમાંથી શીખો છો. કદાચ આજે પડકાર એ સમજવાનો હતો કે શા માટે એક ચોક્કસ મોડ્યુલ બીજા પર આટલું નિર્ભર બની ગયું હતું. કદાચ એ સમજવું હતું કે બે અઠવાડિયા પહેલા લીધેલું શોર્ટકટ પહેલેથી જ બચાવેલા સમય કરતા વધુ સમય ખર્ચવાનું શરૂ કરી દીધું છે. દરેક કમિટ પ્રોજેક્ટને વધુ સારો બનાવે છે, ભલે તે કમિટ જેટલું બનાવે છે તેના કરતા વધુ ડિલીટ કરે.
આ અભિગમ તમારી પ્રેરણાને પણ જાળવી રાખે છે. મોટા પાયે ફરીથી લખવું થકવી દે તેવું અને જોખમી હોય છે. તે જૂની ભૂલો સુધારતી વખતે નવી ભૂલો પણ ઊભી કરી શકે છે. ક્રમશઃ રિફેક્ટરિંગ, પૂર્ણ.
