สถาบันข้อมูลขนาดใหญ่ (องค์การมหาชน)

สนามเด็กเล่นของโปรแกรมเมอร์ : ทดสอบโค้ดอย่างรวดเร็วด้วยเครื่องมือประเภทต่าง ๆ

Oct 14, 2020

สมัยก่อนตอนที่ผู้เขียนพึ่งจะเข้าวงการพัฒนาซอฟต์แวร์แรก ๆ นั้น ผู้เขียนประสบปัญหาใหญ่ปัญหาหนึ่งคือ เราจะทดสอบคำสั่ง หรือประพจน์ย่อย ๆ ที่เราเขียนขึ้นมาในภาษาต่าง ๆ ได้อย่างไร ซึ่งกว่าจะข้ามผ่านปัญหานี้ได้ก็ใช้เวลาพอสมควรเลยทีเดียว ดังนั้นผู้เขียนจึงอยากจะแบ่งปันประสบการณ์เล็ก ๆ น้อย ๆ กับในการทดสอบโค้ดหรือคำสั่งที่เขียนขึ้นมาในภาษาต่าง ๆ ว่าจะทดสอบกันอย่างไร สาเหตุที่ตั้งชื่อบทความว่า “สนามเด็กเล่นของโปรแกรมเมอร์” ก็เพราะว่าสถานที่ที่เราจะทดสอบคำสั่งเล็ก ๆ ของเรา มันเปรียบเสมือนสนามเด็กเล่น ที่เด็ก ๆ วิ่งเล่น และลองทำกิจกรรมต่าง ๆ เพื่อเรียนรู้พัฒนาทักษะ ขอหมายเหตุไว้สักนิดนะครับว่า กลุ่มผู้อ่านหลักของบทความนี้ใช้ Windows เป็นระบบปฏิบัติการหลัก แต่ถ้าหากใช้ MacOS หรือ Linux ในขั้นตอนที่เกี่ยวข้องกับ PowerShell หรือ Command Prompt จะแตกต่างกันออกไป

ผู้เขียนขอแบ่งชุดอุปกรณ์ตามลักษณะของการแปลภาษาโดยคร่าว ๆ (อันนี้ตามความถนัดของผู้เขียนนะครับ) คือ

  1. ภาษาที่ใช้ตัวแปล Interpreter คือภาษาที่ตัวแปลภาษาแปลทีละบรรทัด ยกตัวอย่างเช่นภาษา PHP, R หรือ Python
  2. ภาษาที่ใช้ตัวแปล Compiler คือภาษาที่ตัวแปลภาษาทำงานแบบแปลทั้งไฟล์ หรืออาจจะมีการแปลร่วมกันมากกว่าหนึ่งไฟล์ หรือเป็นโปรเจกต์ ยกตัวอย่างเช่นภาษา C#, C++ และ Java
  3. ภาษาที่ใช้ในการพัฒนา Website เช่น HTML, CSS และ JavaScript
  4. ภาษาตระกูล SQL ที่ใช้จัดการฐานข้อมูลประเภท RDBMS ค่ายต่าง ๆ เช่น Microsoft SQL Server, MySQL, PostgreSQL, Oracle

จะลองรันภาษา Interpreter อย่างไร

ก่อนอื่นผู้เขียนอยากลองตั้งคำถามง่าย ๆ ก่อนว่า ปกติแล้วผู้อ่านที่มีประสบการณ์พัฒนาโปรแกรมมาบ้างมีวิธีการรันการทดสอบกันอย่างไร ผู้เขียนคิดว่าคงมีผู้อ่านจำนวนไม่น้อยที่มีประสบการณ์ในการพัฒนา Web ด้วย PHP มาบ้าง อาจจะใช้วิธีเขียน code อย่างใดอย่างหนึ่งต่อไปนี้

<?php
$a = 1;
$b = 2;
$c = $a + $b;
var_dump($c);
?>

หรือ

<?php
$a = 1;
$b = 2;
$c = $a + $b;
echo($a);
?>

ใส่ในไฟล์ test.php แล้วก็นำไปวางไว้ใน var/www/html/ แล้วก็เปิด browser

รูปที่ 1 ผลลัพธ์การรัน PHP บน Browser

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

