จุดประสงค์ของตำรานี้ คือ สอนให้เราคิดอย่าง วิศวกรคอมพิวเตอร์ วิธีคิดนี้ รวมเอาส่วนของแง่มุมที่ดีที่สุดของคณิตศาสตร์ วิศวกรรม และวิทยาศาสตร์ธรรมชาติ ในลักษณะเดียวกับนักคณิตศาสตร์ วิศวกรคอมพิวเตอร์ใช้ ภาษารูปนัย (formal language) เพื่อสื่อถึงความคิด (โดยเฉพาะ การคำนวณ การประมวณข้อมูล) ในลักษณะเดียวกับวิศวกรอื่นๆ วิศวกรคอมพิวเตอร์ออกแบบสิ่งต่างๆ ประกอบส่วนประกอบต่างๆเข้าด้วยกันเป็นระบบที่ใหญ่ขึ้น และประเมินข้อดี-ข้อเสีย (tradeoffs) ของทางเลือกต่างๆ ในลักษณะเดียวกับนักวิทยาศาสตร์ วิศวกรคอมพิวเตอร์สังเกตพฤติกรรมของระบบที่ซับซ้อน ตั้งสมมติฐาน และทดสอบสมมติฐาน
ทักษะที่สำคัญที่สุดของวิศวกรคอมพิวเตอร์ คือ ทักษะการแก้ปัญหา (problem solving). ทักษะการแก้ปัญหา หมายถึง ความสามารถในการอ่าน-ตีความปัญหา (formulate problems) คิดอย่างสร้างสรรค์เกี่ยวกับวิธีการแก้ปัญหา (think creatively about solutions) และ การนำเสนอวิธีแก้ปัญหาได้อย่างกระจ่างและตรงประเด็น (express a solution clearly and accurately) นั่นเท่ากับว่า กระบวนการเรียนการเขียนโปรแกรม เป็น โอกาสที่ดีในการฝึกฝนทักษะการแก้ปัญหา นั่นเป็นเหตุผลว่า บทนี้เรียกว่า “วิถีของโปรแกรม” (the way of the program)
หากมองในระดับผิวเผิน เราจะได้เรียนรู้วิธีการเขียนโปรแกรม ซึ่งในตัวมันเอง ก็เป็นทักษะที่มีประโยชน์ แต่เมื่อมองลึกลงไป เราจะใช้ การเขียนโปรแกรมเป็นวิธีหนึ่ง เพื่อไปสู่จุดหมายที่แท้จริง ในขณะที่เราเรียนเขียนโปรแกรมไปเรื่อยๆ จุดหมายที่แท้จริงจะค่อยๆ ชัดเจนขึ้น
โปรแกรม เป็น ลำดับของคำสั่งต่างๆ ที่บอกคอมพิวเตอร์ว่า จะคำนวณ จะประมวณข้อมูล อย่างไร การคำนวณ อาจจะเป็นแบบคณิตศาสตร์ เช่น แก้ปัญหาระบบสมการ หรือ หารากของพหุนาม แต่ก็อาจจะหมายรวมถึง การคำนวณเชิงสัญญลักษณ์ เช่น การค้นหา และแทนข้อความ ในเอกสาร หรืออาจจะหมายถึง การทำงานเกี่ยวกับภาพ เช่น การประมวลผลภาพ หรือการเปิดดูวิดีโอ
รายละเอียดของโปรแกรม แตกต่างกันไปบ้างตามแต่ละภาษา แต่คำสั่งพื้นฐานต่างๆ ก็มีอยู่ในทุกๆภาษา ได้แก่
อินพุต (input):
รับข้อมูลเข้าจากแป้นพิมพ์ ไฟล์ เครือข่าย หรือ อุปกรณ์อื่นๆ
เอาต์พุต (output):
แสดงข้อมูลออกหน้าจอ บันทึกข้อมูลลงไฟล์ ส่งข้อมูลผ่านเครือข่าย หรือ ส่งข้อมูลไปอุปกรณ์อื่นๆ
คณิตศาสตร์ (math):
ทำการคิดคณิตศาสตร์พื้นฐาน เช่น การบวก และการคูณ
การทำเงื่อนไข (conditional execution):
ตรวจสอบเงื่อนไขที่ระบุ และเลือกทำคำสั่งที่เหมาะสม
การทำซ้ำ (repetition):
ทำคำสั่งซ้ำๆ โดยแต่ละรอบของการทำซ้ำอาจมีความต่างบ้าง
จริงๆ แล้ว นี่ก็เกือบทั้งหมดของคำสั่งต่างๆ คอมพิวเตอร์แล้ว ทุกๆ โปรแกรมที่เราเคยใช้ ไม่ว่าจะซับซ้อนแค่ไหน เขียนขึ้นจากคำสั่งต่างๆ ข้างต้นนี้ ดังนั้น เราอาจจะมองว่า การเขียนโปรแกรม เป็น กระบวนการที่แตกงานใหญ่ที่ซับซ้อน ออกเป็นงานย่อยๆ จนกระทั่งงานย่อยๆเล็กลง จนสามารถที่จะทำให้สำเร็จได้ด้วยคำสั่งพื้นฐานต่างๆ ข้างต้นนี้
เรื่องหนึ่งที่ยากที่สุดของการเริ่มใช้ไพธอน (Python) คือ เราอาจจะต้องติดตั้งไพธอน รวมถึงซอฟต์แวร์ที่เกี่ยวข้อง. ถ้าคุณคุ้นเคยกับระบบปฏิบัติการ โดยเฉพาะถ้าคุณสะดวกที่จะใช้คอมมานไลน์ (command-line interface) คุณไม่น่ามีปัญหาในการติดตั้งไพธอน. แต่สำหรับมือใหม่ มันก็อาจจะลำบากบ้างที่จะต้องเรียนการจัดการระบบไปพร้อมๆ กับการเรียนเขียนโปรแกรม.
เพื่อไม่มีปัญหาข้างต้น แนะนำว่าให้คุณเริ่มรันโปรแกรมไพธอนในเบราว์เซอร์ดูก่อน. จากนั้น ถ้าพอคุ้นเคยกับไพธอนบ้างแล้ว ค่อยติดตั้งไพธอนลงเครื่อง. มีเวปต่างๆ มากมายที่สามารถรันไพธอนได้. ถ้าคุณมีเวปที่ชอบอยู่แล้ว ก็ใช้ได้เลย. แต่ถ้าไม่มี ก็แนะนำ PythonAnywhere
โดยมีคำแนะนำสำหรับมือใหม่ที่ http://tinyurl.com/thinkpython2e.
ไพธอนมีสองเวอร์ชั่น คือ ไพธอน 2 และไพธอน 3. ทั้งสองเวอร์ชั่นคล้ายกันมาก ถ้าเรียนอันหนึ่ง ก็ไม่ยากที่จะเปลี่ยนเป็นอีกเวอร์ชั่น. จริงๆ แล้ว มีความต่างแค่นิดหน่อยเท่านั้น สำหรับการเขียนโปรแกรมเบื้องต้น. ตำราเล่มนี้เขียนสำหรับไพธอน 3 แต่ก็แนะนำข้อสังเกตบางอย่างเกี่ยวกับไพธอน 2.
ไพธอน อินเตอร์พรีเตอร์ (interpreter) เป็นโปรแกรมที่อ่านและรันคำสั่งภาษาไพธอน. ขึ้นกับเอนไวรอนเมนต์ 1) ของเรา บางเอนไวรอนเมนต์ อาจจะเปิดไพธอนอินเตอร์พรีเตอร์ ด้วยการคลิกไอคอน หรือ บางเอนไวรอนเมนต์ อาจจะด้วยการพิมพ์คำสั่ง python
ที่หน้ารับคำสั่ง (command console). หลังจากที่ไพธอนอินเตอร์พรีเตอร์เปิดขึ้นมา เราอาจจะเห็น
Python 3.4.0 (default, Jun 19 2015, 14:20:21) [GCC 4.8.2] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
สามบรรทัดแรก บอกข้อมูลเกี่ยวกับตัวอินเตอร์พรีเตอร์ และระบบปฏิบัติการ ดังนั้นข้อมูลนี้อาจจะต่างๆ จากที่คุณได้. แต่คุณควรจะตรวจสอบเวอร์ชั่นดูด้วย เวอร์ชั่น ที่ในตัวอย่างนี้เป็น 3.4.0
ตัวเลขแรกบอกว่าเป็น ไพธอน 3. ถ้าตัวเลขแรกเป็น 2 แปลว่า คุณกำลังรัน ไพธอน 2 อยู่.
บรรทัดสุดท้ายเป็น ตัวพร้อม (prompt) ที่เป็นตัวบอกว่า อินเตอร์พรีเตอร์พร้อมที่จะรับคำสั่งจากเรา. ถ้าคุณพิมพ์คำสั่งและกด “Enter
” อินเตอร์พรีเตอร์จะแสดงผลออกมา
>>> 1 + 1 2
ตอนนี้ เรารู้แล้วว่า การเปิดไพธอนอินเตอร์พรีเตอร์ และการรันคำสั่ง ทำอย่างไร. ตอนนี้เราก็พร้อมแล้วที่จะเริ่มเขียนโปรแกรม.
ตามธรรมเนียมแล้ว โปรแกรมแรกที่เราจะเขียนในภาษาใหม่ จะเรียกว่า โปรแกรม “Hello, World!” เพราะว่า มันจะทำแค่แสดงคำว่า “Hello, World!” สำหรับไพธอน หน้าตาของโปรแกรมจะเป็นดังนี้
>>> print('Hello, World!')
นี่เป็นตัวอย่างของ คำสั่งพิมพ์ (print statement) แม้ว่าจริงๆ แล้ว มันไม่ได้พิมพ์อะไรลงกระดาษ มันแค่แสดงข้อความออกหน้าจอ ซึ่งในกรณีนี้ ผลลัพธ์คือ
Hello, World!
เครื่องหมายคำพูด (’
…’
) ในโปรแกรม ใช้ระบุจุดเริ่มต้นและจุดจบ ของข้อความที่จะแสดง ผลลัพธ์จะไม่แสดงเครื่องหมายคำพูดนี้ออกมา
วงเล็บใช้บอกว่า print
เป็นฟังก์ชัน (function). เราจะเรียนเรื่องฟังก์ชันกัน ใน บทที่ 3.
ในไพธอน 2 คำสั่งพิมพ์จะต่างออกไปเล็กน้อย นั่นคือ มันไม่ใช่ฟังก์ชัน ดังนั้นจึงไม่ต้องการวงเล็บ เช่น
>>> print 'Hello, World!'
จุดต่างนี้จะค่อยๆ กระจ่างขึ้นทีหลัง
จาก “Hello, World!” ขั้นต่อไปคือ การคำนวณพีชคณิต (arithmetic). ไพธอนมี ตัวดำเนินการ (operators) ที่ใช้สัญญลักษณ์พิเศษ เพื่อแสดงการคำนวณ เช่น บวกและคูณ.
ตัวดำเนินการ +
, -
, และ *
ทำการบวก, ทำการลบ, และทำการคูณ ดังแสดงในตัวอย่าง เช่น
>>> 40 + 2 42 >>> 43 - 1 42 >>> 6 * 7 42
ตัวดำเนินการ /
ทำการหาร เช่น
>>> 84 / 2 42.0
คุณอาจจะสงสัยว่า ทำไมผลลัพธ์ถึงเป็น 42.0
แทนที่จะเป็น 42
. เราจะอธิบายเรื่องนี้ในหัวข้อถัดไป.
ส่วน ตัวดำเนินการ **
ทำการยกกำลัง นั่นคือ เช่น
>>> 6**2 + 6 42
บางภาษาคอมพิวเตอร์จะใช้ ^
สำหรับการยกกำลัง แต่ไพธอนใช้ ^
สำหรับตัวดำเนินการตามบิต (bitwise operator) ที่เรียกว่า เอ็กซ์ออร์ (XOR). ถ้าคุณยังไม่คุ้นเคยกับตัวดำเนินการตามบิต ผลลัพธ์อาจจะดูแปลกๆ เช่น
>>> 6 ^ 2 4
เนื้อหาของตำรานี้ไม่ครอบคลุมตัวดำเนินการตามบิต แต่ถ้าสนใจ ก็สามารถค้นคว้าเพิ่มเติมได้จาก http://wiki.python.org/moin/BitwiseOperators.
ค่าข้อมูล (value) เป็นสิ่งพื้นฐานที่โปรแกรมทำงานด้วย ค่าที่พูดถึง ได้แก่ ตัวอักษร และ ตัวเลข. บางค่าที่เราดูกันไปแล้ว เช่น 2
, 42.0
, และ 'Hello, World!'
.
ค่าต่างๆ เหล่านี้ เป็นชนิดข้อมูล (types) ต่างๆ กัน เช่น ค่า 2
เป็นชนิดจำนวนเต็ม (integer) ค่า 42.0
เป็นชนิดเลขทศนิยม หรือ จำนวนโฟลตติ้งพอยต์ (floating-point number) และ 'Hello, World!'
เป็นชนิดสายอักขระ (string) ที่เรียกเช่นนี้ ก็เพราะตัวอักษรถูกนำมาเรียงร้อยต่อกัน.
ถ้าไม่แน่ใจว่าค่าข้อมูลเป็นชนิดไหน เราก็ใช้อินเตอร์พรีเตอร์บอกเราได้ เช่น
>>> type(2) <class 'int'> >>> type(42.0) <class 'float'> >>> type('Hello, World!') <class 'str'>
ตัวอย่างข้างต้น คำว่า “class” ในที่นี้ ถูกใช้ ในแง่ที่หมายถึง ชนิดหมวดหมู่. ชนิดข้อมูล ก็คือ หมวดหมู่ของค่าข้อมูล. ผลที่ได้ก็ไม่น่าแปลกใจว่า จำนวนเต็ม เป็นชนิดข้อมูล int
. สายอักขระ เป็นชนิดข้อมูล str
. และเลขทศนิยม (จำนวนโฟลตติ้งพอยต์) เป็นชนิดข้อมูล. float
.
แล้วถ้าเป็นค่าแบบ '2'
และ '42.0'
จะนับเป็นชนิดข้อมูลแบบไหน ค่าเหล่านี้ดูเหมือนตัวเลข แต่ค่าเหล่านี้อยู่ในอัญประกาศ (quotation marks) เหมือนสายอักขระ.
>>> type('2') <class 'str'> >>> type('42.0') <class 'str'>
มันเป็น สายอักขระ.
เวลาที่เราพิมพ์เลขจำนวนเต็มค่าใหญ่ๆ เราอาจจะอยากที่จะใช้เครื่องหมายจุลภาคคั่นกลุ่มของตัวเลข แบบ 1,000,000
. นี่ไม่ใช่รูปแบบจำนวนเต็มที่ถูกต้องในไพธอน
>>> 1,000,000 (1, 0, 0)
ไม่เหมือนที่เราคิดเลย. ไพธอนมอง 1,000,000
เป็นลำดับของจำนวนเต็มที่คั่นด้วยจุลภาค. เราจะเรียนชนิดของลำดับแบบนี้ทีหลัง (บทที่ 12)
ภาษาธรรมชาติ (natural language) เป็นภาษาที่คนใช้พูด เช่น ภาษาไทย ภาษาจีน ภาษาอังกฤษ ภาษาธรรมชาติไม่ได้ถูกออกแบบ โดยนักออกแบบภาษา (แม้ว่าจะมีคนพยายามจะใส่กฏเกณฑ์เข้าไป) ภาษาธรรมชาติพัฒนาและมีวิวัฒนาการตามธรรมชาติที่ผู้คนใช้มัน
ภาษารูปนัย (formal language) เป็นภาษาที่ถูกออกแบบ โดยนักออกแบบสำหรับจุดประสงค์เฉพาะ ตัวอย่างเช่น สัญกรณ์ (notation) ที่นักคณิตศาสตร์ใช้ ก็เป็นภาษารูปนัยที่ออกแบบมาเฉพาะ สำหรับแสดงถึงความสัมพันธ์ระหว่างตัวเลขและสัญญลักษณ์ต่างๆ นักเคมีก็ใช้ภาษารูปนัย แสดงโครงสร้างทางเคมีของโมเลกุล และที่สำคัญ
ภาษาคอมพิวเตอร์ เป็นภาษารูปนัย ที่ออกแบบมาเพื่อระบุวิธีการประมวลผล
ภาษารูปนัยมักจะมีกฎวากยสัมพันธ์ (syntax) ที่เข้มงวด ซึ่งกฎวากยสัมพันธ์ ใช้เพื่อควบคุมโครงสร้างของข้อความ (หรือโครงสร้างของคำสั่ง) ตัวอย่างเช่น ในคณิตศาสตร์ ข้อความ $3 + 3 = 6$ มีวากยสัมพันธ์ที่ถูกต้อง แต่ $3 + = 3 \$ 6$ ไม่ถูก. ในเคมี $H_2O$ เป็นสูตรที่ถูกต้องตามวากยสัมพันธ์ แต่ $_2Zz$ ไม่ถูก
กฎวากยสัมพันธ์มาในสองรูปแบบ ซึ่งคือเกี่ยวกับ โทเค็นต่างๆ (tokens) และโครงสร้าง (structure) โทเค็น เป็นส่วนประกอบพื้นฐานของภาษา เช่น คำ (ในภาษาธรรมชาติ) ตัวเลข (ในคณิตศาสตร์) ธาตุทางเคมี (ในเคมี)
หนึ่งในปัญหาของ $3 += 3 \$ 6$ คือ $\$$ ไม่ใช่โทเค็นที่ถูกต้องทางคณิตศาสตร์ (อย่างน้อยก็เท่าที่ผมรู้) ในทำนองเดียวกัน $_2Zz$ ไม่ถูกต้อง เพราะว่า ไม่มีธาตุทางเคมีที่ใช้ตัวย่อ $Zz$
กฎวากยสัมพันธ์แบบที่สอง จะเกี่ยวกับ วิธีที่รวมโทเค็นเข้าด้วยกัน สมการ $3 += 3$ ไม่ถูกวากยสัมพันธ์ทางคณิตศาสตร์ เพราะว่า แม้ $+$ และ $=$ จะเป็นโทเค็นที่ถูกต้อง แต่เราไม่สามารถเอาโทเค็นสองตัวนี้มาวางต่อกันแบบนี้ได้ ทำนองเดียวกัน ในสูตรเคมี ตัวห้อยจะต้องมาหลังจากธาตุ ไม่ใช่มาก่อนธาตุ
ตัวอย่าง ข้อความภาษาอังกฤษที่ถูกวากยสัมพันธ์ด้านโครงสร้าง แต่ผิดด้านโทเค็น ได้แก่ “This is @ well-structured Engli$h sentence with invalid t*kens in it.” เปรียบเทียบกับ ข้อความภาษาอังกฤษที่ถูกวากยสัมพันธ์ด้านโทเค็น แต่ผิดด้านโครงสร้าง ได้แก่ This sentence all valid tokens has, but invalid structure with.
ประโยคนี้ถูก$\int$ครงสร้7งภ7ษ7ไท$\epsilon$ 11ต่ผิดด้าน$\int$ทเค็น. ส่วนทั้งหมดโทเค็นถูกนี้ประโยค แต่ไม่โครงสร้างถูก
เวลาที่เราอ่านประโยคภาษาไทย หรือข้อความในภาษารูปนัย เราจะมองหาโครงสร้างของภาษา (แม้ว่า เรามักจะทำด้วยจิตใต้สำนึก สำหรับภาษาธรรมชาติ) กระบวนนี้ (จัดโทเค็นเข้าโครงสร้าง) จะเรียกว่า การแจงส่วน (parsing)
แม้ว่า ภาษารูปนัย และภาษาธรรมชาติ จะมีลักษณะหลายๆ อย่างคล้ายๆ กัน ไม่ว่าจะเป็น โทเค็น โครงสร้าง และวากยสัมพันธ์ แต่ก็มีความแตกต่างกันอยู่มาก ได้แก่
ความกำกวม (ambiguity):
ภาษาธรรมชาติจะเต็มไปด้วยความกำกวม ที่คนมักจะใช้บริบทหรือข้อมูลอื่นๆ ช่วย ภาษารูปนัยถูกออกแบบมาให้ปราศจาก (หรือเกือบปราศจาก) ความกำกวมเลย นั่นคือ ข้อความในภาษารูปนัย จะมีความหมายอย่างเดียวแน่นอน โดยไม่เกี่ยวกับบริบท
ความซ้ำซ้อน (redundancy):
เพื่อชดเชยความกำกวม และลดการเข้าใจผิด ภาษาธรรมชาติมักใช้ความซ้ำซ้อนเข้ามาช่วย ผลคือ ภาษาธรรมชาติมักจะใช้ถ้อยคำมากเกินไป ภาษารูปนัยไม่ค่อยซ้ำซ้อนและกระชับกว่า
ความตรงตามตัวอักษร (literalness):
ภาษาธรรมชาติเต็มไปด้วยสำนวนและการอุปมา ภาษาอังกฤษ มีสำนวน “The penny dropped” ที่ไม่ได้หมายถึง เศษเงิน หรือแม้แต่มีอะไรร่วงหล่น (สำนวนนี้หมายถึง การที่ใครสักคนได้เข้าใจเรื่องราวสักที หลังจากงงมานาน2)) ภาษาไทย ก็มีสำนวน เช่น “ตีเหล็กเมื่อแดง กินแกงเมื่อร้อน” ซึ่งไม่ได้หมายถึง ทั้งเหล็ก หรือว่าแกง แต่หมายถึง การทำสิ่งที่มีประโยชน์ เมื่อยังมีโอกาส ภาษารูปนัยหมายความตรงตามที่เขียน
เพราะว่า เราใช้ภาษาธรรมชาติมาตลอด ทำให้บางครั้ง มันอาจจะยากหน่อยที่จะปรับตัว เพื่อใช้ภาษารูปนัย ความต่างของภาษารูปนัยกับภาษาธรรมชาติ ก็ต่างกันแบบที่ ร้อยกรอง(บทกวี)ต่างจากร้อยแก้ว(ข้อความธรรมดา) แต่ภาษารูปนัยกับภาษาธรรมชาติต่างกันมากกว่า.
ร้อยกรอง หรือ บทกวี:
คำจะถูกเลือกใช้ จากเสียงของคำพอๆ กับจากความหมายของมัน ร้อยกรองทั้งบทจะสร้างผลเชิงอารมณ์ ความกำกวมไม่ใช่แค่มาตามปกติ แต่หลายๆ ครั้งเป็นความตั้งใจของผู้แต่ง
ร้อยแก้ว หรือ ข้อความธรรมดา:
คำที่ใช้ถูกเลือกตามความหมายของคำมากกว่าเสียงของคำ และโครงสร้างประโยคจะบอกความหมาย ร้อยแก้วจะเข้าใจได้ง่ายกว่าร้อยกรอง แต่ก็ยังกำกวมอยู่
โปรแกรม (Programs):
ความหมายของโปรแกรมคอมพิวเตอร์ชัดเจน ไม่กำกวน และตรงตามตัวอักษร และความหมายสามารถเข้าใจได้อย่างครบถ้วน โดยการวิเคราะห์โทเค็นและโครงสร้าง
ภาษารูปนัยจะมีข้อความแน่นกว่าภาษาธรรมชาติ ดังนั้นภาษารูปนัยจึงใช้เวลาอ่านมากกว่าภาษาธรรมชาติ นอกจากนั้น โครงสร้างก็สำคัญ ดังนั้น การอ่านจากบนลงล่าง ซ้ายไปขวา จึงไม่ใช่วิธีที่ดีที่สุดเสมอไป เราจึงควรฝึกแจงส่วนโปรแกรมในหัว นั่นคือ ลองระบุโทเค็น ลองตีความโครงสร้าง ในหัว นอกจากนั้นแล้ว รายละเอียดสำคัญมาก ความผิดพลาดเล็กๆ น้อยๆ ในการสะกดคำ หรือการใช้เครื่องหมายวรรคตอน ที่อาจจะไม่มีผลมากในภาษาธรรมชาติ ความผิดพลาดเล็กๆ น้อยๆ ในลักษณะเดียวกัน จะมีผลต่างกันมากในภาษารูปนัย
นักเขียนโปรแกรมทำผิดพลาดได้ ด้วยเหตุผลแปลกๆ ความผิดพลาดในโปรแกรม (programming errors) ถูกเรียกว่า บัก (bugs) และกระบวนการตรวจหาข้อผิดพลาดนี้ เรียกว่า การตรวจแก้จุดบกพร่อง หรือ การดีบัก (debugging)
บางครั้ง การเขียนโปรแกรม โดยเฉพาะการดีบัก อาจจะทำให้อารมณ์เสียได้ บางครั้ง ที่เรามีปัญหากับบัคที่ยากๆ เราอาจจะรู้สึกโมโห รู้สึกท้อ หรือรู้สึกอาย
มีหลักฐานว่า คนมักจะปฏิสัมพันธ์กับคอมพิวเตอร์ ราวกับว่าคอมพิวเตอร์เป็นคน เวลาที่คอมพิวเตอร์ทำงานได้ดี เรามักมองคอมพิวเตอร์เหมือนเป็นเพื่อนร่วมทีม แต่เวลาที่คอมพิวเตอร์ดื้อหรือหยาบคาย เราก็มักจะทำกับคอมพิวเตอร์ เหมือนกับที่เราทำกับคนดื้อ หรือคนหยาบคาย (จาก Reeves and Nass, The Media Equation: How People Treat Computers, Television, and New Media Like Real People and Places)
เตรียมใจไว้สำหรับปฏิกิริยาแบบนี้ จะช่วยให้เราจัดการกับมันได้ดีขึ้น แนวทางหนึ่ง ก็คือ ให้มองคอมพิวเตอร์ เป็นเสมือนลูกน้องที่เก่งเฉพาะเรื่อง เช่น ความเร็ว ความแม่นยำ แต่มีจุดอ่อน คือ ไม่มีความรู้สึก และไม่สามารถที่จะเข้าใจภาพรวมของงานได้
งานของเราก็คือ เป็นลูกพี่ที่ดี นั่นคือ หาวิธีที่จะใช้ประโยชน์จากจุดแข็ง แก้จุดอ่อน และใช้พลังงานและอารมณ์ของเรา กับงานที่ทำ โดยไม่ให้อารมณ์เข้าไปกวนความสามารถในการทำงานของเรา
การเรียนรู้วิธีดีบัก อาจจะทำให้สับสน แต่มันก็จะเป็นทักษะที่มีค่ามาก เป็นประโยชน์กับเรื่องอื่นๆ ด้วย นอกเหนือจากการเขียนโปรแกรม ส่วนท้ายของแต่ละบท จะมีหัวข้อคล้ายๆ หัวข้อนี้ (การดีบัก) ที่แนะนำวิธีดีบัก และหวังว่า คำแนะนำเหล่านี้จะช่วยได้บ้าง
int
) จำนวนโฟลตติ้งพอยต์ (ชนิด float
) และ สายอักขระ (ชนิด str
)
แบบฝึกหัด 1
ถ้าเราอ่านหนังสือนี้หน้าคอมพิวเตอร์ มันก็จะดีที่ว่า เราสามารถทดลองตัวอย่างต่างๆ ตามที่อ่านไปได้เลย.
เมื่อเราทดลองความรู้ใหม่ๆ ที่ได้เรียน เราควรจะลองที่จะทำอะไรผิดด้วย. ตัวอย่างเช่น ในโปรแกรม “Hello, world!” มันจะเกิดอะไรขึ้น ถ้าเราใส่อัญประกาศ (’
) แค่ตัวเดียว? มันจะเกิดอะไรขึ้น ถ้าเราไม่ใส่อัญประกาศเลย? มันจะเกิดอะไรขึ้น ถ้าเราสะกด print
ผิด?
การทดลองในลักษณะนี้ จะช่วยให้เราจำสิ่งที่เราอ่านได้ และมันก็จะช่วยตอนที่เราเขียนโปรแกรมด้วย เพราะ เราจะรู้ว่าข้อความแจ้งข้อผิดพลาด (error messages) หมายความว่าอย่างไร
มันดีกว่าที่ เราจะทำพลาดตอนนี้ โดยตั้งใจ ดีกว่าที่ เราไปพลาดตอนหลัง โดยไม่ตั้งใจ.
print
มันจะเกิดอะไรขึ้น ถ้าเราใส่วงเล็บแค่อันเดียว หรือไม่ใส่เลย?’
) อันเดียว หรือไม่ใส่เลย?-2
มันจะเกิดอะไรขึ้น ถ้าเราใส่เครื่องหมายบวกไปหน้าตัวเลข? ถ้าอันนี้จะได้อะไรออกมา 2++2
?02
มันจะเกิดอะไรขึ้น ถ้าทำแบบนี้ในไพธอน?4 8
แบบฝึกหัด 2
เปิดไพธอนอินเตอร์พรีเตอร์มา และใช้มันเป็นเหมือนเครื่องคิดเลข.
https://greenteapress.com/thinkpython2/html/thinkpython2002.html
Anaconda
(https://anaconda.org/anaconda/python) เป็นต้น.