Web-Tech

KISS : Keep It Simple and Straightforward.

posted on 01 May 2005 13:42 by teno  in Web-Tech
ref: http://pantip.com/tech/developer/topic/DN1777318/DN1777318.html

1. พยายามทำให้ Interface ของคุณง่ายเข้าไว้
แน่น อนผู้ใช้ย่อมต้องการใช้งานโปรแกรมที่เข้าใจได้ง่าย ยิ่งโปรแกรมของคุณยิ่งซับซ้อน คุณก็ยิ่งต้องพยายามซ่อนสิ่งที่ซับซ้อนไว้ภายในและนำเสนอสิ่งที่เข้าใจได้ง่ ายต่อผู้ใช้ให้ได้มากที่สุด พยายามนึกถึงคำว่า KISS เข้าไว้ ซึ่ง Matria Capucciati ผู้เชี่ยวชาญในการออกแบบ User Interface เคยให้คำเต็มไว้ว่า KISS : Keep It Simple and Straightforward.

2. พยายามทำให้ Interface ของคุณชัดเจน ตรงไปตรงมาและเป็นธรรมชาติ
Interface ที่ดีควรจะชัดเจนในตัวเองและเข้าใจได้ง่ายโดยใช้สัญชาติญาณของมนุษย์ คุณควรจะสร้าง Interface โดยพยายามคิดว่าผู้ใช้จะสามารถเข้าใจได้เลยโดยสัญชาติญาณ เช่นว่า ผู้ใช้ควรที่จะรู้หรือคาดหมายได้เลยว่าเขาจะต้องทำขั้นตอนอะไรต่อไปหลังจากข ั้นตอนที่เขากำลังทำอยู่ ซึ่งเขาอาจจะใช้สัญชาติญาณหรือประสบการณ์ในการทำงานเดิมของเขาเอง นอกจากนั้นคุณควรจะทำให้ผู้ใช้ไม่ต้องตระหนักถึงกลไกการทำงานภายในโปรแกรมขอ งคุณให้มากนัก เพราะแน่นอนผู้ใช้เขาก็ไม่อยากรู้กลไกการทำงานภายในโปรแกรมของคุณนักหรอก เขาเพียงแต่ต้องการให้งานของเขาเสร็จก็เท่านั้น พยายามทำให้ผู้ใช้มองโปรแกรมของคุณเป็นเหมือนเครื่องมือในการทำให้งานเสร็จอ ันหนึ่ง ไม่ใช่ให้เขามองเป็นคอมพิวเตอร์ซึ่งมีกระบวนการและกลไกการทำงานภายในที่ซับซ ้อนยิ่งนัก มันก็เหมือนกับคนขับรถ เขาไม่ต้องการที่จะรู้หรอกว่ารถมันเคลื่อนที่ไปได้อย่างไร มีกลไกภายในอย่างไร เขาเพียงแต่เข้าใจว่ารถก็คือเครื่องมือของเขาอันหนึ่งที่จะทำให้เขาไปถึงจุด หมายได้ เพราะฉะนั้นเขาก็เพียงต้องการแค่จะรู้ว่าจะทำยังไงให้เขาไปถึงจุดหมายได้เท่ านั้น ต้องเหยียบคันเร่งตรงไหน เข้าเกียร์ยังไง แค่นั้นก็พอ

