แปดบท เรียงตามลำดับที่ orderctl โตขึ้นทีละชั้น
คุณเขียนภาษาอื่นเป็นอยู่แล้ว และอยากรู้ว่า Java ตัดสินใจต่างตรงไหน
คอร์สนี้ไม่ได้เริ่มที่ว่าตัวแปรคืออะไร · มันสมมติว่าคุณเขียน Go, C#, TypeScript
หรือ Python เป็นอยู่แล้ว แล้วอธิบาย Java ด้วยการเทียบกับสิ่งที่คุณรู้
ถ้าคุณอ่าน คอร์ส Go จากศูนย์ มาแล้ว คอร์สนี้จะอ่านง่ายเป็นพิเศษ
เพราะมันสร้างของชิ้นเดียวกัน แต่ไม่จำเป็นต้องอ่านก่อน
orderctl ตัวเดิมกับคอร์ส Go เขียนใหม่ทั้งตัวด้วย Java
ไม่ใช่ตัวอย่างเล่นๆ ที่แยกกันคนละบท · มันเป็นของชิ้นเดียวที่โตขึ้นทุกบท จนบทสุดท้าย
มันอ่านออเดอร์จาก JSON ตรวจความถูกต้อง คิดส่วนลด เก็บสถานะลง disk
และเปิด POST /quote ที่รับออเดอร์เข้ามาคิดยอดแล้วตอบกลับ ทีละหลายคำขอพร้อมกัน
การเขียนของชิ้นเดียวกันสองภาษา ทำให้คำถาม “ภาษานี้ดีกว่าไหม” กลายเป็นคำถามที่ตอบได้
ด้วยการชี้ไปที่ code สองชุดที่ทำงานเดียวกัน
ข้อแรกคือข้อที่ต้องพูดออกมาก่อน เพราะมันขัดกับคำโฆษณาของคอร์สที่แล้ว
คอร์ส Go ใช้ standard library ล้วน · คอร์สนี้ทำแบบนั้นไม่ได้ เพราะ Java SE
ไม่มี JSON มาให้เลย บทที่ 3 จึงเพิ่ม Jackson เข้ามาเป็น dependency ที่ประกาศตัวเดียว
นั่นไม่ใช่ข้อบกพร่องของคอร์ส มันคือข้อเท็จจริงของภาษา และบทที่ 3 อธิบายว่าทำไม
ภาษาที่มีอายุสามสิบปีถึงยังไม่มีของที่ Go มีมาตั้งแต่วันแรก
- บทที่ 1-2 ไม่มี build tool เลย
java Main.java รันได้ทันที
· เครื่องมือใหม่มาถึงตอนที่มีเหตุผลให้ต้องใช้ ไม่ใช่ตั้งแต่บรรทัดแรก
- ทุกตัวอย่างรันบน Java 25 โดยไม่ต้องเปิดโหมดทดลอง ไม่มี
--enable-preview สักที่
- ไม่มี framework และไม่มี ORM บทที่ 8 เปิด HTTP ด้วย JDK เปล่า
สามข้อที่ตัดออก พร้อมเหตุผลของแต่ละข้อ
- ไม่สอน Spring และ framework อื่น บทที่ 8 เปิด HTTP endpoint ด้วย JDK เปล่า
ซึ่งแลกความสะดวกหลายอย่างไป — ไม่มี routing ที่ดู method ให้ ไม่มี dependency injection
และไม่มีการแปลง JSON อัตโนมัติ · แต่มันตอบคำถาม “ภาษาตัดสินใจอย่างไร” ได้ตรงกว่า
ส่วน framework เป็นคอร์สของตัวเอง
- ไม่วัดความเร็ว คอร์สนี้ไม่มีตัวเลข ns/op สักตัว เพราะตัวเลขเวลาไม่ข้ามเครื่อง
- ไม่สอนการสืบทอดแบบลึก บทที่ 5 พูดถึงมันในฐานะข้อที่ Go ตัดทิ้ง
และในฐานะเส้นที่แยก
abstract class ออกจาก interface ไม่ใช่ในฐานะเครื่องมือที่แนะให้ใช้