การรีวิวโค้ดน่าจะทำได้ดีกว่านี้
(tigerbeetle.com)- นักพัฒนาจำนวนมากรู้สึกไม่พอใจกับประสบการณ์การรีวิวโค้ดของ GitHub และกำลังมีความพยายามรูปแบบใหม่เพื่อปรับปรุงสิ่งนี้
- เครื่องมือทดลองชื่อ
git-reviewถูกออกแบบมาให้จัดการการรีวิวโค้ดร่วมกับโค้ดโดยตรงบนเครื่องโลคัล แทนที่จะทำผ่านเว็บอินเทอร์เฟซบนเบราว์เซอร์ - การรีวิวถูกจัดการเป็นคอมมิตเดียว โดยทิ้งคอมเมนต์รีวิวไว้ในโค้ดเหมือนคอมเมนต์ และให้ผู้รีวิวกับผู้เขียนช่วยกันแก้ไขคอมมิตนี้ไปเรื่อย ๆ
- อย่างไรก็ตาม หากมีการแก้โค้ดหรือ rebase ระหว่างการรีวิว จะเกิดความไม่สะดวกในเรื่องการจัดการ conflictและการใช้
--force-with-leaseทำให้แนวทางนี้ไม่ประสบความสำเร็จมากนัก - สุดท้ายจึงกลับไปใช้การรีวิวผ่านเว็บอีกครั้ง แต่แนวคิดเรื่องการใส่สถานะรีวิวไว้ใน Git repository โดยตรงยังคงน่าสนใจ และมีความเป็นไปได้ว่าจะเกิดทางเลือกที่ดีกว่าเดิมเมื่อ Git พัฒนาต่อไป เช่น การนำChange-Id แบบ Gerritมาใช้
การมองเห็นปัญหาของระบบรีวิวโค้ด
- ปัจจุบันมีคนจำนวนมากไม่พอใจกับกระบวนการรีวิวโค้ดของ GitHub
- ปัญหาหลักคือการรองรับstacked pull requestและinterdiff reviewที่ยังไม่ดีพอ รวมถึง
- สถานะการรีวิวไม่ได้ถูกเก็บไว้ภายใน repository
- จำเป็นต้องรีวิวผ่านเว็บอินเทอร์เฟซที่ยึด remote เป็นศูนย์กลาง
- ปัญหาที่ผู้เขียนมองเห็นคือการขาดความกระจายศูนย์ของการรีวิวและความไม่มีประสิทธิภาพของอินเทอร์เฟซ
เปรียบเทียบเวิร์กโฟลว์การเขียนโค้ดและการรีวิว
- เวลาคนเขียนโค้ด พวกเขาใช้งานเอดิเตอร์บนเครื่องโลคัล
- หน่วงต่ำทั้งในด้านหน่วยความจำและ NVMe และเป็นสภาพแวดล้อมที่ปรับให้เหมาะกับเวิร์กโฟลว์เฉพาะของผู้ใช้
- การรีวิวโค้ดก็ควรทำโดยดึง source branch ลงมาไว้บนเครื่องโลคัลแล้วทำงานกับมัน
- ด้วยเครื่องมืออย่างMagit เราไม่เพียงดู diff ได้ แต่ยังสำรวจบริบทของโค้ดทั้งหมดได้ด้วย
- สามารถใช้สภาพแวดล้อมการพัฒนาที่ทรงพลังได้ เช่น รันเทสต์ ไปยังตำแหน่งนิยามของโค้ด หรือทดลอง refactor
- ในทางกลับกัน หากต้องการทิ้งฟีดแบ็กไว้ใน PR ก็ต้องย้ายไปใช้เว็บอินเทอร์เฟซบนเบราว์เซอร์ที่ช้า และเมื่อ diff มีขนาดใหญ่ก็มีอาการหน่วงเวลาพิมพ์อย่างชัดเจน
อินเทอร์เฟซรีวิวโค้ดและโครงสร้างการจัดเก็บที่เหมาะสม
- ในความเป็นจริง การทิ้งคอมเมนต์แบบ inline ในโค้ดหรือแก้โค้ดโดยตรงคือวิธีที่เป็นธรรมชาติที่สุด
// CR(matklad): Hm, this check seems imprecise to me. // Shouldn't we compare `replica.view` instead of `header.view` here? if (header.view != view) return; - เมื่อข้อมูลถูกเก็บไว้ในฐานข้อมูลระยะไกลแทนที่จะเป็น local git repository ก็จะเกิดทั้งปัญหาความหน่วงและvendor lock-in
แนวคิดของ git-review และประสบการณ์ใช้งานจริง
- แนวคิดของ
git-reviewมีดังนี้:- การรีวิวโค้ดเกิดขึ้นในรูปของคอมมิตเดียวที่อยู่บนสุดของ PR branch
- ภายในคอมมิตนั้นจะมีการเพิ่มคอมเมนต์ในโค้ดที่มีมาร์กเกอร์พิเศษ
- ผู้รีวิวและผู้เขียนจะผลัดกันแก้ไขคอมมิตนี้ โดยทำงานร่วมกันบนพื้นฐานของ push --force-with-lease
- เมื่อคอมเมนต์ทั้งหมดถูกทำเครื่องหมายว่าแก้ไขแล้ว (//? resolved) และรีวิวจบลง ก็จะเพิ่มrevert commitเพื่อเก็บบันทึกไว้
- แม้แนวคิดจะเรียบง่ายและใช้งานได้จริง แต่ในทางปฏิบัติก็เกิดปัญหาต่อไปนี้
- หากมีการแก้โค้ดระหว่างรีวิว ก็มักเกิด conflict ระหว่างคอมเมนต์กับคอมมิตด้านล่างหรือคอมมิตใหม่
- กระบวนการforce-pushเพิ่มแรงเสียดทานในการทำงานร่วมกันและเพิ่มความซับซ้อนของงาน
- เกิดความไม่สอดคล้องกันระหว่างประวัติการเปลี่ยนแปลงของโค้ดกับความคืบหน้าของการรีวิว และทำให้จัดการ merge conflict ได้ยาก
การเปลี่ยนแปลงใหม่และความเป็นไปได้ในอนาคต
- ในอนาคตมีความเป็นไปได้ที่Git upstream จะรองรับ Change-Id สไตล์ Gerrit
- จะช่วยให้ติดตามประวัติการแก้ไขรายคอมมิตได้ง่ายขึ้น และคาดว่าจะรองรับinterdiff reviewได้กว้างขึ้น
- แต่ก็มีแนวโน้มว่าจะขัดกับแนวทางของ
git-reviewบางส่วน - ในโครงสร้าง Change-Id แบบใหม่ อาจเปิดทางให้เกิดแนวทางแปลกใหม่ เช่น การเพิ่มคอมเมนต์รีวิวเข้าไปในตัวคอมมิตเอง
บทสรุปและระบบที่น่าสนใจสำหรับอ้างอิง
- สุดท้าย ตอนนี้จึงย้อนกลับมาใช้การรีวิวโค้ดผ่านเว็บอินเทอร์เฟซอีกครั้ง
- ความต้องการโซลูชันที่ดีกว่ายังคงมีอยู่
- ระบบและเครื่องมือที่เกี่ยวข้องซึ่งน่าสนใจ
- Fossil: ระบบ SCM ที่เก็บข้อมูลทุกอย่างไว้ภายใน repository
- NoteDb: รวมประวัติการเก็บสถานะรีวิวของ Gerrit เข้ากับ git
- git-bug: เก็บข้อมูล issue ไว้ใน git
- git-appraise: เก็บข้อมูลรีวิวไว้ใน git เอง
- prr: สร้างอินเทอร์เฟซรีวิวในเอดิเตอร์โดยเชื่อมกับ GitHub API
- How Jane Street Does Code Review: ตัวอย่างของแนวทางที่ดีกว่าในโลกความเป็นจริง
- git-pr: โปรเจกต์ที่แทนที่เวิร์กโฟลว์ PR ทั้งหมดด้วยความสามารถเนทีฟของ git
ปิดท้าย
- ตอนนี้ยังไม่มีทางออกที่สมบูรณ์แบบ และความพยายามเพื่อสร้างประสบการณ์นักพัฒนาที่ดียิ่งขึ้นก็ยังดำเนินต่อไป
- ยังมีความคาดหวังอย่างมากต่อทิศทางการพัฒนาในอนาคต
2 ความคิดเห็น
ไม่แน่ใจว่าแนวทางของ
git-reviewดีจริงไหม แต่เห็นด้วยว่า PR review ที่อิงกับ GitHub นั้นแย่มาก..ความคิดเห็นจาก Hacker News
สิ่งที่น่าหงุดหงิดกับ code review มานานคือ feedback ที่มีประโยชน์จริง ๆ (ไม่ใช่แค่การทักเรื่องสไตล์เล็กน้อย) แทบจะมาช้าเกินไปเสมอ จนผลลัพธ์เดียวที่เกิดขึ้นบ่อย ๆ คือ "อันนี้ต้องรื้อแล้วเริ่มใหม่ด้วยดีไซน์ใหม่ทั้งหมด" หรือ "จริง ๆ แล้วไม่จำเป็นต้องทำงานนี้ตั้งแต่แรก" ดูเหมือนว่า code review จะเป็นช่วงเวลาเดียว (หรือไม่กี่ครั้ง) ที่ผู้มีส่วนได้ส่วนเสียทุกฝ่ายเข้ามามีส่วนร่วมจริง ๆ และคิดเรื่องการเปลี่ยนแปลงอย่างจริงจัง อาจเคยมีการคุยกันในมีตติ้งหรือ Jira ticket มาก่อน แต่บ่อยครั้งคนจากอีกทีมหรืออีกแผนกหนึ่งจะเพิ่งรู้ว่ามีการเปลี่ยนแปลงนี้ก็ตอนที่ได้รับการแจ้งเตือน code review ฉันเองก็หลายครั้งเพิ่งรู้ว่าทีมอื่นกำลังทำอะไรแปลก ๆ จากการแจ้งเตือน code review เช่นกัน จะให้ทุกคนตามทุกอย่างล่วงหน้าไว้หมดเป็นเรื่องไม่สมจริง ตอนเรียนมหาวิทยาลัยยุค 90 เคยมี design review แต่ในงานจริงไม่เคยเห็นเลย และก็ไม่คิดว่า design review จะรับประกันได้ว่าจะจับทุกปัญหาได้ตั้งแต่ต้น
ในโลกของวิศวกรรมซอฟต์แวร์ แทบไม่มีความเป็น engineering แบบจริงจังอยู่มากนัก ส่วนหนึ่งเพราะอุตสาหกรรมนี้ยอมรับความช้าของกระบวนการ engineering ที่เหมาะสมไม่ได้ ซอฟต์แวร์ส่วนใหญ่ไม่ได้ถึงขั้นอันตรายถึงชีวิต และบั๊กหรือความผิดพลาดก็มักแก้ทีหลังได้ stakes และโอกาสในการ patch จึงต่างจากสะพาน โรงงาน หรือเครื่องยนต์เครื่องบิน ที่ความล้มเหลวเป็นสิ่งยอมรับไม่ได้
ทีมของเรามี developer กลุ่มเล็ก ๆ 4-6 คน เวลาเริ่มทำฟีเจอร์ใหม่ พอมีภาพร่างในหัวแล้วก็จะคุยกับเพื่อนร่วมทีมทันที ทุกคนทำแบบนี้กันหมด ทำให้ code review เน้นเรื่องเล็ก ๆ อย่าง code smell เป็นหลัก ส่วนสถาปัตยกรรมภาพใหญ่ก็มักตกลงกันล่วงหน้าโดยคน 2-3 คน ถ้าสมาชิกทีมไม่เห็นด้วยกับโค้ด พวกเขามักไม่อยากแตะโค้ดของกันและกัน แล้วสถานการณ์จะยิ่งแย่ลง ฉันเชื่อว่าต่อให้ทีมใหญ่กว่านี้ ถ้าแบ่งปันความรับผิดชอบกันได้ดีก็ทำได้โดยไม่มีปัญหา
การที่ผู้มีส่วนได้ส่วนเสียทุกคนเข้ามามีส่วนร่วมเฉพาะตอน code review ไม่ใช่ปัญหาของ Git หรือระบบ version control แต่เป็นปัญหาเชิงองค์กร มันคือการไม่สามารถแชร์ที่มาของ PR การคุยกันใน ticket และกระบวนการตัดสินใจได้ นี่เป็นตัวอย่างขององค์กรที่ทำงานผิดเพี้ยน พอ ๆ กับการด่ากระบวนการพิมพ์หนังสือว่าแย่ เพราะทุกคนเพิ่งมารวมตัวและมีส่วนร่วมกันจริงจังก็ตอนหนังสือพิมพ์ออกมาแล้ว
องค์กรของเราบังคับให้เขียน RFC สำหรับการตัดสินใจเชิงดีไซน์ที่เป็นแก่นหลักเสมอ อะไรถือเป็นการตัดสินใจเชิงดีไซน์ระดับแก่นหลักนั้น ทีมจะตัดสินใจกันเองเป็นระยะ ๆ ถ้าอยู่ในขั้น epic ของ Jira แล้ววิธี implementation รายละเอียดยังไม่ชัด ก็จะ assign ให้เขียน RFC ก่อน RFC อาจใช้ภายในทีมเราเอง หรือเปิดให้ทั้งทีมซอฟต์แวร์อ่านก็ได้ และถ้าเป็นแบบหลัง ทุกคนจะอ่านและคอมเมนต์ได้ก่อนมีตติ้งที่จัดทุก 2 สัปดาห์ แม้จะเหนื่อย แต่ก็ยังดีกว่าที่ทำงานซึ่งไม่มี collaborative design process ที่อิง RFC มาก
จากประสบการณ์ของฉัน เห็นด้วยมากกับเรื่อง design review แต่ก่อนเราเคยใช้เอกสารดีไซน์แบบเป็นทางการและมีการรีวิว แล้วภายหลังเปลี่ยนไปใช้การทำ prototype และการออกแบบแบบ iterative เพราะในขั้นดีไซน์มักตกหล่นรายละเอียดสำคัญ และเมื่อใช้เวลาไปมากแล้ว พอถึงช่วงหลังก็มักปล่อยผ่านแบบขอไปที การให้ทั้งทีมมานั่งรีวิวพร้อมกันก็ไม่มีประสิทธิภาพ สุดท้ายปัญหาจึงไปถูกพบใน code review อีกทั้งยังมีหลายคนที่เขียนเอกสารดีไซน์ไม่เก่งหรือไม่มีแรงจูงใจ สรุปคือถ้ามีคนเกิน 5 คน ความไม่มีประสิทธิภาพแบบนี้แทบหลีกเลี่ยงไม่ได้ สภาพแวดล้อมที่เหมาะที่สุดคือมี PO ผู้ใช้หลัก และ developer ราว 5 คนร่วมกัน
อ่านโพสต์ใน HN เรื่อง stacked pull request แล้วรู้สึกน่าสนใจมาก ตอนเริ่ม graphite.dev ใหม่ ๆ ถ้าไม่เคยผ่าน Facebook หรือ Google มาก่อน หลายคนจะไม่รู้จัก workflow แบบนี้เลย สนุกดีที่ได้เห็นว่าเทรนด์ code review เปลี่ยนเร็วมากภายใน 3-4 ปีที่ผ่านมา
ในฐานะผู้ใช้ arcanist มาตั้งแต่ก่อนยุค mercurial ฉันยังคงเชียร์ Graphite อย่างมากกับทีมที่ยังลำบากกับ PR ใหญ่ ๆ หรือ merge commit โดยเฉพาะ ฉันประทับใจมากกับความกล้าทำและผลลัพธ์ที่ทำให้มันเชื่อมกับ PR ได้สำเร็จ อยากให้ Graphite มีโหมด prescriptive ที่สามารถ initialize repo ด้วยการตั้งค่าแบบฮาร์ดคอร์ เพื่อให้ตั้งสมมติฐานที่เข้มข้นกว่านี้ได้
แม้ Graphite จะเป็นโซลูชันที่ยอดเยี่ยม แต่ราคาค่อนข้างแพงและยากที่จะโน้มน้าวคนที่มีอำนาจตัดสินใจให้ซื้อ หวังว่าจะมีเครื่องมือเจ๋ง ๆ แบบ Graphite ที่เป็นโอเพนซอร์ส หรือถูกฝังมาใน GitHub เลย
ฉันก็แอบคิดถึง fig workflow เหมือนกัน
หลังเหตุการณ์ด้านความปลอดภัยล่าสุดของ CodeRabbit ก็เริ่มไม่อยากทดสอบเครื่องมือใหม่ ๆ ที่ผสาน LLM เข้ากับ codebase เพราะการทดลองใหม่ที่ดูน่าตื่นเต้นสามารถกลายเป็นปัญหาด้านความปลอดภัยได้ง่าย
stacked pull request โดยเนื้อแท้แล้วคือการเพิ่มความซับซ้อนที่ไม่จำเป็น การเปลี่ยนแปลงเล็ก ๆ บ่อย ๆ เป็นแนวปฏิบัติในการพัฒนาที่ดีกว่ามาก และ trunk-based development หรือ continuous integration ก็เหมาะกับเป้าหมายนั้นดี
ดูเหมือน developer จำนวนมากขึ้นเรื่อย ๆ กำลังเห็นตรงกันว่า "เครื่องมือรีวิวควรมีหน้าตาแบบไหน" ตอนนี้จึงเป็นช่วงที่สำคัญว่าองค์กรและผู้เล่นรายใดจะทำให้สิ่งนี้นำไปใช้ได้จริงและยั่งยืน การนำ git change-id มาใช้เมื่อเร็ว ๆ นี้ถือเป็นพัฒนาการที่ดีมาก (ขอบคุณ jj, git butler, gerrit และอื่น ๆ) Graphite หรือ GitHub ยังมุ่งแก้ปัญหาให้เฉพาะผู้ใช้ของตัวเอง จึงไม่ได้เปิดกว้างสำหรับทุกคน ส่วนเครื่องมือ command line ฝั่ง client ที่มีอยู่มากมายก็ไม่ได้ทรงอิทธิพลนัก สิ่งที่จำเป็นจริง ๆ คือ:
สิ่งที่ไม่ชอบที่สุดใน Github คือแอปมันช้ามาก ช้าจนแท็บเบราว์เซอร์ค้างได้จริง ๆ Azure DevOps เป็นเครื่องมือ code review ที่ดีที่สุดเท่าที่ฉันเคยใช้มา
ฉันเคยใช้ Azure DevOps ตอนพัฒนา .NET ในสภาพแวดล้อมของ Microsoft มันเป็นเครื่องมือที่เข้ากับ ecosystem ของ .NET ได้ดีจริง ๆ
สงสัยว่าคุณเคยใช้งาน GitLab อย่างจริงจังไหม สำหรับฉันใน big 4 แล้ว GitLab คืออันที่ชอบที่สุด
อยากรู้ว่าอะไรใน DevOps ที่คุณชอบขนาดนั้น ฉันใช้มันทุกวันและรู้สึกว่าคล้าย github มาก เสียอีก บางทีกลับคิดถึงฟีเจอร์ apply suggested changes อัตโนมัติของ github ด้วยซ้ำ
การใช้ JavaScript อย่างหนักบวกกับแรงกดดันให้ปล่อยเวอร์ชันเร็ว ทำให้ได้สภาพแวดล้อมที่ช้าแบบนี้ ถึงอย่างนั้นก็ยังดีกว่า Atlassian
ไอเดียการใช้ git โดยตรงกับ code review ฟังดูน่าสนใจ เพราะสะดวกที่สามารถลองจับเปลี่ยนแปลงต่าง ๆ ได้ในเครื่องตัวเองเลย ไม่เข้าใจเหมือนกันว่าทำไมต้องพยายามผูกการรีวิวให้ตรงกับ single commit เท่านั้น—แนวทางที่ reviewer commit คอมเมนต์หรือการแก้ไขของตัวเองลงใน PR branch โดยตรงก็ดูน่าสนใจดี นี่เป็น hybrid ระหว่าง github flow แบบดั้งเดิมกับ workflow แบบ mailing list/patch ของ Linux
สงสัยว่า github PR เป็นแบบ read-only หรือเปล่า ฉันเคยเห็นสมาชิกทีมเสนอการแก้ผ่านคอมเมนต์แบบ "suggestion" แล้วกดปุ่มครั้งเดียวก็เอาเข้า commit นั้นได้เลย
การบังคับให้ review commit ต้องมีแค่ commit เดียวเป็นเรื่องแปลก ถ้ามีหลายคนรีวิวก็จะเกิดปัญหาแก้ไขพร้อมกัน และมันก็ไม่สอดคล้องกับตัวโค้ดด้วย การให้แต่ละคนทำงานรีวิวของตัวเองแยกกันบนคนละ branch แล้วค่อย squash & rebase ตอนท้ายดูเป็นธรรมชาติกว่า ถ้าการถกเถียงยืดเยื้อ ก็อาจปล่อยให้มี comment commit ต่อเป็นสายกันไปก็ได้ สิ่งสำคัญคือข้อมูลพวกนี้ต้องอยู่ที่ไหนสักแห่งนอก main branch
ตอนรีวิวโค้ด ฉันชอบดึงลงมาเป็น local branch แล้ว soft-reset จากนั้นดูมันเหมือนเป็นโค้ดที่ตัวเองเขียนเอง ถ้า commit ถูกแบ่งมาไม่ดี ผู้ร่วมงานแต่ละคนก็ต้องมานั่งแยกมันเองเพื่อรีวิว ซึ่งไม่มีประสิทธิภาพ ถ้าสิ่งที่ต้องรีวิวมันใหญ่เกินไป ก็ยากที่จะบอกว่าใครเข้าใจทั้งหมดอย่างแท้จริง เพราะองค์รวมไม่ได้เป็นเพียงผลรวมของส่วนย่อย
ขอแชร์ตัวอย่าง shell function สำหรับ code review แบบง่าย ๆ ใช้งานจาก tree ที่สะอาด โดย checkout branch สำหรับ review ไว้ล่วงหน้า เปิดดู diff ใน nvim และพอเสร็จก็จัดการ branch ให้อัตโนมัติ
การทำ commit ที่ดีและสร้าง PR จากมันให้ดี เป็นทักษะที่สำคัญพอ ๆ กับการเขียนโค้ดให้ดี แต่ในความเป็นจริง developer ที่ไม่เก่งเรื่องการแยก PR หรือเขียน commit message ยังมีมากกว่าที่คิด
ในทีมที่ทำงาน parallel ด้าน data science จะ checkout branch สำหรับ code review ไว้ใช้ 2-3 อัน
สำหรับการรีวิว PR ฉันใช้ https://github.com/sindrets/diffview.nvim บน Neovim มันให้ UI คล้าย diff ของ vscode แต่ใช้ diff mode ของ vim ส่วนงานรีวิวเบา ๆ
git log -p --function-contextก็มีประโยชน์ฉันสนใจแนวทางที่ให้คนหนึ่งเขียน draft แรก แล้วอีกคนมาขัดเกลาและ merge ต่อ มีใครเคยลองทำจริงไหม
ฉันเห็นด้วยกับสไตล์ที่คนเขียนทำงานจริงเกิน 90% ส่วน reviewer เป็นคนรับผิดชอบการรวม final changes และ merge ด้วยตัวเอง ที่ทำงานเก่าของฉัน reviewer จะเป็นคน merge เสมอ และถ้าเป็นการเปลี่ยนแปลงใหญ่ก็จะส่งต่อแค่คอมเมนต์ วิธีนี้มีประสิทธิภาพกว่าการต้องคอยขอให้ใครมากด approve ทีละอันมาก
ถ้าได้มีส่วนช่วยเขียนโค้ดที่รีวิวอยู่ ก็จะให้ feedback ที่ลึกขึ้นได้มาก และโครงสร้างแบบนี้ก็ช่วยให้คนมองมันเป็น "โค้ดของพวกเรา" ไม่ใช่ "โค้ดของฉัน/ของเธอ" เข้ากันได้ดีกับวัฒนธรรมแบบ iterative และเน้น collaboration อย่าง TDD
วิธีนี้คล้าย asynchronous pair programming
ฉันรู้จักคนที่ทำ pair programming ภายใต้ trunk-based development พอเขียนโค้ดกันสองคนเสร็จ ถ้าโอเคก็ merge เข้า main ทันที แล้วถ้าเทสต์ผ่านก็ deploy ได้เลย ซึ่งใช้งานได้จริง
ฉันใช้ปลั๊กอินขยาย Github Pull Request ใน VSCode เพื่อรีวิวแบบ local และมันค่อนข้างสะดวก เพราะสามารถคอมเมนต์และรีวิวได้ตรงใน editor เลย
บนเว็บ Github ถ้าไฟล์ที่เปลี่ยนมีเยอะ มักจะซ่อนบางไฟล์ แต่ใน VSCode สามารถนำทางได้อิสระกว่ามาก จึงใช้งานสบายกว่าเยอะ และเมื่อฟีเจอร์นี้ทำได้ในคู่ผสม VSCode/Github ก็คาดเดาได้ว่าน่าจะขยายไป editor อื่นได้ด้วย
มันดีขึ้นก็จริง แต่ก็ยังมี vendor lock-in หนักมากทั้งฝั่ง Github และ VSCode
บนเว็บ Github ถ้าเปิด PR แล้วกดปุ่ม “.” เพื่อเปิดใน VSCode web ทันที ประสบการณ์ก็ดีกว่ามากเช่นกัน
ดีใจมากที่ได้ยินว่า Git จะมี first-class change ID! มันคล้ายกับ revision tracking ของ diffs ใน Phabricator ของ Facebook มาก อยากได้ลิงก์ไปอ่านรายละเอียดเพิ่มเติม
อยากพูดถึง Sourcehut ด้วย มันสืบทอด workflow แบบคลาสสิกที่ส่ง patch/issue/bug/discussion ผ่านอีเมล และเชื่อมกับ mailing list และ CI ได้ อีกทั้ง Drew Devault ก็มีแหล่งข้อมูลเรื่องการส่งและรับ patch ที่ git-send-email.io และ git-am.io ให้ด้วย