3. พยายามทำให้ผู้ใช้รู้สึกเหมือนว่าเขาได้ควบคุมโปรแกรม (ไม่ใช่โปรแกรมเป็นคนควบคุมเขา)
แ น่นอนว่าผู้ใช้ย่อมต้องมีสมมุติฐานว่าโปรแกรมจะต้องตอบสนองต่อการทำอะไรบางอ ย่างจากเขาเท่านั้น ไม่ใช่อยู่ๆโปรแกรมก็ทำอะไรเองโดยปราศจากการรับรู้หรือการยินยอมของเขา ถึงแม้ในงานบางอย่างควรจะต้องให้โปรแกรมทำงานเองโดยอัติโนมัติ แต่ก็ควรที่จะให้โอกาสหรือมีตัวเลือกให้ผู้ใช้เลือกได้ว่าจะเปิดหรือไม่เปิด การทำงานนั้น (ตัวอย่างที่เห็นได้ชัดก็คือโปรแกรมพวกที่มักจะ update ตัวเองผ่านทาง Internet ซึ่งมักจะมีตัวเลือกให้เลือกว่าจะเปิดหรือไม่เปิดการทำงานนี้) อีกสิ่งที่สำคัญก็คือเรื่องหน้าตาของโปรแกรม แน่นอนว่าผู้ใช้แต่ละคนย่อมมีความชอบหรือรสนิยมส่วนตัวที่ไม่เหมือนกัน ดังนั้นการที่โปรแกรมจะมีความสามารถในการปรับแต่งส่วนต่างๆตามที่ผู้ใช้ต้อง การก็เป็นสิ่งที่น่าให้ความสำคัญเหมือนกัน หรือถ้าไม่มีความสามารถอันนี้ โปรแกรมก็ควรที่จะมีหน้าตาที่สอดคล้องกับการหน้าตาโดยรวมของระบบตามที่ผู้ใช ้ได้ปรับแต่ง (เช่นสอดคล้องกับสิ่งที่ผู้ใช้ได้ปรับแต่งไว้ใน Display Applet ใน Control Panel ของ Windows) สิ่งที่สำคัญมากๆอีกอย่างก็คือ พยายามหลีกเลี่ยงการบังคับให้ผู้ใช้ต้องทำอะไรบางอย่างที่เฉพาะเจาะจง (ซึ่งอาจเกิดขึ้นจากการเข้าสู่ Mode บางอย่างของโปรแกรม ซึ่งเป็นสถานะของโปรแกรมเฉพาะอย่างที่บังคับให้ผู้ใช้ทำอะไรบางอย่างเท่านั้ นแทนที่จะให้ผู้ใช้เป็นคนตัดสินใจ เช่น บังคับให้ผู้ใช้ต้องกดปุ่ม OK เป็นต้น) พยายามให้ผู้ใช้ได้มีตัวเลือก ให้เขาได้ตัดสินใจ ให้เขาได้ควบคุม (อย่าไปควบคุมเขา) อย่างเช่นบางครั้งเขาอาจเปลี่ยนใจไม่ทำกระบวนการต่อ เขาอาจอยากกด Back เพื่อกลับไปขั้นตอนก่อนหน้า เขาอาจอยากกด Cancel เพื่อยกเลิกกระบวนการติดตั้งโปรแกรม ฯลฯ พยายามนึกถึงหลักดังต่อไปนี้ไว้
- Make the Interface Forgiving ให้ผู้ใช้ได้เปลี่ยนใจ ยกเลิก ย้อนกลับในกระบวนการได้อย่างง่ายๆ ไม่ใช่ว่าหากทำอะไรผิดไป ก็ย้อนกลับไม่ได้ โปรแกรมลักษณะนี้จะทำให้ผู้ใช้กลัว กังวัล วิตกและในที่สุดจะมีความรู้สึกที่ไม่อยากใช้โปรแกรม
- Make the Interface Visual พยายามออกแบบให้ผู้ใช้มองเห็นโปรแกรมแล้วเข้าใจว่าจะต้องตัดสินใจอย่างไร เลือก item ไหนถึงจะถูก ไม่ใช่ให้ผู้ใช้ใช้ความคุ้นเคยในการตัดสินใจ เช่นว่า เคยเลือกตัวเลือกนี้ คราวนี้ก็เลยต้องเลือก เป็นต้น การมีข้อความอธิบายขั้นตอน อธิบายความหมาย หรือมี Help Context ให้ผู้ใช้ก็เป็นสิ่งดี
- Provide Immediate Feedback หลีกเลี่ยงการที่ผู้ใช้กดหรือป้อนอะไรเข้าไปแล้วปราศจากการตอบสนองโดยทันที ไม่ว่าจะต้องใช้ภาพหรือเสียงก็ดี ควรที่จะต้องทำให้ผู้ใช้เห็นการตอบสนองต่อการกระทำของเขาโดยทันทีทันใด
- Avoid Modes หลีกเลี่ยงสถานการณ์ที่เรียกว่า Mode สถานการณ์ที่เรียกว่า Mode คือสถานการณ์ที่โปรแกรมเข้าสู่กรณีที่เฉพาะเจาะจง เช่น มีไดอะล๊อกโผล่ขึ้นมาซึ่งเป็นไดอะล๊อกแบบ Modal Dialog ที่ต้องให้ผู้ใช้ทำ Mode นั้นให้เสร็จก่อนแล้วจึงกลับไปสู่สถานการณ์ปกติ สถานการณ์ที่เรียกว่า Mode นี้จะทำให้ผู้ใช้ต้องพุ่งความสนใจไปที่ผลลัพธ์ที่โปรแกรมจะทำงานตอบสนองให้เ ขาแทนที่จะให้ความสนใจกับงานเดิมของเขา โดยทั่วไปมันค่อนข้างยากที่จะสร้างโปรแกรมที่ไม่ให้มี Mode เลย แต่อย่างไรก็ดีเราควรที่จะใช้ Mode เฉพาะเท่าที่จำเป็นและไม่ควรให้ Mode มีผลกระทบต่อการทำงานของโปรแกรมโดยรวม เมื่อไรก็ตามที่ผู้ใช้ต้องเผชิญกับ Mode ในโปรแกรมของเรา เราก็ควรที่จะอธิบายถึงเหตุผลหรือใช้คำเตือนที่ชัดเจนและพยายามเตรียมหนทางท ี่จะทำให้ผู้ใช้หลุดออกจาก Mode ได้โดยเร็วและง่ายเพื่อให้ผู้ใช้กลับไปมีความรู้สึกว่าได้ควบคุมโปรแกรมอีกค รั้ง (แทนที่โปรแกรมเราจะควบคุมเขาอยู่ซะอย่างงั้น)

