How to Design Program: Ep.1
การออกแบบโปรแกรมที่นักพัฒนาควรรู้ Ep.1 : Intro to Course
คำเตือน: บทความนี้ไม่ได้สอนหรือมาอธิบายหลักการอะไรครับ เป็นบทความที่มาจากความคิดเห็นของผม มาจากสิ่งที่ผมสรุปจากการเรียนคอร์ส “How to Code: Simple Data” จาก edX ซึ่งได้เรียนพร้อมๆกับเพื่อนในทีม ในบริษัท
บทความต่อไปนี้ใน Series “How to Design Program” เป็นการจดสรุปของตัวผมเองครับ เพื่อบันทึกความเข้าใจของตัวเองในการเรียนคอร์สนี้เท่านั้นครับผม
What is This Course
คอร์ส “How to Code: Simple Data” จะพูดถึงพื้นฐานในการออกแบบโปรแกรม โดยไม่ได้เจาะจงไปที่ภาษาใดภาษาหนึ่ง หรือไปที่สายนักพัฒนาสายใด ไม่เจาะจงระบบ ไม่เจาะจงว่าจะเป็นโปรแกรมอะไร เช่น Mobile App, Web App แต่ที่คอร์สนี้มุ่งเน้นคือการทำให้นักพัฒนาได้ออกแบบโปรแกรมที่นักพัฒนาเหล่านั้นสร้างขึ้นมาได้อย่างมีประสิทธิภาพ
การออกแบบระบบที่ดีก็จะนำมาสู่การสร้างโปรแกรม หรือสร้างอะไรที่แก้ไขปัญหาให้กับผู้ใช้งานได้อย่างมีประสิทธิภาพ คอร์สนี้จะเป็นการแยกนักพัฒนาที่ดีออกจากคนทั่วไป
อะไรที่ทำให้การเขียนโปรแกรมมันยาก
เมื่อเราได้รับ requirement มาจากลูกค้า หรือใครก็ตาม สิ่งที่เรามักจะได้คือ โจทย์ หรือ requirement นั้นค่อนข้างที่จะคลุมเครือ มันไม่สมบูรณ์ มันย้อนแย้ง และสิ่งที่สองคือโปรแกรมมันใหญ่เกินไปที่สมองคนเราจะจัดการได้ ทำให้เกิดความท้าทายที่ตามมา
สิ่งแรกเราต้องสรุป ต้องเก็บ requirement หลายๆครั้ง เพื่อให้แน่ใจว่าสรุปแล้วโปรแกรมต้องทำอะไรบ้าง ลูกค้าอยากได้อะไร เราจะได้ออกแบบระบบ หรือวางแผนการทำงานได้ถูกต้อง แต่ความเป็นจริงมันไม่ค่อยเป็นอย่างนั้นสิครับ
สุดท้ายคือ โปรแกรมมันใหญ่อะ แล้วเราจะทำยังไง เขาบอกว่างั้นเราก็ควรจะหั่นโปรแกรมเป็นโปรแกรมเล็กๆ สร้างเค้กชิ้นเล็กๆ ขึ้นมา แล้วค่อยมาประกอบกันเป็นเค้กชิ้นใหญ่ แต่เค้กชิ้นเล็กๆ นั้น ต้องเป็นเค้กที่ดี ผ่านการทดสอบแล้วว่าอร่อย กินได้ปลอดภัย สวยงาม สามารถตกแต่งเพิ่มเติมได้ง่าย ไม่ต้องไปทำใหม่ถ้าหากต้องการฐานเค้กเป็นส่วนผสมอื่น และเมื่อนำไปประกอบกับเค้กชิ้นอื่นๆแล้ว จะไม่ทำให้ชิ้นอื่นเละไปด้วย
BSL (Beginning Student Language)
โดยในครอสนี้จะใช้ภาษาที่เรียกว่า BSL (Beginning Student Languaue) ซึ่งง่ายต่อการเรียนรู้ ทำให้เราเรียนรู้ได้อย่างรวดเร็ว ทำไมถึงเลือกใช้ภาษานี้
- ถ้าเลือกใช้ภาษาที่เป็นภาษาอุตสาหกรรม เช่น Python, JavaScript, Java อาจจะทำให้สาวกหรือคนที่ใช้ภาษาเหล่านั้นเกิดความน้อยใจ เช่นถ้าเลือกใช้ Python คนที่เขียน JavaScript ก็จะบอกว่าทำไมต้องใช้ Python
- ต้องการให้ focus ไปที่การออกแบบโปรแกรมมากกว่าการใช้ technology คนที่ไม่เคยเขียน Python จะได้ไม่ต้องเสียเวลาในการเรียนรู้
- BSL มีทุกอย่างที่ต้องการในการเรียนครอสนี้
- BSL เข้าใจง่าย สามารถเรียนรู้ได้รวดเร็ว ทำให้เราไม่ต้องเสียเวลาเริ่มเรียนของใหม่
Dr.Racket & Setting Program
คอร์สนี้จะใช้โปรแกรม Dr.Racket ซึ่งสามารถเข้าไปโหลดได้ ที่นี่ หรือจะใช้ command ในการติดตั้ง $ brew cask install racket โดยโปรแกรมนี้ก็จะใช้เวลาติดตั้งสักนิดนึงครับ
เมื่อติดตั้งโปรแกรมเสร็จแล้วก็เปิดขึ้นมาเลยครับ ก่อนอื่นเราต้อง setting ภาษาให้กับโปรแกรมก่อนครับ
การใช้งานโปรแกรม
ช่องสีขาวด้านบนจะเรียกว่า Definitions Area ส่วนด้านล่างเรียกว่า Interaction Area
ช่องสีขาวข้างบน เราจะใช้เขียน Expression จากนั้นกด Run ผลลัพธ์ (value) ก็จะออกมาที่ช่องสีขาวด้านล่างครับ
- Syntax ของ expression จะอยู่ในรูปของ (<primitive> <expression>… ) or <value>
- comment ของ BSL สามารถใช้เครื่องหมาย Semicolon ( ; )
มาทำโจทย์กันครับ โจทย์นี้ก็ให้เขียนโปรแกรมในการหาความยาวของด้านตรงข้ามมุมฉากครับ สูตรในการใช้ก็ตามในรูปเลบครับ ถ้าเป็นภาษาที่เราเคยใช้งานก็ง่ายมาก แต่ถ้าภาษา BSL ก็ต้องฝึกกันหน่อยนะครับ
Summary
จากบทความนี้ก็จะพูดถึงเป้าหมายของคอร์สนี้เรียนนี้ครับ คือมุ่งไปที่การออกแบบโปรแกรมอย่างไรให้โปรแกรมเรามีประสิทธิภาพ แก้ไขปัญหาที่เราเจอบ่อยๆคือ โจทย์ที่ได้มาคลุมเครือ ไม่ชัดเจน และโปรแกรมนั้นขนาดใหญ่เกินไปที่เราจะจัดการได้อย่างง่าย
เครื่องมือที่ใช้เรียนในครอสนี้คือ โปรแกรม Dr.Racket และใช้ภาษา BSL (Begining Student Language)
ในช่วงแรกจะเป็นการปูพื้นฐานในการเขียนโปรแกรมภาษา BSL (Beginning Student Language) นะครับ อาจจะยังไม่ได้เข้าเนื้อหามาก ติดตามตอนต่อไปครับ
Next Episode
How to Design Program: Ep.2 : Evaluation, String & Image, Constant Definitions, Function Definitions & Function Evaluation