[CodeMania100] Emergent Design with Code

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 is very easy, Knowing what you want is very hard !!! 

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

Problem and 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 จบปริญญาเอกเลยนะเรื่องนี้

  1. ดึง Key ออกมาจากความต้องการ โดยตั้งคำถามดังนี้
    - What is in common? อะไรที่เหมือนกัน
    - What Varies? - อะไรที่แตกต่างกัน
    - Under a certain of Context of Use - ใครเป็นคนเรียกใช้ ใช้งานยังไง
  2. What is in common + What Varies = ดึง Domain หรือ Class ออกมา อะไรควรยกไปเป็นแม่ลูก จะเริ่มเห็นความสัมพันธ์ตรงนี้
  3. 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 และ
Jpeg

ส่วนตัวมองว่า ถ้าภาษาไทยต้องติดความดีๆ มันกำกวมในตัวมันเอง ต่างจากภาษาอังกฤษ

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.