ถ้าหากเครื่องผู้อ่านติดตั้ง PHP เอาไว้ เราสามารถใช้ Command Prompt/Powershell ช่วยได้ดังนี้ครับ

  1. เปิด Command Prompt หรือ Powershell ขึ้นมา
  1. พิมพ์คำสั่ง php -a แล้วกด enter
  1. หลังจากนี้เราจะเข้าสู่โลกของ php หมายความว่าต่อจากนี้ เทอร์มินอล[*]จะมองคำสั่งทุกอย่างที่เราพิมพ์เข้าไปว่าเป็นคำสั่งภาษา php

จากนั้นผู้อ่านสามารถลองเล่นกับ php -a ได้ตามใจชอบ ดังเช่นตัวอย่างนี้

php > $a = 1;
php > $b = 2;
php > echo($a + $b);
3 
php > $current_weekday = date("l");
php > echo($current_weekday);
Monday                                                                        

ทีนี้ถ้าเป็นภาษา Python บ้างล่ะ? ในภาษา Python ก็มีอะไรลักษณะแบบนี้ครับ แต่ก่อนอื่นเราต้องติดตั้งโปรแกรม Python ก่อน และเนื่องจากเป็นภาษาที่ได้รับความนิยมในปัจจุบัน เราเลยมีตัวเลือกมากขึ้น ไม่ว่าจะเป็น

  1. รันจาก PowerShell/Command Prompt
  2. รันจาก IDLE
  3. รันจากเครื่องมือตระกูล Jupyter Notebook

หากผู้อ่านต้องการทดลองรันคำสั่ง Python ด้วยวิธีแรก หลังจากติดตั้งโปรแกรม Python แล้วก็สามารถทำได้โดย

  1. เปิด PowerShell/Command Prompt
  2. พิมพ์คำสั่ง python หรือ py แล้วกด enter
รูปที่ 4 Python Shell
  1. จากนั้นหลักการก็จะเป็นแบบเดียวกันกับข้อ 3 ด้านบนครับ เพียงแต่คราวนี้จะเป็นภาษา Python แทน

เราสามารถเล่นกับภาษา Python ในตอนนี้ได้เลยครับ เช่น

>>> a = 1
>>> b = 2
>>> a + b
3
>>> l1 = [1, 2, 3]
>>> l2 = ('a', 'b', 'c')
>>> z = *zip(l1, l2),
>>> z
((1, 'a'), (2, 'b'), (3, 'c'))
>>> z2 = list(zip(l1, l2))
>>> z2
[(1, 'a'), (2, 'b'), (3, 'c')]

หากผู้อ่านเลือกรันด้วย IDLE ก็จะได้ความรู้สึกคล้าย ๆ PowerShell/Command Prompt ครับ

รูปที่ 5 IDLE

และทางเลือกสุดท้ายที่ผู้เขียนเลือกมาอีกทางก็คือ การรันด้วยเครื่องมือตระกูล Jupyter Notebook ด้วยความที่เครื่องมือตระกูลนี้เป็น Web Base (เปิดใช้งานได้จาก Browser) จึงมีผู้ให้บริการหลากหลายค่ายด้วยกัน เช่น Google Colab, Azure หรือ Amazon สำหรับผู้เขียนถนัดใช้งานเครื่อง local มากกว่าอย่างอื่นครับจึงเลือกใช้ Visual Studio Code ซึ่งมี feature เสมือน cell ใน Jupyter เลย

รูปที่ 6 Jupyter Cell ใน VSCode

แต่เรื่องเครื่องมือ IDE นั้น ผู้เขียนไม่ได้แนะนำ หรือยึดว่าจะต้องใช้ของค่ายใดเป็นพิเศษ ให้ผู้อ่านเลือกได้ตามอัธยาศัยครับ

ภาษาตระกูล Compiler จะลอง run อย่างไรดี?

สำหรับภาษาตระกูล Compiler นั้น เราจะใช้วิธีเหมือนภาษาตระกูล Interpreter ไม่ได้ครับ เนื่องจากไม่มีการทำงานทีละบรรทัดเหมือนกับ Interpreter ดังนั้นวิธีที่จะทดลอง run วิธีที่ง่ายที่สุดคือการสร้างโปรเจกต์โดยใช้ IDE ที่ถนัดครับ เช่น Visual Studio หรือ Eclipse โดยสร้างเป็น Console Project ครับ

รูปที่ 7 ตัวอย่างการสร้าง Console Project

มาลองทดสอบใน browser กันบ้างดีมั้ย

