ข้าม​ไป​ยัง​เนื้อหา

Java จาก​ศูนย์ — เรียน​ภาษา​ที่​พูด​ชื่อ​ออก​มา​ทุก​ครั้ง ด้วย​การ​สร้าง CLI จริง

Java พูด​ชื่อ​ออก​มา​ทุก​ครั้ง — ชนิด​ที่​เข้า​กับ interface ได้​ต้อง​เขียน implements ออก​มา ความ​ผิด​พลาด​ที่ compiler บังคับ​ให้​จัดการ​ต้อง​ประกาศ​ไว้​ใน throws และ​แม้แต่ JSON ก็​ต้อง​ประกาศ​ว่า​จะ​เอา​มา​จาก​ไหน ทั้งหมด​นี้​คือ​ราคา​ที่​จ่าย​ไป​กับ​ความ​ชัดเจน เรา​เรียน​ด้วย​การ​สร้าง orderctl ตัว​เดิม​กับ​คอร์ส Go ใหม่​ทั้ง​ตัว ที​ละ​บท ตั้งแต่ java Main.java ที่​ยัง​ไม่มี build tool จนถึง HTTP server กับ virtual thread — และ​ทุก​บท​บอก​ว่า​อีก​ภาษา​เลือก​ทาง​ไหน แล้ว​ใคร​จ่าย​อะไร
ความคืบหน้า0 / 8 บทเรียน

แปดบท เรียง​ตาม​ลำดับ​ที่ 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 ไม่ใช่​ใน​ฐานะ​เครื่อง​มือ​ที่​แนะ​ให้​ใช้