54 पॉइंट द्वारा GN⁺ 2025-03-11 | 9 टिप्पणियां | WhatsApp पर शेयर करें
  • कई software engineers software के प्रति जुनून के बिना काम करते हैं
    • वे सिर्फ अच्छी salary के लिए काम करते हैं, लेकिन जुनून न हो तो आखिरकार performance गिरती है
    • अगर पुराने technologies और गलत मान्यताओं में फंसे रहें और सीखना बंद कर दें, तो विकास नहीं हो पाता
  • अच्छा engineer बनने के लिए ज़रूरी तत्व
    • engineering के मूल स्वभाव को समझना और गहरा ज्ञान बनाना चाहिए
    • नई technologies को लगातार सीखना और आलोचनात्मक नज़र से देखना चाहिए
    • व्यवहार में सीखी हुई बातों को लागू करने और सुधारने की आदत ज़रूरी है

# अच्छा engineer किससे बनता है

  • engineer की परिभाषा

    "वह व्यक्ति जो वैज्ञानिक सिद्धांतों को लागू करके समस्याओं का विश्लेषण करता है और design, code लिखने, निर्माण, सृजन आदि के माध्यम से समस्याओं को हल करता है और दुनिया को बेहतर बनाता है"

  • software engineer से अपेक्षित क्षमताएँ
    • यह समझना चाहिए कि कंप्यूटर कैसे काम करता है
    • hardware और software किस तरह परस्पर क्रिया करते हैं, इसकी गहरी समझ ज़रूरी है
    • सिर्फ abstracted languages या technologies पर निर्भर न रहकर बुनियाद से सीखना चाहिए

domain की गहरी समझ

  • बुनियादी सिद्धांतों की मजबूत समझ ज़रूरी है
    • mechanical engineer → materials के गुण और उनके उपयोग का ज्ञान
    • software engineer → memory और CPU के काम करने के सिद्धांतों की समझ
  • बुनियादी सिद्धांतों से सीखना चाहिए
    • HTTP, memory structure, system behavior जैसी मूल अवधारणाओं की गहरी समझ अनिवार्य है
    • ऊपरी स्तर से शुरू न करें, बुनियाद से निर्माण करें

लगातार सीखना

  • नई technologies और development trends को लगातार सीखना चाहिए
  • नई technology के फायदे और नुकसान का आलोचनात्मक विश्लेषण करना चाहिए
  • सीखने की प्रक्रिया में मिले नए विषयों में और गहराई तक जाना चाहिए
    • जैसे गणित पढ़ते समय उससे जुड़े उपविषयों तक पहुँचा जाता है, वैसे ही सीखने की गहराई बढ़ानी चाहिए

technology की सीमाएँ और समस्याएँ समझना

  • tools या languages के फायदे-नुकसान स्पष्ट रूप से समझने चाहिए
  • किसी खास language या tool को अंधविश्वास की तरह मानने वाले रवैये से बचना चाहिए
  • project के लिए सबसे उपयुक्त tool चुनना महत्वपूर्ण है

व्यवहार में ज्ञान लागू करना

  • सिर्फ theory जानना पर्याप्त नहीं है
    • सीखी हुई बातों को वास्तविक projects में लागू करना चाहिए
    • समस्याएँ हल करने या concepts को साबित करने में उनका उपयोग होना चाहिए
  • व्यावहारिक उपयोग के उदाहरण
    • छोटा prototype बनाना
    • रोज़मर्रा की समस्याएँ हल करना
    • सीखी हुई बातों को दूसरों को समझाना और सिखाना

# बेहतर engineer बनने के तरीके

critical thinking की क्षमता विकसित करना

  • critical thinking engineering का मुख्य तत्व है
    • concepts और उनके प्रभाव को समझने और उन्हें चुनौती देने के लिए यह आवश्यक है
    • critical thinking की कमी या उसकी अनदेखी inefficiency और complexity पैदा करती है
  • critical thinking को मजबूत करना
    • किसी नए concept को देखते ही उसे बिना सोचे स्वीकार न करें; उसकी effectiveness और validity की जाँच करें
    • किसी खास approach के फायदे, नुकसान और alternatives का तार्किक विश्लेषण करें
  • critical thinking सीखने की सामग्री: Critical Thinking देखें

