การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว ( John Newbery )
แปลโดย : Claude 3.7 Sonnet / source : https://johnnewbery.com/contributing-to-bitcoin-core-a-personal-account/
Last updated
แปลโดย : Claude 3.7 Sonnet / source : https://johnnewbery.com/contributing-to-bitcoin-core-a-personal-account/
Last updated
11 สิงหาคม 2017 , John Newbery
ในเดือนมกราคมปีนี้ ผมย้ายไปนิวยอร์กเพื่อรับงานที่มีส่วนร่วมแบบเต็มเวลากับโครงการ Bitcoin แบบ open source นี่คือประสบการณ์บางส่วนของผมในช่วงไม่กี่เดือนแรก
ประการแรก ผมตระหนักดีว่าผมโชคดีมาก ไม่เพียงแต่ผมมีอิสระอย่างมากในการทำงานในสิ่งที่ผมคิดว่าสำคัญหรือน่าสนใจ ผมยังได้นั่งทำงานเคียงข้างและร่วมงานโดยตรงกับคนที่มีความสามารถและแรงจูงใจอย่างยอดเยี่ยม งานทั้งหมดที่ผมทำเป็น open source และผมกำลังมีส่วนร่วมในเทคโนโลยีที่น่าสนใจซึ่งจะมีความสำคัญอย่างมากในอีกไม่กี่ปีข้างหน้า แทบไม่มีอะไรอีกที่ผมจะขอเพิ่มเติม และผมมักต้องเตือนตัวเองว่านี่เป็นเรื่องจริง และไม่รู้ว่าอย่างไรนี่คือการทำมาหากินของผม
แต่ในแง่ที่เป็นรูปธรรมกว่านั้น ผมได้เรียนรู้อะไรบ้างตั้งแต่ผมมาอยู่ที่นี่?
ผมเป็นคนแรกที่ยอมรับว่าผมไม่ใช่โปรแกรมเมอร์ที่เก่งที่สุดหรือมีประสบการณ์มากที่สุด ผมเริ่มอาชีพของผมในฐานะนักพัฒนาซอฟต์แวร์แต่ย้ายไปสู่บทบาทการสนับสนุนอย่างรวดเร็ว จัดการโครงการของลูกค้าและทีมสนับสนุน ผมเลือกเส้นทางนั้นเพราะนั่นคือสิ่งที่จะทำให้ผมได้พบกับผู้คนที่น่าสนใจและได้เดินทางไปยังสถานที่แปลกใหม่ นั่นดูน่าสนใจกว่าการทำงานกับโค้ด และเป็นผลให้ผมใช้เวลาหลายปีที่ผ่านมาทำงานกับลูกค้าและทีม แทนที่จะเขียนและดีบั๊กโค้ด
Bitcoin เป็นโครงการที่ซับซ้อนมาก โครงการที่ทำงานบนหลายแพลตฟอร์มในหลายสภาพแวดล้อม และที่แกนหลักของมันคือ consensus engine — ที่ซึ่งผู้เข้าร่วมแต่ละคนต้องก้าวไปข้างหน้าพร้อมกัน มิฉะนั้นทั้งระบบจะแยกออกและล่มสลาย จริงๆ แล้ว ในยุคแรกของ bitcoin เรื่องนี้เกือบจะเกิดขึ้นมากกว่าหนึ่งครั้ง ไม่จำเป็นต้องพูดเลยว่า การเปลี่ยนแปลงใดๆ ในส่วนของโค้ดเหล่านั้นต้องทำอย่างระมัดระวังอย่างยิ่ง และมีเพียงไม่กี่คนในโลกที่เข้าใจระบบดีพอที่จะสามารถทำงานในพื้นที่เหล่านั้นได้อย่างปลอดภัย คนอื่นๆ ได้พยายามทำการเปลี่ยนแปลงต่อ consensus และบ่อยครั้งพวกเขาล้มเหลวอย่างน่าสยดสยอง
ดังนั้นในฐานะมือใหม่ จะทำอย่างไร? อืม แม้ว่าผมไม่ใช่ผู้เชี่ยวชาญ C++ แต่ผมสามารถจัดการกับ Python ได้ ซึ่ง Python เป็นภาษาที่ใช้เขียน bitcoin functional test framework ผมสามารถทำความสะอาดโค้ดบางส่วน แก้ไขบั๊กในการทดสอบ และค้นพบและแก้ไขบั๊กในโค้ดของผลิตภัณฑ์ ผ่านการทำงานกับการทดสอบ ผมค่อยๆ สามารถสัมผัสกับส่วนอื่นๆ ของ codebase — RPC server และ client, wallet, build system และอื่นๆ ซึ่งตอนนี้ผมสามารถมีส่วนร่วมได้บ้างแล้ว
นี่คือ code commit แรกของผมที่ถูก merged เข้า Bitcoin Core: การเพิ่มการทดสอบเพิ่มเติมสำหรับยูทิลิตี้ bitcoin-tx เป็นการมีส่วนร่วมที่ไม่มากนัก แต่เราทุกคนต้องเริ่มต้นจากที่ใดที่หนึ่ง!
เมื่อประสบการณ์ของผมกับ code base เพิ่มขึ้น พื้นที่ที่ผมสามารถทำงานได้ก็เพิ่มขึ้นเช่นกัน ทุกวัน รายการสิ่งที่ผมคิดว่าผมสามารถหรือควรทำงาน และจำนวนโครงการที่ผมคิดว่าคุ้มค่ากับเวลาของผม เพิ่มขึ้นแทนที่จะลดลง ด้วยอิสระเช่นนี้ เป็นเรื่องง่ายมากที่จะกระจายตัวเองมากเกินไป หรือหยิบขึ้นมาแล้วทิ้งโครงการไปเรื่อยๆ ผมเคยทำแบบนี้และพบว่ามันไม่น่าพอใจในที่สุด
นอกจากนี้ โครงการ open-source ไม่เหมือนกับงานปกติ ไม่มีสายการบริหารที่คอยควบคุมคุณและบังคับใช้กำหนดเวลาจากบนลงล่าง การมีส่วนร่วมใดๆ ที่คุณทำขึ้นอยู่กับคุณ และถ้าคุณเริ่มอะไรบางอย่างแล้วทิ้งมันไปในภายหลัง จริงๆ แล้วไม่มีใครอื่นสามารถทำอะไรเกี่ยวกับเรื่องนี้ได้ ทุกอย่างที่คุณมีส่วนร่วมเป็นไปโดยสมัครใจ
ผมพบว่ามันมีประโยชน์ที่จะเลือกโครงการระยะยาวที่ท้าทายมากขึ้นและมุ่งมั่นที่จะทำมันให้สำเร็จ ในช่วงไม่กี่เดือนแรก สำหรับผมโครงการนั้นคือการ refactor functional test framework ให้ใช้คลาส TestNode ซึ่งผมหวังเป็นอย่างยิ่งว่าจะเสร็จในอีกไม่กี่สัปดาห์ข้างหน้า มันเป็นการเดินทางที่ยาวนานและบางครั้งก็น่าหงุดหงิดที่จะมาถึงจุดนี้ แต่ผมคิดว่าในที่สุดแล้ว test framework จะอยู่ในสภาพที่ดีกว่ามากเมื่อผมเสร็จสิ้น เป้าหมายต่อไปของผมคือการผลักดัน wallet-server separation เริ่มจากตรงนี้ และวางรากฐานสำหรับการรวม hardware wallet อย่างเต็มรูปแบบใน v0.16 หรือ v0.17 การมีเป้าหมาย การแบ่งปันกับคนอื่น และการรับผิดชอบต่อตนเองเป็นการฝึกฝนที่มีประโยชน์มาก
พัฒนาเครื่องมือและเพิ่มทักษะและเทคนิคใหม่ๆ อยู่เสมอ เมื่อผมได้งานนี้ในเดือนตุลาคมปีที่แล้ว ผมรู้ว่าทักษะพื้นฐานของผมยังไม่ดีพอ ผมจึงอ่านหนังสือ Pro Git จากหน้าแรกถึงหน้าสุดท้าย รวมถึงคัมภีร์ vim, คู่มือเบื้องต้นของ tmux และภาพรวมของ Linux ปัจจุบันผมกำลังศึกษาเรื่อง Understanding Cryptography ต่อไปคือหนังสือเกี่ยวกับ Elliptic Curves และตามด้วยเรื่องของระบบ automake ผมจะอ่านหนังสือ C++ อีกครั้งเพื่อทบทวนทุกอย่างที่ผมลืมไป
(ข้อสังเกต: ถ้าคุณยังไม่เคยอ่านหนังสือ Pro Git และ Practical Vim ออกไปอ่านเดี๋ยวนี้เลย เวลาที่ใช้ในการเรียนรู้แนวคิดของ Git เช่น interactive rebase, rerere และ filter-branch และการทำให้ชีวิตการใช้ vim มีประสิทธิภาพมากขึ้นจะคืนกำไรให้คุณอย่างคุ้มค่า)
ผมยังริเริ่ม whitepaper Wednesday ที่ทำงาน แต่ละสัปดาห์หนึ่งในพวกเราจะอ่านและนำเสนอ whitepaper หรือหัวข้อทางเทคนิคที่น่าสนใจให้กับกลุ่ม
จังหวะของนวัตกรรมทางเทคนิคใน Bitcoin นั้นรวดเร็วมาก ดังนั้นเพื่อให้เป็นผู้มีส่วนร่วมที่มีประโยชน์และสามารถตามทันพัฒนาการล่าสุด เราทุกคนจำเป็นต้องเรียนรู้และฟื้นฟูทักษะของเราอย่างต่อเนื่อง
ผมไม่ใช่โปรแกรมเมอร์ C++ ที่เก่งที่สุด แต่ด้วยเวลาที่ใช้กับ Pro Git ผมค่อนข้างถนัดเรื่อง branches และ commits ผมสามารถช่วยแบ่งเบาภาระจากผู้มีส่วนร่วมมานานโดยการ rebase และจัดระเบียบ PR (เช่น ที่นี่และที่นี่) ถ้านั่นช่วยให้พวกเขามีเวลาทำงานกับเรื่องสำคัญกว่า มันก็เป็นการมีส่วนร่วมที่มีประโยชน์ ในอีกด้านหนึ่ง มีผู้มีส่วนร่วมครั้งแรกที่มักสะดุดกับแนวคิดพื้นฐานเช่นการ squash commits และ rebase PR การใช้เวลาช่วยเหลือคนเหล่านั้นเป็นการใช้เวลาที่ดีอย่างแน่นอนถ้ามันช่วยให้ PR ไม่ติดขัด และยิ่งดีกว่านั้นถ้ามันกระตุ้นให้ผู้มีส่วนร่วมกลับมาและมีส่วนร่วมกับโครงการอีกครั้ง
ในทางกลับกัน ผมประหลาดใจอย่างมีความสุขกับปริมาณความช่วยเหลือที่ผู้มีส่วนร่วมใน Bitcoin มานานได้เตรียมให้ผมและเวลาที่พวกเขาใช้สอนผมในสิ่งต่างๆ ผมรู้สึกตกตะลึงกับเวลาที่ sipa เต็มใจที่จะสอนและอธิบาย (ลองดูโปรไฟล์ Stack Exchange ของเขาถ้าคุณไม่เชื่อผม) Cory Fields ก็ใจกว้างกับเวลาของเขาอย่างมาก อธิบายระบบการ build ให้ผมแม้ว่าผมจะมีคำถามที่พื้นฐานที่สุด Matt Corallo, Suhas Daftuar และ Alex Morcos สมควรได้รับการกล่าวถึงเป็นพิเศษสำหรับการช่วยให้ผมเริ่มต้นการเดินทางในฐานะนักพัฒนา Bitcoin ในเดือนกันยายนปีที่แล้วและช่วยให้ผมเข้าใจโค้ดและวิธีการเป็นผู้มีส่วนร่วมที่มีประโยชน์
Bitcoin มีชื่อเสียงที่ไม่เป็นธรรมว่าเป็นสภาพแวดล้อมที่ไม่เป็นมิตรสำหรับผู้มีส่วนร่วมใหม่ สิ่งหนึ่งที่ผู้มีส่วนร่วมทุกคนมีร่วมกันคือพวกเขาให้ความสำคัญกับโครงการอย่างมาก ถ้าคุณต้องการช่วยเหลืออย่างจริงใจและเคารพเวลาของพวกเขา ส่วนใหญ่จะยินดีที่จะแบ่งปันความเชี่ยวชาญกับคุณ
ส่วนหนึ่งของการเป็นผู้มีส่วนร่วมที่มีประโยชน์ในโครงการ open source คือการเขียนโค้ดที่ดี แต่ยังมีอีกหลายอย่าง: การเข้าใจว่าคนอื่นต้องการอะไรจากโครงการและทำงานในทิศทางเดียวกันกับพวกเขาแทนที่จะต่อต้านพวกเขา; การชักชวนให้คนมา review และ merge PR ของคุณ; การทำให้การสื่อสารใน PR และ review ของคุณชัดเจน, น่าเชื่อถือและเคารพ; การจัดโครงสร้าง PR ของคุณเพื่อให้งานของผู้ review ง่ายขึ้น; และการสร้างความสัมพันธ์ที่ดีกับผู้มีส่วนร่วมอื่นๆ เป็นเพียงบางส่วน พัฒนาทักษะเหล่านั้น การเขียนโค้ดที่ยอดเยี่ยมไม่มีประโยชน์ถ้ามันกำลังทำบางสิ่งที่คนไม่ต้องการในโครงการ หรือถ้าคุณไม่สามารถให้ใครมา review มัน สิ่งนี้มีความสำคัญอย่างยิ่งถ้าคุณเป็นผู้มาใหม่และยังไม่ได้สร้างชื่อเสียงในโครงการ - พยายามทำให้มันง่ายสำหรับคนที่จะ review และ ACK PR ของคุณและคุณมีแนวโน้มที่จะได้รับการตอบรับที่ดี
รายการของผมไม่สมบูรณ์และไม่ใช่กฎเกณฑ์ Open source เป็นวงกว้าง และทุกคนมีส่วนร่วมในแบบของตัวเอง
ถ้าคุณต้องการแนวทางที่ปฏิบัติได้มากขึ้นเกี่ยวกับวิธีเริ่มต้นมีส่วนร่วมกับ Bitcoin Core, Jimmy Song ได้เขียนบทนำที่ยอดเยี่ยม
โปรดติดต่อผมถ้าคุณมีความคิดหรือข้อเสนอแนะของคุณเอง หรือถ้าคุณต้องการความช่วยเหลือในการเริ่มต้น ผมยินดีเสมอที่จะช่วยให้คนได้ merge commit แรกของพวกเขา!
โพสต์ดั้งเดิมที่ https://bitcointechtalk.com/