ผมเรียนรู้อะไรจากการเขียนโปรแกรมใช้เอง (3) - คิดด้วยชื่อ


เมื่อใช้ศัพท์ที่ลงตัว กระบวนการคิดจะเกิดขึ้นได้อย่างลื่นไหล

แม้จะไม่ได้ใช้ภาษาปาสคาล สิ่งแรกที่ผมได้จากการอ่านภาษาปาสคาลก็คือแนวคิดในการตั้งชื่อ และนิสัยที่ดีในการเขียน เช่น การเว้นวรรค การใส่ comment

ตั้งชื่อให้ดี ไม่ได้หมายถึงการมี นามมงคล

ตั้งชื่อให้ดี คือการสื่อสารกับตัวเอง

เพราะสิ่งที่เป็นศัตรูที่น่ากลัวที่สุดหมายเลขหนึ่งในการเขียนโปรแกรม ก็คือตัวเราเอง !

"เอ๊ะ...บรรทัดนี่มันทำอะไรของมันง่ะ"

"อือม์..พารากราฟนี้ก็ด้วย..."

"...เอ่อ..จริง ๆ แล้ว ทั้งโปรแกรมเลยนั่นแหละ ! ใครเขียนฟะ..." 

นั่นคือสิ่งที่เราจะคิดในใจเมื่อกลับมาอ่านโค้ดที่เราเขียนเอง ในอีกสามเดือนถัดมา

ลืมไปเรียบร้อยนะสิครับ

ก็เลยต้องตั้งชื่อตัวแปรให้สื่อ มีการเว้นวรรคให้สวยงาม มีการใส่ comment เต็มพิกัด เพื่อเป็นการจัดการเชิงโครงสร้างให้พลาดยากขึ้น 

วัตรปฎิบัติในการเขียนโปรแกรมที่ดี จึงไม่ต่างจากการเขียนบันทึกเล่าความคิดของตัวเองแต่อย่างไร 

ผมเคย(=have) ตั้งชื่อตัวแปรแบบยาวมากกกกกกกกกกกกกก

อย่างเช่น

SumofAllCasesExceptTheFirstAndSecondCase

แต่ใช้แล้วเหนื่อยลิ้นห้อย

ตั้้งชื่อยาว 50 ตัวอักษร กับตั้งชื่อตัวอักษรเดียว แม้เครื่องมองว่าไม่มีอะไรแตกต่างก็จริง แต่ผลกระทบ กลับเกิดกับตัวคนเขียนโปรแกรมเองอย่างมหาศาล

ตอนหลังก็เลยกลับมาหาอะไรที่มัน "พอดี ๆ" เอาแบบทำแล้วกำลังสบายตัว-สบายใจ ไม่สั้นเกินจนนึกไม่ออกว่าคืออะไร

เช่น เมื่อผมคิดว่า

คะแนนชุดนี้จะใช้ได้เมื่อและสูงสุดต่ำกว่าร้อยลงมา และ ต่ำสุดมากกว่าศูนย์ขึ้นไป ค่าสูงสุดมากกว่าต่ำสุด

ลองมาดูว่า เวลาแปลงเป็นโปรแกรมแล้วจะเป็นอย่างไร 

เมื่อเขียนเป็นโปรแกรมแบบสั้นมาก ก็จะเป็น

j=(n>x) AND (x<=100) AND (n=>0) 

หรือแบบยาวมาก ก็จะเป็น

TheSetOfScoreMustBeValid = (MaximumValueofTheThirdYearStudentScore >= MinimumValueofTheThirdYearStudentScore) AND (MaximumValueofTheThirdYearStudentScore <=100) AND (MinimumValueofTheThirdYearStudentScore >=0)

แบบยาวกำลังดีดูบ้าง

ScoreIsValid = (MaxScore >= Minscore) AND (MaxScore <=100) AND (MinScore >=0)

 

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

เมื่อผสานการตั้งชื่อและการเขียน comment ประกอบให้ดี ๆ การเขียนโปรแกรมก็ไม่ต่างจากการเขียน blog เท่าไหร่หรอกครับ

ความแตกต่างมีนิดเดียว คือโปรแกรมที่เขียน จะรันในเครื่อง หรือรันในสมองคน เท่านั้นเอง..

ตั้งชื่อ กับ ใช้คำศัพท์ อันที่จริง ก็คือเรื่องเดยวกัน

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

การคิดให้ชัด จึงต้องใช้ภาษา(คำศัพท์)ให้ชัดก่อน 

คำสำคัญ (Tags): #programming
หมายเลขบันทึก: 93588เขียนเมื่อ 1 พฤษภาคม 2007 09:18 น. ()แก้ไขเมื่อ 17 พฤษภาคม 2012 21:30 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (2)

การตั้งชื่อตัวแปรที่ดีอีกอย่างคือการตั้งชื่อให้สื่อกับข้อมูลที่เก็บด้วย เช่น

 ScoreIsValid = (MaxScore >= Minscore) AND (MaxScore <=100) AND (MinScore >=0)

ก็เปลี่ยน 

intScoreIsValid = (intMaxScore >= intMinscore) AND (intMaxScore <=100) AND (intMinScore >=0)

เมื่อมาดูใหม่ เราก็เข้าใจ คะแนต้องเป็๋นจำนวนเต็มนะ ถ้าคะแนนมาเป็นทศนิยม แปลว่า ข้อมูลแล้ว 

หรือ

lngScoreIsValid = (lngMaxScore >= lngMinscore) AND (lngMaxScore <=100) AND (lngMinScore >=0)

 คะแนนที่กรอกจะเป็นจำนวนจริง หรือ long ซึ่งจะเป็นจำนวนเต็มหรือทศนิยมก็ได้

ส่วนตัวแปรแบบ ข้อมความ ผมก็จะใช้ str นะหน้า

เช่น strName,strSername
ตัวแปร ประเภทอื่นๆก็จะใช้ตัวย่อนำหน้า เล่น frm obj int lng เป็นต้น

เมื่อเรากลับมาดูใหม่ก็จะเข้าใจได้ว่า ตัวแปรนี้เก็บข้อมูลแบบไหน

ขอบคุณ..คุณ P สายลมแสงแดด ครับ

  • ถ้าเป็นโปรแกรมเอาเอาจริงเอาจังหน่อย วิธีนี้ดีมาก ๆ เลยครับ เยาวชนควรเอาเป็นแบบอย่างถ้าจะเดินในเส้นทางนี้
  • หลัง ๆ ผมเขียนโปรแกรมใช้เองแบบเฉพาะกิจ มักจะสั้นมากแบบไม่กี่บรรทัด เพื่อคำนวณทางวิทยาศาสตร์ ซึ่งเขียนในระบบที่ตัวเองชินซึ่งพอจะทำนายพฤติกรรมได้ ก็เลยไม่ได้มีโอกาสเขียนแนวนี้เท่าไหร่
  • ถ้าซีเรียสหน่อย ใน Basic ที่ผมใช้ ยังเป็นระบบ suffix ทำนองนี้ คือ !, %, # สำหรับ single, integer และ double (ไม่อยากบอกว่าใช้ compiler ของทศวรรษไหน ..เขินครับ)
พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท