Blog นี้สรุปมาจาก CodeMania 100 : Coding Defines Anything ลองดูแล้วมันน่าจะแยอะ เขียนแยกง่ายกว่า สำหรับเรื่องนี้เป็นเรื่อง Coding Defines Reality - Emergent Design with Code โดยคุณ Varokas Panusuwan เข้าเรื่องเลยดีกว่า
หมายเหตุ: สรุปตามความเข้าใจของผม และอาจจะมีอารมณ์ร่วมแถม 5555
ย้อนไปถึงการ Design
ในการพัฒนา Software ถ้าไม่ลืมจากที่เรียนไปมันมีเรื่อง SDLC (Software Development Life Cycle) มันมีขั้นตอน ตั้งแต่ Requirement > Design > Implementation > Testing > Deployment > Maintance ครับ
มามองทุกจุดๆนึง Design เราออกแบบจากอะไร จากการมโน หรือจาก
- Requirement
- Desires Properties
เมื่อมองถึงการ Design ระบบที่ดีต้องการอะไรบ้าง
- Available
- Reliable
- Performance
- Maintainable
- Reusable
- Usable
จากอันที่แล้ว ถ้าถาม User ส่วนมากมักจะบอกว่าเอาหมด !!! แต่ความจริงมันไม่เป็นอย่างงั้น ทุกอย่างมี Trade off อยากให้ระบบ Performance ดี แต่มันอาจจะ Maintainable ยากกกก ให้มองถึงระบบ Stat ใน Game ไม่มีอะไรที่เก่งไปหมดทุกด้านครับ เราต้องเน้นเร็ว AGI สูง ค่า VIT ต้องลดลง
Design with force
- มาจากหนังสือของ Christopher Alexander ไม่ใช่คน IT แต่เป็นสถาปนิก
- Contextual Force - ผมมองว่าเป็นแรงจากสภาพแวดล้อม เพื่อให้การ Design ออกมาไปในทางเดียวกัน (Feel the force - ทำไมเหมือนอารณ์พวกเจได วิถีแห่งหลัง) อาจจะมองว่าเป็น Requirement ก็ได้
- ถ้าดูจากตัวอย่างของ Speaker
- พื้นที่แห่งนึง ถ้าเอาคนเดิมออกไป คนใหม่เข้ามา การออกแบบบ้านควรจะออกมาคล้ายกัน
- Smart Phone ทำไมต้องเป็นสีเหลี่ยมหละ ออกมาหน้าตาคล้ายกัน
- นาฟิกาข้อมือ ทำไมส่วนใหญ่ต้องทำเป็นวงกลม
- ฝาท่อใน ตปท ทำไมต้องเป็นวงกลม - อันนี้พี่เค้าบอกว่าป้องกันฝามันหล่น ถ้าเป็นแบบอื่นสีเหลี่ยมผืนผ้า มันมีด้านที่จะลงไปในท่อได้
- แต่ Contextual Force ถูกดัดแปลง ดัดไปตามเป็นตามสิ่งที่อยากได้แทน มองว่าเป็นความผิดเพี้ยนของ Requirement จาก User หรือ SA ทำเอง
ลองคิดกันต่อ Cassandra เป็น key/value database เอามาทำงานของ RDBMS มันเหมาะเหรอ ?
Finding the Pattern
- Pattern is in the problem.
- และ Don’t solve the problem, Discover the pattern
Discover the pattern
Emergent Design
ปรับแนวคิดจาก Create Solution ไปเป็น Discover Solution จนเจอ Pattern หรือเป็น design Pattern ที่เหมาะสมกันมัน
- Discover Solution หาอย่างไร
- ทาง Speaker มี 4 เทคนิค ดังนี้
- Code Properties - พวกการดู Coupling, Cohesion, Line of Code, Depth of inheritance ไม่เหมาะสำหรับมือใหม่
- Commonality Variability Analysis (CVA) - ผม Pattern ส่วนตัวทำไมไปนึกถึงพวก 80/20
- Programming by Intention - มองภาพลงไปเป็น Top-Down ลงไปแต่ละขั้น
- Tests/Testability - ในที่นี่น่าจะเป็น TDD (Test Driven Development)
- *** เนื่องจากเวลาน้อย Speaker ลง Detail แค่ Commonality Variability Analysis กับ Programming by Intention ครับ
- Commonality Variability Analysis (CVA)
Speaker บอกว่าเป็น Thesis จบปริญญาเอกเลยนะเรื่องนี้
- ดึง Key ออกมาจากความต้องการ โดยตั้งคำถามดังนี้
- What is in common? อะไรที่เหมือนกัน
- What Varies? - อะไรที่แตกต่างกัน
- Under a certain of Context of Use - ใครเป็นคนเรียกใช้ ใช้งานยังไง - What is in common + What Varies = ดึง Domain หรือ Class ออกมา อะไรควรยกไปเป็นแม่ลูก จะเริ่มเห็นความสัมพันธ์ตรงนี้
- Under a certain of Context of Use = เอามา Filter อะไรที่ไม่ใช้ออกไป
ตัวอย่าง รูปวงกลม กับ สีเหลี่ยม และ ปากกา กับ ดินสอต่างกันยังไง
มาสนใจที่ตัวอย่างปากกา กับ ดินสอ
- ดึง Key ได้ภาพของ Strategy pattern มีการเปลี่ยนการทำงานตอน Runtime
- มองเป็น Code
ต่อจากตัวอย่าง ปากกา กับ ดินสอ เอามา วาดรูป Shape - วงกลม สีเหลี่ยม เราก็ทำแบบเดิมครับ มาดูความสัมพันธ์ของมันกับตัวอย่างแรก
- Programming by Intention
มองว่าเป็นหาหา Main Idea จาก Requirement และมองลึกลงไปในแต่ละชั้น Top >> Down ขุดหาความจริง
- Conceptual
- Specification
- Implementation
ตัวอย่าง - Create a software for cashier and barista. A program accepts order from user. Retrieve cost base on the order. A program shows the barista what to do.
- Conceptual ระบบต้อง
- A program accepts order from user.
- Retrieve cost base on the order.
- A program shows the barista what to do
- Specification -ไปทำ CVA มาเกิดสิ่งที่ต้องดูเพิ่ม ขนาด ส่วนผสม Order
- Implementation - ลง Code และ
ส่วนตัวมองว่า ถ้าภาษาไทยต้องติดความดีๆ มันกำกวมในตัวมันเอง ต่างจากภาษาอังกฤษ
When does design start / End ?
- Requirement จบ หรือ มัน Design ตอน Code ด้วย ?
- Design เป็นแค่ requirement ของ design ถัดไป มุมมองจะค่อยๆชัดเจนมากยิ่งขึ้น (Top-Down)
Design on Code
- ทำได้ บางคนสามารถจินตนาการไว้ในหัว แต่ควรจะมี Note/Comment ไว้บ้างก็ดี โดย Speaker ก็ทำตัวอย่างของการ Encryption
Slide ของ Speaker
Resource: Slide
สำหรับวันนี้ได้ Idea ในการ Design เยอะเลย และรู้สึกว่าใช้ปากาของ Galaxy Tab A ได้เต็มที่ด้วย
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.