เหนือกว่า "ภาคการศึกษาที่หายไป": เครื่องมือที่มองไม่เห็นที่โปรแกรมเมอร์ทุกคนต้องเรียนรู้อย่างยากลำบาก

ทีมชุมชน BigGo
เหนือกว่า "ภาคการศึกษาที่หายไป": เครื่องมือที่มองไม่เห็นที่โปรแกรมเมอร์ทุกคนต้องเรียนรู้อย่างยากลำบาก

ในวงการการศึกษาวิทยาการคอมพิวเตอร์ นักศึกษาจะเชี่ยวชาญเกี่ยวกับอัลกอริทึมและโครงสร้างข้อมูล แต่บ่อยครั้งที่จบออกมาโดยยังไม่พร้อมสำหรับเครื่องมือและแนวคิดเชิงปฏิบัติที่จะต้องใช้ในชีวิตประจำวัน หลักสูตร The Missing Semester of Your CS Education ซึ่งเดิมมาจาก MIT ได้เข้ามาจัดการกับช่องว่างนี้ด้วยการสอนความชำนาญในการใช้ command-line, version control และการดีบัก อย่างไรก็ตาม การอภิปรายในชุมชนล่าสุดได้เผยให้เห็นถึงความรู้พื้นฐานที่สำคัญในระดับที่ลึกยิ่งไปกว่าซึ่งโปรแกรมเมอร์ย่อมต้องได้รับมาผ่านประสบการณ์ที่เจ็บป้อน

หลักสูตรแฝงของการเขียนโปรแกรม

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

การเข้ารหัสไฟล์ข้อความ โดยเฉพาะ Unicode, UTF-8, Mojibake เวลา: เขตเวลา, วันอธิกสุรทิน/อธิกวินาที, ISO-8601 ลอคาเล, i18n, และรูปแบบวันที่/ตัวเลขท้องถิ่น ตัวเลขทศนิยม IEEE 754: NaN และ inf, underflow, overflow, สาเหตุที่ 0.1 + 0.2 != 0.3 สกุลเงิน, รูปแบบการใช้จุลภาค/จุด, การแทนเลขทศนิยมแบบ fixed-point

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

หัวข้อการเขียนโปรแกรมที่นักพัฒนามักพลาดไป:

  • การเข้ารหัสข้อความ: Unicode, UTF-8, Mojibake (ข้อความที่แสดงผิดเพี้ยนจากการใช้ encoding ไม่ตรงกัน)
  • การจัดการเวลา: เขตเวลา, leap seconds, รูปแบบ ISO-8601
  • การทำให้รองรับหลายภาษา: Locales, รูปแบบวันที่/ตัวเลข
  • ความแม่นยำของตัวเลข: ข้อควรระวังของ floating-point แบบ IEEE 754
  • ข้อมูลทางการเงิน: รูปแบบสกุลเงิน, ทศนิยมแบบ fixed-point, อัตราแลกเปลี่ยน
  • รูปแบบไฟล์: ตัวคั่นใน CSV, ปัญหาความเข้ากันได้กับ Excel
  • ความแตกต่างของระบบ: การขึ้นบรรทัดใหม่, ตัวคั่นพาธ, ความแตกต่างระหว่างตัวพิมพ์ใหญ่-เล็ก

ข้อผิดพลาดจากสกุลเงินและการจัดรูปแบบข้อมูล

การคำนวณทางการเงินและการจัดรูปแบบข้อมูลระหว่างประเทศ ก่อให้เกิดความท้าทายพิเศษสำหรับนักพัฒนารุ่นใหม่ งานที่ดูเหมือนง่ายอย่างการจัดการเงิน อาจนำไปสู่การตัดสินใจออกแบบที่หายนะได้หากไม่เข้าใจอย่างถูกต้อง ดังที่ผู้แสดงความคิดเห็นท่านหนึ่งได้สังเกตเกี่ยวกับการจัดการสกุลเงินว่า ผมแค่ไม่อยากให้พวกเขาออกแบบโมเดลข้อมูลด้วยคอลัมน์ numeric(10,2) เดียวสำหรับ 'sale_price' หรือฮาร์ดโค้ดรายงาน PowerBI ของพวกเขาให้แสดงข้อมูลห้าปีที่ผ่านมาโดยใช้อัตราแลกเปลี่ยน ณ วันใดวันหนึ่งที่พวกเขาเขียนรายงานขึ้นมา