ज़्यादा किताबें पढ़ें

  • पढ़ना ज्ञान हासिल करने का एक प्रभावी तरीका है
    • software engineering से जुड़े कई विषयों पर किताबें उपलब्ध हैं
    • किताब की बातों को बस स्वीकार न करें, उन्हें आलोचनात्मक रूप से पढ़ें
  • आलोचनात्मक रूप से पढ़ने के लिए उदाहरण प्रश्न
    • "क्या इस approach में कोई समस्या है?"
    • "क्या इससे बेहतर तरीका है?"
    • "अगर मैं इसे अलग तरह से करता, तो कैसे करता?"
    • "क्या इस किताब में समझाई गई बातें वास्तव में सही हैं?"
  • notes लिखने की आदत विकसित करें
    • सीखी हुई बातों और विचारों को व्यवस्थित करके लिखें
    • अगर कोई अपरिचित विषय सामने आए, तो उसे अलग से शोध करें
    • notes लिखने के tool के रूप में Obsidian की सिफारिश की जाती है (व्यक्तिगत पसंद के अनुसार चुन सकते हैं)
  • सुझाई गई reading list

सीखे हुए ज्ञान को projects में लागू करना

  • theory से practice तक ले जाना
    • सीखी हुई बातों को वास्तविक projects में लागू करने पर ही सच्चा learning होता है
    • concepts को वास्तव में implement करते हुए गहरी समझ विकसित की जा सकती है
    • छोटे project या prototype ही सही, खुद बनाकर देखना महत्वपूर्ण है
  • व्यावहारिक उपयोग की प्रक्रिया से मिलने वाले लाभ
    • theory में न दिखने वाली वास्तविक समस्याओं का सामना होता है
    • समस्या-समाधान की प्रक्रिया में ज्ञान को ठोस बनाया और सुधारा जा सकता है
    • problem-solving skill और logical thinking मजबूत होती है
  • सीखी हुई बातों को लागू करने के तरीके
  • छोटा prototype बनाना
    • किसी नए framework, language या concept को सीखने के बाद छोटा project आज़माएँ
    • उदाहरण: database indexing सीखने के बाद एक simple search system implement करें और performance की तुलना करें
    • वास्तविक समस्या हल करना
      • रोज़मर्रा या काम में आने वाली छोटी समस्याओं को हल करके देखें
      • उदाहरण: बार-बार होने वाले manual काम को automate करना, performance drop की समस्या सुधारना आदि
    • सीखी हुई बात सिखाना
      • दूसरों को समझाते समय अपनी समझ और मजबूत होती है
      • blog लिखना, Twitter thread लिखना या सहकर्मियों के साथ चर्चा करना
      • सिखाने की प्रक्रिया में नए दृष्टिकोण मिल सकते हैं
  • अगर लगातार ज्ञान को लागू किया जाए, तो सैद्धांतिक समझ व्यावहारिक क्षमता में बदलती है और आप अधिक सक्षम engineer बन सकते हैं

अपने code का मूल्यांकन और सुधार

  • self-critique उत्कृष्ट engineer की मुख्य आदत है
    • कई engineers यह गलती करते हैं कि code चल रहा है तो वह "काफ़ी है"
    • लेकिन सच्चा engineer यह पहचानता है कि सुधार की गुंजाइश हमेशा रहती है
  • self-evaluation का लक्ष्य
    • खुद पर अनावश्यक रूप से बहुत कठोर होने की ज़रूरत नहीं है
    • लगातार सुधार के अवसर ढूँढना ही मुख्य बात है
    • सिर्फ code चलने से संतुष्ट न हों; performance, maintainability और readability कैसे बेहतर हो सकती है, यह देखें
  • लगातार self-evaluation का प्रभाव
    • code quality धीरे-धीरे बेहतर होती है
    • self-critique से problem-solving skill मजबूत होती है
    • अपने ज्ञान और क्षमता को लगातार आगे बढ़ाया जा सकता है

# software engineers के लिए सुझाई गई सूची

सुझाई गई किताबें

  • Designing Data-Intensive Applications – data-केंद्रित applications का design
  • Introduction to Algorithms – (हिंदी/अन्य अनुवाद हो सकते हैं, लेकिन शीर्षक अंग्रेज़ी में ही है)
  • Writing a C Compiler
  • Essential Maths for Data Science – developers के लिए आवश्यक गणित
  • Elements of Information Theory

