เครื่องคอมพิวเตอร์ที่เราใช้งานประกอบไปด้วย 2 ส่วนคือฮาร์ดแวร์และซอฟแวร์ ซึ่งซอฟแวร์ก็คือโปรแกรมต่างๆที่ติดตั้งอยู่ในเครื่องคอมพิวเตอร์นั่นเอง ตั้งแต่ขั้นตอนการเปิดเครื่องคอมพิวเตอร์ขึ้นมาเพื่อใช้งาน จะมีการเรียกใช้งานโปรแกรม BIOS/EFI ซึ่งเป็นโปรแกรมที่ถูกบันทึกไว้ในชิปที่ติดตั้งอยู่บนเมนบอร์ดของเครื่องคอมพิวเตอร์ โปรแกรม BIOS/EFI มีหน้าที่เตรียมความพร้อมของฮาร์ดแวร์ส่วนต่างๆของเครื่องคอมพิวเตอร์ จากนั้นโปรแกรม BIOS/EFI จะโหลดโปรแกรมโหลดเดอร์ (loader) เข้ามาในหน่วยความจำของเครื่องคอมพิวเตอร์และส่งต่อการทำงานไปให้โปรแกรมโหลดเดอร์ โปรแกรมโหลดเดอร์ (loader) นี้ถูกติดตั้งอยู่ในเซคเตอร์แรกของฮาร์ดิสก์ของเราตั้งแต่ขั้นตอนการติดตั้งระบบปฏิบัติการลงในเครื่องคอมพิวเตอร์ โปรแกรมโหลด
เดอร์จะทำหน้าที่จัดเตรียมความพร้อมและโหลดโปรแกรมระบบปฏิบัติการเข้ามาในหน่วยความจำของเครื่องคอมพิวเตอร์อีกทีหนึ่ง จากนั้นจึงส่งต่อการทำงานให้กับโปรแกรมระบบปฏิบัติการต่อไป
ลำพังเพียงโปรแกรมระบบปฏิบัติการไม่ได้ช่วยให้เราใช้ประโยชน์จากคอมพิวเตอร์ได้เพราะโปรแกรมระบบปฏิบัติการจะทำหน้าที่เป็นตัวกลางในการจัดการทรัพยากรของเครื่องคอมพิวเตอร์ให้กับโปรแกรมอื่นๆ เช่น ช่วยจัดการเรื่องการใช้งานหน่วยความจำ ช่วยจัดการเรื่องการติดต่อกับส่วนรับ/ส่งข้อมูลต่างๆ ดังนั้นเราต้องมีโปรแกรมอื่นๆที่ทำงานอยู่บนระบบปฏิบัติการอีกทีหนึ่งจึงจะสามารถใช้ประโยชน์จากเครื่องคอมพิวเตอร์ได้
ระบบปฏิบัติการที่เราติดตั้งใช้งานจะมาพร้อมกับโปรแกรมอื่นๆที่ทำงานอยู่บนระบบปฏิบัติการมาให้อยู่แล้ว เพื่อให้ผู้ใช้งานสามารถเริ่มใช้งานในเบื้องต้นได้ เช่น หากเราใช้ระบบปฏิบัติการวินโดวส์ก็จะมีโปรแกรมอื่นๆติดตั้งมาให้ด้วยเลย เช่น โปรแกรมเครื่องคิดเลข (calcuator) โปรแกรมจัดการข้อความแบบพื้นฐาน (notepad) โปรแกรมจัดการไฟล์และโฟลเดอร์ (file explorer) โปรแกรมตั้งค่าส่วนต่าง (control panel) เป็นต้น
จะเห็นว่าตั้งแต่เปิดเครื่องคอมพิวเตอร์ขึ้นมาจะมีการเรียกใช้งานโปรแกรมต่างๆมากมาย และโปรแกรมเหล่านั้นก็ถูกพัฒนาขึ้นมาด้วยภาษาโปรแกรมที่แตกต่างกัน แต่ละภาษาโปรแกรมก็จะมีจุดเด่นจุดด้อยที่แตกต่างกันไป การเลือกภาษาโปรแกรมเพื่อพัฒนาโปรแกรมจึงขึ้นอยู่กับลักษณะของการเอาไปใช้งาน เช่น หากเราต้องการโปรแกรมขนาดเล็กๆเพื่อบันทึกลงในชิปเราอาจจะเลือกใช้ภาษาเเอซเซมบรี้ (assembly) ถ้าต้องการพัฒนาเว็บแอพพลิเคชั่นอาจจะเลือกใช้ภาษาจาวาสคริป (javascript) ถ้าต้องการพัฒนาโปรแกรมเพื่อจัดการกับข้อมูลขนาดมหาศาลอาจจะเลือกใช้ภาษาไพธอน (python) หรือถ้าต้องการพัฒนาโปรแกรมที่สามารถนำไปใช้กับระบบปฏิบัติการอะไรก็ได้โดยไม่ต้องคอมไพล์หรือปรับแต่งจะเลือกใช้ภาษาจาวา (java)
เมื่อเราต้องการสั่งเครื่องคอมพิวเตอร์ให้ทำงานตามที่เราต้องการ เราต้องป้อนคำสั่งให้กับเครื่องคอมพิวเตอร์ แต่เครื่องคอมพิวเตอร์รู้จักแค่ตัวเลข 0 และตัวเลข 1 ดังนั้นคำสั่งจึงมีหน้าตาเป็นชุดตัวเลข เช่น 01001110 10110010 10010101 เป็นต้น เราเรียกลักษณะคำสั่งแบบนี้ว่ารหัสไบนารี่ (binary code) ซึ่งไบนารี่คือ 0 และ 1 นั่นเอง
การเตรียมคำสั่งด้วยชุดตัวเลขทำได้ยากและมีโอกาสผิดพลาดได้ง่ายจึงมีการกำหนดสัญญลักษณ์เป็นตัวอักษรแทนชุดตัวเลขเรียกว่ารหัสนิวโมนิก (mnemonic code) เพื่อให้ง่ายต่อการเตรียมคำสั่งมากขึ้นจึงเกิดเป็นภาษาโปรแกรมที่เรียกว่าเเอซเซมบรี้ (assembly programming language)
ตามตัวอย่างด้านล่างตัวเลข 0 และ ตัวเลข 1 ทางด้านขวาสุดคือคำสั่งที่เครี่องคอมพิวเตอร์เข้าใจ ส่วนตัวอักษรในคอลัมน์กลางคือรหัสนิวโมนิก
เราเรียกภาษาเเอซเซมบรี้ว่าเป็นภาษาระดับล่าง (low level programming language) เพราะการเตรียมคำสั่งยังคงมีรูปแบบใกล้เคียงภาษาที่เครื่องคอมพิวเตอร์เข้าใจ ต่อมาจึงมีแนวคิดที่จะทำให้ภาษาโปรแกรมใกล้เคียงภาษามนุษย์มากขึ้น จึงเกิดภาษาระดับสูง (high level programming language) ขึ้นมา เช่น ภาษาฟอร์ทรานส์ (Fortrans) ภาษาเบสิค (Basic) ภาษาปาสคาล ( Pascal) ภาษาจาวา (Java) เป็นต้น การเตรียมคำสั่งก็คือการเขียนโปรแกรมนั่นเอง
โปรแกรมตัวแปลภาษา
เราสามารถใช้โปรแกรมสำหรับสร้างและแก้ไขข้อความ (text editor) พื้นฐานตัวใดก็ได้ตามในการเขียนโปรแกรม (ไม่ใช่โปรแกรมในชุดโปรแกรมสำนักงาน) จากนั้นบันทึกสิ่งที่เขียนขึ้นมาเป็นไฟล์เรียกว่าไฟล์รหัสต้นฉบับ (source code file) แต่เฉพาะแค่ไฟล์รหัสต้นฉบับ (source code) ที่เราเขียนขึ้นมาจะยังไม่สามารถนำไปใช้งานที่เครื่องคอมพิวเตอร์ได้ แต่จะต้องเอาไปแปลเป็นรหัสไบนารี่ซึ่งเป็นภาษาที่เครื่องคอมพิวเตอร์เข้าใจเสียก่อน ดังนั้นแต่ละภาษาจะมีโปรแกรมที่ทำหน้าที่เป็นตัวแปลภาษาเพื่อแปลจากภาษาที่เราอ่านรู้เรื่องไปเป็นรหัสไบนารี่ ตัวแปลภาษาจะมีอยู่ 2 แบบคือ ตัวแปลภาษาแบบอินเตอร์พรีเตอร์ (interpreter) และ ตัวแปลภาษาแบบคอมไพเล่อร์ (compiler)
การใช้ตัวแปลภาษาแบบอินเตอร์พรีเตอร์ เราจะเอาไฟล์รหัสต้นฉบับไปสั่งทำงานผ่านโปรแกรมตัวแปลภาษาแบบอินเตอร์พรีเตอร์บนเครื่องคอมพิวเตอร์ที่เราต้องการทำงาน โดยโปรแกรมตัวแปลภาษาแบบอินเตอร์พรีเตอร์จะแปลไฟล์รหัสต้นฉบับที่เราเขียนไปเป็นภาษาที่เครื่องคอมพิวเตอร์เข้าใจในขณะที่เรียกใช้งานไฟล์รหัสต้นฉบับที่เราเขียนนั่นเอง
ภาษาโปรแกรมที่ใช้ตัวแปลภาษาแบบอินเตอร์พรีเตอร์ การทำงานจะทำงานเรียงลำดับจากบนลงล่าง ดังนั้นลำดับของคำสั่งที่ถูกต้องจะมีความสำคัญ จากตัวอย่างด้านล่างเราประกาศตัวแปร m1 เป็นฟังก์ชั่นเพื่อพิมพ์ข้อความ in m1 ก่อนและค่อยเรียกใช้ตัวแปร m1 ซึ่งจะพิมพ์ข้อความ in m1
declare m1() {print ‘in m1’}
m1()
แต่ถ้าเราเขียนดังตัวอย่างด้านล่าง จะเกิดปัญหาเพราะไม่รู้ว่าตัวแปรที่เรียกใช้คืออะไร
m1()
declare m1() {print ‘in m1’}
สำหรับการใช้ตัวแปลภาษาแบบคอมไพเล่อร์ เราจะเอาไฟล์รหัสต้นฉบับของเราไปแปลเป็นภาษาที่เครื่องคอมพิวเตอร์เข้าใจเสียก่อนด้วยโปรแกรมตัวแปลภาษา จากนั้นเราจึงเอาไฟล์ผลลัพธ์คือไฟล์ไบนารี่ซึ่งเป็นไฟล์ที่เก็บรหัสไบนารี่ที่ได้จากการแปลภาษาไปใช้งานบนเครื่องคอมพิวเตอร์อีกทีหนึ่ง นั่นคือเราสามารถคอมไพล์ไฟล์รหัสต้นฉบับของเราจากเครื่องคอมพิวเตอร์เครื่องใดก็ได้ จากนั้นค่อยนำไฟล์ไบนารี่มาใช้งานบนเครื่องคอมพิวเตอร์ที่ต้องการ
ภาษาโปรแกรมที่ใช้ตัวแปลภาษาแบบคอมไพเล่อร์ ลำดับของคำสั่งจะไม่สำคัญ เพราะตัวแปลภาษาแบบคอมไพเล่อร์ จะวิเคราะห์รหัสต้นฉบับทั้งหมดก่อนที่จะแปลไปเป็นภาษาที่คอมพิวเตอร์เข้าใจ รวมถึงตรวจสอบความถูกต้องของไวยากรณ์และหลักภาษา การตรวจสอบความถูกต้องของชนิดข้อมูล และอาจจะมีการเพิ่มประสิทธิภาพให้โค๊ดด้วย ดังนั้นลำดับของคำสั่งจึงไม่เป็นสิ่งสำคัญสำหรับการแปลโปรแกรมแบบนี้ ตัวอย่างเช่น รหัสต้นฉบับด้านล่างเป็นการสร้างคลาสชื่อ MyClass ซึ่งประกาศให้ตัวแปร m1 เป็นชนิดข้อมูล M1 เพื่อเก็บค่าออบเจกต์ M1 เรียกใช้งานเมธอด M1.m1 โดยที่เมธอด m1 ถูกประกาศในคลาส M1 ซึ่งตามมาในบรรทัดหลังจากนั้น
Class MyClass{
public static void main(String args[ ]){
M1 m1 = new M1();
m1.m1;
}
Class M1{
public void m1() {
printLn(“in m1”);
}
}
สำหรับภาษาจาวาสคริปต์ที่ถึงแม้จะถูกสร้างมาเป็นภาษาที่ใช้ตัวแปลภาษาแบบอินเตอร์พรีเตอร์ แต่โปรแกรมบราวเซอร์ในปัจจุบันจะใช้การคอมไพล์ทันทีก่อนการใช้งานเรียกว่าการคอมไล์แบบ JIT (just in time compilation) ซึ่งจะเป็นคอมไพล์รหัสต้นฉบับไปเป็นไบต์โค๊ดก่อนแล้วค่อยสั่งให้ทำงานด้วย javascritp engine ของโปรแกรมบราวเซอร์นั้นๆ
ไวยากรณ์ของภาษาโปรแกรม
ไวยากรณ์หรือหลักภาษาของภาษาโปรแกรมเป็นกฏเกณฑ์ที่ผู้พัฒนาภาษาโปรแกรมกำหนดขึ้นมาซึ่งเราต้องปฏิบัติตามในการเขียนโปรแกรม ลองนึกถึงว่าเวลาที่เราศึกษาภาษาต่างประเทศ เราต้องทำความเข้าใจถึงหลักการใช้ภาษาของแต่ละภาษาที่แตกต่างกันไป ในการเขียนโปรแกรมก็เช่นเดียวกัน เราต้องเขียนให้ถูกต้องตามหลักภาษาที่ถูกกำหนดไว้สำหรับการเขียนโปรแกรมของแต่ละภาษาโปรแกรม โดยแต่ละภาษาโปรแกรมจะมีโปรแกรมตัวแปลภาษาซึ่งจะคอยตรวจสอบว่าเราเขียนถูกต้องตามหลักภาษาที่กำหนดไว้หรือไม่ หากเราเขียนไม่ถูกต้องตามหลักภาษาที่กำหนด โปรแกรมตัวแปลภาษาจะแจ้งข้อผิดพลาดให้เราทราบ และไม่ยอมแปลงไฟล์รหัสต้นฉบับไปเป็นไฟล์ไบนารี่ให้เรา
การประกาศตัวแปรและการระบุชนิดข้อมูล
ภาษาโปรแกรมยังถูกแบ่งออกตามวิธีการกำหนดชนิดข้อมูลให้กับตัวแปร โดยแบ่งเป็นแบบที่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร (statically typed) และแบบที่ไม่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร (dynamically typed)
ตัวอย่างด้านล่างเป็นลักษณะการใช้ภาษาในแบบที่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร จะเห็นว่าเราต้องระบุว่าตัวแปร age เป็นตัวแปลที่มีชนิดข้อมูลเป็น int (integer) จากนั้นเรากำหนดข้อมูลให้กับตัวแปร ซึ่งเมื่อนำไปแปลด้วยตัวแปรภาษา คำสั่ง age = false และ age = ‘10’ จะแสดงข้อผิดพลาดเนื่องจากโปรแกรมตัวแปรภาษาจะตรวจสอบให้เราด้วยว่าเรากำหนดข้อมูลให้กับตัวแปรถูกต้องตามชนิดของข้อมูลที่ระบุไว้หรือไม่ในระหว่างที่แปลภาษา
int age;
age = 10; \\integer
age = 100; \\integer
age = false; \\boolean
age = ‘10’; \\string
สำหรับภาษาโปรแกรมแบบที่ไม่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร การกำหนดข้อมูลตามตัวอย่างด้านล่างสามารถทำได้ ดังนั้นในขณะใดขณะหนึ่ง ตัวแปรเดียวกันนี้จะมีชนิดข้อมูลที่แตกต่างกันได้
var age;
age = 10; \\integer
age = 100; \\integer
age = false; \\boolean
age = ‘10’; \\string
ภาษาโปรแกรมแบบที่ไม่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปรซึ่งจะมีความยืดหยุ่นในการใช้งานมาก แต่จะยากต่อการดักจับและแก้ไขข้อบกพร่อง (debug) เพราะการอ่านรหัสต้นฉบับไม่ช่วยให้เรารู้ว่าตัวแปรมีชนิดข้อมูลเป็นอะไรในขณะที่ทำงาน
ตัวอย่างของภาษาโปรแกรมที่เป็นแบบที่ไม่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร เช่น ภาษาจาวาสคริปต์ (javascript) ซึ่งต่อมาได้มีการพัฒนาภาษาไทป์สตริปต์ (typescript) ซึ่งคือส่วนขยายของภาษาจาวาสคริปต์แบบที่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร จากตัวอย่างด้านล่าง คำสั่ง age = false และ age = ‘10’ จะแสดงข้อผิดพลาดเมื่อคอมไพล์
var age:number;
age = 10; \\integer
age = 100; \\integer
age = false; \\boolean
age = ‘10’; \\string
แต่ภาษาไทป์สตริปต์ก็ยังคงรองรับการการเขียนรหัสต้นฉบับที่ไม่ระบุชนิดข้อมูลเรียกว่า type inference ซึ่งจะดูว่าชนิดข้อมูลเป็นอะไรเมื่อมีการใช้งานตัวแปรในครั้งแรกและกำหนดเป็นชนิดข้อมูลนั้นให้กับตัวแปรไปตลอดการใช้งานโปรแกรม ดังนั้นจากตัวอย่างด้านล่าง คำสั่ง age = false และ age = ‘10’ จะแสดงข้อผิดพลาดเมื่อคอมไพล์
var age;
age = 10; \\integer
age = 100; \\integer
age = false; \\boolean
age = ‘10’; \\string
หากต้องการให้ตัวแปรในภาษาไทป์สตริปต์เป็นแบบที่ไม่ต้องกำหนดชนิดข้อมูล จะต้องระบุชนิดข้อมูลเป็น any ตามตัวอย่างด้านล่าง
var age:any;
age = 10; \\integer
age = 100; \\integer
age = false; \\boolean
age = ‘10’; \\string
สำหรับภาษาจาวาเป็นแบบที่ต้องกำหนดชนิดข้อมูลเมื่อมีการประกาศตัวแปร หากเปรียบเทียบภาษาจาวา ภาษาจาวาสคริปต์ และภาษาไทป์สตริปต์ จะเห็นข้อแตกต่างตามตารงด้านล่าง
ไลบรารี่ของแต่ละภาษาโปรแกรม
นอกจากโปรแกรมตัวแปลภาษาแล้ว ทางผู้พัฒนาภาษาโปรแกรมจะจัดเตรียมโปรแกรมที่พร้อมให้เรานำไปใช้งานโดยเราสามารถอ้างถึงและเรียกใช้งานโปรแกรมเหล่านั้นได้เลยโดยที่ไม่จำเป็นต้องเสียเวลาเพื่อเขียนโปรแกรมสำหรับทำงานเหล่านั้นขึ้นมาเอง ทำให้เราสามารถพัฒนาโปรแกรมได้ง่ายขึ้นและเร็วขึ้น เราเรียกชุดของโปรแกรมสำเร็จรูปพร้อมใช้เหล่านี้ว่าไลบรารี่ (library) หรือ ในเฟรมเวิร์ค (framework) ของการเขียนโปรแกรม เช่น สปริงค์เฟรมเวอร์ค (spring framework) เกรเดิลเฟรมเวอร์ค (gradle framework) จะเรียกว่า ดีเพนเดนซี่ (dependency)
เครื่องมือช่วยในการเขียนโปรแกรม
หากเราใช้โปรแกรมสำหรับสร้างและแก้ไขข้อความ (text editor) ในการเขียนโปรแกรมย่อมมีโอกาสที่เราจะเขียนโปรแกรมผิดหลักภาษาของแต่ละภาษาโปรแกรมได้ง่าย และยังมีขั้นตอนในการเรียกใช้ไลบรารี่ ขั้นตอนในการเรียกใช้งานโปรแกรมตัวแปลภาษา ซึ่งหากพบข้อผิดพลาดก็จะต้องเสียเวลาในการแก้ไขและลองใหม่อีกหลายครั้ง จึงมีการพัฒนาโปรแกรมเพื่อช่วยในการเขียนโปรแกรม เราเรียกโปรแกรมเหล่านี้ว่า IDE (Integrated Development Environment)
IDE เป็นโปรแกรมสำหรับสร้างและแก้ไขข้อความที่มีความสามารถในการตรวจสอบความถูกต้องตามหลักภาษาของแต่ละภาษาโปรแกรมขึ้นอยู่กับว่าโปรแกรม IDE ที่เราใช้งานรองรับการเขียนโปรแกรมด้วยภาษาโปรแกรมใดได้บ้าง รวมถึงยังมีความสามารถในการตรวจสอบและค้นหาข้อผิดพลาด สามารถให้คำแนะนำในการเขียนโปรแกรมที่มีประสิทธิภาพ ช่วยจัดรูปแบบให้อ่านได้ง่าย มีโปรแกรมตัวแปลภาษาและเครื่องมือในการเรียกใช้ไลบรารี่มาให้เราเรียกใช้งานได้อย่างง่ายๆ ซึ่งจะช่วยให้เราพัฒนาโปรแกรมได้เร็วขึ้นและมีมาตรฐานในการเขียนโปรแกรมที่ดี ตัวอย่างของโปรแกรม IDE เช่น โปรแกรม IntelliJ IDEA โปรแกรม Eclipse โปรแกรม NetBeans เป็นต้น
กระบวนการแก้ไขข้อบกพร่อง (debug)
ถึงแม้ว่าการอ่านรหัสต้นฉบับจะช่วยให้เราสามารถทำความเข้าใจได้ว่าโปรแกรมทำงานอย่างไร แต่ในการใช้งานจริงอาจจะไม่ได้เป็นเช่นนั้น เพราะสถานะต่างๆที่เปลี่ยนไปเปลี่ยนมาในระหว่างที่โปรแกรมทำงาน อาจจะให้ผลที่แตกต่างกับความเข้าใจที่เราได้จากการอ่านรหัสต้นฉบับ ดังนั้นจึงมีกระบวนการแก้ไขข้อบกพร่อง (debug) ที่จะช่วยให้เราตรวจสอบได้ว่าโปรแกรมทำงานอย่างไร โดยเราสามารถกำหนดตำแหน่งที่ต้องการให้โปรแกรมหยุดทำงานเพื่อตรวจสอบค่าต่างๆ แต่ต้องระลึกอยู่เสมอว่าการหยุดในแต่ละจุดเป็นเพียงแค่เหตุการณ์ในขณะใดขณะหนึ่งเท่านั้น ดังนั้นค่าต่างๆที่เห็นในขณะนั้นอาจจะไม่ได้เป็นข้อสรุปของการทำงานทั้งหมดของโปรแกรม หากต้องการเข้าใจทั้งโปรแกรมก็ต้องทำกระบวนนี้ซ้ำไปเรื่อยๆจนจบโปรแกรม
การเขียนโปรแกรม
การเขียนโปรแกรมคือกระบวนการในการเปลี่ยนจากแนวคิดไปเป็นรูปแบบที่คอมพิวเตอร์เข้าใจและทำงานตามที่เราต้องการ การเขียนโปรแกรมเป็นตัวเชื่อมต่อระหว่างผู้ใช้งาน วิศวกรซอฟต์แวร์และคอมพิวเตอร์
ภาษาโปรแกรมที่ใช้ในการเขียนโปรแกรมมีอยู่หลายภาษา แต่ละภาษาโปรแกรมจะมีไวยากรณ์ของมันเองซึ่งเราต้องเขียนให้ถูกต้องตามหลักการเขียนของภาษาโปรแกรมนั้นๆ แต่ถึงแม้จะเขียนโปรแกรมถูกต้องตามไวยากรณ์แต่ถ้าความหมายของโปรแกรมไม่ถูกต้องโปรแกรมก็ไร้ประโยชน์ เช่น หากเราเขียนโปรแกรมว่า a = a ในแง่ของไวยากรณ์อาจจะถูกต้องแต่ไม่มีความหมายใดๆที่เกิดประโยชน์
รูปแบบการเขียนโปรแกรมมีอยู่มากมายหลากหลายแบบโดยแต่ละภาษาก็จะมีรูปแบบการเขียนโปรแกรมที่แตกต่างกันไป การใช้รูปแบบการเขียนโปรแกรมที่เป็นมาตรฐานจะช่วยให้นักพัฒนาคนอื่นอ่านสามารถอ่านโค๊ดและทำความเข้าใจการทำงานของโปรแกรมเราได้ง่ายขึ้น รวมถึงส่งเสริมการมีรูปแบบการเขียนโค๊ดแบบเดียวในทีมพัฒนา เช่น เราจะใช้การเขียนโค๊ดเพื่อตรวจจับข้อผิดพลาด (exception) สำหรับการตรวจจับข้อผิดพลาดเท่านั้นไม่นำมาใช้ในจุดอื่น เช่น ใช้เปลี่ยนเส้นทางการควบคุม (control flow) ของโค๊ด หรือ การสร้างออบเจกต์ที่ไม่ยอมให้แก้ไขสถานะถ้าออบเจกต์นั้นต้องถูกใช้ในหลายๆเธรดพร้อมๆกัน หรือ การใช้นิพจน์แบบแลมด้า (lambda expression) แทนที่การใช้คลาสแบบไม่ระบุชื่อ (anonymous) เป็นต้น