प्रत्यक्ष मशीन कोड लिखना संभव है (यदि थकाऊ है)। हो सकता है कि आप प्रोग्राम को एक कागज़ के टुकड़े पर असेंबलर में लिख दें, और फिर आप इसे हाथ से अंकीय मशीन कोड के निर्देशों में बदल दें, जिसे आप मशीन मेमोरी में दर्ज करते हैं। आप कोडांतरक-ऑन-पेपर चरण को भी छोड़ सकते हैं यदि आपने सभी मशीन कोड निर्देशों के संख्यात्मक मानों को याद किया है - उन दिनों में असामान्य नहीं है, तो विश्वास करें या नहीं!
बहुत पहले कंप्यूटरों को सीधे बाइनरी में भौतिक स्विच को चालू करके प्रोग्राम किया गया था। जब प्रोग्रामर (या डेटा एंट्री असिस्टेंट) को कीपैड के माध्यम से हेक्साडेसिमल संख्याओं में कोड दर्ज करने देने के लिए विकसित किया गया तो यह एक महान उत्पादकता सुधार था!
एक सॉफ्टवेयर असेंबलर केवल तब प्रासंगिक हो जाता है जब अधिक मेमोरी उपलब्ध हो जाती है (क्योंकि कोडांतरक कोड कच्चे मशीन कोड की तुलना में अधिक जगह लेता है) और अल्फ़ान्यूमेरिक इनपुट की अनुमति देने के लिए हार्डवेयर विकसित हुआ। इसलिए पहले कोडर मशीन कोड में धाराप्रवाह लोगों द्वारा सीधे लिखे गए थे।
जब आपके पास एक कोडांतरक होता है, तो आप कोडांतरक में उच्च स्तर की भाषा के लिए एक कंपाइलर लिख सकते हैं।
सी के लिए कहानी के कई चरण हैं। पहला C कंपाइलर B (C का पूर्ववर्ती) लिखा गया था जो BCPL में लिखा गया था। BCPL एक बहुत ही सरल भाषा है (उदाहरण के लिए इसमें बिल्कुल भी प्रकार नहीं है), लेकिन फिर भी कच्चे कोडांतरक से एक कदम ऊपर है। इसलिए आप देखते हैं कि कैसे धीरे-धीरे अधिक जटिल भाषाओं का निर्माण सरल भाषाओं में किया जाता है जो सभी तरह से वापस असेंबलर के लिए होता है। और खुद सी आज के मानकों से काफी छोटी और सरल भाषा है।
आज, एक नई भाषा के लिए पहला संकलक अक्सर C में लिखा जाता है, लेकिन जब भाषा एक निश्चित परिपक्वता तक पहुंचती है तो इसे अक्सर "अपने आप में" लिखा जाता है। पहले जावा कंपाइलर को C में लिखा गया था, लेकिन बाद में जावा में फिर से लिखा गया। पहले C # कंपाइलर C ++ में लिखे गए थे, लेकिन हाल ही में इसे C # में फिर से लिखा गया है। पायथन कंपाइलर / दुभाषिया C में लिखा गया है, लेकिन PyPy प्रोजेक्ट इसे Pyon में फिर से लिखने का प्रयास है।
हालांकि यह भाषा में किसी भाषा के लिए संकलक / दुभाषिया लिखना हमेशा संभव नहीं होता है। जावास्क्रिप्ट में लिखा एक जावास्क्रिप्ट दुभाषिया मौजूद है, लेकिन वर्तमान ब्राउज़रों में संकलक / दुभाषियों को अभी भी प्रदर्शन कारणों के लिए C या C ++ में लिखा गया है। जावास्क्रिप्ट में लिखा जावास्क्रिप्ट बस बहुत धीमी है।
लेकिन आपको संकलक के लिए सी को "शुरुआती भाषा" के रूप में उपयोग करने की आवश्यकता नहीं है। पहला F # कंपाइलर OCaml में लिखा गया था, जो कि दूसरी भाषा है जो F # से सबसे अधिक निकटता से संबंधित है। जब कंपाइलर पूरा हो गया था, तो इसे F # में फिर से लिखा गया था। पर्ल 6 के लिए पहली संकलक हास्केल में लिखा गया था (एक शुद्ध कार्यात्मक भाषा बहुत लेकिन अब पर्ल से भिन्न) एक संकलक सी में लिखा जाता है
एक दिलचस्प मामला रस्ट है, जहां ओम्क्लल में पहला कंपाइलर लिखा गया था (अब इसे रस्ट में फिर से लिखा गया है)। यह उल्लेखनीय है क्योंकि OCaml को आमतौर पर Rust की तुलना में उच्च स्तर का माना जाता है, जो एक करीब-से-धातु प्रणाली भाषा है। तो यह हमेशा निम्न-स्तरीय भाषाओं में लागू की जाने वाली उच्च-स्तरीय भाषाएँ नहीं होती हैं, यह दूसरी तरह की भी हो सकती हैं।