सुझाए गए projects

  • compiler - चुनी हुई language के लिए compiler लिखकर देखें, LLVM या JVM का संदर्भ लें
  • emulator - किसी simple CPU (जैसे 8086) का emulator लिखें
  • render engine / game engine - OpenGL या Vulkan का उपयोग करके graphics program लिखें
  • memory viewer और editor बनाना - ऐसा program लिखें जो दूसरे program की memory के साथ interact करे
  • HTTP server बनाना - किसी low-level language में HTTP server लिखें
  • website या बहुत simple projects से बचें. उनका learning impact कम हो सकता है. ऊपर बताए गए projects में से एक चुनें, विषय का अध्ययन करें और फिर खुद implement करें

निष्कर्ष

  • अच्छा engineer बनना बहुत सारी programming languages जानने का नाम नहीं है
  • बुनियादी सिद्धांतों की गहरी समझ + critical thinking + व्यावहारिक उपयोग ही मूल है
  • सीखने, लागू करने और लगातार सुधारने का रवैया ज़रूरी है
  • engineering एक अंतहीन यात्रा है, और बढ़ने की मानसिकता महत्वपूर्ण है

निष्कर्ष

  • अच्छा engineer बनने का सार
    • यह सबसे ज़्यादा programming languages जानने, नवीनतम frameworks में महारत हासिल करने या हर नई technology के पीछे भागने के बारे में नहीं है
    • engineering के बुनियादी सिद्धांतों की गहरी समझ ही असली केंद्र है
    • सीखे हुए ज्ञान को वास्तविक projects में लागू करना, आलोचनात्मक रूप से सोचना, और लगातार बढ़ते रहना ज़रूरी है
  • श्रेष्ठ engineers की विशेषताएँ
    • वे सीखना नहीं रोकते और नया ज्ञान हासिल करते रहते हैं
    • वे अपनी धारणाओं पर लगातार सवाल उठाते हैं और सुधार के तरीके खोजते हैं
    • वे सीखे हुए ज्ञान को वास्तविक समस्याओं के समाधान में लागू करते हैं और साथियों के साथ सहयोग करते हुए बढ़ते हैं
  • engineering जीवनभर की यात्रा है
    • जिज्ञासा(curiosity), निरंतरता(discipline) और विकास की इच्छा की आवश्यकता है
    • अगर इन सिद्धांतों को व्यवहार में लाया जाए, तो आप सिर्फ अच्छे engineer ही नहीं बल्कि महान engineer भी बन सकते हैं

9 टिप्पणियां

 
gurugio 2025-03-11

मैंने Linux kernel के memory management हिस्से में भी contribution किया है, और मुझे लगता है कि low-level workings की कुछ हद तक समझ भी है, लेकिन आखिरकार मैं अनचाहे तौर पर development से काफ़ी दूर के काम कर रहा हूँ—यह सोचकर लगता है कि शायद इस लेख के उलट चलना ही एक सफल engineer बनने का रास्ता है.

  • नई technologies को तेज़ी से follow करना
  • निजी जिज्ञासा से ज़्यादा market के बारे में सोचना
  • self-criticism से ज़्यादा self-promotion अच्छी तरह करना
  • मूलभूत क्षमता/विकास से ज़्यादा coding test पर ध्यान देना
    वापस आकर देखा तो Korea में market बहुत छोटा है और competition बहुत ज़्यादा, इसलिए ऐसे company या position कम हैं जहाँ development पर ध्यान केंद्रित किया जा सके; और उन कम जगहों के लिए सब एक-दूसरे से प्रतिस्पर्धा कर रहे हैं, इसलिए आखिरकार वही लगता है कि जो चीज़ें आसानी से नज़र आएँ, उन पर फोकस करना होगा, तभी शायद वह development कर पाएँगे जो वे सच में करना चाहते हैं.
 
malcomjj 2025-03-15

मैं भी सहमत हूँ! और यहाँ जिस 'अच्छे' engineer की बात हो रही है, वह कैसा engineer है, इसकी व्याख्या हर व्यक्ति अलग तरह से करता है। यह शायद थोड़ा अतिशयोक्तिपूर्ण लगे, लेकिन बुनियादी ज्ञान के महत्व को जानने के बावजूद अगर कोई engineer बाज़ार में मूल्य नहीं रखता, तो क्या उसे अच्छा engineer कहा जा सकता है, इस पर सोचने को मजबूर होना पड़ता है।

 
takesixnotfive 2025-03-12