จากคุณ : BlueBlood - [ 4 เม.ย. 48 17:05:27 ]

จ๊วบ ๆๆ Grab ไว้ กันลืม อ่ะขโมยมานะ ม่ะใช่ ของพ๋ม

ASP Tips

posted on 03 May 2005 01:55 by teno  in Web-Tech

Save ไว้นานแล้วกลัว หาย อ่ะ เอามาเก้บไว้ที่นี่ น่ะ
'<++===++>
'__บทความเรื่อง ASP Tips
'__โดย นาย ณัฐพล วัฒนวิภัทรเจริญ [Nat]
'__ 19 กรกฎาคม 2545 เวลา 18:35
'__ wnattapon@hotmail.com
'__ www.uthaionline.com
'__ www.uthaionline.com/how2asp

'__ เป็นการเขียน asp ที่ถูกต้อง และเพิ่มประสิทธิภาพการประมวลผล
'__ ส่วนหนึ่งมาจากบทความของฝรั่งนำมายำรวมกัน และจากประสบการณ์ของผม
'<++=++>

Asp Scripts ที่ยาวเกินไป
Include File ที่ใหญ่เกินไป
Redirect
Blocks of ASP
ASP buffer
Disabled Session state
คุณใช้ Server.MapPath หรือเปล่า?
Comment
Procedure Seperators
การประกาศตัวแปล
การใช้ Response.IsClientConnected
ทั่วไป
SQL และ DB




Asp Scripts ที่ยาวเกินไป
ไม่ควรเขียน asp scripts ที่มีการประมวลผลติดต่อกันที่ยาวเกินไป เช่นมากกว่า 300 บรรทัด
ควรแบ่งการประมวลผลออกเป็นช่วงๆ