ในปัจจุบันนั้น browser หลักทุกค่าย คือ Chrome, Microsoft Edge (มาแทน Internet Explorer), Firefox, Safari เราสามารถใช้ความสามารถที่ซ่อนอยู่ในตัว browser เพื่อช่วยในการพัฒนาได้ โดยบน Windows เราสามารถใช้ปุ่ม F12 เพื่อเปิดมันขึ้นมาครับ ซึ่งหน้าตาก็จะคล้าย ๆ กันครับ ถ้าผู้อ่านท่านใดใช้ Safari ก็สามารถเขียน Comment เพิ่มเติมกันเข้ามาได้นะครับ จะถือเป็นความอนุเคราะห์ของผู้อ่านอย่างยิ่ง

โดยเราสามารถทดลองเล่นกับ JavaScript โดยเขียนรหัสต้น (code) ภาษา JavaScript ลงใน Console Tab โดยเคาะแป้น Enter หลังจากใส่รหัสต้นแต่ละบรรทัดเสร็จ ยกตัวอย่างเช่น

let d = new Date("2020-02-01")
d.toString()
d.toISOString()
รูปที่ 9 ผลลัพธ์การใช้ Development Tools เพื่อทดสอบ JavaScript

นอกจากนี้เรายังสามารถแก้ไข CSS จากเครื่องมือ Development Tools นี้แล้วดูผลลัพธ์ได้ทันทีอีกด้วย ยกตัวอย่างเช่น ผู้เขียนใส่ color: red; ใน element.style{}

รูปที่ 10 ผลลัพธ์การแก้ไข CSS

ความสามารถของ Development Tools นั้นมีมากมายเหลือคณานับ ผู้เขียนเองก็ยังไม่ได้เข้าถึงความสามารถทั้งหมดที่มีในเครื่องมือชิ้นนี้ แต่ความสามารถของ Console Tab และ Elements นั้นผู้เขียนคิดว่าเราใช้งานมันเป็นพื้นฐาน

แล้ว SQL เราจะทดสอบกันอย่างไรดี?

สิ่งที่ขาดไม่ได้เลยก็คือเครื่องมือในการจัดการ RDBMS (Relational DataBase Management System) ทั้งหลาย โดยเครื่องมือที่เราจะใช้นั้นขึ้นอยู่กับ RDBMS ค่ายปลายทางของเราด้วย (ลูกค้า) ซึ่งจากประสบการณ์ของผู้เขียนนั้น เคยทำกับ Microsoft SQL Server, PostgreSQL, MySQL และ Oracle ผู้เขียนขอแบ่งวิธีการจะทดสอบชุดคำสั่ง Query ออกเป็นสองทางหลัก ๆ คือ

  1. ใช้เครื่องมือที่ติดมากับ RDBMS ค่ายนั้น เช่น SSMS, pgAdmin, MySQL Workbench, Oracle SQL Developer
    • ข้อดี: จัดการอะไรที่เป็นคุณสมบัติของเฉพาะค่ายนั้น ๆ ได้ลึกกว่า เช่น SSMS สามารถวาด Diagram แล้วสามารถ Generate เป็น Table ได้เลย
    • ข้อจำกัด: ต้องติดตั้ง Tool หลายตัวหากต้องการติดต่อกับ RDBMS หลายค่าย(มีลูกค้าหลายเจ้านั่นเอง) เพราะ Tool เฉพาะที่มากับค่ายใด ๆ ไม่สามารถใช้ข้ามค่ายกันได้นั่นเอง
  2. ใช้เครื่องมือที่ติดต่อได้กับ RDBMS หลายค่ายเช่น HeidiSQL, DBeaver, Navicat, VSCode Plugin
    • ข้อดี: ไม่ต้องติดตั้ง Tool หลายตัว (เหมาะกับผู้อ่านที่ Hard disk ของเครื่องมีจำกัด) และสะดวกรวดเร็วในการต่อกับ RDBMS หลาย ๆ ตัวพร้อมกัน
    • ข้อจำกัด: สามารถจัดการกับ RDBMS ได้เพียงแค่พื้นฐาน เนื่องจาก RDBMS แต่ละค่ายนั้นมีความเฉพาะตัว เช่น diagram ของ MSSQL
รูปที่ 11 ตัวอย่างจากการใช้ HeidiSQL เพื่อเขียนคำสั่ง SQL

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

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