SlideShare a Scribd company logo
//@roofimon
“   ”
“   ”
You can not find the best
 solution but you can find the
 optimal one.
Agenda
•   Software Development in my perspective
•   Methodology
•   TDD
•   Tools
•   QnA
•   Little bit about @roofimon
•     26         2518       1       2
•                                A-F
•             IT Technical Architect DTAC
• Architect        ?
•                  “           ”
Software Development
•
•                          ?
•        “   ”



•
•                     IT
    ?
Just an Example
•   Programmer
•   Project Management
•   Solution Architecture
•   System Integration
•   Database Administration
•   Testing
•   Security
•   Operation
•   Infrastructure
- -
             English for Communication
000102                                    - -
             English for Academic Purposes (EAP
  II)
000103                                    - -
             English for Academic Purposes I
  (EAP II)
000112                               - -
             Thai for Academic Purposrs(???
Software Development
 and Operation is like
     grocery store
Kku2011
How to build software like 7-11

•   Work
•   Not over budget
•   In time
•   Easy to transition
•   Easy to operate and maintain
We need
• Methodology
• Good Programmer
• Tools
Lack of Methodology
How to survive?


  Methodology
Methodology reflect …

            Methodology


  Team                    Individual
Structure                  Behavior

             Discipline
Kku2011
Which one is the best?



Which one is the suitable for us?
The Greatest Waterfall
The Greatest Waterfall

Requirement

         Analysis

                    Design

                             Implementation

                                      Integration
                                                Testing

                                                          Maintenance
Waterfall Team
Waterfall Discipline

• Project is divided into sequential phases.
• Emphasis an entire system at one time.
• Tight control is maintained through the use of
  extensive written documentation.
Waterfall s..ks?
Waterfall not wrong
• 90% of enterprise firm in Thailand still using
  waterfall model.
• It’s big , really big. 100 people involve with
  project.
• Match with their procurement process
• Strong Audit process.
• “Trust ??”.
Developer Discipline
• Depends on developers themselves
• Mostly, make it fast.
• Mostly, make it done.
• Deadline ahead
• Quality ummmmm QA team will cover it for
  somehow
• Aggressive Regression Test
• Customer will come when our software is “done”.
• Change request, Change request, Change request
Kku2011
What about small organization?
•   They need something that is really “work”.
•   They can spend time with your team.
•   So Waterfall again?
•   We need methodology that focus on
    delivering software that working.
Kku2011
Agile Development Methodology
Customers   Requirement



Analyst      Analysis




                             Why Agile?
Architect    Design



Labor       Implementation



Labor        Integration


Tester       Testing



             Maintenance
Three simple truths
• 1. It is impossible to gather all the
  requirements at the beginning of a project.
• 2. Whatever requirements you do gather are
  guaranteed to change.
• 3. There will always be more to do than time
  and money will allow.
Agile Team
Discipline
• Customer satisfaction by rapid delivery of useful software
• Welcome changing requirements, even late in development
• Working software is delivered frequently (weeks rather than
  months)
• Working software is the principal measure of progress
• …
• …
• …
• Regular adaptation to changing circumstances
Developer Discipline
• According to 3 simple truth
• Agile coder will carry these four basic activities
  along with them
  – Coding
  – Testing
  – Listening
  – designing
Kku2011
Anyway
• Grocery Store does exist but …?
• Waterfall and Agile
• Waterfall still dominate the market.
• Waterfall itself doesn’t encourage
  programmer to write good code.
• We need something.
• Applied TDD into development phase in
  Waterfall 
We understand the story, so we
           Happy.
Produce good code
Good Programmer = Good Software
• Understandable
• Testable
Understandable
The Program
• a1 is a yng and gftd sftwreng attempting to
  hackMnfrm() of sftw company ENCOM in
  order to fndEvdc() that senior executive
  a2 stole() a1's cde and prsnt() it as his own,
  earning him a rapid series of promotions. a1 is
  blcked() by the MCP, an ai that ctrl the ENCOM
  mnfrm.
The Program
kevinFlynn is a young and gifted
SOFTWARE_ENGINEER attempting to hack() into
the mainframe of encom =
SoftwareCompany(“ENCOM”) in order to
findEvidence() that ENIOR_EXECUTIVE
edDillinger stole(kevinFlynn) code and presented
it as his own, earning him a rapid series of
promotions. kevinFlynn is blocked() by the
MasterControlProgram , an
artificialIntelligence that controls(encom) the
ENCOM mainframe.
Understandable
•   Use Intention-Revealing Names
•   Make Meaningful Distinctions
•   Use Pronounceable Names
•   Use Searchable Names
•   Avoid Encodings
Use Intention-Revealing Names
//================================
int d // elapsed time in days
//=================================
int   elapsedTimeInDays;
int   daysSinceCreation;
int   daysSinceModification;
int   fileAgeInDays;
Use Intention-Revealing Names
public List<int[]> getThem() {
  List<int[]> list1 = new
  ArrayList<int[]>();
  for (int[] x : theList)
     if (x[0] == 4) list1.add(x);
         return list1;
}
Use Intention-Revealing Names
public List<Cell> getFlaggedCells() {
  List<Cell> flaggedCells =
     new ArrayList<Cell>();
     for (Cell cell : gameBoard)
         if (cell.isFlagged())
              flaggedCells.add(cell);
         return flaggedCells;
}
Use Searchable Names
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for(int j=0; j<NUMBER_OF_TASKS; j++){
  int realTaskDays =
  taskEstimate[j]*realDaysPerIdealDay;
  int realTaskWeeks =
  (realdays / WORK_DAYS_PER_WEEK);
  sum += realTaskWeeks;
}
Avoid Side Effect
public class UserValidator {
  private Cryptographer cryptographer;
  public boolean checkPassword(String userName,
      String password) {
        User user = UserGateway.findByName(userName);
        if (user != User.NULL) {
        String codedPhrase =
              user.getPhraseEncodedByPassword();
        String phrase =
              cryptographer.decrypt(codedPhrase,
                     password);
        if ("Valid Password".equals(phrase)) {
              Session.initialize();
              return true; }
        } return false;
    }
}
Testable
• What?
• We just understand our code.
• Dependency?
Test Driven Development AKA TDD
  – Executable Document Spec
  – Executable functional checking
  – Executable dependency checking
  – Executable integration test
Normal Cycle
•   Read function spec
•   Start coding
•   Monkey see and monkey do
•   It might not effect to other functions
•   Waiting for defect ticket
TDD cycle
•   Read function spec
•   (Re)Write Test
•   Run Test fail
•   Write Production Code
•   Run all test
•   Refactor
•   Cool 
Demo
Code
Kku2011
Part II Tools
•   Project Management
•   Collaboration
•   Development Environment
•   Development Tools
•   Testing
•   Continuous Integration
•   Deployment
•   Monitoring
Project Management and
      Collaboration
Kku2011
# Flexible issue tracking system
# Gantt chart and calendar
# News, documents & files management
# Feeds & e-mail notifications.
# Per project wiki
# Per project forums
Redmine Demo
Version Control
     • You are not alone
     • Code is your asset
     • Choose one:
        • GIT, SVN, CVS
Development Tools
•   Build Tool
•   Library dependency checking
•   Single Repository
•   Check Style
•   IDE
Testing
•   Junit
•   DB Unit
•   Mockito
•   Selenium
JUnit
• JUnit is a unit testing framework
• Unit test itself is not enough we need
  company
DBUnit
• Why do we need to test our database?
• You need [multiple] databases
Mock Object
• Mock objects are simulated objects that mimic
  the behavior of real objects in controlled ways.
• supplies non-deterministic results
• has states that are difficult to create or reproduce
• is slow
• does not yet exist or may change behavior;
• would have to include information and methods
  exclusively for testing purposes
Web App Test
• Selenium is a suite of tools to automate web
  app testing across many platforms.
Continuous Integration
• Execute all unit test in integration
  environment
• Code coverage checking
• Automatic Branch/Tag
Deployment
Monitoring

More Related Content

PDF
Agile Software Development in Practice - A Developer Perspective
PPTX
DDT Testing Library for Android
PDF
Agile Software Development Process Practice in Thai Culture
PPTX
The challenges and pitfalls of database deployment automation
ODP
Extreme Programming
PPTX
Quality Jam: BDD, TDD and ATDD for the Enterprise
PPT
Software Testing with Agile Requirements Practices
PDF
Getting Started with DevOps
Agile Software Development in Practice - A Developer Perspective
DDT Testing Library for Android
Agile Software Development Process Practice in Thai Culture
The challenges and pitfalls of database deployment automation
Extreme Programming
Quality Jam: BDD, TDD and ATDD for the Enterprise
Software Testing with Agile Requirements Practices
Getting Started with DevOps

What's hot (20)

PPTX
QA team transition to agile testing at Alcatel Lucent
PDF
Introduction to TDD
PPSX
Continuous Integration - Oracle Database Objects
PPTX
Making software development processes to work for you
PDF
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
PDF
The state of containers for your DevOps journey
PPTX
Bringing CD to the DoD
PDF
The Continuous delivery Value @ codemotion 2014
PDF
Agile Testing Introduction
PDF
Continuous delivery @wcap 5-09-2013
PPTX
Career Paths for Software Professionals
PPTX
DevOps introduction
PPTX
The Road to DevOps V3
PDF
Behavior Driven Development (BDD)
PDF
PDF
Continuous Integration for Oracle Database Development
PPTX
Teaching Kids Programming
PPT
Database continuous integration, unit test and functional test
PPTX
(Agile) engineering best practices - What every project manager should know
PDF
Continuous Delivery at Oracle Database Insights
QA team transition to agile testing at Alcatel Lucent
Introduction to TDD
Continuous Integration - Oracle Database Objects
Making software development processes to work for you
Behavior Driven Development—A Guide to Agile Practices by Josh Eastman
The state of containers for your DevOps journey
Bringing CD to the DoD
The Continuous delivery Value @ codemotion 2014
Agile Testing Introduction
Continuous delivery @wcap 5-09-2013
Career Paths for Software Professionals
DevOps introduction
The Road to DevOps V3
Behavior Driven Development (BDD)
Continuous Integration for Oracle Database Development
Teaching Kids Programming
Database continuous integration, unit test and functional test
(Agile) engineering best practices - What every project manager should know
Continuous Delivery at Oracle Database Insights
Ad

Viewers also liked (8)

PPSX
P pslides mt_astudyin_leadership
PPTX
Visma samenstel assistent
DOC
Pathology of hearing loss
PDF
PDF
Facebook: Contemos nuestras experiencias
PPTX
Monday, march 12, 2012
PPT
Data management new
PPT
Robots and cars ca
P pslides mt_astudyin_leadership
Visma samenstel assistent
Pathology of hearing loss
Facebook: Contemos nuestras experiencias
Monday, march 12, 2012
Data management new
Robots and cars ca
Ad

Similar to Kku2011 (20)

PDF
TDD and Related Techniques for Non Developers (2012)
PPTX
Agile, DevOps & Test
PPTX
Lean-Agile Development with SharePoint - Bill Ayers
PDF
New trends in testing automation
PDF
Gartner Infrastructure and Operations Summit Berlin 2015 - DevOps Journey
PPTX
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
PDF
Agile & Test Driven Development: The Ampersand Commerce Approach
PPTX
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
PPTX
Agile
KEY
Driving application development through behavior driven development
ODP
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
PDF
Enter the mind of an Agile Developer
PDF
Enterprise PHP
PDF
Continuous delivery is more than dev ops
PDF
Introduction to-automated-testing
PDF
Introduction to Automated Testing
PPTX
Software Engineering in Startups
PPTX
DBmaestro's State of the Database Continuous Delivery Survey- Findings Revealed
PPTX
DevOps Overview in my own words
TDD and Related Techniques for Non Developers (2012)
Agile, DevOps & Test
Lean-Agile Development with SharePoint - Bill Ayers
New trends in testing automation
Gartner Infrastructure and Operations Summit Berlin 2015 - DevOps Journey
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Agile & Test Driven Development: The Ampersand Commerce Approach
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Agile
Driving application development through behavior driven development
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
Enter the mind of an Agile Developer
Enterprise PHP
Continuous delivery is more than dev ops
Introduction to-automated-testing
Introduction to Automated Testing
Software Engineering in Startups
DBmaestro's State of the Database Continuous Delivery Survey- Findings Revealed
DevOps Overview in my own words

More from ทวิร พานิชสมบัติ (20)

Recently uploaded (20)

PDF
Empathic Computing: Creating Shared Understanding
PDF
KodekX | Application Modernization Development
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
A Presentation on Artificial Intelligence
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Electronic commerce courselecture one. Pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Empathic Computing: Creating Shared Understanding
KodekX | Application Modernization Development
Reach Out and Touch Someone: Haptics and Empathic Computing
Unlocking AI with Model Context Protocol (MCP)
A Presentation on Artificial Intelligence
NewMind AI Monthly Chronicles - July 2025
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
MYSQL Presentation for SQL database connectivity
CIFDAQ's Market Insight: SEC Turns Pro Crypto
The AUB Centre for AI in Media Proposal.docx
Diabetes mellitus diagnosis method based random forest with bat algorithm
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Review of recent advances in non-invasive hemoglobin estimation
Electronic commerce courselecture one. Pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf

Kku2011

  • 2.
  • 3.
  • 4. You can not find the best solution but you can find the optimal one.
  • 5. Agenda • Software Development in my perspective • Methodology • TDD • Tools • QnA • Little bit about @roofimon
  • 6. 26 2518 1 2 • A-F • IT Technical Architect DTAC • Architect ? • “ ”
  • 7. Software Development • • ? • “ ” • • IT ?
  • 8. Just an Example • Programmer • Project Management • Solution Architecture • System Integration • Database Administration • Testing • Security • Operation • Infrastructure
  • 9. - - English for Communication 000102 - - English for Academic Purposes (EAP II) 000103 - - English for Academic Purposes I (EAP II) 000112 - - Thai for Academic Purposrs(???
  • 10. Software Development and Operation is like grocery store
  • 12. How to build software like 7-11 • Work • Not over budget • In time • Easy to transition • Easy to operate and maintain
  • 13. We need • Methodology • Good Programmer • Tools
  • 15. How to survive? Methodology
  • 16. Methodology reflect … Methodology Team Individual Structure Behavior Discipline
  • 18. Which one is the best? Which one is the suitable for us?
  • 20. The Greatest Waterfall Requirement Analysis Design Implementation Integration Testing Maintenance
  • 22. Waterfall Discipline • Project is divided into sequential phases. • Emphasis an entire system at one time. • Tight control is maintained through the use of extensive written documentation.
  • 24. Waterfall not wrong • 90% of enterprise firm in Thailand still using waterfall model. • It’s big , really big. 100 people involve with project. • Match with their procurement process • Strong Audit process. • “Trust ??”.
  • 25. Developer Discipline • Depends on developers themselves • Mostly, make it fast. • Mostly, make it done. • Deadline ahead • Quality ummmmm QA team will cover it for somehow • Aggressive Regression Test • Customer will come when our software is “done”. • Change request, Change request, Change request
  • 27. What about small organization? • They need something that is really “work”. • They can spend time with your team. • So Waterfall again? • We need methodology that focus on delivering software that working.
  • 30. Customers Requirement Analyst Analysis Why Agile? Architect Design Labor Implementation Labor Integration Tester Testing Maintenance
  • 31. Three simple truths • 1. It is impossible to gather all the requirements at the beginning of a project. • 2. Whatever requirements you do gather are guaranteed to change. • 3. There will always be more to do than time and money will allow.
  • 33. Discipline • Customer satisfaction by rapid delivery of useful software • Welcome changing requirements, even late in development • Working software is delivered frequently (weeks rather than months) • Working software is the principal measure of progress • … • … • … • Regular adaptation to changing circumstances
  • 34. Developer Discipline • According to 3 simple truth • Agile coder will carry these four basic activities along with them – Coding – Testing – Listening – designing
  • 36. Anyway • Grocery Store does exist but …? • Waterfall and Agile • Waterfall still dominate the market. • Waterfall itself doesn’t encourage programmer to write good code. • We need something. • Applied TDD into development phase in Waterfall 
  • 37. We understand the story, so we Happy.
  • 39. Good Programmer = Good Software • Understandable • Testable
  • 41. The Program • a1 is a yng and gftd sftwreng attempting to hackMnfrm() of sftw company ENCOM in order to fndEvdc() that senior executive a2 stole() a1's cde and prsnt() it as his own, earning him a rapid series of promotions. a1 is blcked() by the MCP, an ai that ctrl the ENCOM mnfrm.
  • 42. The Program kevinFlynn is a young and gifted SOFTWARE_ENGINEER attempting to hack() into the mainframe of encom = SoftwareCompany(“ENCOM”) in order to findEvidence() that ENIOR_EXECUTIVE edDillinger stole(kevinFlynn) code and presented it as his own, earning him a rapid series of promotions. kevinFlynn is blocked() by the MasterControlProgram , an artificialIntelligence that controls(encom) the ENCOM mainframe.
  • 43. Understandable • Use Intention-Revealing Names • Make Meaningful Distinctions • Use Pronounceable Names • Use Searchable Names • Avoid Encodings
  • 44. Use Intention-Revealing Names //================================ int d // elapsed time in days //================================= int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays;
  • 45. Use Intention-Revealing Names public List<int[]> getThem() { List<int[]> list1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; }
  • 46. Use Intention-Revealing Names public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList<Cell>(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
  • 47. Use Searchable Names int realDaysPerIdealDay = 4; const int WORK_DAYS_PER_WEEK = 5; int sum = 0; for(int j=0; j<NUMBER_OF_TASKS; j++){ int realTaskDays = taskEstimate[j]*realDaysPerIdealDay; int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK); sum += realTaskWeeks; }
  • 48. Avoid Side Effect public class UserValidator { private Cryptographer cryptographer; public boolean checkPassword(String userName, String password) { User user = UserGateway.findByName(userName); if (user != User.NULL) { String codedPhrase = user.getPhraseEncodedByPassword(); String phrase = cryptographer.decrypt(codedPhrase, password); if ("Valid Password".equals(phrase)) { Session.initialize(); return true; } } return false; } }
  • 49. Testable • What? • We just understand our code. • Dependency?
  • 50. Test Driven Development AKA TDD – Executable Document Spec – Executable functional checking – Executable dependency checking – Executable integration test
  • 51. Normal Cycle • Read function spec • Start coding • Monkey see and monkey do • It might not effect to other functions • Waiting for defect ticket
  • 52. TDD cycle • Read function spec • (Re)Write Test • Run Test fail • Write Production Code • Run all test • Refactor • Cool 
  • 53. Demo
  • 54. Code
  • 56. Part II Tools • Project Management • Collaboration • Development Environment • Development Tools • Testing • Continuous Integration • Deployment • Monitoring
  • 57. Project Management and Collaboration
  • 59. # Flexible issue tracking system # Gantt chart and calendar # News, documents & files management # Feeds & e-mail notifications. # Per project wiki # Per project forums
  • 61. Version Control • You are not alone • Code is your asset • Choose one: • GIT, SVN, CVS
  • 62. Development Tools • Build Tool • Library dependency checking • Single Repository • Check Style • IDE
  • 63. Testing • Junit • DB Unit • Mockito • Selenium
  • 64. JUnit • JUnit is a unit testing framework • Unit test itself is not enough we need company
  • 65. DBUnit • Why do we need to test our database? • You need [multiple] databases
  • 66. Mock Object • Mock objects are simulated objects that mimic the behavior of real objects in controlled ways. • supplies non-deterministic results • has states that are difficult to create or reproduce • is slow • does not yet exist or may change behavior; • would have to include information and methods exclusively for testing purposes
  • 67. Web App Test • Selenium is a suite of tools to automate web app testing across many platforms.
  • 68. Continuous Integration • Execute all unit test in integration environment • Code coverage checking • Automatic Branch/Tag

Editor's Notes

  • #2: ทักทายเล็กน้อย
  • #3: เนื่องจากเป็นการบรรยายในสถาบันการศึกษาครั้งแรกใน ชีวิต ก่อนหน้านี้จะเน้นไปทางงานไม่เป็นทางการเช่น BarCamp, OSSFest, …
  • #4: เนื่องจากเป็นการบรรยายในสถาบันการศึกษาครั้งแรกใน ชีวิต ก่อนหน้านี้จะเน้นไปทางงานไม่เป็นทางการเช่น BarCamp, OSSFest, …
  • #10: การทำงานในโลกแห่งความเป็นจริงนั้นใช้กฏ 80:20 ได้เสมอแต่ขึ้นอยู่กับตำแหน่งหน้าที่ที่เราทำ เด็กๆ บริษัทเล็กๆ 80:20 งานเทคนิคอลต่อการสื่อสารผู้ใหญ่ บริษัทใหญ่มาก 80:20 สือสาร:ต่องานเทคนิคอล เรามักจะพบอยู่เสมอว่าเราใช้เวลาไปสามสี่ชั่วโมงเพื่อ กำหนดคำว่า customer ให้ตรงกันหลีกเลี่ยงไม่ได้ว่า โลกเรา Globalize มากๆเราไม่ได้อยู่คนเดียว เราไม่สามารถทำงานคนเดียว เราไม่สามารถทำงานประเทศเดียวได้ เราต้องเกรียนอินเตอร์ เราต้องสื่อสารกับชาวโลกได้
  • #11: ทุกคนคิดว่าเหมือนอะไร ผมว่าเหมือนร้านขายของชำ หลายท่านคงคิดว่าเหมือนสร้างตึกแต่การสร้างตึกมันดู rigid ไปนิดมัน build to last มากไปนิดถ้าเทียบกับการสร้างซอฟท์แวร์
  • #12: เริ่มจากเล็กๆ ไม่มีแผนอะไรเลย อยากได้อะไรก็สุมๆๆๆๆๆๆ เข้าไป ผิดไหม? ขายของได้เหมือนกัน แต่ถ้าเจ๊ป่วย? แต่ถ้าเจ๊อยากยกร้านให้ลูก? มีตัวอย่างของ code ที่เกิดจากการคิดแบบนี้ให้ดู ว่าเมพส์ขนาดไหน หลายท่านอาจจบไปทำงานแล้วไปเจองานที่ต้อง maintain code ที่เป็นนี้ ต้องทำใจ มันมีที่มาแบบที่สอง รู้ว่าจะขายอะไร รู้แน่ๆ แต่ขายอะไรสุ่มสี่สุ่มห้าไม่ได้ ดีไหม? ถ้าเจ๊ป่วย? ถ้าเจ๊อยากยกร้านให้ลูก?สุดแต่ลูกค้าจะเลือกว่าจะเอาแบบไหน ลูกค้าให้ความสำคัฐกับการจัดการแค่ไหนการจัดการและ operate มีผลต่อธุรกิจแค่ไหน การทำ Software ไม่ใช่แค่ทำให้เสร็จตาม feature แล้วจบ มันต้องคิดต่อไปให้ครบจนถึงการ operate ด้วยดังนั้นถ้าเราต้องการสร้างซอฟท์แวร์ให้เมือน 7-11 หรือคล้ายๆ ที่ transition และ operate ได้ง่ายหน่อย
  • #13: เพื่อให้งานที่เราสร้างออกมาดี เราน่าจะมีวิธีคิดที่ดีเพื่อที่จะได้สร้างของที่ดี ดูแลง่ายออกไปให้ใช้งาน
  • #14: กระบวนการ ทีมงาน เครื่องมือที่ดีและเหมาะสมอยู่ดีๆจะออกไปเขียนโค้ด ดุ่มๆก็คงจะออกเกรียนกันไปนิด ต้องมีกรอบกันบ้าง ดังนั้นกรอบต้องมีตั้งแต่กรอบของทีม และกรอบของตัวนักพัฒนาเอง ไม่มีใครทำอะไรตามใจตัวเองได้มากนักหรอกครับในโลกแห่งความเป็นจริง ถ้าอยากทำอะไรตามใจตัวเองมากต้องเป็น สุดเขต เสลดเป็ด ผมอินดี้ ไม่เน้นขาย
  • #15: การสร้างงานแบบนี้เราไม่ต้องสอนกัน มันเป็นเรื่องของธรรมชาติ ถ้าเราทำอะไรไปเรื่อยๆดุ่ยๆไม่ค่อยมีแผน ผลมักจะออกมาเป็นแบบนี้เสมอ ที่ผ่านมาเมื่อต้นปีผมเพิ่งได้รับการชักชวนให้ไปร่วมแก้ปัยหาระบบที่เป็นเหมือนร้านขายของชำแบบนี้ โดยมีข้อแม้คือระบบห้ามหยุดเพราะการซื้อขายเกิดขึนตลอดเวลา 24*7 ตัวอย่างcode ของ Taradและตัวอย่าง Database Schema ของ สพฐ ถ้าได้เข้าไปทำงานที่ที่ไม่มี methodology สิ่งเดียวที่เราทำได้คือ สวดมนต์
  • #16: Methodology สำคัญมากๆ เนื่องจากมันเป็นจุดเริ่มต้อนของทุกอย่าง ในกระบวนพัฒนาซอฟท์แวร์ methodologyถ้าเราเลือกขึ้นมาหนึ่งตัวเราจะพบว่า methodology จะ reflect to 3 things: team, individual discipline and tools (ไม่ทั้งหมดแต่เกือบทั้งหมด) ดังนั้นวันที่เราจบออกไปทำงานเป็น รุ่นน้องที่สุดในทีมเราจะรู้ว่าเราต้องเจออะไรบ้างจาก methodology ที่บริษัทนั้นใช้ หรือ ถ้าโชคดีมากๆอาจไปเจอบริษัทที่ไม่มี methodology อะไรเลยเป็นแบบ อินดี้ ก็ขอให้โชคดีครับ ทุกอย่างมีที่มาที่ไปบางคนจบออกไปอาจจะอึดอัดกับการทำงานแบบนี้แบบนั้นแต่อยากให้เข้าใจว่าทุกอย่างมีเหตุผลของมัน ถ้าเราเข้าใจมันเราจะมีความสุข
  • #18: ปัจจุบันถ้าเราไปgoogleดูว่ามี Software Development Methodology กี่แบบเยอะมากๆ Prototyping, Spiral abcแต่ที่โด่งดังมหัศจรรย์ขั้นเทพที่สุดคือ Waterfall เรามาดูกันหน่อยว่าถ้าเราเลือก waterfall มันจะ reflect อะไรบ้าง ยังไง
  • #19: แต่บางครั้งเราไม่ได้เลือกเอง มันถูกเลือกมาแล้ว สิ่งที่เราทำได้คือเข้าใจมัน เพื่อให้เราทำงานอย่างมีความสุข หาวิธีปรับเอาเองโดยที่ไม่ violate disciplineคำถามคือ methodology ไหนได้รับความนิยมสูงสุด ตลอดกาล คลาสสิก เจอแน่ๆ
  • #20: Develop RFPกระบวนการรวบรวมสิ่งที่อยากได้ทั้งหมดเขียนเป็น Request For Proposal, Present Proposal โชว์ว่าทำได้ทุกอย่าง compile หมดทุกข้อเข้ากระบวนการจัดซื้อ ต่อรองราคา(เพิ่งโม้ไปเยอะว่าทำได้), Analysis ลงไปรับ requirement จากลูกค้า พบว่าโอวจอร์จ เก็บ Gap จะถอนใจได้เอกสารมาอีกกองDesign ได้เอกสารมาอีกกอง Implement เริ่มเครียด เวลาเหลือน้อยเมื่อเทียบกันสิ่งที่ต้องทำIntegration Testing โอวบั๊กเยอะมาก
  • #21: Develop RFPกระบวนการรวบรวมสิ่งที่อยากได้ทั้งหมดเขียนเป็น Request For Proposal, Present Proposal โชว์ว่าทำได้ทุกอย่าง compile หมดทุกข้อเข้ากระบวนการจัดซื้อ ต่อรองราคา(เพิ่งโม้ไปเยอะว่าทำได้), Analysis ลงไปรับ requirement จากลูกค้า พบว่าโอวจอร์จ เก็บ Gap จะถอนใจได้เอกสารมาอีกกองDesign ได้เอกสารมาอีกกอง Implement เริ่มเครียด เวลาเหลือน้อยเมื่อเทียบกันสิ่งที่ต้องทำIntegration Testing โอวบั๊กเยอะมาก
  • #22: มีหน้าที่ที่ชัดเจน เชี่ยวชาญงานที่ทำมากๆ มีการกำหนด KPI และตัววัดที่ชัดเจนได้ง่าย แต่ Hop มันจะเยอะหน่อย
  • #31: เอา Waterfall มากลับด้านใหม่เราจะไม่แยกทุกอย่างออกจากกันเป็นphase ของการทำงานแต่จะเป็น phase ของ features แทน ? แล้วเราเอากระบวนที่เราทำใน waterfall มา repeat ทุกๆ phase ดังนั้นเราจะเห็นว่า team ของ Agile จะไม่สามารถแบ่งเป็น role ได้ เพราะทุกๆ phase หรือ iteration นั้นจะต้องทำทุกอย่างใหม่เกือบหมดลูกค้าเลือก feature ที่ต้องการเห็นก่อน(ไม่ใช่ แผนงามๆ) Analyst-&gt;Design-&gt;Code(Test TestTest)-&gt;Test-&gt;Integration-&gt;Deployดังนั้น Software ที่ถุกสร้างภายให้ Agile Methodology จะต้องมีความยืดหยุ่นสูงมาก ทนต่อการเปลี่ยนแปลง
  • #32: Three simple truths ที่เราต้องทำใจยอมรับก่อนเข้าลัทธิ Agile คือ
  • #37: ได้ผลออกมาทั้งคู่ แต่ Waterfall จะเหนื่อยกว่านิดนึงตรงที่กระบวนการทำงานไม่เปิดโอกาสให้ user ได้เข้ามาเห็นผลงานจนกว่าจะเสร็จแล้วซึ่งบางทีเพี้ยนไปมาก แต่ agile เองก็ยังไม่เป็นที่ยอมรับขององค์กร ดังนั้น อย่ารอ เราจึงเอาส่วนที่ทำได้มาทำก่อนแต่การจะได้มาซึ่งสิ่งนั้น Programmer ต้องมีวินัยสูงมากๆ สูงยังไงมาดูหรือถ้าทำ
  • #38: บางคนถอดใจไม่เข้าใจ ไม่ทำงาน เซ็ง ติสต์แตก
  • #39: แทนที่เราจะนั่งเสียหัวกับเรื่องเอกสารเรื่อง requirementไม่นิ่ง ยิ่งเราพยายามทำให้มันนิ่งมันยิ่งดิ้น ดังนั้นเราหันกลับด้านมาทำซอฟท์แวร์ให้ maintain ได้ง่านเพื่อให้มันดิ้นได้ทัน requirement จะดีกว่าไหม7-11 จะออกมาดี ช่างต้องมี skill ที่ดีด้วย
  • #41: Codingสมัยใหม่อาจไม่ใช่สมการทางคณิตศาสตร์แล้ว ก่อนหน้านี้เราอาจมีข้อจำกัดเรื่อง Hardware: Memory, CPU หรือ Storage แต่ปัจจุบันเราผ่านพ้นเรื่องเหล่านั้นมาไกลแล้ว Hardware ราคาไม่แพงแล้วแต่ที่แพงกว่าคือค่าดูแลรักษา Software ดังนั้นเราควรจะเปลี่ยนมุมมองการเขียน Code เสียใหม่ให้เป็นเหมือนกับการเขียน “นิยาย”
  • #43: แบบนี้อ่านง่ายและเข้าใจมากกว่าไหม ครับดังนั้นการเขียน Software มันคือการเรียบเรียงความคิดและเขียน นิยาย ยาวๆออกมาหนึ่งเรื่อง ดังนั้นในโลกแห่งความเป็นจริงการสร้างSoftware คือการจำลอง Business Process ของลูกค้าลงมาให้เป็นภาษา programming มันคือการเขียนเอกสารเป็นการ represent ออกมาด้วยภาษาอื่นๆนั่นเอง ดังนั้นเป็นโปรแกรมเมอร์เองก็ต้องเล่าเรื่องให้เป็น ให้คนเข้าใจ ไปหัดเขียนจดหมายรักจีบสาวก็จะดี
  • #45: Comment เป็นเรื่องที่ดี แต่ comment ไม่ได้ตามตัวแปรไปทุกที่นะครับ
  • #46: มันทำอะไร?
  • #47: Meaningful Name, Pronounceable Name
  • #54: ประมาณ15-20 นาที
  • #62: พฤติกรรมของ Developer หน้าใหม่ไร้สิวคือ เขียนไปเรื่อยๆ ทับไปเรื่อยๆ แล้วก็หาที่กลับไม่เจอCode อยู่ไหน ของใครถูกใครเขียนทับผมไม่ได้ทำเมื่อวานwork นี่ไม่ใช่ code ผมทำไม copy มาไม่ครบไอ้ที่ copy มานี่ถูกแล้วหรอ
  • #64: ของใช้ส่วนตัวของโปรแกรมเมอร์ที่เราต้องมีไว้ใช้งานเสมอ
  • #67: For example, an alarm clock program which causes a bell to ring at a certain time might get the current time from the outside world. To test this, the test must wait until the alarm time to know whether it has rung the bell correctly. If a mock object is used in place of the real object, it can be programmed to provide the bell-ringing time (whether it is actually that time or not) so that the alarm clock program can be tested in isolation.
  • #69: เอา code ของทุกคนมาแล้ว execute รวมหมด