ระดับพื้นฐาน:
ลองดูสิ่งต่าง ๆ ในระดับที่ง่ายที่สุดและพื้นฐานที่สุด
สำหรับคณิตศาสตร์เรามี:
2 + 3 = 5
ฉันเรียนรู้เกี่ยวกับสิ่งนั้นเมื่อฉันยังเด็กมาก ฉันสามารถดูองค์ประกอบพื้นฐานที่สุด: วัตถุสองชิ้นและวัตถุสามอย่าง ยิ่งใหญ่
สำหรับการเขียนโปรแกรมคอมพิวเตอร์คนส่วนใหญ่มักจะใช้ภาษาระดับสูง ภาษาระดับสูงบางภาษาสามารถ "คอมไพล์" เป็นภาษาระดับสูงด้านล่างอย่างใดอย่างหนึ่งเช่น C. C สามารถแปลเป็นภาษาแอสเซมบลี ภาษาแอสเซมบลีจะถูกแปลงเป็นรหัสเครื่อง ผู้คนจำนวนมากคิดว่าความซับซ้อนจบลงที่นั่น แต่ไม่ได้: ซีพียูสมัยใหม่ใช้รหัสเครื่องเป็นคำแนะนำ แต่จากนั้นเรียกใช้ "ไมโครโค้ด" เพื่อดำเนินการตามคำแนะนำเหล่านั้น
ซึ่งหมายความว่าในระดับพื้นฐานที่สุด (จัดการกับโครงสร้างที่ง่ายที่สุด) ตอนนี้เรากำลังจัดการกับไมโครโค้ดซึ่งฝังอยู่ในฮาร์ดแวร์และโปรแกรมเมอร์ส่วนใหญ่ไม่ได้ใช้โดยตรงหรืออัปเดต ในความเป็นจริงไม่เพียง แต่โปรแกรมเมอร์ส่วนใหญ่ไม่ได้สัมผัสรหัสไมโคร (0 ระดับสูงกว่าไมโครโค้ด) โปรแกรมเมอร์ส่วนใหญ่ไม่ได้สัมผัสรหัสเครื่อง (1 ระดับสูงกว่ารหัสไมโคร) หรือแม้แต่การประกอบ (2 ระดับสูงกว่ารหัสไมโคร) ยกเว้นบางทีสำหรับการฝึกอบรมอย่างเป็นทางการระหว่างวิทยาลัย) โปรแกรมเมอร์ส่วนใหญ่จะใช้เวลามากกว่า 3 ระดับขึ้นไป
ยิ่งกว่านั้นถ้าเราดูสมัชชา (ซึ่งอยู่ในระดับต่ำที่สุดเท่าที่คนทั่วไปจะได้รับ) แต่ละขั้นตอนจะเข้าใจได้ง่ายโดยผู้ที่ได้รับการฝึกอบรมและมีทรัพยากรในการตีความขั้นตอนนั้น ในแง่นี้การชุมนุมนั้นง่ายกว่าภาษาระดับสูงกว่ามาก อย่างไรก็ตามแอสเซมบลีนั้นง่ายมากที่การทำงานที่ซับซ้อนหรือแม้แต่งานที่ปานกลางนั้นน่าเบื่อมาก ภาษาระดับสูงเป็นอิสระจากเรา
ในกฎหมายเกี่ยวกับ "วิศวกรรมย้อนกลับ" ผู้พิพากษาประกาศว่าแม้ว่ารหัสในทางทฤษฎีสามารถได้รับการจัดการทีละครั้งโปรแกรมที่ทันสมัยเกี่ยวข้องกับหลายล้านไบต์ดังนั้นบางประเภทของระเบียน (เช่นสำเนาของรหัส) จะต้องทำเพียงเพื่อเช่นนี้ ความพยายามที่จะเป็นไปได้ (ดังนั้นการพัฒนาภายในไม่ถือว่าเป็นการละเมิดกฎหมาย "ไม่ทำสำเนา" โดยทั่วไป) (ฉันอาจกำลังคิดที่จะสร้างคาร์ทริดจ์ Sega Genesis ที่ไม่ได้รับอนุญาต แต่อาจจะนึกถึงบางอย่างที่พูดในระหว่างเกม Genie )
ทันสมัย:
คุณเรียกใช้รหัสที่มีความหมายสำหรับ 286s หรือไม่? หรือคุณเรียกใช้รหัส 64 บิต
วิชาคณิตศาสตร์ใช้พื้นฐานที่ยืดเยื้อมานับพันปี ด้วยคอมพิวเตอร์ผู้คนมักจะพิจารณาการลงทุนในสิ่งที่มีอายุสองทศวรรษเพื่อให้สิ้นเปลืองทรัพยากรอย่างไร้ประโยชน์ นั่นหมายความว่าคณิตศาสตร์สามารถทดสอบได้อย่างละเอียดมากขึ้น
มาตรฐานของเครื่องมือที่ใช้แล้ว:
ฉันถูกสอน (โดยเพื่อนที่มีการฝึกอบรมการเขียนโปรแกรมคอมพิวเตอร์เป็นทางการมากกว่าตัวฉันเอง) ว่าไม่มีสิ่งเช่นคอมไพเลอร์ C ที่ไม่มีข้อบกพร่องที่ตรงตามข้อกำหนดของ C นี่เป็นเพราะภาษา C โดยทั่วไปถือว่าความเป็นไปได้ของการใช้หน่วยความจำที่ไม่มีที่สิ้นสุดสำหรับจุดประสงค์ของสแต็ค เห็นได้ชัดว่าความต้องการที่เป็นไปไม่ได้นั้นต้องเบี่ยงเบนไปจากเมื่อผู้คนพยายามทำให้คอมไพเลอร์ที่ใช้งานได้ซึ่งทำงานกับเครื่องจักรจริงที่ค่อนข้าง จำกัด ในธรรมชาติ
ในทางปฏิบัติฉันได้พบว่าเมื่อใช้ JScript ใน Windows Script Host ฉันสามารถใช้วัตถุต่าง ๆ ได้สำเร็จ (ฉันชอบสภาพแวดล้อมเพราะชุดเครื่องมือที่จำเป็นในการลองใช้รหัสใหม่ถูกสร้างขึ้นใน Microsoft Windows รุ่นที่ทันสมัย) เมื่อใช้สภาพแวดล้อมนี้ฉันพบว่าบางครั้งไม่มีเอกสารที่ค้นหาได้ง่ายเกี่ยวกับวิธีการทำงานของวัตถุ อย่างไรก็ตามการใช้วัตถุนั้นมีประโยชน์มาก ดังนั้นสิ่งที่ฉันจะทำคือเขียนรหัสซึ่งอาจเป็นรถม้าชนิดเล็กเป็นรังของแตนและทำในสภาพแวดล้อมที่เป็นทรายที่ฉันสามารถเห็นผลกระทบและเรียนรู้เกี่ยวกับพฤติกรรมของวัตถุในขณะที่โต้ตอบกับมัน
ในบางกรณีบางครั้งหลังจากที่ฉันทราบว่าวัตถุทำงานอย่างไรฉันได้พบว่าวัตถุ (ที่รวมอยู่กับระบบปฏิบัติการ) นั้นเป็นรถและเป็นปัญหาที่ทราบว่า Microsoft ตัดสินใจโดยเจตนาจะไม่ได้รับการแก้ไข .
ในสถานการณ์เช่นนี้ฉันต้องพึ่งพา OpenBSD ซึ่งสร้างโดยโปรแกรมเมอร์ผู้ชำนาญที่สร้างการเผยแพร่ใหม่ตามกำหนดเวลาเป็นประจำ (ปีละสองครั้ง) ด้วยสถิติความปลอดภัยที่โด่งดังของ (แม้ว่าพวกเขาจะมีโปรแกรมแก้ไขข้อผิดพลาดสำหรับปัญหาที่รุนแรงน้อยกว่า) ไม่เลย ฉันไม่พึ่งพาผลิตภัณฑ์ดังกล่าวที่มีคุณภาพสูงกว่านี้เพราะฉันทำงานให้กับธุรกิจที่สนับสนุนธุรกิจที่จัดหาคนที่มีเครื่องที่ใช้ Microsoft Windows ดังนั้นนี่คือสิ่งที่รหัสของฉันต้องใช้ในการทำงาน
การปฏิบัติจริง / การใช้งานต้องการให้ฉันทำงานบนแพลตฟอร์มที่ผู้คนพบว่ามีประโยชน์และเป็นแพลตฟอร์มที่มีชื่อเสียงที่ไม่ดีต่อความปลอดภัย (แม้ว่าจะมีการปรับปรุงอย่างมากตั้งแต่ต้นยุคสหัสวรรษซึ่งผลิตภัณฑ์ของ บริษัท เดียวกันนั้นแย่กว่ามาก) .
สรุป
มีสาเหตุหลายประการที่ทำให้การเขียนโปรแกรมคอมพิวเตอร์เกิดข้อผิดพลาดได้ง่ายขึ้นและเป็นที่ยอมรับของชุมชนผู้ใช้คอมพิวเตอร์ ในความเป็นจริงรหัสส่วนใหญ่จะเขียนในสภาพแวดล้อมที่จะไม่ยอมให้มีความพยายามปราศจากข้อผิดพลาด (ข้อยกเว้นบางประการเช่นการพัฒนาโปรโตคอลความปลอดภัยอาจได้รับความพยายามเพิ่มขึ้นเล็กน้อยในเรื่องนี้) นอกจากความคิดทั่วไปเกี่ยวกับเหตุผลของธุรกิจที่ไม่ต้องการลงทุนเงินมากขึ้นและพลาดกำหนดเวลาประดิษฐ์เพื่อทำให้ลูกค้ามีความสุข มีนาคมของเทคโนโลยีที่ระบุว่าถ้าคุณใช้เวลามากเกินไปคุณจะทำงานบนแพลตฟอร์มที่ล้าสมัยเพราะสิ่งต่าง ๆ มีการเปลี่ยนแปลงอย่างมีนัยสำคัญภายในหนึ่งทศวรรษ
โดยเฉพาะฉันสามารถจำได้ว่ารู้สึกประหลาดใจแค่ไหนที่ฟังก์ชั่นที่มีประโยชน์และได้รับความนิยมนั้นสั้นมากเมื่อฉันเห็นซอร์สโค้ดของ strlen และ strcpy ตัวอย่างเช่น strlen อาจเป็นอะไรบางอย่างเช่น "int strlen (char * x) {char y = x; ในขณะที่ (y ++)); return (yx) -1;}"
อย่างไรก็ตามโปรแกรมคอมพิวเตอร์ทั่วไปนั้นยาวกว่านั้นมาก นอกจากนี้การเขียนโปรแกรมที่ทันสมัยจำนวนมากจะใช้รหัสอื่นซึ่งอาจมีการทดสอบอย่างละเอียดน้อยกว่าหรือรู้จักกันในชื่อ buggy ระบบของวันนี้มีความซับซ้อนมากกว่าสิ่งที่คิดได้อย่างง่ายดายยกเว้นด้วยการโบกมือให้ผู้คนจำนวนมากในขณะที่ "รายละเอียดจัดการโดยระดับที่ต่ำกว่า"
ความซับซ้อนที่จำเป็นนี้และความแน่นอนของการทำงานกับระบบที่ซับซ้อนและไม่ถูกต้องทำให้การเขียนโปรแกรมคอมพิวเตอร์เป็นฮาร์ดแวร์จำนวนมากเพื่อตรวจสอบมากกว่าคณิตศาสตร์จำนวนมากที่สิ่งต่าง ๆ มีแนวโน้มที่จะต้มลงไปในระดับที่ง่ายกว่ามาก
เมื่อคุณทำลายสิ่งต่าง ๆ ในวิชาคณิตศาสตร์คุณจะได้ชิ้นส่วนที่เด็ก ๆ สามารถเข้าใจได้ คนส่วนใหญ่เชื่อถือคณิตศาสตร์ อย่างน้อยเลขคณิตพื้นฐาน (หรืออย่างน้อยก็นับ)
เมื่อคุณสลายการเขียนโปรแกรมคอมพิวเตอร์จริงๆเพื่อดูว่าเกิดอะไรขึ้นภายใต้ประทุนคุณจะจบลงด้วยการใช้งานที่ไม่สมบูรณ์ของมาตรฐานและรหัสที่ใช้งานไม่ได้ซึ่งจะถูกดำเนินการทางอิเล็กทรอนิกส์ในที่สุดและการใช้งานทางกายภาพนั้น ไม่กล้าแตะต้อง (ถ้าพวกเขารู้เรื่องนี้ด้วย)
ฉันได้พูดคุยกับโปรแกรมเมอร์บางคนที่อยู่ในวิทยาลัยหรือผู้สำเร็จการศึกษาเมื่อเร็ว ๆ นี้ซึ่งคัดค้านความคิดที่ว่าโค้ดปราศจากข้อบกพร่องสามารถเขียนได้ พวกเขาได้เขียนถึงความเป็นไปได้และแม้ว่าพวกเขายอมรับว่าตัวอย่างที่น่าประทับใจ (ซึ่งฉันสามารถแสดงได้) เป็นข้อโต้แย้งที่น่าเชื่อพวกเขาถือว่าตัวอย่างเหล่านี้เป็น flukes ที่หายากซึ่งไม่ได้เป็นตัวแทนและยังคงยกเลิกโอกาส ในการมีมาตรฐานที่สูงขึ้นดังกล่าว (ทัศนคติที่แตกต่างกันมากกว่ารากฐานที่ไว้วางใจได้มากที่เราเห็นในคณิตศาสตร์)