Include File ที่ใหญ่เกินไป
อย่าคิดว่าการตัดแบ่งเพจยาวๆ ไว้ใน include file จะทำให้การประมวลผลเร็วขึ้น
เพราะว่า asp จะอ่าน include file เป็นอันดับแรก และเก็บไว้ในหน่วยความจำ
จากนั้นก็ complies มารวมกับเพจปัจจุบัน
และถ้าคุณใช้ asp 3.0 อย่าใช้ include file <!--#include file="xxx.htm"--> แบบนี้
ให้ใช้ Server.Execute "xxx.htm" (ใน pws เป็น asp 2.0)
และไม่ควรตั้งชื่อ include file แบบนี้ myincludefile.inc
มันเป็นคำแนะนำที่แย่มากของ microsoft เพราะถ้าใครเดาชื่อไฟล์นี้ได้ เขาจะเห็นข้อมูลทั้งหมด
ให้ใช้ *.htm , *.asp เช่นตั้งชื่อแบบนี้ inc_MyFile.asp

Redirect
ถ้าใช้ asp2 ให้ใช้ Response.redirect "xxx.htm"
ถ้าใช้ asp3 ให้ใช้ Server.Transfer "xxx.htm"

Blocks of ASP (<%....%>)
เขียนอย่างนี้จะช้า
<% If myvar = 1 then %>
The Frog Jumped over the lake
<% else %>
I did not see a frog
<% end if %>
เขียนแบบนี้จะประมวลผลเร็วกว่า
<% If myvar = 1 then
response.write "The Frog Jumped over the lake"
else
response.write "I did not see a frog"
end if %>

ASP buffer
ให้ใส่ Response.Buffer = True ไว้ด้านบนของเพจเสมอ ถ้าใช้ asp2.0
แต่ถ้าใช้ asp3.0 ไม่ต้องใส่ก็ได้ เพราะ default เป็น True อยู่แล้ว
และถ้าเก็บข้อมูลไว้ใน Buffer พอสมควรแล้วก็ควรปล่อยไปให้ Client สักครั้งนึง
โดยใช้ response.flush ที่จริงการทำแบบนี้ทำให้ Performance ต่ำ
แต่ user จะเห็นว่าเร็ว เพราะว่าได้เห็นข้อมูลบน browser บ้าง ไม่ใช้รอจน เต็มแล้วส่งมาทีเดียว
ถ้าคนเข้าเว็บมากๆ แนะนำว่าอย่าใช้ response.flush

Disabled Session state
ถ้าคุณไม่ใช้ session หรือ cookies เลย ในเพจนั้นๆ เลยให้คุณปิดมันซะ
โดยใส่โค็ดนี้ไว้บนสุด
<%@EnableSessionState = False %>

คุณใช้ Server.MapPath หรือเปล่า?
ถ้าคุณใช้มันบ่อย แนะนำว่าให้ใช้ Full Path สำหรับคนที่ไม่คิดจะเปลี่ยนโครงสร้างของ path
หรือแจกโค็ดของคุณให้คนอื่น...
(แต่สำหรับผมแล้ว ผมชอบใช้ Server.MapPath มากกว่า เพราะมันยืดหยุนกับอนาคต แต่ต้องยอมรับว่ามันช้ากว่า Full Path)
และอย่าใช้ Server.MapPath ที่ Path ซ้ำกันมากกว่า 1 ครั้ง
ให้เก็บใส่ตัวแปลซะ

Comment
เขียน comment ให้มากที่สุดเท่าที่ทำได้
และควรเว้นวรรคสัก 1 ครั้งก่อนเพื่อให้อ่านง่าย เช่น
' my comment

Procedure Seperators
เวลามี sub procedure หรือ function ให้ ขีดเส้นแบ่ง เลียนแบบ VB เพื่อให้อ่านง่าย เช่น

' ==
Sub MySub()

End Sub
' ==
และควรวางกลุ่มของ Sub กับ Function ไว้ล่างสุดของเพจ อย่าเอาไปแทรกปนกันมั่วไปหมด
หรือใส่ไว้ใน include file ก็ได้

