Overreacted

2018 నాటికి నాకు ఇంకా తెలియని విషయాలు

2018 M12 28 • ☕️ 5 min read

నాకు ఎంత తెలుసో దానికంటే చాలా ఎక్కువ తెలుసంటూ నన్ను గురించి చాలా మంది అనుకుంటారు. అదంత చెడ్డ విషయమేమి కాదు, నేను వారిని తప్పు పట్టుట లేదు. (బడుగు వర్గాల వారు తరచూ దీనికి విరుద్ధమైన రీతిలో తమ గురించి తక్కువగా అందరూ అనుకుంటారు అని ఆందోళన పడుతూ ఉంటారు, అది చాలా బాధాకరం.)

ఈ లేఖలో నేను నాకు ఇంకా తెలియనివి, జనాలు నాకు ఇప్పటికే తెలుసు అనుకొనేవి అయిన కొన్ని ప్రోగ్రామింగ్ విషయాల గురించిన పూర్తికాని జాబితా ప్రస్తావిస్తాను. నా ఉద్దేశ్యం మీరు అవి నేర్చుకోనక్కరలేదు అని కాదు — అలాగే నాకు ఇంకేమి పనికొచ్చే విషయాలు తెలియవని కాదు. నేను ప్రస్తుతానికి ఏమీ అంత గొడ్డుపోయిన స్థితిలో లేను గనుక, నేను దీని పట్ల నిజాయితీగా ఉండ దలచుకున్నాను.

నేను ఇది ఎందుకు ముఖ్యమని భావిస్తున్నానో చూడండి.


మొదటిగా, ఒక అనుభవజ్ఞుడైన ఇంజినీరుకి తన శాఖలోని సాంకేతిక విషయాలన్నీ బట్టీయం వచ్చి ఉండాలనే ధోరణి ఉంది. మీరెప్పుడైనా వందలకొద్దీ లైబ్రరీలు, టూల్సు కలబోసినా “నేర్చుకోవాల్సిన పట్టిక” చూసారా? అది ఉపయోగకారమే — కానీ భయాన్ని కలిగిస్తుంది.

ఇంకా ఏంటంటే, మీకు ఎంతైనా అనుభవం ఉండనీ, మీరు ఎప్పటికీ మిమ్మల్ని గురించి సమర్థులా, అసమర్థులా (“ఇంపోస్టర్ సిండ్రోమ్”), లేక ఉద్ధతి కలవారా (“డన్నింగ్-క్రూగర్ ఎఫెక్ట్”) అనే అయోమయంలో ఉంటారు. ఇది మీ చుట్టూ ఉన్నవారు, మీ పని, మీ వ్యక్తిత్వం, మీ సహోద్యోగులు, మానసిక స్థితి, సమయం, వగైరాల మీద ఆధార పది ఉంటుంది.

అనుభవ వంతులైన ఉద్యోగులు కొన్నిసార్లు వారి అభద్రతా భావాన్ని కొత్తవాళ్ళని ప్రేరేపించడానికి వారి ముందు వ్యక్త పరస్తూ ఉంటారు. కానీ, అదే సమయంలో శస్త్ర చికిత్స చేసే వైద్యుడికి ఎప్పుడో ఒకసారి చెయ్యి వణకడం వేరు, ఒక విద్యార్థి మొదటిసారి ఆపరేషన్ కట్టి పట్టుకోవడం వేరు!

“మనం ఎప్పటికీ నేర్చుకొనే వారినే” అనేది వినడం కాస్త మనసుకి ఇబ్బందిగా ఉంటుంది మరియు ఎందుకు చెప్పారా అని నిజమైన విషయం పరిజ్ఞానం నేర్చుకొనే వారికి అనిపిస్తుంది. అదే సమయంలో నాలాంటి మంచి కోరే ఉద్యోగుల బరువు దింపుకోవాలి చేసే ఈ వ్యాఖ్యలు ఎటువంటి లోటునూ పూడ్చలేవు.

అయినా సరే, అనుభవం ఉన్న ఇంజినీర్లకు కూడా విషయం పరిజ్ఞానంలో లోటుపాట్లు ఉంటాయి. ఇది నా గురించిన లేఖ, మీకు కూడా ఇలాంటి బలహీనతలు ఉంటె పంచుకోవాలని నేను ప్రోత్సహిస్తున్నాను. అయితే, మన అనుభవాన్ని తృణీకరించి మాత్రం కాదు సుమా.

