"హాయ్, అమిగో!"
"హాయ్, బిలాబో!"
"ఈ రోజు నేను ప్రోగ్రామ్లు సాధారణంగా ఎలా అభివృద్ధి చేయబడతాయో మీకు చెప్పబోతున్నాను."
"20వ శతాబ్దంలో, ఆధునిక IT ప్రారంభ దశలో ఉన్నప్పుడు, ప్రోగ్రామింగ్ అనేది నిర్మాణం లేదా తయారీ వంటిదని అందరూ భావించారు."
"సాధారణంగా విషయాలు ఇలా జరుగుతాయి:"
" కస్టమర్ తనకు అవసరమైన ప్రోగ్రామ్ రకాన్ని వివరిస్తాడు - అది ఏమి చేయాలి మరియు ఎలా చేయాలి."
" వ్యాపార విశ్లేషకులు అతని మాట వింటారు మరియు అతను చెప్పిన దాని ఆధారంగా ప్రోగ్రామ్ అవసరాల పూర్తి జాబితాను తయారు చేస్తారు."
"అప్పుడు ప్రాజెక్ట్ మేనేజర్లు ఈ అవసరాలను పనులుగా విభజిస్తారు మరియు ఏ ప్రోగ్రామర్ ఏ పనిని మరియు ఏ క్రమంలో చేస్తారో కూడా నిర్ణయిస్తారు."
"అప్పుడు ప్రోగ్రామర్లు పనికి వచ్చేవారు. కొన్నిసార్లు వారు చాలా సంవత్సరాలు పని చేస్తారు(!)."
"అవి పూర్తయ్యాక, టెస్టర్లకు ప్రోగ్రామ్ ఇవ్వబడింది."
" పరీక్షకులు ప్రోగ్రామ్ యొక్క ప్రతి ఆవశ్యకతలను పరిశీలిస్తారు, అవి అమలు చేయబడిందని మరియు ప్రోగ్రామ్ అనుకున్నట్లుగా పని చేస్తుందని ధృవీకరించాలి."
"ఏదైనా తప్పు జరిగితే, టెస్టర్లు బగ్లను లాగ్ చేసి ప్రోగ్రామర్లకు పంపుతారు."
"అప్పుడు ప్రోగ్రామర్లు బగ్లను పరిష్కరిస్తారు మరియు స్థిరమైన ప్రోగ్రామ్ను పరీక్షకులకు తిరిగి పంపుతారు. మరియు చక్రం పునరావృతమవుతుంది."
"ప్రధాన బగ్లు పరిష్కరించబడినప్పుడు, ప్రోగ్రామ్ కస్టమర్కు ఇవ్వబడింది."
"నిజంగా విషయాలు అలా జరిగాయి?"
"సరే, నేను చాలా సరళీకృతం చేసాను, కానీ అది ఎలా జరిగిందో దానికి చాలా దగ్గరగా ఉంది."
"మరియు ఒక ప్రాజెక్ట్ నిజంగా పూర్తి కావడానికి ఒకటిన్నర నుండి రెండు సంవత్సరాలు పట్టవచ్చు?"
"కొన్నిసార్లు ప్రాజెక్ట్ యొక్క డెవలప్మెంట్ చాలా పొడవుగా ఉంటే, వారు దానిని విడివిడిగా విడుదల చేస్తారు. ప్రతి 3-6 నెలలకు, డెవలపర్లు ప్రోగ్రామ్ యొక్క కార్యాచరణలో ఒక నిర్దిష్ట భాగాన్ని సృష్టించాలి, పరీక్షించాలి, దానిలోని అన్ని బగ్లను పరిష్కరించాలి మరియు దానిని వారికి చూపించాలి కస్టమర్."
"మొదట, తద్వారా అతను తన అభిప్రాయాలను పంచుకోగలడు. మరియు రెండవది, మరియు మరింత ముఖ్యంగా, అతను ప్రోగ్రామ్ అభివృద్ధి కోసం చెల్లిస్తూనే ఉంటాడు."
"చెల్లిస్తూనే ఉన్నారా?"
"అప్పట్లో, డెవలప్మెంట్ అనుకున్నదానికంటే 2-3 రెట్లు ఎక్కువ సమయం తీసుకుంటుంది. మరియు ప్రోగ్రామర్లకు తరచుగా గంటకు డబ్బు చెల్లించడం వలన, ప్రోగ్రామ్ 2-3 రెట్లు ఎక్కువ ఖరీదుగా మారింది. ఇంకేముంది, ప్రయోజనాలు కూడా తగ్గించబడ్డాయి. అన్నింటికంటే, ఈ రోజు కస్టమర్ ఏమి కోరుకుంటున్నారు. 3 సంవత్సరాలలో $100,000 అవసరం ఉండకపోవచ్చు - ముఖ్యంగా ధర కంటే మూడు రెట్లు."
"కస్టమర్లు తరచుగా చెల్లించడానికి నిరాకరించారా?"
"అవును. తర్వాత వారు కాంట్రాక్టుకు జరిమానాలు జోడించడం ప్రారంభించారు, కానీ ఇది పరిస్థితిని మెరుగుపర్చలేదు. సాఫ్ట్వేర్ అభివృద్ధి కొనసాగుతూనే ఉంది. మరియు వారు కోరుకున్నప్పటికీ దాని గురించి ఎవరూ ఏమీ చేయలేరు."
"కానీ ఎందుకు?"
"సరే, ముందుగా, ప్రణాళికా దశలో చాలా తక్కువగా తెలుసు. చాలా తరచుగా, ప్రారంభంలో, ప్రోగ్రామర్లు ఎదుర్కొనే సమస్యలను ఎవరూ ఊహించలేరు."
"అయితే అనుభవజ్ఞులైన ప్రోగ్రామర్లు ప్రతిదీ ముందుగా చూడగలిగారు, సరియైనదా?"
"ప్రోగ్రామింగ్ ఒక ప్రత్యేకమైన వృత్తి అని మీరు చూడగలరా."
"ఒక సాధారణ కార్మికుడు తరచూ అదే పనిని పదే పదే చేస్తాడు. వాచ్మేకర్లు వాచీలు తయారు చేస్తారు, వంట చేసేవారు, ఉపాధ్యాయులు బోధిస్తారు, వైద్యులు చికిత్స చేస్తారు."
"ఈ నిపుణులలో ప్రతి ఒక్కరు ప్రాథమికంగా రోజూ అదే పనిని చేస్తారు. ఫలితంగా, వారు తమ ఉద్యోగాల్లో మెరుగ్గా మరియు మెరుగవుతున్నారు."
"ప్రోగ్రామింగ్లో, విధానం భిన్నంగా ఉంటుంది. ప్రోగ్రామర్ ప్రతిరోజూ అదే పనిని ఎదుర్కొన్న వెంటనే, అతను దానిని నిర్వహించడానికి ఒక ఫంక్షన్, మాడ్యూల్ లేదా ప్రోగ్రామ్ను వ్రాస్తాడు మరియు మళ్లీ దానికి తిరిగి రాడు."
"ప్రతి ప్రోగ్రామర్ సాధారణంగా ప్రతి పనిని అతని లేదా ఆమె జీవితకాలంలో ఒకసారి పరిష్కరిస్తాడు."
"విషయాలను కనిపెట్టే శాస్త్రవేత్తలు లేదా డిజైన్ ఇంజనీర్లు వంటివి."
"అవును, ప్రాజెక్ట్లో చాలా ముఖ్యమైన పాత్ర ఏమిటి?"
"హ్మ్, దానికి నేను ఎలా సమాధానం చెప్పాలి. ఏది ముఖ్యమైనదో చెప్పడం చాలా సులభం, కానీ అతి ముఖ్యమైనది గుర్తించడం కష్టం."
" టెస్టర్ యొక్క ప్రాధమిక పని ( Q uality A హామీ, QA ) ప్రోగ్రామ్ యొక్క స్థితిని పర్యవేక్షించడం మరియు బగ్లను వెంటనే నివేదించడం. ఒక టెస్టర్ ఎంత త్వరగా బగ్లను కనుగొంటే, దాన్ని పరిష్కరించవచ్చు. మంచి టెస్టర్ ఉత్పత్తి నాణ్యతను ప్రభావితం చేస్తుంది. ఒక మంచి ప్రోగ్రామర్ చేస్తాడు ."
"ప్రోగ్రామర్ వారి స్వంత ప్రోగ్రామ్లను ఎందుకు పరీక్షించలేరు. అన్నింటికంటే, వారు ఏమి చేస్తారో మరియు పని చేయకూడదో టెస్టర్ల కంటే వారికి బాగా తెలియదా?"
"ఒక మంచి ప్రోగ్రామర్ కేవలం మంచి టెస్టర్గా ఉండలేడు. ప్రోగ్రామర్కు ప్రోగ్రామ్ ఎలా బాగా పనిచేస్తుందో తెలుసు, కాబట్టి అతను లేదా ఆమె దానిని ఎల్లప్పుడూ ఒక నిర్దిష్ట మార్గంలో ఉపయోగిస్తాడు. సాధారణ వినియోగదారులకు విరుద్ధంగా ప్రోగ్రామ్ను వారు ఇష్టపడే విధంగా ఉపయోగించుకుంటారు. "
"అదనంగా, టెస్టర్లు ఇంకా పని చేయని వాటిని పరీక్షించరు. టెస్టర్ ఇప్పటికే దాదాపుగా పని చేస్తున్నట్లు ప్రోగ్రామర్ చెప్పిన ప్రోగ్రామ్ యొక్క కార్యాచరణ లేదా భాగాలను పరీక్షిస్తారు."
"మరియు టెస్టర్ ఆ ఫంక్షనాలిటీలో టన్నుల కొద్దీ బగ్లను కనుగొన్నప్పుడు మరియు ప్రోగ్రామర్ వాటిని పరిష్కరించినప్పుడు, ఉత్పత్తి వాస్తవానికి పరిపూర్ణతకు దగ్గరగా ఉంటుంది."
" ప్రోగ్రామర్ యొక్క ప్రాథమిక విధి ( S oftware D eveloper E ngineer, D eveloper , SDE ) కొత్త కార్యాచరణను అమలు చేయడం. లేదా, మరింత సరళంగా చెప్పాలంటే, అతనికి లేదా ఆమెకు కేటాయించిన పనులను నిర్వహించడం. ప్రోగ్రామర్లకు కొత్త ఫీచర్లతో పనులు కేటాయించబడినప్పుడు , వారు వాటిని నిర్వహిస్తారు. వారికి బగ్లను కేటాయించినప్పుడు, వారు బగ్లను పరిష్కరిస్తారు."
"కానీ కొన్నిసార్లు చాలా సవాలుగా ఉండే పనులు ఉన్నాయి, ఉదాహరణకు, ప్రోగ్రామ్ లేదా దానిలోని భాగాల కోసం నిర్మాణాన్ని రూపొందించండి. ప్రతిపాదిత నిర్మాణం ఎంత మెరుగ్గా ఉంటే, భవిష్యత్తులో పనులు చేయడం అంత సులభం అవుతుంది."
"సమస్య ఏమిటంటే, వాస్తుశిల్పాన్ని ప్రారంభంలోనే ఎంచుకోవాలి, కానీ మీరు అభివృద్ధి మధ్యలో ఉన్నంత వరకు మీరు సరైన నిర్మాణాన్ని ఎంచుకున్నారా అనేది స్పష్టంగా తెలుస్తుంది."
"అదనంగా, ఆర్కిటెక్చర్ విజయవంతమైతే మరియు ప్రోగ్రామ్ గొప్పగా మారితే, కస్టమర్ బహుశా ప్రోగ్రామ్ యొక్క కొత్త వెర్షన్ల కోసం దీనిని ఉపయోగించాలనుకుంటాడు."
"నేను పొందుతున్నది ఇక్కడ ఉంది."
"మీరు ఏ నిర్మాణాన్ని ఎంచుకున్నా, ఆర్కిటెక్చర్ పరిగణనలోకి తీసుకోని మార్పులు, చేర్పులు మరియు కొత్త ఫీచర్ల సమూహం ఎల్లప్పుడూ ఉంటుంది."
"ఇదిగో మంచి ఉదాహరణ."
"ఒక కస్టమర్ మిమ్మల్ని 5-అంతస్తుల భవనాన్ని నిర్మించమని అడుగుతాడు, కాబట్టి మీరు ఒక నిర్మాణాన్ని డిజైన్ చేసి ఇంటిని నిర్మించండి."
"అప్పుడు కస్టమర్ మరొక కథనాన్ని జోడించమని అడుగుతాడు, ఆపై మరొకటి, మరియు మొదలైనవి."
"కానీ మొదటి అంతస్తు గోడలు అంత బరువు కోసం రూపొందించబడలేదు మరియు పునాది కూడా లేదు. కాబట్టి ప్రతిదీ మళ్లీ చేయాలి."
"అయితే 5-అంతస్తుల భవనం పూర్తయిన తర్వాత, కస్టమర్ వెంటనే తనకు 50 అంతస్తుల భవనం కావాలని నిర్ణయించుకుంటే?"
"ఇప్పటికే ఉన్న నిర్మాణాన్ని కూల్చివేయడం మరియు మొదటి నుండి ప్రతిదీ పునర్నిర్మించడం సులభం అవుతుంది ..."
"అయితే వాస్తు శాస్త్రానికి సంబంధించి నా దగ్గర ఒక సలహా ఉంది."
"అప్లికేషన్ ఆర్కిటెక్చర్ మొదటి మరియు అన్నిటికంటే అనువైనదిగా ఉండాలి, అంటే మీరు అప్లికేషన్లో సగం తిరిగి చేయాలని నిర్ణయించుకుంటే మీరు మొదటి నుండి ప్రారంభించాల్సిన అవసరం లేదు. ఈ రకమైన నిర్మాణాన్ని సాధారణంగా ఫ్లెక్సిబుల్ మరియు మాడ్యులర్ అంటారు . "
" ప్రాజెక్ట్ మేనేజర్ యొక్క ప్రాథమిక పని నిర్ణయాలు తీసుకోవడం. ప్రాజెక్ట్ మేనేజర్ పెద్ద చిత్రాన్ని చూసి ఆ దృక్పథం ఆధారంగా నిర్ణయాలు తీసుకునే వ్యక్తి."
"అభివృద్ధి సమయంలో ఒక నిర్దిష్ట పని ప్రణాళిక ప్రకారం పూర్తి చేయబడదని స్పష్టమవుతుందని అనుకుందాం. ప్రాజెక్ట్ మేనేజర్ ఇలా చేయవచ్చు:"
" a) టాస్క్ని సవరించడానికి కస్టమర్తో చర్చలు జరపడానికి ప్రయత్నించండి"
" బి) పనికి ఎక్కువ సమయం కేటాయించండి"
" సి) ఇతర ప్రాజెక్ట్ల నుండి మరింత అనుభవజ్ఞులైన ప్రోగ్రామర్లను తీసుకురండి."
"మరియు అనేక ఇతర అవకాశాలు ఉన్నాయి."
"ప్రతి ఎంపికకు మీరు ఏదైనా త్యాగం చేయవలసి ఉంటుంది మరియు ఈ త్యాగాల నుండి వచ్చే మొత్తం నష్టాలను తగ్గించడం మేనేజర్ యొక్క పని. "
"ఉదాహరణకు, పోటీదారులు లీడ్ ప్రోగ్రామర్కి రెండు రెట్లు ఎక్కువ డబ్బును అందించి దొంగిలించారని అనుకుందాం."
"ప్రాజెక్ట్ మేనేజర్ చేయగలరు:"
" a) ఏమీ చేయవద్దు. ప్రోగ్రామర్ వెళ్లిపోతాడు మరియు ప్రాజెక్ట్ వెనుకబడి జరిమానాలు విధించే అవకాశం ఉంది."
" బి) అతని జీతం రెట్టింపు చేయండి. అప్పుడు జట్టులోని ప్రతి ఒక్కరూ కూడా పెంచాలని కోరుకుంటారు. మీరు వారందరికీ ఎక్కువ డబ్బు ఇస్తే, ప్రాజెక్ట్ ఖర్చులు పెరుగుతాయి మరియు అది లాభదాయకంగా మారవచ్చు."
" సి) మీరు ఆలోచించే ఇతర ఎంపిక."
"అలాగా."
"చెడ్డ ప్రాజెక్ట్ మేనేజర్తో, మంచి బృందం సాధారణంగా ప్రాజెక్ట్ను పొడిగిస్తుంది, కానీ ఎల్లప్పుడూ కాదు."
"సగటు ప్రోగ్రామర్ల బృందంతో మంచి మేనేజర్ దాదాపు ఎల్లప్పుడూ అద్భుతమైన ప్రోగ్రామర్ల బృందంతో చెడ్డ మేనేజర్ కంటే వేగంగా ప్రాజెక్ట్ను పూర్తి చేస్తాడు."
"అలాగా."
"సరే, చిన్న విరామం తీసుకుందాం, ఆపై మేము కొనసాగుతాము."
GO TO FULL VERSION