การประกาศตัวแปล
ถึงแม้ว่าตัวแปลทั้งหมดของ asp จะเป็นแบบ variants ก็ตามที แต่ก็ควรประกาศตัวแปลไว้ให้ติดเป็นนิสัยนะครับ
ให้ใช้ Option Explicit ไว้บนสุด
จากนั้นประกาศตัวแปลของทั้งเพจนั้นไว้ต่อจากนี้ ยกเว้นตัวแปลของ sub หรือ functionอ การตั้งชื่อตัวแปล นิยมตั้งแบบนี้

Dim StrName - String (Unicode)
Dim BinName - String (Ascii)
Dim LngName - Long
Dim IntName - Integer
Dim BytName - Byte
Dim ClsName - Class
Dim ObjName - Object
Dim DtmName - Date/Time
Dim VarName - Variant
Dim BlnName - Boolean

ส่วน Scope ของตัวแปลเป็นแบบนี้

Dim StrName - Page Scope
Dim gStrName - Global Scope (Usually found in Include files)
Dim pStrName - Parameter (Used for arguments passed to Subs and Functions)
Dim lStrName - Local Scope (Used within the subs and functions themselves)

ส่วนตัวแปลค่าคงที่ควรเป็นตัวใหญ่แบบนี้

Const StrTHIS_IS_A_VALUE = "Lewie"
Const LngANOTHER_ONE = 3
Const LngLOOK_HERE = &h0032
ตัวแปลแบบนี้ต้องอยู่บนสุดของเพจสถานเดียว เพื่อง่ายต่อการแก้ไข

ถ้าประกาศตัวแปลแบบ Object เมื่อใช้เสร็จแล้ว ต้องลบออกด้วย เพื่อคืนหน่วยความจำสู่ระบบ

Set ObjName = Nothing

ถ้า object ไหนที่ต้องมีการ ปิด(Close) ก่อน ให้ ปิดเป็นลำดับแบบนี้

ObjRS.Close
Set ObjRS = Nothing
ObjConn.Close
Set ObjConn = Nothing

ถ้าประกาศตัวแปลแบบ Array แล้ว ต้องลบออกด้วย เช่น

Erase MyArray
หรือถ้าไม่แน่ใจว่าเป็น Array หรือเปล่า ให้ใช้

if IsArray(MyArray) then Erase MyArray

การใช้ Response.IsClientConnected
อันนี้มีประโยชน์มากนะครับ ถ้าคุณจะทำการวนลูปเมื่อใด ให้นึกถึงก่อน
คือว่า ในขณะที่ประมวลผลในลูปอยู่เนี่ย เกิด user กด stop ที่ browser (แบบว่าขี้เกียจรอ)
ลูปที่เรายังวนไม่เสร็จ จะไม่หยุดตามไปด้วย ยังคงทำต่อไปจนเสร็จ
ถ้าเราดัก Response.IsClientConnected เอาไว้ เวลา user กด stop ก็จะเลิกวนลูป
ตัวอย่างเช่น

Do until (objRS.EOF) and (Response.IsClientConnected)
.........
.........
Loop
หรือ
For i = 1 to 100
if not Response.IsClientConnected then Exit For
.......
.......
Next

แต่อย่าใช้บ่อยนะครับ ให้ใช้เฉพาะที่วนลูปเยอะๆเท่านั้น
==
ทั่วไป
การส่ง path ไปตาม url ให้ใช้ Server.UrlEncode ก่อน

การใช้ Request.Querystring("xxx") หรือ Request.Form("xxx")
ควรเอามาเก็บใส่ตัวแปลก่อน แล้วนำตัวแปลไปใช้
ไม่ควร Request ตัวแปลนั้นๆมากกว่า 1 ครั้ง