మనకెన్ని అసంపూర్ణ పరిజ్ఞానాలు ఉండు గాక, మనకి మనం అసమర్థులమని అనుకోవచ్చు, అనుకోకపోవచ్చు గాక, అయితే సంవత్సరాలు వెచ్చించి మనం సంపాదించిన అంతులేని వెలలేని ప్రతిభని మరువక ఉందుము గాక.


నా ఈ ఆలోచనలను ఆ విధంగా పక్కకు నెట్టి, ఇవిగో నాకు తెలియని విషయాల గురించి ఇలా ప్రస్తావిస్తున్నాను:

  • యూనిక్స్ కమాండ్స్ మరియు బాష్. నేను ls మరియు cd చేయగలను, మిగతావన్నీ వెతుకుతాను. పైపింగ్ అర్థమవుతుంది కానీ చాలా చిన్న అవసరాలకు మాత్రమే వాడాను. xargs ఎలా వాడాలో, క్లిష్టమైన చైన్స్ ఎలా చేయాలో, ఔట్పుట్ స్ట్రీమ్స్ ఎలా కంపోజ్ చేసి మళ్ళించాలో తెలియదు. నేను ఎప్పుడూ పూర్తిగా బాష్ గురించి నేర్చుకోలేదు గనుక కొన్ని సులువైన (తరచూ బెడిసికొట్టే) షెల్ స్క్రిప్ట్స్ మాత్రమే వ్రాయగలను.

  • క్రింది-స్థాయి భాషలు. అసెంబ్లీ అనేది మనకి కొన్నింటిని మెమొరీలో దాచుకొనే వెసులుబాటు ఇస్తుందని మరియు కోడ్ లో అటు ఇటు తిరుగగలదు అని మాత్రమే తెలుసు. నేను సి భాషలో కొన్ని లైన్లు వ్రాసాను, కాస్త పాయింటర్ అంటే తెలుసు, కానీ malloc గురించి గానీ ఇతర మెమొరీ వాడుక పద్ధతులు గానీ తెలియవు. Rust అనే దానిని ఎప్పుడూ ప్రయత్నించలేదు.

  • నెట్వర్కింగ్ స్టాక్. కంప్యూటర్లకు IP చిరునామాలు ఉంటాయనీ, DNSలతో హోస్ట్ పేర్లు తెలుసుకోవచ్చని తెలుసు. TCP/IP వంటి క్రింది తరగతి ప్రొటొకాల్స్ ఉంటాయనీ, అవి ప్యాకెట్స్ ఇచ్చి పుచ్చుకుంటాయనీ తద్వారా ఇంటెగ్రిటీ ఉంటుం(దేమో?) అని తెలుసు. అంటే, అంతవరకే, మిగతాది చుక్కలే.

  • కంటైనర్స్. నాకు Docker గురించి గానీ Kubernetes గురించి గానీ ఎలాంటి అవగాహనా లేదు. (అవి మీకు తెలుసా?) అవి నేను క్రమబద్ధంగా ఒక VMని సృష్టించ గలిగే అవకాశం ఇస్తాయని లీలగా తెలుసు. వినడానికి కొంచం గమ్మత్తుగా ఉంది కానీ ప్రయత్నించలేదు.

  • సర్వర్ లెస్. ఇది కూడా వినడానికి బానే ఉంది. ఎప్పుడూ ప్రయత్నించలేదు. దీనివల్ల బ్యాక్ ఎండ్ ప్రోగ్రామింగ్ ఎలా ప్రభావితం అవుతుందా అనేది ఇంకా సరిగ్గా తెలియదు (ఒకవేళ ప్రభావితం చేస్తే).

  • మైక్రో సర్వీసెస్. నా అవగాహన మేరకు, దీని అర్ధం “చాలా ఎండ్ పాయింట్స్ ఒక దానితో ఇంకొకటి మాట్లాడుకొనుట”. వీటి వల్ల వ్యావహారిక ఇబ్బందులు మరియు అనుకూల అంశాలు తెలియదు ఎందుకంటే నేను వీటిమీద పని చేయలేదు.

  • పైథాన్. దీని గురించి చెప్తుంటే బాధగా — ఒకప్పుడు ఏళ్ళ తరబడి దీని మీద పని చేసిన అనుభవం ఉంది కానీ దీన్ని నిజంగా నేర్చుకోవాలి అని ఎప్పుడూ అనిపించలేదు. చాలా విషయాలు, ఉదాహరణంకు ఇంపోర్ట్ ఎలా పని చేస్తుంది వగైరాలు నాకు ఎంత ప్రయత్నించినా అర్థం కాలేదు.

  • నోడ్ బ్యాక్ ఎండ్స్. నాకు నోడ్ ఎలా నడపాలో తెలుసు, fs లాంటివి బిల్డ్ టూలింగ్ కోసం వాడాను, express సెటప్ చేయగలను. కానీ నోడ్ నుండి డాటాబేసుకి అనుసంధానం చేయలేదు ఇంకా దాని మీద ఒక బ్యాక్ ఎండ్ ఎలా వ్రాయాలో నిజానికి తెలియదు. రియాక్ట్ ఫ్రేమ్వర్కులు అయినా నెక్స్ట్ లాంటి వాటిలో “హలో వరల్డ్” దాటి తెలియదు.

  • నేటివ్ ప్లాటుఫారమ్స్. ఆబ్జెక్టివ్ సి నేర్చుకుందామని ఒకప్పుడు ప్రయత్నించాను, కలిసి రాలేదు. స్విఫ్ట్ నేర్చుకోలేకపోయా. జావా పరిస్థితి కూడా అదే. (అయితే, నేను సి షార్ప్ మీది పని చేసినందు వలన ఇవి తేలికగానే నేర్చుకోగలను.)

  • అల్గోరిథమ్స్. మహా అయితే నా నుంచి బబుల్ సార్ట్ క్విక్ సార్ట్ రాబట్ట గలరు, అది కూడా ఆరోజు ముహూర్తం బట్టి. బహుశా ఇచ్చిన ఆచరణాత్మక సమస్యని బట్టి తేలికైన గ్రాఫ్ ట్రావెర్సింగ్ టాస్కులు వ్రాయగలను. ఓ(ఎన్) నొటేషన్ అర్థమవుతుంది కానీ అందులో చెప్పాలంటే “లూప్స్ లోపల లూప్స్ పెట్టొద్దు” అనే దాని కన్నా ఎక్కువ తెలీదు.

  • ఫంక్షనల్ భాషలు. జావాస్క్రిప్ట్ మినహాయిస్తే, సంప్రదాయ ఫంక్షనల్ భాషలలో అంత ప్రావీణ్యం లేదు. (సి షార్ప్ మరియు జావాస్క్రిప్ట్ లలో మాత్రమే నాకు ప్రావీణ్యం ఉంది — మరియు సి షార్ప్ గురించి ఇప్పటికే చాలా మటుకు మర్చిపోయా.) లిస్ట్ నుంచి పుట్టుకొచ్చిన భాషలు (క్లోజర్ లాంటివి), హాస్కెల్ నుండి వచ్చినవి (ఎల్మ్ లాంటివి), ఎమ్మెల్ నుండి పుట్టుకొచ్చినవి (ఒకామెల్ లాంటివి) మాత్రమే తెలుసు.

  • ఫంక్షనల్ పదజాలం. మ్యాప్ మరియు రెడ్యూస్ వరకూ తెలుసు. మోనోయిడ్స్, ఫంక్టర్స్, ఇత్యాదులు తెలియదు. మోనాడ్ అంటే ఏంటో తెలుసేమో అని సందేహంగా ఉంది.

  • ఆధునిక CSS. ఫ్లెక్స్ బాక్స్ కానీ గ్రిడ్ కానీ తెలియదు. ఫ్లోట్స్ అంటే ప్రాణం.

  • CSS పద్ధతులు. BEM వాడాను (CSS కి సంబంధించినది, అసలైన BEM కాదు) కానీ అంతవరకే తెలుసు. OOCSS లాంటివేవీ ప్రయత్నించలేదు.

  • SCSS / Sass. వీటిని నేర్చుకునే అవకాశం రాలేదు.

  • CORS. ఈ ఎర్రర్స్ అంటే నాకు చెడ్డ భయం! అవేవో హెడ్ర్లు పెడితే ఫిక్స్ అవుతాయని తెలుసు కానీ గతంలో చాలా గంటలు సమయం వృధా చేసినా లాభం లేకపోయింది.

  • HTTPS / SSL. ఏవి ఎప్పుడూ ప్రయత్నించలేదు. ప్రైవేట్ మరియు పబ్లిక్ కీస్ ఉంటాయని తెలుసు తప్ప ఆపై విషయాలు తెలీవు.

  • GraphQL. ఒక క్వరీ చదవడం తెలుసు కానీ నిజంగా విషయాలను నోడ్ మరియు ఎడ్జెస్ గా వ్రాయడం గానీ, ఫ్రాగ్మెంట్స్ వాడకం కానీ, పేజినేషన్ గురించి కానీ తెలియదు.

  • సాకెట్స్. మనసులో నా అవగాహన ఏంటంటే ఇవి కంప్యూటర్స్ ఒకదానితో ఇంకొకటి మాట్లాడుకోడానికి రిక్వెస్ట్/రెస్పాన్స్ పద్ధతి కాకుండా చేయగలిగే వెసులుబాటు కలిగిస్తాయని తప్ప ఇంకేమి తెలియదు.

  • స్ట్రీమ్స్. Rx అబ్సర్వబుల్స్ తప్ప, మిగతా వాటిమీద అంత దగ్గరగా పనిచేయలేదు. నేను పాత నోడ్ స్ట్రీమ్స్ ఒకటి రెండు సార్లు కానీ ప్రతి సారీ ఎర్రర్ నిర్వహణ చెడగొట్టే వాడిని.

  • ఎలెక్ట్రాన్. ఎప్పుడూ ప్రయత్నించలేదు.

  • టైపుస్క్రిప్ట్. నాకు టైప్స్ ఉల్లేఖనాలు వంటివి తెలుసు కానీ ఎప్పుడూ వ్రాయలేదు. కొన్ని దండయాత్రలు చేసాను, ఓడిపోయాను.

  • విస్తరణ మరియు devops. ప్రయత్నిస్తే FTP ద్వారా ఫైల్స్ పంపగలను, కావాలంటే ప్రాసెసస్ చంపగలను కానీ అంతకు మించి నిపుణత లేదు ఇందులో.

  • గ్రాఫిక్స్. SVG అయినా కాన్వాస్ అయినా లేక క్రింది స్థాయి గ్రాఫిక్స్ అయినా వీటిలో ఎందులోనూ నేను అను అంత వేగంగా చేయలేను. మొత్తంమీద ఏంటో తెలుసు కానీ ప్రిమిటివ్స్ నేర్చుకోవాలి ఇంకా.

