การเขียนโปรแกรม: จิตวิทยาของคอมพิวเตอร์

เราทุกคนมีความเกี่ยวข้องอย่างใกล้ชิดกับการเขียนโปรแกรมไม่ว่าจะเป็นผู้ใช้ในฐานะผู้ดูแลระบบในฐานะโปรแกรมเมอร์เอง แต่ท้ายที่สุดแล้วสิ่งนี้จะเชื่อมโยงกับชีวิตของเรามากขึ้นเมื่อหลายปีผ่านไป

ในบทความนี้ (จุดเริ่มต้นของซีรีส์เล็ก ๆ ที่ฉันวางแผนจะสร้าง) ฉันต้องการแบ่งปันแนวคิดบางประการเกี่ยวกับสิ่งที่ฉันได้ค้นพบเกี่ยวกับการเขียนโปรแกรมในช่วงหลายปีที่ผ่านมา ฉันไม่ได้อ้างว่ามีเทคนิคมากเกินไปฉันจะอธิบายเหตุผลในภายหลัง แต่สิ่งที่ฉันตั้งใจคือทำให้พวกเขาเห็นโลกด้วยตาของฉันและถ้าพวกเขาชอบรูปลักษณ์ของมันก็ให้พวกเขาเจาะลึกมันสักหน่อย🙂

ฉันจะโจมตีจุดที่ง่ายที่สุดก่อนที่จะลงรายละเอียด

ทำไมฉันจะไม่โพสต์เทคนิค?

สำหรับผู้ที่ได้อ่านโพสต์ของฉันเกี่ยวกับ คำสั่ง linux ที่ดีที่สุดคุณจะรู้สาเหตุของการโฟกัสนี้เล็กน้อย เทคโนโลยีมีการเปลี่ยนแปลงอยู่เสมอและถ้าฉันเขียนอะไรในวันนี้หากโพสต์ได้รับการตอบรับที่ดีฉันจะต้องอัปเดตข้อมูลเสมอ ในภาษาที่ใช้กันทั่วไปในปัจจุบันสิ่งเดียวที่แน่นอนคือการเปลี่ยนแปลง โดยสิ่งนี้ฉันหมายถึง (และโปรแกรมเมอร์สามารถพิสูจน์ว่าฉันถูกต้อง) เฟรมเวิร์กมีการเติบโตและปรับเปลี่ยนจากคอร์อยู่เสมอเนื่องจากมีข้อผิดพลาดเกิดขึ้นบางส่วนถือได้ว่าเป็นเรื่องง่าย เป็นโรคจิตในขณะที่คนอื่น ๆ อาจกลายเป็น ช่องโหว่. นี่คือเหตุผลว่าทำไมการเขียนโพสต์เกี่ยวกับภาษาที่เฉพาะเจาะจงในวันนี้จะรับประกันได้ว่าฉันอาจจะมีประโยชน์สักสองสามเดือนในกรณีที่ดีที่สุดหนึ่งหรือสองปี แต่นั่นไม่ใช่ความคิด

ไฟฟ้ามีความสำคัญ

บรรดาผู้ที่ได้ทำการวิจัยเกี่ยวกับภาษาโปรแกรมซอฟต์แวร์ที่ต่ำที่สุดจะรู้ว่าทุกอย่างย้อนหลังไปถึงไฟฟ้า ในอดีตการเขียนโปรแกรมจะทำในระดับฮาร์ดแวร์ซึ่งหมายความว่านาฬิกาเก่าเครื่องคิดเลขและอุปกรณ์อื่น ๆ สามารถเติมเต็มโชคชะตาของพวกเขาได้ด้วยการเขียนโปรแกรมโดย ฮาร์ดแวร์.

ปัญหา

การเปลี่ยนโปรแกรมฮาร์ดแวร์มีราคาแพงและซับซ้อน complicated (อย่างน้อยนั่นคือสิ่งที่พวกเขาบอกฉัน🙂 ). นี่คือสาเหตุที่โปรเซสเซอร์เกิดขึ้นซึ่งจริง ๆ แล้วเลเยอร์ฮาร์ดแวร์นั้นเป็นนามธรรมที่ให้คำสั่งไม่กี่คำสั่งเพื่อให้เราสามารถทำทุกอย่างที่เป็นไปได้ผ่านฮาร์ดแวร์ตอนนี้อยู่ในเลเยอร์ฮาร์ดแวร์เท่านั้น ซอฟต์แวร์.