อย่าประกาศตัวแปล session มากเกินไป ส่วนตัวแปล application อย่าใช้เลยจะดีกว่า
เพราะถ้าประกาศแล้วมันจะอยู่กับคุณตลอดชีวิต นอกจาก Restart Server เท่านั้น จึงจะหายไป

อย่าเอา Array หรือ Object ไปเก็บไว้ใน Session หรือ Application

งานไหนที่แบ่งให้ client ทำได้ก็ให้แบ่งไปบ้าง เช่น พวก check การลืมกรอกข้อความ

หลีกเลี่ยงการใช้ https หรือ ssl ถ้าเป็นไปได้


SQL และ DB
ถ้า SQL statements ไม่ยาวมาก ให้ใช้แบบนี้
ObjConn.Execute "Select fld1 from table1;"
ทำให้ประหยัดตัวแปลไปอีกตัว
แต่ถ้ายาวมาก หรือมีการรับค่าด้วย ก็ให้ใส่ตัวแปลเถิด

อย่าใช้ * ใน SQL statements ให้ลงทุนพิมพ์ทีละฟิลด์จนครบ
หรือถ้าเยอะมากให้ access มันเขียนให้ก็ได้

ฟิลด์ที่ใช้เป็นเงือนไขในการค้นหาควรเป็น index
และไม่ควรเป็นฟิลด์ขนาดใหญ่ เช่น varchar(50) (ก็คือฟิลด์ที่เป็นตัวหนังสือ ขนาด 50 ตัวอักษร)

เวลาจะนับ record ไม่ควรเปิด Record Set แล้วใช้ ObjRS.RecordCount
ควรใช้ aggregate functions ที่ชื่อว่า Count()
วิธีใช้คือ
Select Count([Column Name]) AS MyColumm From table1;
แต่การใช้ Count([Column Name]) แบบนี้ จะไม่นับ ฟิลด์ที่เป็น Null นะครับ
ถ้าต้องการให้นับฟิลด์ที่เป็น Null ด้วยให้ใช้ Count(*) ซึ่งการใช้ Count(*) นี้
เร็วกว่า Count([Column Name]) คุณอาจจะงงว่าทำไมถึงเร็วกว่า
มันเร็วกว่าก็ตรงที่ไม่ต้องคำนวนหาฟิลด์ที่เป็น Null คือเปิดขึ้นมาก็นับแหลกเลยรวดเดียว

ถ้าจะ Add ข้อมูล เข้า access ถ้าข้อมุลไม่มากให้ใช้ Insert into
ถ้ามาก และมีการรับค่าตัวแปล ต้องใช้ if - then หรืออะไรอีกมาก ให้เปิด Record Set
โดยใช้ SQL statements แบบนี้

Select fld1,fld2,fldn From table1 where ID = -1;

ID คือ ฟิลด์ที่เป็น index key แบบ autonumber จากนั้นก็ add ข้อมูลตามปกติ
ObjRS.AddNew
......
......
ObjRS.Update

ถ้าฐานข้อมูล(Access) ใช้งานไปเรื่อยๆ จนมีขนาดใหญ่ขึ้น ให้ Compact Database
ทุกๆ 500 Kb เพื่อจัดข้อมูลให้เป็นระเบียบ และทำงานได้เร็วขึ้น
อ่านเรื่องการ Compact db เพิ่มได้ที่
http://www.uthaionline.com/how2asp/ShowCode.asp?id=38

ถ้าจะนำข้อมูลออกมาจาก db เพื่อมาวนลูปใส่ พวก Select Box (List Box)
ให้ใช้ GetString Method
ตัวอย่าง

<%sql="select Forum_ID,Forum_name from forums;"
set rs = conn.execute(sql)
response.write "In forum : <select NAME=""SearchForum"" class=""input"">"
response.write "<option value=0>All Forums</option>"
response.write "<option value="
response.write rs.getstring(,, ">", "</option><option value=", "-null-")
response.write "0>All Forums</option></select>"%>

อ่านเรื่อง GetString Method เพิ่มได้ที่
http://www.uthaionline.com/how2asp/ShowCode.asp?id=36

