#3: Community Dev Instructions Jan 17, 2023
A week ago I asked the community in Telegram if there was anyone who wanted to do some basic Golang development. I got a pretty good response which reinforces one of my beliefs on coding/development.
I believe most people are capable of learning how to read and write code. For a beginner, the difficult part is finding approachable yet meaningful ways to apply and further mature these new skills. Starting a new project from scratch can be rather daunting and a bit more involved than writing a function. One must understand not only a language's standard library but also its ecosystem. Which framework to use for X? How should I build/distribute my project? It can be useful to follow along a tutorial to develop and build a full dummy application, but it is still rather challenging to create something new, useful, and ultimately a motivating use of time.
When you get hired at a company, you'll get assigned tasks to work on and sometimes even receive training. Hopefully a good project manager or product owner can set priorities well. Open source collaboration has its own challenges. Rarely are there enough resources for a willing but beginner contributor to easily make a contribution or even know where to start.
Decentralized networks are about removing the need to trust. We run our own nodes to verify the state of the network. But without being able to read and understand the code that powers the node, a user must trust the wider community to have done its due diligence.
If we believe in self-sovereignty for all, we must make efforts to lower the barrier of doing your own due diligence. Our code must be comprehensible and well commented. Our community must be welcoming and accommodating to new developers.
The HTLC work for the embedded contract is nearing completion. A little bit of cleanup is needed but the code is pretty much ready. But to move forward and deploy it onto alphanet we need wider community testing and exposure.
We need tooling to spin up testnets and onboard people onto them. We need clients that can work with testnets. I began working on these things myself but was lamenting that it would be something that I would possibly have to maintain on my own for the long term.
So I want to explicitly make an effort to ensure that the tooling can be maintained by the community. I want to give an opportunity for aspiring contributors to have a small and well defined scope that they can be confident in delivering. I hope that many will be able to build on that confidence and continue to make meaningful contributions.
I really don't want to become "the coordinator" for our entire community. I don't think we need one and honestly our space is too dynamic for one. We need many, often conflicting, opinions and directions to compete for mind-share.
But I am happy to chart my own path and enable others to join and help me, especially for those who are sincere and willing to learn.
Our reference node implementation is written in Go. I ported the sdk to Go, and think it would make sense to have a robust tooling set in Go as well. I think a good place to start is porting the znn-cli like how CryptoFish did with C#. I think many people will feel empowered to use a wallet/client that they have contributed to. Then we can port the node controller and make it deploy our testnet nodes, and then move onto other tooling. These tools don't require much knowledge about cryptography or protocol design so they should be much more approachable.
I don't intend on teaching basic golang syntax etc. I think most people are capable enough to learn that on their own. But what I can do is gather people who want to learn, and provide just enough structure and guidance so that we can build something meaningful as a group.
During this upcoming week I will setup the repository and project structure on GitHub. I will also flesh out some initial small/well-scoped issues/tickets for people to pick up and maybe an example to follow. I will review and accept merge requests. After we get going, I will encourage everyone to make issues and help request/define features etc. Long term I will seek to add some other community members as project maintainers. I hope that we can kick-start a culture that can turn aspiring developers into productive community members.
For people who want to participate: this week please just get a development environment setup. Install Golang, and a code editor (https://code.visualstudio.com/ is popular). See if you can compile go-zenon. Download and test out the existing znn-cli. Read through its code if you can. Our primary communication method will be through GitHub, but feel free to form sub-groups on whatever channels you prefer. Help each other! And if you get stuck, you can reach out to me. I will set the initial structure, but the goal is for the entire group to support each other