โปรเซสเซอร์

โปรเซสเซอร์ในปัจจุบันมีฟังก์ชันจำนวน จำกัด เรียกว่า คำแนะนำ ในหนังสือหลายเล่ม สิ่งเหล่านี้ช่วยให้คุณสามารถใช้งานฟังก์ชันพื้นฐานที่สุดที่ฮาร์ดแวร์สามารถทำได้และระดมข้อมูลผ่านหน่วยความจำของคอมพิวเตอร์

ลงทะเบียน

รีจิสเตอร์เป็นช่องว่างที่โปรเซสเซอร์เก็บข้อมูลเพื่อให้สามารถทำงานบนเคอร์เนลได้ทั้งนี้ขึ้นอยู่กับสถาปัตยกรรมที่สามารถมีขนาดและลำดับที่แตกต่างกัน แต่ในวิธีง่ายๆหน้าที่ของมันคือการจัดเก็บข้อมูลที่บอกโปรเซสเซอร์ งานประเภทใดประเภทหนึ่งต่อไปนี้: ย้ายข้อมูลเลขคณิตและตรรกะและการควบคุม ไหล. ทุกอย่างสามารถสรุปได้ในฟังก์ชันประเภทนี้

Binario

โปรเซสเซอร์ทำงานในระดับไบนารีซึ่งหมายความว่าพวกเขาเข้าใจเท่านั้น 0ซี่ 1ใช่🙂. ข้อเท็จจริงที่น่าสงสัยที่นี่😀จำสิทธิ์ GNU / Linux ได้ไหม ดีคุณเคยสงสัยหรือไม่ว่าโปรเซสเซอร์รับรู้สิทธิ์เหล่านั้นได้อย่างไรเหรอ? ง่าย🙂ไบนารี ในระดับต่ำสุดตัวประมวลผลจะเข้าใจการอนุญาตเป็นลำดับต่อเนื่องของ 0 และ 1 และนั่นคือเหตุผลว่าทำไมฐานแปดที่เราสร้างขึ้นจึงมีค่า สำหรับการดำเนินการ 2 สำหรับการอ่านและ 4 สำหรับการเขียน สำหรับผู้ที่สามารถอ่านไบนารีได้พวกเขาจะเข้าใจว่า:

111100101111

พวกเขาใส่สิทธิ์ในการอ่านเขียนและดำเนินการสำหรับกลุ่ม otros ในขณะที่วางการดำเนินการและการอ่านสำหรับกลุ่ม กลุ่ม และอ่านสำหรับเจ้าของไฟล์เท่านั้น สำหรับสิ่งที่อยากรู้มากที่สุด 1 XNUMX วินาทีสุดท้ายจะเปิดใช้งานไฟล์ setguid, setuid และ y sticky bit. หากคุณไม่ทราบว่าไบนารีนี้คืออะไรฉันสามารถอธิบายได้ในโพสต์อื่นหากคุณไม่ทราบเรื่องนี้เกี่ยวกับ setuid, setgid และ sticky bit ฉันจะปล่อยให้คุณ😉 แต่ฉันสามารถอธิบายที่อื่นได้หากจำเป็น

เมื่อความอยากรู้โทร ...

ถ้าคุณติดตามฉันมาที่นี่ความอยากรู้ของคุณควรจะเริ่มถามหลายสิ่งหลายอย่างสิ่งแรกที่ฉันต้องการตอบ (และอาจเป็นสิ่งเดียวที่โพสต์นี้จะอนุญาตให้ฉันเพราะฉันเขียนเยอะอยู่แล้ว) คือ : หากการโทรเหมือนกันเหตุใดโปรแกรมจึงแตกต่างกัน

จิตวิทยา

การเขียนโปรแกรมเป็นศิลปะในการเรียนรู้ที่จะอ่านใจ🙂ฉันต้องการเริ่มส่วนนี้ด้วยคำพูดที่ฉันอ่านเมื่อนานมาแล้ว Edsger Dijkstra กล่าวว่า:

หากการดีบักเป็นกระบวนการของการดีบักการเขียนโปรแกรมจะต้องเป็นขั้นตอนในการแนะนำ