నిజానికి ఇది పూర్తి జాబితా కాదు. ఇంకా ఎన్నో విషయాలు నాకు తెలియదు.


ఇది చర్చించుకోడానికి వింతగా ఉండొచ్చు మీకు. ఇలాంటివి వ్రాయడం తప్పుగా అనిపించొచ్చు కూడా. నా అజ్ఞానాన్ని నేను గొప్పగా చెప్పుకొంటున్నానా? ఈ పోస్టు ద్వారా నేను గ్రహించింది ఏంటో చెప్తా వినండి:

  • మీకు అత్యంత ఇష్టమైన డెవలపర్స్ కూడా చాల విషయాలు తెలియని వారు కావొచ్చు.

  • మీ పరిజ్ఞానం స్థాయి ఎలా ఉన్నా, మీ ఆత్మా విశ్వాసం స్థాయి వేరుగా ఉండొచ్చు.

  • అనుభవజ్ఞులైన డెవలపర్స్ జ్ఞాన పరమైన లోటు పాట్లు ఉన్నా అంతకు మించి విలువైన పనితనం, పరిజ్ఞానం ఉంటాయి.

నా లోటు పాట్లు నాకు తెలుసు (కనీసం కొన్నైనా). వాటిని నాకు కావలసినట్టుగా అవసరమున్నప్పుడు పూరించుకోగలను.

దీని వలన నా విలువ నా పనితనం ఏమి తగ్గిపోవు. నేను చాలా విషయాలలో నా సత్తా చాటగలను. ఉదాహరణకు, నేను నేర్చుకోవలసిన టెక్నాలజీస్ వెంటనే అందుకోగలను.

కొత్తగా: నాకు ఏమేమి తెలుసులో కూడా వ్రాశాను.