ถ้าจะนำข้อมูลจำนวนมากมาแสดงออกทางตาราง ให้ใช้ GetRows Method
อย่าคิดที่จะวนลูปแบบ movenext เลย มันช้า
ดูวิธีการใช้ได้ที่ webboard4
http://www.uthaionline.com/how2asp/ShowCode.asp?id=41

อ่านเรื่อง GetRows Method เพิ่มได้ที่
http://www.uthaionline.com/how2asp/ShowCode.asp?id=35



19 ก.ค 45
Nat
ณัฐพล วัฒนวิภัทรเจริญ
wnattapon@hotmail.com
www.uthaionline.com/how2asp
====

45 Tips

posted on 24 May 2005 16:56 by teno  in Web-Tech
ref http://www.pantip.com/tech/developer/topic/DN1813962/DN1813962.html

1.โปรแกรมแบบพอเพียง(ทำอะไรให้เล็กที่สุดเท่าที่เป็นไปได้)

2.ทำสิ่งธรรมดาให้ง่าย ทำสิ่งยากให้เป็นไปได้

3.จงโปรแกรมโดยนึกว่าจะมีคนมาทำต่ออย่างแน่นอน

4.ระเบียบ กฏข้อบังคับ เชื่อมั่นไม่ได้แล้ว ถ้ามีเพียงหนึ่งโมดูลไม่ปฏิบัติตาม

5.ตัดสินใจให้ดีระหว่างความชัดเจน(clearance) กับ การขยายได้(extensibility)

6.อย่าเชื่อมั่น output จากโมดูลอื่น ถึงแม้เราจะเป็นคนเขียนเอง

7.ถ้าคนเขียนยังเข้าใจได้ยาก แล้วคนอ่านจะเข้าใจได้ยากกว่าแค่ไหน

8.ค้นหาข้อมูลสามวันแล้วทำหนึ่งวัน หรือจะทำสามวันแล้วแก้บั๊กตลอดไป

9.จงสร้างเครื่องมือ ก่อนทำงาน

10.อย่าโทษโมดูลอื่นก่อน โดยเฉพาะถ้าโมดูลอื่นเป็น OS และ Compiler

11.พยายามทำตามกฏ แต่ถ้ามีข้อยกเว้น ต้องมีอย่างหลีกเลี่ยงไม่ได้ แล้วประกาศและตะโกนให้ดังที่สุด

12.High cohesion Loose coupling. (ยึดเกาะให้สูงสุดในโมดูล และ เกาะเกี่ยวกับโมดูลอื่นให้น้อยที่สุด)

13.ให้สิ่งที่เกี่ยวข้องกันยิ่งมากอยู่ไกล้กันมากที่สุด

14.อย่าเชื่อโดยไม่พิสูจน์

15.อย่าลองทำแล้วคอมไพล์ดู ถ้าเราไม่ได้คาดหวังผลลัพธ์อะไรไว้ (อย่างเช่นปัญหา index off by one)

16.จงกระจายความรู้เพราะนั่นคือการทำ Unit Test ระดับล่างสุด(ระดับความคิด)

17.อย่าเอาทุกอย่างใส่ใน UI เพราะ UI คือส่วนที่ Unit Test ได้ยาก

18.ทั้งโปรเจ็คต์ควรไปในทางเดียวกันมากที่สุด( Consistency )

19.ถ้ามีสิ่งที่ดีอยู่แล้วจงใช้มัน อย่าเขียนเอง ถ้าจำเป็นต้องเขียนเอง ให้ศึกษาจากข้อผิดพลาดในอดีตก่อน

20.อย่ามั่นใจเอาโค้ดไปใช้จนกว่าจะ test อย่างเพียงพอ

21.เอาโค้ดที่ test ไว้ที่เดียวกันกับโค้ดที่ถูก test เสมอ

22.ทุกครั้งที่แก้ไขโค้ดให้ run unit test ทุกครั้ง

