2018 ప్రారంభం నుండి, నేను టీమ్లో లీడ్/బాస్/లీడ్ డెవలపర్ పదవిని కలిగి ఉన్నాను - మీకు ఏది కావాలంటే అది కాల్ చేయండి, కానీ విషయం ఏమిటంటే మాడ్యూల్లలో ఒకదానికి మరియు పని చేసే డెవలపర్లందరికీ నేను పూర్తిగా బాధ్యత వహిస్తాను. దానిపై. ఈ స్థానం నాకు అభివృద్ధి ప్రక్రియపై కొత్త దృక్పథాన్ని ఇస్తుంది, నేను మరిన్ని ప్రాజెక్ట్లలో పాల్గొంటున్నాను మరియు నిర్ణయం తీసుకోవడంలో మరింత చురుకుగా పాల్గొంటున్నాను. ఇటీవల, ఈ రెండు విషయాలకు ధన్యవాదాలు, అవగాహన యొక్క కొలత కోడ్ మరియు అప్లికేషన్ను ఎంత ప్రభావితం చేస్తుందో నేను అకస్మాత్తుగా గ్రహించాను.
నేను చెప్పాలనుకుంటున్న విషయం ఏమిటంటే, కోడ్ యొక్క నాణ్యత (మరియు తుది ఉత్పత్తి) కోడ్ను రూపకల్పన చేసే మరియు వ్రాసే వ్యక్తులు వారు ఏమి చేస్తున్నారో ఎంత అవగాహనతో ఉన్నారనే దానితో దగ్గరి సంబంధం కలిగి ఉంటుంది.
మీరు ప్రస్తుతం ఆలోచిస్తూ ఉండవచ్చు, “ధన్యవాదాలు, క్యాప్. అయితే, మీరు సాధారణంగా ఏమి వ్రాస్తున్నారో అర్థం చేసుకోవడం మంచిది. లేకపోతే, మీరు ఏకపక్ష కీలను కొట్టడానికి కోతుల సమూహాన్ని కూడా అద్దెకు తీసుకోవచ్చు మరియు దానిని వదిలివేయవచ్చు. మరియు మీరు ఖచ్చితంగా సరైనవారు. తదనుగుణంగా, మీరు ఏమి చేస్తున్నారో సాధారణ ఆలోచన కలిగి ఉండటం అవసరమని మీరు గ్రహించారని నేను దానిని మంజూరు చేస్తున్నాను. దీనిని సున్నా స్థాయి అవగాహన అని పిలుస్తారు మరియు మేము దానిని వివరంగా విశ్లేషించము. మీరు ఖచ్చితంగా ఏమి అర్థం చేసుకోవాలి మరియు మీరు ప్రతిరోజూ తీసుకునే నిర్ణయాలను అది ఎలా ప్రభావితం చేస్తుందో మేము వివరంగా పరిశీలిస్తాము. ఈ విషయాలు నాకు ముందే తెలిసి ఉంటే, అది నాకు చాలా సమయం వృధా మరియు సందేహాస్పద కోడ్ను ఆదా చేసి ఉండేది.
మీరు దిగువ కోడ్ని ఒక్క పంక్తిని చూడనప్పటికీ, అధిక-నాణ్యత, వ్యక్తీకరణ కోడ్ను వ్రాయడానికి ఇక్కడ చెప్పబడిన ప్రతిదానికి చాలా ప్రాముఖ్యత ఉందని నేను ఇప్పటికీ నమ్ముతున్నాను.
అవగాహన యొక్క మొదటి స్థాయి: ఇది ఎందుకు పని చేయదు?
డెవలపర్లు సాధారణంగా తమ కెరీర్లో చాలా ముందుగానే ఈ స్థాయికి చేరుకుంటారు, కొన్నిసార్లు ఇతరుల సహాయం లేకుండా కూడా - కనీసం నా అనుభవంలో అయినా. మీరు బగ్ రిపోర్ట్ని అందుకున్నారని ఊహించుకోండి: అప్లికేషన్లోని కొన్ని ఫంక్షన్ పనిచేయదు, దాన్ని పరిష్కరించాల్సిన అవసరం ఉంది. మీరు ఎలా కొనసాగుతారు?
ప్రామాణిక పథకం ఇలా కనిపిస్తుంది:
- సమస్యకు కారణమయ్యే కోడ్ ముక్కను కనుగొనండి (దీన్ని ఎలా చేయాలో ప్రత్యేక అంశం, లెగసీ కోడ్ గురించి నా పుస్తకంలో నేను కవర్ చేస్తున్నాను)
- ఈ స్నిప్పెట్కి మార్పులు చేయండి
- బగ్ పరిష్కరించబడిందని మరియు రిగ్రెషన్ లోపాలు సంభవించలేదని నిర్ధారించుకోండి
ఇప్పుడు రెండవ పాయింట్పై దృష్టి పెడదాం - కోడ్లో మార్పులు చేయడం. ఈ ప్రక్రియకు రెండు విధానాలు ఉన్నాయి. మొదటిది ప్రస్తుత కోడ్లో సరిగ్గా ఏమి జరుగుతుందో పరిశీలించడం, లోపాన్ని గుర్తించి దాన్ని పరిష్కరించడం. రెండవది: అనుభూతి ద్వారా తరలించండి - షరతులతో కూడిన స్టేట్మెంట్ లేదా లూప్కి +1ని జోడించండి, చెప్పండి, కావలసిన దృష్టాంతంలో ఫంక్షన్ పనిచేస్తుందో లేదో చూడండి, ఆపై మరేదైనా ప్రయత్నించండి మరియు ప్రకటన అనంతం.
మొదటి విధానం సరైనది. స్టీవ్ మెక్కానెల్ తన పుస్తకం కోడ్ కంప్లీట్లో వివరించినట్లు (నేను బాగా సిఫార్సు చేస్తున్నాను), ప్రతిసారీ మనం కోడ్లో ఏదైనా మార్చినప్పుడు, అది అప్లికేషన్ను ఎలా ప్రభావితం చేస్తుందో మనం నమ్మకంగా అంచనా వేయగలగాలి. నేను మెమరీ నుండి కోట్ చేస్తున్నాను, కానీ బగ్ఫిక్స్ మీరు ఊహించిన విధంగా పని చేయకపోతే, మీరు చాలా అప్రమత్తంగా ఉండాలి మరియు మీరు మీ పూర్తి కార్యాచరణ ప్రణాళికను ప్రశ్నించాలి.
చెప్పబడినదానిని సంగ్రహించడానికి, కోడ్ నాణ్యతను దిగజార్చకుండా మంచి బగ్ పరిష్కారాన్ని నిర్వహించడానికి, మీరు కోడ్ యొక్క మొత్తం నిర్మాణం మరియు నిర్దిష్ట సమస్య యొక్క మూలం రెండింటినీ అర్థం చేసుకోవాలి.
అవగాహన యొక్క రెండవ స్థాయి: ఇది ఎందుకు పని చేస్తుంది?
ఈ స్థాయి మునుపటి కంటే చాలా తక్కువ సహజంగా గ్రహించబడింది. నేను, అనుభవం లేని డెవలపర్గా ఉన్నప్పుడు, నా బాస్కి కృతజ్ఞతలు తెలుపుతూ నేర్చుకున్నాను మరియు కొత్తవారికి విషయం యొక్క సారాంశాన్ని పదేపదే వివరించాను.
ఈసారి, మీరు ఒకేసారి రెండు బగ్ రిపోర్ట్లను అందుకున్నారని ఊహించుకుందాం: మొదటిది దృష్టాంతం A గురించి, రెండవది దృష్టాంతం B గురించి. రెండు దృశ్యాలలో, ఏదో తప్పు జరుగుతుంది. దీని ప్రకారం, మీరు మొదట మొదటి బగ్ను పరిష్కరించండి. లెవెల్ XNUMX అవగాహన కోసం మేము అభివృద్ధి చేసిన సూత్రాలను ఉపయోగించి, మీరు సమస్యకు సంబంధించిన కోడ్ను లోతుగా త్రవ్వి, దృష్టాంతంలో Aలో ఎలా ప్రవర్తించేలా అప్లికేషన్ను ప్రవర్తిస్తుందో గుర్తించండి మరియు మీరు ఆశించిన ఫలితాన్ని అందించే సహేతుకమైన సర్దుబాట్లను చేయండి. . అంతా గొప్పగా జరుగుతోంది.
అప్పుడు మీరు దృష్టాంతం Bకి వెళతారు. మీరు లోపాన్ని ప్రేరేపించే ప్రయత్నంలో దృష్టాంతాన్ని పునరావృతం చేస్తారు, కానీ-ఆశ్చర్యం! - ఇప్పుడు ప్రతిదీ తప్పక పని చేస్తుంది. మీ అంచనాను నిర్ధారించడానికి, బగ్ Aలో పని చేస్తున్నప్పుడు మీరు చేసిన మార్పులను రద్దు చేయండి మరియు బగ్ B తిరిగి వస్తుంది. మీ బగ్ఫిక్స్ రెండు సమస్యలను పరిష్కరించింది. అదృష్ట!
మీరు దీన్ని అస్సలు లెక్క చేయలేదు. మీరు సినారియో Aలో లోపాన్ని పరిష్కరించడానికి ఒక మార్గాన్ని కనుగొన్నారు మరియు ఇది దృష్టాంతం B కోసం ఎందుకు పని చేసిందో తెలియదు. ఈ దశలో, రెండు పనులు విజయవంతంగా పూర్తయ్యాయని భావించడం చాలా ఉత్సాహం కలిగిస్తుంది. ఇది చాలా తార్కికంగా ఉంది: లోపాలను తొలగించడమే పాయింట్, కాదా? కానీ పని ఇంకా పూర్తి కాలేదు: దృష్టాంతంలో మీ చర్యలు ఎందుకు లోపాన్ని సరిచేశాయో మీరు ఇంకా గుర్తించాలి. ఎందుకు? ఎందుకంటే ఇది తప్పు సూత్రాలపై పనిచేస్తుండవచ్చు, ఆపై మీరు మరొక మార్గం కోసం వెతకాలి. అటువంటి సందర్భాలలో కొన్ని ఉదాహరణలు ఇక్కడ ఉన్నాయి:
- పరిష్కారం B దోషానికి అనుగుణంగా లేనందున, అన్ని అంశాలను పరిగణనలోకి తీసుకుంటే, మీరు తెలియకుండానే C ఫంక్షన్ విచ్ఛిన్నం కావచ్చు.
- అదే ఫంక్షన్కి సంబంధించి ఎక్కడో ఒక చోట మూడో బగ్ దాగి ఉండే అవకాశం ఉంది మరియు B దృష్టాంతంలో సిస్టమ్ యొక్క సరైన ఆపరేషన్ కోసం మీ బగ్ఫిక్స్ దానిపై ఆధారపడి ఉంటుంది. ఇప్పుడు అంతా బాగానే ఉంది, కానీ ఏదో ఒక రోజు ఈ మూడవ బగ్ గమనించి పరిష్కరించబడుతుంది. అప్పుడు B దృష్టాంతంలో లోపం మళ్లీ సంభవిస్తుంది మరియు అక్కడ మాత్రమే ఉంటే మంచిది.
ఇవన్నీ కోడ్కు గందరగోళాన్ని జోడిస్తాయి మరియు ఏదో ఒక రోజు మీ తలపై పడతాయి - చాలావరకు చాలా అసందర్భ సమయంలో. ప్రతిదీ ఎందుకు పని చేస్తుందో అర్థం చేసుకోవడానికి మిమ్మల్ని మీరు బలవంతం చేయడానికి మీ సంకల్ప శక్తిని కూడగట్టుకోవాలి, కానీ అది విలువైనది.
అవగాహన యొక్క మూడవ స్థాయి: ఇది ఎందుకు పని చేస్తుంది?
నా ఇటీవలి అంతర్దృష్టి ఖచ్చితంగా ఈ స్థాయికి సంబంధించినది మరియు నేను ఇంతకు ముందు ఈ ఆలోచనకు వచ్చి ఉంటే బహుశా అది నాకు చాలా ప్రయోజనం కలిగించేది.
దీన్ని మరింత స్పష్టంగా చెప్పడానికి, ఒక ఉదాహరణను చూద్దాం: మీ మాడ్యూల్ ఫంక్షన్ Xకి అనుకూలంగా ఉండాలి. మీకు ఫంక్షన్ Xతో ప్రత్యేకంగా పరిచయం లేదు, కానీ దానికి అనుకూలంగా ఉండాలంటే మీరు F ఫ్రేమ్వర్క్ని ఉపయోగించాలని మీకు చెప్పబడింది. Xతో అనుసంధానించే మాడ్యూల్స్ ఖచ్చితంగా అతనితో పని చేస్తాయి.
మీ కోడ్ దాని జీవితంలో మొదటి రోజు నుండి F ఫ్రేమ్వర్క్తో అస్సలు సంబంధం కలిగి లేదు, కాబట్టి దీన్ని అమలు చేయడం అంత సులభం కాదు. ఇది మాడ్యూల్లోని కొన్ని భాగాలకు తీవ్రమైన పరిణామాలను కలిగిస్తుంది. అయితే, మీరు అభివృద్ధిలో మునిగిపోతారు: మీరు వారాలపాటు కోడ్ రాయడం, పరీక్షించడం, పైలట్ వెర్షన్లను విడుదల చేయడం, అభిప్రాయాన్ని పొందడం, రిగ్రెషన్ లోపాలను పరిష్కరించడం, ఊహించలేని సమస్యలను కనుగొనడం, వాస్తవానికి అంగీకరించిన గడువులను చేరుకోకపోవడం, మరికొంత కోడ్ రాయడం, పరీక్షించడం, ఫీడ్బ్యాక్ కమ్యూనికేషన్ పొందడం, రిగ్రెషన్ లోపాలను సరిదిద్దడం - F ఫ్రేమ్వర్క్ను అమలు చేయడానికి ఇవన్నీ.
మరియు ఏదో ఒక సమయంలో మీరు అకస్మాత్తుగా గ్రహించవచ్చు - లేదా ఎవరైనా నుండి వినవచ్చు - బహుశా ఫ్రేమ్వర్క్ F మీకు ఫీచర్ Xతో అనుకూలతను అందించదు.బహుశా ఆ సమయం మరియు కృషి అంతా పూర్తిగా తప్పు చేయబడి ఉండవచ్చు.
నేను బాధ్యత వహించే ప్రాజెక్ట్లో పని చేస్తున్నప్పుడు ఒకసారి ఇలాంటిదే జరిగింది. ఇలా ఎందుకు జరిగింది? X ఫంక్షన్ అంటే ఏమిటి మరియు ఇది Framework Fకి ఎలా సంబంధించినది అనే దాని గురించి నాకు చాలా తక్కువ అవగాహన ఉన్నందున. నేను ఏమి చేయాలి? డెవలప్మెంట్ టాస్క్ను కేటాయించిన వ్యక్తిని ఇతర మాడ్యూల్ల కోసం చేసిన వాటిని పునరావృతం చేయడం కంటే లేదా X ఫీచర్ చేయాల్సిన అవసరం ఉందని దాని కోసం ఉద్దేశించిన చర్య ఎలా ఆశించిన ఫలితానికి దారితీస్తుందో స్పష్టంగా వివరించమని అడగండి.
ఈ ప్రాజెక్ట్ యొక్క అనుభవం నాకు కొన్ని పనులు చేయమని ఎందుకు అడుగుతున్నామో స్పష్టంగా అర్థం చేసుకునేంత వరకు అభివృద్ధి ప్రక్రియను ప్రారంభించడానికి నిరాకరించడం నాకు నేర్పింది. పూర్తిగా తిరస్కరించండి. మీరు ఒక పనిని స్వీకరించినప్పుడు, సమయాన్ని వృథా చేయకుండా వెంటనే దానిని చేపట్టడం మొదటి ప్రేరణ. కానీ "మేము అన్ని వివరాలను పొందే వరకు ప్రాజెక్ట్ను స్తంభింపజేయండి" విధానం మాగ్నిట్యూడ్ ఆర్డర్ల ద్వారా వృధా సమయాన్ని తగ్గిస్తుంది.
వారు మీపై ఒత్తిడి తెచ్చేందుకు ప్రయత్నించినప్పటికీ, పనిని ప్రారంభించమని మిమ్మల్ని బలవంతం చేయడానికి, దీనికి హేతువు మీకు అర్థం కానప్పటికీ, ప్రతిఘటించండి. మొదట, మీకు అలాంటి పని ఎందుకు ఇవ్వబడుతుందో గుర్తించండి మరియు లక్ష్యానికి ఇది సరైన మార్గం కాదా అని నిర్ణయించుకోండి. నేను ఇవన్నీ కష్టపడి నేర్చుకోవలసి వచ్చింది - నా ఉదాహరణ దీన్ని చదివే వారికి జీవితాన్ని సులభతరం చేస్తుందని నేను ఆశిస్తున్నాను.
నాల్గవ స్థాయి అవగాహన: ???
ప్రోగ్రామింగ్లో నేర్చుకోవడానికి ఎల్లప్పుడూ ఎక్కువ ఉంటుంది మరియు నేను అర్థం చేసుకునే అంశం యొక్క ఉపరితలంపై మాత్రమే గీసినట్లు నేను నమ్ముతున్నాను. కోడ్తో పని చేసిన సంవత్సరాలలో మీరు ఏ ఇతర స్థాయి అవగాహనలను కనుగొన్నారు? కోడ్ మరియు అప్లికేషన్ నాణ్యతపై సానుకూల ప్రభావం చూపే మీరు ఏ నిర్ణయాలు తీసుకున్నారు? ఏ నిర్ణయాలు తప్పు అని తేలింది మరియు మీకు విలువైన పాఠం నేర్పింది? వ్యాఖ్యలలో మీ అనుభవాన్ని పంచుకోండి.
మూలం: www.habr.com