และฉันไม่พบวิธีที่ดีกว่านี้ในการอธิบายทั้งหมดนี้🙂ทำไมการเขียนโปรแกรมจึงเป็นศิลปะในการแนะนำข้อผิดพลาด? มีมากกว่าหนึ่งคนที่จะสงสัยในเวลานี้ คำตอบนั้นง่ายมากเพราะจิตใจของเราเป็นมนุษย์และมนุษย์ทำผิดพลาดมันอยู่ในธรรมชาติของเราและมันจะคงอยู่ตราบเท่าที่มนุษย์ยังมีอยู่บนโลกใบนี้

คอมพิวเตอร์ไม่ผิด

ผู้ที่ทำผิดพลาดคือเราทีมงานจะ จำกัด ตัวเองให้ผลิตซ้ำสิ่งที่เราบอกพวกเขาไม่ถือว่าอะไรพวกเขาไม่ตีความอะไรพวกเขาไม่คัดค้านสิ่งใดพวกเขาอ่านและกระทำเท่านั้น ดังนั้นในหนังสือ C เล่มอื่นฉันเคยอ่านอะไรแบบนี้:

ภาษา C เป็นภาษาที่หยาบคายคุณสามารถทำอะไรได้มากมาย แต่มันจะไม่มีวันหยุดคุณจากการยิงตัวเองที่เท้าถ้าคุณต้องการทำหรือคุณจะบอกมัน

นี่เป็นความจริงที่ค่อนข้างอยากรู้อยากเห็น🙂เนื่องจากเมื่อทำงานในระดับต่ำเช่นนี้จึงมีความเป็นไปได้ว่าการดำเนินการหลายอย่างที่ดำเนินการไปนั้นสามารถทำลายล้างสิ่งที่ไม่ได้เกิดขึ้นกับภาษาระดับสูงกว่าเล็กน้อยเนื่องจากเลเยอร์การป้องกันข้อผิดพลาดนั้นเก่ากว่า .

ทุกอย่างเป็นจิตวิทยา

ทุกภาษาเฟรมเวิร์กโปรแกรมเมอร์เคารพและปฏิบัติตามปรัชญาบางประเภทและหากไม่เป็นเช่นนั้นก็จะไม่มีอนาคตที่สดใส พวกเราที่ทำงานเกี่ยวกับ UNIX และอนุพันธ์คงจะรู้จักวลีเก่า ๆ :

ทำสิ่งหนึ่งและทำได้ดีมาก

ปรัชญานี้เป็นแนวคิดที่บางโครงการเช่นเคอร์เนลทำตามหน้าที่ค่อนข้างเล็กที่ทำเพียงสิ่งเดียว แต่ทำให้ดีที่สุดเท่าที่จะทำได้

ถ้าเราไปภาษาอื่นแต่ละคนจะมีหน้าที่และวัตถุประสงค์บางอย่างอนุญาตมากกว่าและอื่น ๆ มีข้อ จำกัด มากกว่า แต่ทั้งหมดเป็นไปตามวิธีคิดของตัวเอง

เรียนรู้ที่จะอ่านใจ

มีคำพูดที่ค่อนข้างธรรมดาในหมู่โปรแกรมเมอร์ว่ามีหลายร้อยวิธีในการแก้ปัญหาเดียวกัน นี่เป็นเรื่องจริง แต่มีบางอย่างที่ลึกซึ้งกว่าเกี่ยวกับแง่มุมนี้ การอ่านซอร์สโค้ดช่วยให้คุณอ่านใจได้ไม่ใช่แค่ความคิดใด ๆ แต่เป็นความคิดของโปรแกรมเมอร์ (หรือโปรแกรมเมอร์) ที่เขียนมันขึ้นมา มันเป็นไดอารี่เสมือนจริงและลึกซึ้งช่วยให้คุณรู้ลึกถึงจิตใจของนักพัฒนาและในกรณีของโครงการขนาดใหญ่จะช่วยให้คุณเห็นว่าความคิดเชิงตรรกะและเชิงวิพากษ์ของพวกเขาเติบโตขึ้นอย่างไรเมื่อเวลาผ่านไป สิ่งที่พิเศษและหล่อเลี้ยงจิตใจของเด็ก ๆ อย่างมากเพราะคุณสามารถรู้เส้นทางที่ดีที่สุดของผู้คนที่ต้องค้นพบพวกเขา🙂

เพื่อให้สอดคล้อง