23.จงใช้ Unit Test แต่อย่าเชื่อมั่นทุกอย่างใน Unit Test เพราะ Unit Test ก็ผิดได้

24.ถ้าต้องทำอะไรที่ซ้ำกันมากกว่าหนึ่งครั้ง ก็เพียงพอแล้วที่จะแยกโค้ดส่วนนั้นออก

25.ทำให้ใช้งานได้ก่อน แล้วค่อย optimize และถ้าไม่จำเป็น อย่าoptimize

26.ยิ่งประสิทธิภาพเพิ่ม ความเข้าใจง่ายจะลดลง

27.ใช้ Design Pattern ที่เป็นที่รู้จักจะได้คุยกับใครได้รู้เรื่อง

28.อย่าเก็บไว้ทำทีหลัง ถ้ายังไงก็ต้องทำ

29.MutiThreading ไม่ใช่แค่การเพิ่มประสิทธิภาพ แต่มันมาพร้อมกับ Concerency, Deadlock, IsolationLevel, Hard to debug, Undeterministic Errors.

30.จงทำอย่างโจ่งแจ้ง

31.อย่าเพิ่ม technology โดยไม่จำเป็น เพราะนั่นทำให้โปรแกรมเมอร์ต้องวุ่นวายมากขึ้น

32.จงทำโปรเจ็คต์ โดยคิดว่าความเปลี่ยนแปลงเกิดขึ้นได้เสมอ

33.อย่าย่อชื่อตัวแปรถ้าไม่จำเป็น เดี๋ยวนี้ IDE มันช่วยขึ้นเยอะแล้วไม่ต้องพิมพ์เองแค่ dot มันก็ขึ้นมาให้เลือก

34.อย่าใช้ i, j , k , result, index , name, param เป็นชื่อตัวแปร

35.ทำโค้ดที่ต้องสื่อสารผ่านเครือข่ายให้คุยกันน้อยที่สุด

36.แบ่งแยกดีดี ระหว่าง Exception message ในแต่ละเลเยอร์ ว่าต้องการบอกผู้ใช้ หรือ บอกโปรแกรมเมอร์

37.ที่ระดับ UI ต้องมี catch all exception เสมอเพื่อกรอง Exception ที่ลืมดักจับ

38.ระวัง คอลัมภ์ allow null ใน database ดีดี ค่า <Null> มัน convert ไม่ได้

39. อย่าลืมว่า Database เป็น global variable ประเภทหนึ่ง แต่ละโปรแกรมที่ติดต่อเปรียบเหมือน MultiThreading ดังนั้นกฏของ Multithreading ต้องกระทำเมื่อทำงานกับ Database

40.ระวังอย่าให้ logic if then else ซ้อนกันมากมาก เพราะสมองคนไม่ใช่ CPU จินตนาการไม่ออกหรอกว่ามันอยู่ตรงไหนเวลา Debug (ถ้ามากกว่าสามชั้นก็ลองคิดใหม่ดูว่าเขียนแบบอื่นได้มั้ย)

41.ระวังอย่าให้ลูปซ้อนกันมากมาก ไม่ใช่แค่เรื่องความเร็วอย่างเดียว เวลา Debug เราคิดตามมันไม่ได้ (ถ้าเกินสามชั้นก็ไม่ไหวแล้ว)

42. อย่าใช้ Magic Number ใน Code เช่น if( controlingValue == 4 ) เปลี่ยนไปใช้ Enum ดีกว่า เป็น if( controlingValue == ControllingState.NORMAL ) เข้าใจง่ายกว่ามั้ย

43.ถ้าจะเปรียบเทียบ string Trim ซ้ายขวาก่อนเสมอ

44.คิดหลายๆ ครั้งก่อนใช้ Trigger

45.โปรแกรมเมอร์คือห่วงโซ่สุดท้ายของมลพิษทางความซับซ้อน ดังนั้นหา project leader ดีดีแล้วกัน