सच में बहुत रिलेटेबल है,,,
अफसोस इस बात का है कि यह खेल इस बात का नहीं रह गया है कि आप बुनियादी चीज़ों को कितनी सही तरह से समझते और अच्छी तरह संभालते हैं,
बल्कि यह इस बात का खेल बन गया है कि आप किसी खास भाषा और खास तकनीक को ट्रेंड के मुताबिक कितनी अच्छी तरह इस्तेमाल करते हैं,,

 
ethanhur 2025-03-11

मुझे लगता है कि कोरिया में भी बहुत अच्छे इंजीनियर हैं, लेकिन बाज़ार के आकार की वजह से कुछ पहलुओं में कमी महसूस होती है।

काश FuriosaAI जैसी जगहें अच्छा कर पातीं।

 
roxie 2025-03-16

FuriosaAI बंद हो गई क्या...?

 
yoonda5898 2025-03-11

थोड़ा रिलेटेबल लग रहा है.. lol
क्या ये सिर्फ़ कोरियाई मार्केट में ही ऐसा है...

 
tsboard 2025-03-11

कुछ समय पहले मैंने कंपनी में Kotlin language study के लिए एक सेमिनार किया था। जब मैंने इसे हमारे विभाग में मुख्य रूप से इस्तेमाल होने वाली C++ भाषा से तुलना करते हुए समझाया, तो प्रतिक्रिया अच्छी मिली थी। दिलचस्प बात यह थी कि मैं खुद C++ लगभग इस्तेमाल नहीं करता, और विभाग के लोग Kotlin से पहली बार परिचित हो रहे थे, लेकिन कई मायनों में यह हम सबकी growth के लिए मददगार लगा।

 
GN⁺ 2025-03-11
Hacker News राय
  • किताबें पढ़ने वाली बात बहुत पसंद आई। अक्सर देखता हूँ कि बहुत से इंजीनियर दस्तावेज़ और किताबों के बजाय वीडियो और सतही पोस्ट को प्राथमिकता देते हैं और इस वजह से बहुत कुछ मिस कर देते हैं

    • यह भी हैरानी की बात है कि लोग छोटी-छोटी बातों के लिए दस्तावेज़ पढ़ने या कम-से-कम Google पर खोजने के बजाय सीधे सवाल पूछ लेते हैं
    • जानकारी खोज पाने की क्षमता एक बेहद महत्वपूर्ण कौशल है
  • इस लेख में कही गई कई बातों से सहमत हूँ। लेकिन यह स्पष्ट नहीं है कि CPU, memory, HTTP जैसी गहरी बुनियादी समझ एक बेहतर इंजीनियर बनने में कैसे मदद करती है

    • ज़्यादातर इंजीनियर बहुत ऊँचे स्तर की abstractions पर काम करते हैं, और उस स्तर पर इस्तेमाल होने वाली भाषाएँ और frameworks memory जैसी low-level चीज़ों तक पहुँच की अनुमति नहीं देते
    • इन बुनियादी चीज़ों के बारे में पूरी तरह अनजान नहीं होना चाहिए, लेकिन अकादमिक क्षेत्र से बाहर रोज़मर्रा के अनुप्रयोगों में इसकी उपयोगिता समझ नहीं आती
 
sankalpa 2025-03-27

मुझे नहीं पता कि यह कितनी गहरी बुनियाद तक जाता है, लेकिन मैंने देखा है कि अगर बुनियाद नहीं पता हो, तो लोग सचमुच हैरान कर देने वाले और कल्पना से परे नतीजे बना देते हैं.
उदाहरण के लिए, DB के सभी records को memory में लोड करके फिर memory में search करने के लिए implement करना.
records कम हों तो यह ठीक चलता है, लेकिन records बढ़ जाएँ तो memory फट जाती है.
क्योंकि उन्हें memory और DB में क्या फर्क है, यह बिल्कुल पता नहीं होता, इसलिए वे ऐसा लिखते हैं.
यह तो बस एक उदाहरण है, और वे हर बार सचमुच ऐसी दिशा में implement करते हैं जिसकी कल्पना भी नहीं की जा सकती.
सामान्य(?) programmer तो सचमुच इसकी कल्पना नहीं कर सकता.