I have learned a lot about how bitcoin works. Now I want to contribute to bitcoin source code, how can I do this?
Of course, bitcoin is open source so anyone could go to the bitcoin repo here and start making commits. Most users in this community have probably figured out by now that I am not a professional computer scientist (at best I have strong math skills and experience with imperative programming - python, R). This question is subjective but there are several users in this community who are top contributors to Bitcoin Core and likely have extensive knowledge regarding the source code and the community surrounding it. My hope is that an answer to this question could serve as an extensive list of resources and advice for a non-professional looking to get involved in contributing to Bitcoin Core. Topics to address could include:
- Learning C++ - concepts extensively used in bcc that must be mastered/concepts rarely used in bcc that could be brushed over/ resources for learning C++
- Understanding the code structure - in older versions of bcc there was a main.cpp that seemed a logical place to start. In bcc 0.21.0 I no longer see a 'main' file, and can actually find very few files where I can relate the code back to bitcoin concepts I am aware of. Not sure where to start.
- Community/BCC Goals - Once I have some C++ skills and code structure knowledge how will I even be able to find things that need development or contributions in bcc? Obviously I am not expecting to be writing entire libraries for a new elliptic curve, or introducing the next space saving concept like segwit, so how can I find a way appropriate for my ability level to help out? Where is there community talking about what could be done? I imagine BIPS (Bitcoin Improvement Proposals) will come into play here. And even better yet, once I had some skills, where could I find a possible mentor!
- Full Node/ Pruned Node - Will running a full node / pruned node be imperative in any way to this journey (perhaps for testing, etc)? Are there smaller projects or exercises once could start with that would help reach the goal of being a bcc developer?
Any other advice, resource, links certainly welcome. I think once a person had a good understanding of those topics above they could get started and then continue using this site for more specific technical questions, in its usual way.