โปรแกรมเมอร์และผู้เชี่ยวชาญหลายคนบอกว่าเราต้องออกจากไฟล์ เขตความสะดวกสบายและถึงแม้ว่าจะเป็นเรื่องจริง แต่ก็เกินความจำเป็นที่จะต้องรักษากระบวนการและรูปแบบบางอย่างไว้ นี่เป็นเรื่องง่ายที่จะอธิบายความคิดของเราเป็นโครงสร้างที่ซ้ำซากและเคารพหากคุณเขียนโค้ดในลักษณะเดียวกันทุกวันในช่วงเวลาสั้น ๆ คุณจะหยุดคิดถึงรูปแบบและคุณจะสามารถมีสมาธิกับมันได้ Fondo. สิ่งนี้ช่วยให้คุณเห็นไฟล์ ตรรกะ ของโปรแกรมแทนไฟล์ ไวยากรณ์ของภาษา และนี่คือเหตุผลว่าทำไมฉันถึงพิจารณาว่าการเรียนรู้ แนวคิด จะสำคัญกว่าการเรียนรู้เสมอ แบบฟอร์ม. นี่เป็นความคิดเห็นส่วนตัว แต่ฉันหวังว่าหลังจากอ่านทั้งหมดนี้คุณจะเข้าใจว่าทำไมฉันถึงคิดแบบนั้น🙂ยังบอกโดยคนที่ต้องเขียนโปรแกรมใน C, Java, Javascript, Python, Ruby, PHP และอื่น ๆ 🙂รู้ แนวคิดช่วยให้เขียนโค้ดได้ง่าย

ในระยะสั้น

นี่เป็นขั้นตอนแรกในซีรีส์ที่ฉันหวังว่าจะช่วยให้คุณคิดแตกต่างกันเกี่ยวกับศิลปะการเขียนโปรแกรมแม้กระทั่งเชิญชวนให้คุณเจาะลึกแนวคิดที่ช่วยให้คุณสามารถรันโค้ดที่คุณเขียนได้หลายร้อยครั้ง แต่พวกเขา ไม่ได้หยุดที่จะคิดเกี่ยวกับสิ่งที่เป็นจริง และสำหรับผู้ที่ยังไม่ได้เริ่มเขียนโปรแกรม แต่ต้องการสามารถจัดลำดับความสำคัญเล็กน้อยเกี่ยวกับสิ่งที่สำคัญที่ต้องรู้🙂คำทักทาย


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   ฮาเวียร์จี. เดลกาโด dijo

    บทความที่เป็นเรื่องเป็นราวมากซึ่งมีการพูดถึงการเขียนโปรแกรม (ในกรณีนี้) อาจเป็นภาษาใหม่ที่โปรแกรมในเชิงลึกมากขึ้นการสนับสนุนของฉันมีดังต่อไปนี้

    1.    คริส ADR dijo

      สวัสดี Javier ขอบคุณมาก🙂ฉันคิดว่าสิ่งนี้สำคัญมากเพราะพวกเขาต้องการสอนให้ฉันทำรหัสเท่านั้น Ctrl + C ... Ctrl + V 🙂ที่มีชื่อเสียง แต่ฉันไม่เคยปล่อยให้ตัวเองถูกลากด้วยสิ่งนี้ แม้ว่ามันจะเป็นปัญหาที่ง่ายที่สุดในโลกที่ฉันอยากจะเขียนมันมากกว่าที่จะคัดลอกมาจากคนอื่น แต่มันก็ทำให้ฉันรู้สึกว่ามันเป็นสิ่งที่ฉันสร้างขึ้น
      ความนับถือ

  2.   บาลัว dijo

    รอบทต่อไปอยู่แล้วฉันหยุดเขียนโปรแกรมไปนานแล้วและฉันคิดว่าฉันสามารถหาสาเหตุในการตัดสินใจของฉันได้ในบทต่อไปเนื่องจากบทนี้ฉันถอดหมวกออก

  3.   คริส ADR dijo

    สวัสดี Balua 🙂
    ฉันจะคิดอะไรบางอย่างสำหรับอันต่อไป มันค่อนข้างยากที่จะจัดเรียงทุกอย่างในลักษณะที่สามารถติดตามเธรดได้จากโพสต์ใด ๆ แต่ฉันจะพยายามมีอันนี้ (และอีกหลาย ๆ อันที่ถามฉัน) เร็ว ๆ นี้ ขอบคุณสำหรับความคิดเห็นของคุณ ความนับถือ

  4.   Anders dijo

    อัญมณีของบทความฉันหวังว่าต่อไป ...