ชุมชนยังได้ขยายรายการนี้ให้รวมถึงความแปลกประหลาดในการจัดการไฟล์ CSV โดยเฉพาะการจัดการไฟล์ที่คั่นด้วยของ Excel ที่มีลักษณะเฉพาะ การเลือกตัวคั่นฟิลด์ และกฎการ escape ปัญหารูปแบบเหล่านี้มักทำให้เกิดความเสียหายของข้อมูลและความล้มเหลวในการประมวลผลในแอปพลิเคชันจริง โดยเฉพาะเมื่อย้ายข้อมูลระหว่างระบบและลอคาเลที่แตกต่างกัน

ความแปรผันของระบบและเครื่องมือ

เหนือจากการจัดรูปแบบข้อมูล นักพัฒนายังต้องเผชิญกับความแตกต่างอันละเอียดอ่อนระหว่างระบบปฏิบัติการและสภาพแวดล้อมการพัฒนา ผู้แสดงความคิดเห็นได้เน้นย้ำถึงความแตกต่างของตัวสิ้นสุดบรรทัดระหว่าง Windows (CRLF) และระบบแบบ Unix (LF), ความแตกต่างของตัวคั่นเส้นทาง (backslash เทียบกับ forward slash), พฤติกรรมการใส่เครื่องหมายคำพูดใน command-line, และความไวต่อตัวพิมพ์ในระบบไฟล์ ความแตกต่างเหล่านี้มักทำให้สคริปต์และเครื่องมือหยุดทำงานเมื่อย้ายระหว่างสภาพแวดล้อมการพัฒนา การทดสอบ และการผลิต

การอภิปรายยังกล่าวถึงสิ่งจำเป็นสมัยใหม่ เช่น containerization, continuous integration/deployment pipelines, และการจัดการแพ็กเกจในภาษาการเขียนโปรแกรมต่างๆ ดังที่ผู้แสดงความคิดเห็นท่านหนึ่งระบุเกี่ยวกับประสบการณ์ของพวกเขากับหลักสูตร The Missing Semester ต้นฉบับว่า ผมได้ศึกษาหลักสูตรนี้อย่างละเอียดก่อนเริ่มงานแรก และนั่นช่วยเร่งกระบวนการ onboarding ของผมได้อย่างมาก ผมเคยเห็นพนักงานใหม่ใช้เวลามากมายในการเรียนรู้เครื่องมือระหว่างทำงานเพราะขาดพื้นฐานเหล่านี้!

หัวข้อหลักสูตร Missing Semester ต้นฉบับ (สำหรับเปรียบเทียบ):

  • ภาพรวมหลักสูตร + shell
  • เครื่องมือ shell และการเขียนสคริปต์
  • โปรแกรมแก้ไขข้อความ (Vim)
  • การจัดการข้อมูล
  • สภาพแวดล้อมบรรทัดคำสั่ง
  • ระบบควบคุมเวอร์ชัน (Git)
  • การดีบักและการวิเคราะห์ประสิทธิภาพ
  • Metaprogramming
  • ความปลอดภัยและการเข้ารหัสลับ
  • เบ็ดเตล็ด (หัวข้อเบ็ดเตล็ด)

ความจริงในองค์กร

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

การสนทนาเปิดเผยว่าสิ่งที่เรียกว่า Software Engineering อย่างเป็นทางการในการตั้งค่าทางวิชาการ มักจะขาดความกังวลเชิงปฏิบัติเหล่านี้ไป ดังที่ผู้เข้าร่วมระบุ หลักสูตร software engineering ของพวกเขามุ่งเน้นไปที่ระเบียบวิธีการพัฒนาและ design patterns มากกว่าที่จะลงลึกในรายละเอียดประจำวันของการใช้เครื่องมือและความสามารถในการทำงานร่วมกันของระบบ

การอภิปรายอย่างต่อเนื่องเกี่ยวกับหลักสูตร The Missing Semester แสดงให้เห็นว่าช่องว่างระหว่างวิทยาการคอมพิวเตอร์ทางวิชาการและการพัฒนาซอฟต์แวร์ระดับมืออาชีพยังคงมีนัยสำคัญ แม้ว่าหลักสูตรเช่นของ MIT จะให้พื้นฐานที่ยอดเยี่ยม แต่ชุมชนยังคงระบุชั้นใหม่ของความรู้พื้นฐานที่สำคัญซึ่งนักพัฒนาจะต้องได้รับตลอดอาชีพการงานของพวกเขา พื้นฐานที่ไม่ได้สอนเหล่านี้ไม่ได้เป็นเพียงแค่ความรู้ทางเทคนิค แต่ยังเป็นภูมิปัญญาที่สะสมมาจากสิ่งที่สำคัญจริงๆ ในการสร้างและบำรุงรักษาซอฟต์แวร์ในโลกแห่งความเป็นจริง

อ้างอิง: The Missing Semester of Your CS Education