บทนำสู่การเขียนโปรแกรมจูเลีย
คู่มือที่ครอบคลุมเกี่ยวกับภาษาโปรแกรมจูเลีย ซึ่งเป็นภาษาทั่วไปแบบไดนามิกที่มีประสิทธภาพสูง ซึ่งเหมาะอย่างยิ่งสำหรับการคำนวณเชิงวิทยาศาสตร์และเชิงตัวเลข หลักสูตรนี้ครอบคลุมตั้งแต่ไวยากรณ์พื้นฐานและชนิดข้อมูล ไปจนถึงหัวข้อขั้นสูง เช่น การเขียนโปรแกรมในระดับสูง (metaprogramming) โครงสร้างข้อมูลแบบเฟรม (data frames) การเชื่อมต่อเครือข่าย และการเชื่อมต่อกับฐานข้อมูล
ภาพรวมคอร์สเรียน
📚 สรุปเนื้อหา
คู่มือที่ครอบคลุมเกี่ยวกับภาษาโปรแกรมจูเลีย (Julia) ซึ่งเป็นภาษาโปรแกรมแบบไดนามิกทั่วไปที่มีประสิทธภาพสูง โดยเหมาะอย่างยิ่งสำหรับการคำนวณทางวิทยาศาสตร์และเชิงตัวเลข หลักสูตรนี้ครอบคลุมตั้งแต่ไวยากรณ์พื้นฐานและประเภทข้อมูล ไปจนถึงหัวข้อขั้นสูง เช่น การเขียนโปรแกรมในระดับเมตา (metaprogramming), โครงสร้างข้อมูลแบบตารางข้อมูล (data frames), การเชื่อมต่อเครือข่าย และการเชื่อมต่อฐานข้อมูล
เชี่ยวชาญการคำนวณทางวิทยาศาสตร์ระดับสูง ด้วยความเร็วเหมือนภาษา C แต่ใช้งานง่ายเหมือนภาษา Python
ผู้เขียน: บริษัท ทิวторีสพอยต์ (ไอ) พีวีที จำกัด
คำขอบคุณ: สิทธิ์การใช้งาน 2020 โดย ทิวเตอร์สพอยต์ (ไอ) พีวีที จำกัด ทุกเนื้อหาและกราฟิกเป็นทรัพย์สินของ ทิวเตอร์สพอยต์
🎯 เป้าหมายการเรียนรู้
- กำหนดนิยามของภาษาโปรแกรมจูเลีย พร้อมระบุคุณสมบัติหลักและบริบททางประวัติศาสตร์
- แยกแยะความแตกต่างระหว่างจูเลียกับภาษาคำนวณทางเทคนิคอื่น ๆ ทั้งในด้านประสิทธิภาพและไวยากรณ์
- ติดตั้งและตั้งค่าสภาพแวดล้อมจูเลียและชุดคำสั่ง (REPL) ได้อย่างสำเร็จบนระบบปฏิบัติการ Linux, Windows และ macOS
- ใช้แนวทางสไตล์ของจูเลียในการตั้งชื่อตัวแปร และใช้คอมเมนต์แบบบรรทัดเดียว/หลายบรรทัดเพื่อเอกสารโค้ด
- สร้างอาร์เรย์ประเภทต่าง ๆ และมิติต่าง ๆ โดยใช้ช่วง (range objects), ตัวสร้าง (generators), การรวม (comprehensions) และฟังก์ชันภายใน เช่น
zeros()และones() - ดำเนินการดัชนีอาร์เรย์ขั้นสูงและเปลี่ยนแปลงข้อมูลโดยใช้ตรรกะแบบบูลีน คำสั่ง
endและฟังก์ชันที่มีเครื่องหมายตกใจ (เช่นpush!,splice!) - สร้างและจัดการทูเพิล (Tuples) และทูเพิลที่มีชื่อ (Named Tuples) รวมถึงการใช้งานในรูปแบบอาร์กิวเมนต์แบบคำสำคัญของฟังก์ชัน
- ระบุและจัดการพฤติกรรมการเกินค่าจำนวนเต็ม (integer overflow) และข้อผิดพลาดจากการหาร โดยใช้ประเภทข้อมูลมาตรฐานและประเภทความแม่นยำสูงแบบไม่จำกัด
- วิเคราะห์การแสดงผลของจำนวนทศนิยม รวมถึงค่าศูนย์ที่มีเครื่องหมาย ค่าพิเศษ (NaN, Inf) และค่าเครื่องจักร (machine epsilon)
- ดำเนินการและผสมผสานการดำเนินการทางคณิตศาสตร์ บิตเวส และการอัปเดต เพื่อจัดการประเภทข้อมูล
🔹 บทที่ 1: บทนำสู่จูเลียและการตั้งค่าสภาพแวดล้อม
ภาพรวม: บทนี้แนะนำภาษาจูเลีย ซึ่งเป็นภาษาโปรแกรมระดับสูง ประสิทธิภาพสูง แบบไดนามิก ออกแบบมาเฉพาะสำหรับการคำนวณทางวิทยาศาสตร์และงานวิเคราะห์ข้อมูล นักเรียนจะสำรวจประวัติ คุณสมบัติ และการเปรียบเทียบกับภาษาที่มีอยู่แล้ว เช่น ภาษา Python, R และ MATLAB บทนี้ให้แนวทางแบบครบวงจรในการตั้งค่าสภาพแวดล้อมจูเลียบนระบบปฏิบัติการต่าง ๆ และการจัดการระบบนิคมแพ็กเกจที่ทรงพลัง
ผลลัพธ์การเรียนรู้:
- นิยามภาษาโปรแกรมจูเลีย พร้อมระบุคุณสมบัติหลักและบริบททางประวัติศาสตร์
- แยกแยะความแตกต่างระหว่างจูเลียกับภาษาคำนวณทางเทคนิคอื่น ๆ ทั้งในด้านประสิทธิภาพและไวยากรณ์
- ติดตั้งและตั้งค่าสภาพแวดล้อมจูเลียและชุดคำสั่ง (REPL) ได้อย่างสำเร็จบนระบบปฏิบัติการ Linux, Windows และ macOS
🔹 บทที่ 2: ไวยากรณ์เบื้องต้นและการจัดการอาร์เรย์
ภาพรวม: บทนี้นำเสนอไวยากรณ์พื้นฐานของจูเลีย โดยเน้นที่แนวทางการตั้งชื่อตัวแปร การใช้คอมเมนต์ และการจัดการโครงสร้างอาร์เรย์อย่างแข็งแรง นักเรียนจะพัฒนาจากขั้นตอนการกำหนดค่าตัวแปรพื้นฐาน ไปสู่การจัดการอาร์เรย์ขั้นซับซ้อน รวมถึงการสร้างอาร์เรย์หลายมิติ การรวม (comprehensions) และการดำเนินการที่เปลี่ยนแปลงข้อมูล ซึ่งจำเป็นต่อการคำนวณทางวิทยาศาสตร์ระดับสูง
ผลลัพธ์การเรียนรู้:
- ใช้แนวทางสไตล์ของจูเลียในการตั้งชื่อตัวแปร และใช้คอมเมนต์แบบบรรทัดเดียว/หลายบรรทัดเพื่อเอกสารโค้ด
- สร้างอาร์เรย์หลากหลายประเภทและมิติ โดยใช้ช่วง (range objects), ตัวสร้าง (generators), การรวม (comprehensions) และฟังก์ชันภายใน เช่น
zeros()และones() - ดำเนินการดัชนีอาร์เรย์ขั้นสูงและเปลี่ยนแปลงข้อมูลโดยใช้ตรรกะแบบบูลีน คำสั่ง
endและฟังก์ชันที่มีเครื่องหมายตกใจ (เช่นpush!,splice!)
🔹 บทที่ 3: ทูเพิลและประเภทข้อมูลเชิงตัวเลข
ภาพรวม: บทนี้ให้ภาพรวมเชิงเทคนิคที่ครอบคลุมเกี่ยวกับโครงสร้างข้อมูลพื้นฐานและประเภทข้อมูลเชิงตัวเลขของจูเลีย โดยเน้นที่ทูเพิลที่ไม่สามารถเปลี่ยนแปลงได้ (immutable tuples) และรายละเอียดของคณิตศาสตร์ในคอมพิวเตอร์ นักเรียนจะสำรวจการสร้างและจัดการทูเพิลที่มีชื่อ การทำงานของจำนวนเต็มที่มีความแม่นยำคงที่ (รวมถึงการเกินค่า) และคุณสมบัติที่เกี่ยวข้องกับความแม่นยำของจำนวนทศนิยม จำนวนเศษส่วน และจำนวนเชิงซ้อน ซึ่งเป็นพื้นฐานสำคัญสำหรับการคำนวณทางวิทยาศาสตร์ระดับสูงและงานวิเคราะห์ข้อมูล
ผลลัพธ์การเรียนรู้:
- สร้างและจัดการทูเพิลและทูเพิลที่มีชื่อ รวมถึงการใช้งานในรูปแบบอาร์กิวเมนต์คำสำคัญของฟังก์ชัน
- ระบุและจัดการพฤติกรรมการเกินค่าจำนวนเต็ม (integer overflow) และข้อผิดพลาดจากการหาร โดยใช้ประเภทข้อมูลมาตรฐานและประเภทความแม่นยำสูงแบบไม่จำกัด
- วิเคราะห์การแสดงผลของจำนวนทศนิยม รวมถึงค่าศูนย์ที่มีเครื่องหมาย ค่าพิเศษ (NaN, Inf) และค่าเครื่องจักร (machine epsilon)
🔹 บทที่ 4: ตัวดำเนินการและฟังก์ชันทางคณิตศาสตร์
ภาพรวม: บทนี้นำเสนอการสำรวจอย่างครอบคลุมเกี่ยวกับระบบตัวดำเนินการของจูเลีย และไลบรารีฟังก์ชันทางคณิตศาสตร์ที่กว้างขวาง นักเรียนจะเริ่มจากพื้นฐานการดำเนินการทางคณิตศาสตร์และการจัดการบิต ไปสู่การดำเนินการแบบเวกเตอร์ที่ใช้เครื่องหมาย "จุด" (dot operations) ขั้นสูง และการเปรียบเทียบแบบซ้อนกัน บทนี้ยังอธิบายเครื่องมือทางตัวเลขสำคัญสำหรับการคำนวณทางวิทยาศาสตร์ ได้แก่ การปัดเศษ การหารเฉพาะเจาะจง ฟังก์ชันลอการิธึม และฟังก์ชันตรีโกณมิติ
ผลลัพธ์การเรียนรู้:
- ดำเนินการและผสมผสานตัวดำเนินการทางคณิตศาสตร์ บิตเวส และการอัปเดต เพื่อจัดการประเภทข้อมูล
- ใช้ไวยากรณ์แบบเวกเตอร์ "จุด" เพื่อดำเนินการตามองค์ประกอบของอาร์เรย์
- วิเคราะห์พฤติกรรมการประเมินและกฎลำดับการดำเนินการของการเปรียบเทียบซ้อนกันและนิพจน์ทางคณิตศาสตร์ที่ซับซ้อน
🔹 บทที่ 5: สตริงและการเขียนโปรแกรมเชิงฟังก์ชัน
ภาพรวม: บทนี้ครอบคลุมสองเสาหลักของการจัดการข้อมูลในจูเลีย: การจัดการสตริงและการเขียนโปรแกรมเชิงฟังก์ชัน นักเรียนจะสำรวจการสนับสนุนที่แข็งแรงของจูเลียสำหรับสตริงแบบยูนิคอเด (Unicode/UTF-8) การดัชนีขั้นสูง และลิตเตอรัลที่ไม่ธรรมดา พร้อมกับพลังที่กำหนดของแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันในจูเลีย ได้แก่ การส่งผ่านหลายรูปแบบ (multiple dispatch), ฟังก์ชันที่ไม่มีชื่อ (anonymous functions) และฟังก์ชันระดับสูง เช่น map และ filter
ผลลัพธ์การเรียนรู้:
- จัดการและค้นหาสตริงโดยใช้การดัชนีช่วง การแทรกค่า และการใช้รูปแบบพิเศษ (regular expressions)
- สร้างฟังก์ชันที่มีความยืดหยุ่น โดยใช้พารามิเตอร์แบบเลือกได้ คำสำคัญ และการเรียกซ้ำ (recursion)
- ใช้รูปแบบการเขียนโปรแกรมเชิงฟังก์ชัน (Map/Filter) และใช้การส่งผ่านหลายรูปแบบเพื่อเลือกเมธอดเฉพาะ
🔹 บทที่ 6: การควบคุมลำดับการทำงานและโครงสร้างข้อมูลแบบคีย์-แวลู
ภาพรวม: บทนี้ครอบคลุมโครงสร้างพื้นฐานที่จำเป็นสำหรับการควบคุมลำดับการทำงานและการจัดการข้อมูลที่ซับซ้อนในจูเลีย นักเรียนจะเรียนรู้การใช้ตรรกะเงื่อนไขอย่างกระชับผ่านตัวดำเนินการแบบสามพจน์ (ternary operators) การสลับแบบบูลีน และบล็อก if-else แบบปกติ รวมถึงเทคนิคการวนซ้ำโดยใช้ for และ while นอกเหนือจากนี้ บทนี้ยังสำรวจโครงสร้างข้อมูลระดับสูง เช่น ไดก์ชันนารี (Dictionaries) สำหรับการจับคู่คีย์-แวลู และเซต (Sets) สำหรับการเก็บข้อมูลที่ไม่ซ้ำกัน โดยเน้นการสร้าง การจัดการ และการดำเนินการเชิงเซต
ผลลัพธ์การเรียนรู้:
- ใช้ตรรกะเงื่อนไขที่กระชับโดยใช้ตัวดำเนินการแบบสามพจน์ และการแสดงตรรกะแบบตัดสินใจ (short-circuit boolean expressions)
- สร้างวงจรการวนซ้ำที่มั่นคง และจัดการข้อผิดพลาดในเวลาทำงานโดยใช้การยกเลิกข้อผิดพลาด (exceptions) และบล็อก
do - จัดการข้อมูลแบบเชื่อมโยงโดยใช้ไดก์ชันนารี รวมถึงการค้นหา การรวม และการวิเคราะห์ความถี่
🔹 บทที่ 7: วันที่ ไฟล์และเมตาโปรแกรมมิ่ง
ภาพรวม: บทนี้สำรวจเสาหลักสามประการที่ก้าวหน้าของภาษาจูเลีย: การจัดการข้อมูลเวลาโดยใช้โมดูล Dates การดำเนินการอ่าน/เขียนไฟล์ (I/O) อย่างแข็งแรง และพลังของเมตาโปรแกรมมิ่ง นักเรียนจะเรียนรู้การจัดการวันที่และเวลา การนำทางและโต้ตอบกับระบบไฟล์ และเข้าใจว่าโค้ดจูเลียถูกวิเคราะห์ แสดงผลเป็นต้นไม้ไวยากรณ์เชิงนามธรรม (AST) และจัดการผ่านแมโคร
ผลลัพธ์การเรียนรู้:
- ดำเนินการคำนวณวันที่ขั้นสูง การจัดรูปแบบ และการปัดเศษ พร้อมเข้าใจโครงสร้างประเภทของวัตถุเวลา
- ใช้เทคนิคการจัดการไฟล์ที่มีประสิทธิภาพ รวมถึงการอ่านแบบสตรีม การดึงข้อมูลเมตา และรูปแบบการปิดไฟล์อย่างปลอดภัย
- วิเคราะห์โครงสร้างของนิพจน์จูเลีย และสร้างแมโครเพื่อช่วยอัตโนมัติการสร้างและประเมินโค้ด
🔹 บทที่ 8: การแสดงผลข้อมูลและข้อมูลเฟรม
ภาพรวม: บทนี้สำรวจความจำเป็นสองด้านของการวิเคราะห์ข้อมูลในจูเลีย คือ การแสดงผลและสถิติ ซึ่งเริ่มจากกราฟฟิกแบบฟังก์ชันและภาพข้อความ (UnicodePlots) แล้วเปลี่ยนไปสู่การจัดการชุดข้อมูลขนาดใหญ่โดยใช้ระบบนิคม DataFrames.jl โดยเน้นบทบาทสำคัญของการทำความสะอาดข้อมูล การสร้างแบบจำลองการถดถอย และการเปลี่ยนโครงสร้าง เพื่อเตรียมข้อมูลสำหรับงานวิจัยทางวิทยาศาสตร์
ผลลัพธ์การเรียนรู้:
- สร้างกราฟฟิกที่ใช้งานได้และกราฟฟิกแบบข้อความโดยใช้
Plots.jl,UnicodePlotsและVegaLite - วิเคราะห์ความสัมพันธ์ระหว่างสถิติอธิบายและกราฟฟิกโดยใช้ชุดข้อมูลอันสโคมบ์ (Anscombe's Quartet) และโมเดลการถดถอยเชิงเส้น
- ดำเนินการจัดการข้อมูลเฟรมขั้นสูง รวมถึงการจัดการค่าหายไป การเปลี่ยนโครงสร้าง (เพิ่ม/ลบแถวและคอลัมน์) และการกรองตามเงื่อนไข
🔹 บทที่ 9: การคำนวณทางวิทยาศาสตร์: ชุดข้อมูล โมดูล และกราฟิก
ภาพรวม: บทนี้ครอบคลุมระบบนิคมหลักของจูเลียสำหรับการคำนวณทางวิทยาศาสตร์ โดยเน้นสามเสาหลัก ได้แก่ การจัดการข้อมูล (CSV, HDF5, XML และ RDatasets), การวิเคราะห์ทางสถิติ (สถิติอธิบายและการสุ่มตัวอย่าง) และโครงสร้างโมดูลของโปรแกรมจูเลีย สุดท้าย บทนี้สำรวจเครื่องมือแสดงผลข้อมูลที่หลากหลาย ตั้งแต่การวาดกราฟขั้นพื้นฐานด้วยข้อความ ไปจนถึงการนำไปใช้ในรูปแบบ "วิทยาศาสตร์กราฟิก" (Grammar of Graphics)
ผลลัพธ์การเรียนรู้:
- ดำเนินการนำเข้า/ส่งออกข้อมูล: นำเข้า/ส่งออกไฟล์ CSV และ HDF5 วิเคราะห์ข้อมูลไฟล์ XML และดำเนินการตัดข้อมูล (subsetting) และเรียงลำดับบนข้อมูลเฟรม
- ดำเนินการวิเคราะห์ทางสถิติ: คำนวณสถิติอธิบายพื้นฐานและแบบถ่วงน้ำหนัก (ค่าเฉลี่ย ความแปรปรวน ความเบี่ยงเบนมาตรฐาน) และดำเนินการตัวอย่างการสุ่มตัวอย่างแบบต่าง ๆ
- จัดการโครงสร้างโค้ด: ติดตั้งและใช้โมดูล/แพ็กเกจได้อย่างมีประสิทธิภาพ พร้อมเข้าใจโครงสร้างไดเรกทอรีภายในของแพ็กเกจจูเลีย
🔹 บทที่ 10: การเชื่อมต่อเครือข่ายและฐานข้อมูล
ภาพรวม: บทนี้สำรวจความสามารถของภาษาจูเลียในการตั้งค่าการสื่อสารผ่านเครือข่ายและเชื่อมต่อกับระบบฐานข้อมูลที่หลากหลาย บทนี้ครอบคลุมการเชื่อมต่อเครือข่ายระดับต่ำผ่าน TCP และ Named Pipes การใช้งานบริการเว็บระดับสูง (อีเมล ทวิตเตอร์ วีบโซเก็ต) และการเชื่อมต่อกับคลาวด์ผ่าน AWS และ Google Cloud นอกเหนือจากนี้ บทนี้ยังอธิบายการเชื่อมต่อฐานข้อมูลอย่างแข็งแรงโดยใช้ MySQL, JDBC, ODBC, SQLite และ PostgreSQL โดยเน้นการดำเนินการคำขอและจัดการเมตาดาต้า
ผลลัพธ์การเรียนรู้:
- ตั้งค่าและใช้งานบริการเครือข่ายโดยใช้ TCP, Named Pipes และ WebSockets
- รวมแอปพลิเคชันจูเลียเข้ากับสภาพแวดล้อมคลาวด์ (AWS/Google Cloud) และ API โซเชียลมีเดีย/ข้อความ (ทวิตเตอร์/อีเมล)
- สร้างโซลูชันฐานข้อมูลโดยใช้ API โดยตรง (MySQL, SQLite) และชั้นกลาง (middleware) เช่น JDBC, ODBC, DBI