📙
Learning Bitcoin Core
bitcoincore reviewsEdit
  • 📙 [TH] การมีส่วนร่วมใน Bitcoin Core ( Github )
    • [EN] Contributing to Bitcoin Core ( Github )
  • คำนำอย่างละเอียดถึงการพัฒนา Bitcoin Core ( Jimmy Song )
  • การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว ( John Newbery )
  • การเข้าร่วมพัฒนา Bitcoin Core ( Amiti Uttarwar )
  • How to Review Pull Requests in Bitcoin Core ( Jon Atack )
  • ความเข้าใจด้านเทคนิคของ Bitcoin ( Pierre Rochard )
  • ภาษาพื้นฐานใน Bitcoin Core 👾💬🤖
  • RPC หรือ Remote Procedure Call 🏦🌐⚙️
  • PSBT / Mining & Nonce / SHA-256 📦🎲#️⃣
  • Candidate Block / Chain Tip / Merkle Root / GBT & Stratum Protocol / SPV Client 🎰⛓️🤿🫚📱
  • OP_ ต่างๆ / Bitcoin Script / Hash Preimage / BOLT / Taproot / Eltoo / STARK / ZKP 📜⚡️🐺🌳
  • ลักษณะของ VAULT เมื่อเป็นผลิตภัณฑ์ 🏦🔏🗝️⏳
  • การแก้แค้นของ Junior Developer❤️‍🔥🐦‍⬛💻
Powered by GitBook
On this page
  • การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว
  • เริ่มจากเล็กๆ
  • รับผิดชอบต่อตนเอง
  • เพิ่มความคมให้เครื่องมือ
  • เสนอความช่วยเหลือและขอความช่วยเหลือ
  • เป็นผู้มีส่วนร่วม ไม่ใช่นักพัฒนา
  • สนใจไหม?

การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว ( John Newbery )

แปลโดย : Claude 3.7 Sonnet / source : https://johnnewbery.com/contributing-to-bitcoin-core-a-personal-account/

Previousคำนำอย่างละเอียดถึงการพัฒนา Bitcoin Core ( Jimmy Song )Nextการเข้าร่วมพัฒนา Bitcoin Core ( Amiti Uttarwar )

Last updated 1 month ago

การมีส่วนร่วมใน Bitcoin Core ประสบการณ์ส่วนตัว

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/​​​​​​​​​​​​​​​​

Page cover image