สวัสดีทุกคน🙂สัปดาห์นี้ฉันได้รับความบันเทิงพอสมควรในการอ่านหนังสือเกี่ยวกับการเขียนโปรแกรมความจริงก็คือวิธีที่ดีที่สุดในการเรียนรู้การเขียนโปรแกรมมักจะอยู่ที่หนังสือบทความบทช่วยสอนคำแนะนำที่สามารถหาได้ (รวมถึงของฉัน) เป็นเพียง เกณฑ์มาตรฐานเมื่อเปรียบเทียบกับหนังสือจริงในหัวข้อ ตอนนี้เราต้องกำหนดว่าหนังสือ "ของจริง" คืออะไรเช่นกันเนื่องจากหนังสือบางเล่มมักจะไม่ดีและหนังสือหลายเล่มอาจมีราคาสูงกว่าที่ควรค่าและเสียเวลาจริงๆ
ตลอดหลายปีที่ผ่านมารายชื่อหนังสือที่ฉันอ่านและรายชื่อหนังสือที่ฉันสามารถแนะนำได้มีความแตกต่างกันเล็กน้อย แต่ไม่ต้องสงสัยเลยว่าในรายการโปรดของฉันบางเล่มเรามี (ไม่เรียงลำดับเฉพาะ):
- CEH Certified Ethical Hacker โดย Matt Walker
- เริ่มต้น Python: จากมือใหม่สู่มืออาชีพโดย Magnus Lie Hetland
- การแฮ็ก: ศิลปะแห่งการหาประโยชน์โดย Jon Erickson
- เริ่มต้นกับ Arduino โดย Massimo Banzi
- การเรียนรู้ bash Shell โดย Cameron Newbam & Bill Rosenblatt
- เรียนรู้บรรณาธิการ vi และ vim โดย Arnold Robbins, Elbert Hannah และ Linda Lamb
- Linux Kernel แบบสรุปโดย Greg Kroah-Hartman (ผู้พัฒนา Gentoo ด้วย)
- Modern C โดย Jens Gustedt
- คู่มือ Shellcoder โดย Chris Anley, John Heasman, Felix « FX » Linder & Gerardo Richarte
- ภาษาการเขียนโปรแกรม C โดย Brian W.Kernighan & Dennis M. Ritchie (ผู้สร้าง C)
- การแก้จุดบกพร่องด้วย GDB โดย Richard Stallman, Roland Pesch, Stan Shebs และอื่น ๆ
- Hacking Linux Exposed: ความลับและโซลูชันด้านความปลอดภัยของ Linux จากกลุ่มนักวิจัย ISECOM จำนวนมาก ได้แก่ Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (อดีตผู้พัฒนา Gentoo คนอื่น), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa , Pablo Endres, Richard Feist, Andrea Ghirardini, Julian "HammerJammer" Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti และคณะ
- ระบบปฏิบัติการ: แนวทางตามแนวคิดโดย Dhananjay M. Dhamdhere
- Pro Git โดย Scott Chacon และ Ben Straub
- ผู้เชี่ยวชาญการเขียนโปรแกรม C: ความลับลึก ๆ โดย Peter Van Der Linden
ฉันสามารถพูดถึงหนังสือเหล่านี้ได้เป็นอย่างดี แต่สำหรับวันนี้เราจะนำบางส่วนของข้อความจากเล่มสุดท้ายในรายการเนื่องจาก anectodes จำนวนมากเหล่านี้ทำให้ฉันหลงใหลและช่วยให้ฉันเข้าใจความลับที่ซับซ้อนบางอย่างของ C และการเขียนโปรแกรมโดยทั่วไปได้ดีขึ้น 🙂
Unix และ C
เมื่อเราพูดถึง UNIX ประวัติศาสตร์เกี่ยวพันกับที่มาของระบบนี้และการพัฒนาของภาษาที่จนถึงทุกวันนี้เป็นภาษาที่ใช้มากที่สุดในการพัฒนาและอนุพันธ์ (รวมถึง Linux) และน่าแปลกที่ทั้งสองเกิดจาก "ความผิดพลาด"
หลายเมตริก เป็นโครงการขนาดใหญ่ที่รวบรวม Bell Laboratories, General Electric และ MIT เพื่อสร้างระบบปฏิบัติการระบบดังกล่าวมีข้อผิดพลาดมากมายและหนึ่งในข้อผิดพลาดด้านประสิทธิภาพที่สำคัญที่สุดที่ทำให้ระบบใช้งานไม่ได้จริง เรากำลังพูดถึงปี 1969 ดังนั้นฮาร์ดแวร์ในยุคนั้นจึงไม่สามารถรองรับจำนวนซอฟต์แวร์ที่จำเป็นในการรันระบบได้
จนกระทั่งปี 1970 วิศวกรของ Bell สองคนเริ่มทำงานกับระบบปฏิบัติการที่เรียบง่ายรวดเร็วและมีน้ำหนักเบาสำหรับ PDP-7 ระบบทั้งหมดได้รับการเขียนใน ผู้ประกอบ และได้รับการเรียก ยูนิกซ์ เป็นการล้อเลียน หลายเมตริก เนื่องจากเขาต้องการทำเพียงไม่กี่อย่าง แต่ต้องทำให้ดีแทนการทำงานที่สูญเปล่ามหาศาลอย่างที่สองหมายถึง ตอนนี้คุณสามารถเข้าใจว่าทำไม ยุค เริ่ม 1 มกราคม 1970. 🙂เป็นเรื่องที่น่าสงสัยสำหรับฉัน ในเวลานั้นยังไม่มีการพูดถึง C แต่เป็นของ ใหม่ B เนื่องจากความคิดของ Ritchie มาจากภาษา B ที่ใช้อยู่แล้วในเวลานั้น
ต้นค
ในช่วงหลายปีที่ผ่านมา (1972-3) คำว่า C เริ่มใช้เมื่อภาษาใหม่เริ่มเป็นรูปเป็นร่างและในช่วงเวลานี้ความจริงที่น่าสงสัยก็เกิดขึ้นโปรแกรมเมอร์และนักเขียนโปรแกรมตลกหลายคนกล่าวว่า:
โปรแกรมเมอร์รู้ว่าคุณเริ่มนับจาก 0 แทนที่จะเป็น 1
นี่ไม่เป็นความจริงอย่างสิ้นเชิง🙂เหตุผลที่แท้จริงว่าทำไมจึงถือว่าเป็นแบบนี้มาจนถึงทุกวันนี้เป็นเพราะในการสร้างสำหรับผู้เขียนคอมไพเลอร์การคำนวณอาร์เรย์นั้นง่ายกว่าโดยใช้ ชดเชยสิ่งเหล่านี้ระบุระยะทางที่อยู่จากจุดกำเนิดไปยังวัตถุประสงค์ที่ต้องการนั่นคือเหตุผลว่าทำไม:
array[8]=2;
มันบอกเราว่าองค์ประกอบ 9 ของอาร์เรย์ถูกกำหนดให้เป็น 2 เนื่องจากมีการเพิ่ม 8 หน่วยลงในอาร์เรย์เพื่อให้เข้าถึงพื้นที่หน่วยความจำที่จะจัดเก็บองค์ประกอบ 2 ก่อน C หลายภาษาเริ่มนับจาก 1 ด้วย C ซึ่งตอนนี้เกือบทั้งหมดเริ่มต้นด้วย 0 ดังนั้นจึงไม่ใช่ความผิดของโปรแกรมเมอร์ แต่เป็นของผู้เขียนคอมไพเลอร์ที่เป็นเช่นนั้น
เปลือกบอร์น
นี่เป็นหัวข้อที่แม้ว่าจะไม่เกี่ยวข้องโดยตรงกับ C แต่ก็สามารถช่วยได้มากกว่าหนึ่งในการทำความเข้าใจว่าเหตุใดการเขียนโปรแกรมเชลล์จึงเป็นเรื่องแปลกและเป็นเรื่องที่อยากรู้อย่างแน่นอน Steve Bourne เขียนคอมไพเลอร์สำหรับ Algol-68 ในฤดูกาลนั้นซึ่งเป็นภาษาที่คีย์ ( {}
) ถูกแทนที่ด้วยคำดังนั้นเราจึงกำหนดได้ดังนี้ใน C:
#define IF if(
#define THEN ){
#define ELSE }else{
#define FI };
นี่เป็นเพียงตัวอย่างบางส่วนของสิ่งที่ Algol เข้าใจ แต่ถ้าเรานำไปใช้กับการเขียนโปรแกรมเชลล์วันนี้คุณจะเข้าใจว่าทำไมในเชลล์โปรแกรมของคุณจึงต้องการ fi
สำหรับแต่ละ if
🙂น่าสนใจอย่างแน่นอน
เริ่มอ่าน
ฉันไม่สามารถบอกรายละเอียดทั้งหมดของหนังสือได้โดยเฉพาะอย่างยิ่งเนื่องจากหัวข้อเหล่านี้ส่วนใหญ่เป็นหัวข้อการเขียนโปรแกรมที่ต้องมีพื้นฐานมาก่อนเพื่อให้เข้าใจ แต่ฉันคิดว่าฉันจะแบ่งปันเกร็ดเล็กเกร็ดน้อยที่น่าสงสัยบางอย่างที่ฉันพบระหว่างทางกับคุณ🙂ฉันยังไม่มี ถึงเวลาทำงานกับบางรายการที่อยู่ในรายการสิ่งที่ต้องทำเพราะหนังสือสองสามเล่มสุดท้ายเหล่านี้ทำให้ฉันติดใจและฉันก็สนุกกับมันทุกวันและเหนือสิ่งอื่นใดที่พยายามทำความเข้าใจให้เต็มที่ สวัสดีและเร็ว ๆ นี้ฉันจะสามารถแบ่งปันกับคุณหัวข้อเพิ่มเติมคำทักทาย
บทความของคุณน่าสนใจสำหรับฉันมาก ขอบคุณมาก.
น่าสนใจมากเช่นเคย
คำชี้แจงที่น่าสนใจเป็นสิ่งที่ดี
Excelente
น่าสนใจ !!! ขอบคุณมาก.
หลายเมตริก? มันจะไม่เป็นแบบมัลติ (https://en.wikipedia.org/wiki/Multics)
ภาษาที่มีดัชนีตั้งแต่ 1 เป็นสิ่งประดิษฐ์ของซาตาน ...
หมายเหตุที่น่าสนใจ🙂ฉันคิดว่า ณ จุดหนึ่งในประวัติศาสตร์มีการใช้ทั้งสองคำ:
https://www.landley.net/history/mirror/collate/unix.htm
และเห็นได้ชัดว่าเป็นหนังสือเล่มเดียวกันกับที่เขียนในช่วงกลางยุค 90
ขอบคุณสำหรับคำทักทายที่ชัดเจน🙂
สิ่งที่แปลกจริงๆคุณทำให้ฉันสงสัยฉันได้ดูสำเนา "ซื้อ" ของ Expert C Programming: ความลับลึก ๆ และมี multics มาด้วยนี่เป็นครั้งแรกที่ฉันได้ยินว่า multrics มันทำให้นึกถึงกระต่ายทริกซ์ตัวน้อยแค่ไหน
ฮ่า ๆ ๆ อยากรู้อยากเห็นอย่างแน่นอนฉันตรวจสอบสำเนาลับในภาษาอังกฤษของฉันแล้วมันยังบอกว่า Multrics (เพราะคุณทำให้ฉันสงสัยด้วย) ... อาจจะเป็นการแสดงออกของเวลา😛
ความนับถือ
ผลงานที่ยอดเยี่ยม
ที่น่าสนใจแม้ว่า Multrics นั้นเกิดจากการพิมพ์ผิดเนื่องจากชื่อเดิมของระบบปฏิบัติการนั้นคือ Multics และ Unix เดิมเรียกว่า Unics ซึ่งหมายถึงระบบปฏิบัติการที่ยอดเยี่ยมนั้นในที่สุดและโดยการออกเสียง Unics เปลี่ยนเป็น Unix ตอนนี้คุณต้องพูดถึงชื่อของผู้ที่ถือว่าเป็นผู้เขียน Unix เท่านั้น Ken Thompson มีตำนานเล่าว่าทั้ง Thompson และ Ritchie อยู่ในโรงอาหารที่ Bell Labs เพื่อแสดงความคิดเห็นเกี่ยวกับโครงการของพวกเขาและ Ritchie แนะนำให้ Thomposon เขียนโปรแกรม Unics ด้วย C ซึ่งเป็นภาษาที่เขาเขียน ... และส่วนที่เหลือ เป็นประวัติศาสตร์ 😉
อย่างไรก็ตามก่อนหน้านี้โปรแกรมทั้งหมดเขียนด้วยคำแนะนำของเครื่องซึ่งทำให้พวกเขาขึ้นอยู่กับฮาร์ดแวร์โดยสิ้นเชิงนวัตกรรมของ C นอกเหนือจากการทำให้เขียนโปรแกรมได้ง่ายขึ้นแล้วภาษานั้นไม่ขึ้นอยู่กับฮาร์ดแวร์ที่ใช้ คอมไพเลอร์ซึ่งเป็นปรัชญาที่หลายปีต่อมา Java จะใช้ในแง่ที่ว่าโปรแกรมต่างๆไม่ได้ขึ้นอยู่กับระบบปฏิบัติการโดยเพิ่ม Java virtual machine
สิ่งที่ไม่ดีเกี่ยวกับตำนานคือพวกเขาบิดเบือนประวัติศาสตร์มากกว่าหนึ่งวิธี ... และพวกเขาสามารถทำให้คุณคิดว่ามีบางอย่างเกิดขึ้นเมื่อมันไม่ได้ ... เช่นเดียวกับการสนทนาระหว่าง ธ อมป์สันและริตชี่ (ซึ่งฉันไม่ได้ใส่ไว้ตามต้องการ) เนื่องจากมันนำไปสู่ ถึงข้อผิดพลาดทางประวัติศาสตร์และทางเทคนิค (C ไม่ใช่ก่อนหน้า UNIX) ...
และสำหรับประการที่สอง ... อีกตำนานหนึ่งที่บิดเบือนความเป็นจริงเนื่องจากก่อนหน้า C มี B, A, pascal, Ada, algol-60, PL / 1 และอีกสองสามภาษาที่เขียนโปรแกรมได้อย่างถูกต้อง (แตกต่างจาก Assembly มาก และภาษาถิ่นตามสถาปัตยกรรมที่ขึ้นอยู่กับฮาร์ดแวร์ของโปรเซสเซอร์) ดังนั้น C จึงไม่ "คิดค้น" ในแง่นี้เขาเพียงแค่นำโซลูชันที่มีอยู่แล้วในภาษาอื่น ๆ มาใช้และในที่สุดมันก็ได้รับความนิยมเร็วกว่าและดีกว่าสิ่งเหล่านี้ ... ส่วนเดียว ความจริงก็คือ Java ใช้แนวคิดของการพกพานี้เพื่อสร้างเครื่องเสมือนในภายหลัง แต่ไม่เพียง แต่พึ่งพา C สำหรับสิ่งนี้ แต่ตามแบบจำลองอื่น ๆ มิฉะนั้นเราจะไม่มีกระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุใน java ...
ฉันรู้สึกว่าฉันควรจะชี้แจงสถานการณ์เพราะใครก็ตามที่มีความเชี่ยวชาญน้อยกว่าก็สามารถถือได้ว่าเป็นความจริงแล้วเชื่อว่ามันเกิดขึ้นแบบนี้ ... ทักทาย🙂
เช่นเคยบทความน่าสนใจมากขอบคุณสำหรับการมีส่วนร่วม