Skip to content

Instantly share code, notes, and snippets.

@brson
Last active April 18, 2022 11:00
Show Gist options
  • Save brson/38d0c2f66fa972a3bd4458f5d2e3efcf to your computer and use it in GitHub Desktop.
Save brson/38d0c2f66fa972a3bd4458f5d2e3efcf to your computer and use it in GitHub Desktop.

Hi, everyone! Super happy to reach out to you! As a Rustacean, I’ll be grateful for your advice. Due to the war in Ukraine, I’m working on becoming a junior Rust software engineer ASAP. As an anti-corruption activist, I have to relocate from Russia. Because of the war, I’ve lost my family & my livelihood.

But I’m not here to tell a sob story, I’m here to ask the practical questions. I could start my new career as a JavaScript front end guy, but JS doesn't suit my personality, while Rust does. With Rust, I’ll love my work, but with JS — less so.

Unless it’s impossible to go from 0 to a Rust junior job in 1-2 years or faster, I would do everything to choose Rust over JS.

Questions:

  1. Which Blockchain ecosystem should I choose? NEAR? Solana? Polkadot (Ink)? Cosmos? Holochain? Priority #1 is — in which ecosystem I’ll meet the kindest&smartest colleagues? Priority #2 is — which ecosystem has the best learning resources for beginners? (Though, if there’s no great learning resources, but there’s a feasible path for a beginner to learn the ropes via contributing to open source or something, I’m willing to work with the maximum ardency). My offline friend, a rustacean, Andrey Lesnikov (https://github.com/ozkriff), recommended Near to me, because his friend, Alexey Kladov (https://matklad.github.io/resume/), a guy responsible for the Rust Analyzer, works at Near.

  2. As a beginner, is it realistic for me to work on the runtimes? I tend to choose runtimes over smart contracts, because, it feels, Rust is a much better fit for the runtimes.

  3. Should I 100% concentrate on Blockchain projects for now, or is making a little, simple text quest (a modern day Infocom adventure, inspired by the Brian Moriarty’s game “Trinity”) a great first project, given the opportunity cost, & the fact that I wrote a scenario for that quest already?

  4. Where and how should I contribute to the open source projects?

  5. What should be the ratio between my personal projects for a portfolio and the open source ones? Mostly do personal projects or mostly do the open source?

  6. What books, tutorials and other learning resources would you recommend?

  7. What approach to project-making / learning would you recommend? Lots of small complete projects, from the simplest to the gradually more complex? If so, is there a list somewhere with a progression like “do a simple Blockchain project X, then a slightly harder project Y, then a somewhat harder project Z”?


My response

First of all, let me say that even though I know a little about a lot of blockchains, my experience is broad, not deep. I am not an expert in any of these projects.

I like to help new Rust programmers, but everybody's experience is different, and what works for me might not work for you.

Which blockchain?

My gut response: the one that inspires you. That's the one that will keep you interested and coming back. It can take time to do the research, but e.g. I have dabbled in several and have some idea of my own preferences.

Working through any project's tutorials, while asking for help on their developer chat will give you opinions.

You've been suggested NEAR, and it is a good choice for beginners for several reasons:

  • It has a simple smart contract model that is relatively easy to understand, and things you might learn about Solidity cary over well.
  • It is a single-chain runtime that is less complicated than many-chain toolkits like Substrate (Polkadot).
  • It has a strong focus on developer experience and documentation.
  • It is a smaller project with room for you to make an impact.

They also just got a big new round of funding. It's not yet in the same league as Polkadot or Solana, but it is gaining traction and growing.

Alexey Kladov is super smart and nice, and I know he has been satisfied with NEAR - NEAR has many Russian and Ukranian employees and has gone to great lengths to help them.

That said, my experience with NEAR is minimal, and I have no experience in their community.

Cosmos is a great ecosystem with many opportunities, but it is mostly their smart contracts written in Rust - the runtime is in Go. That said, there's a project called tendermint-rs that is producing a compatible runtime in Rust and could be fun to get involved with.

Polkadot and Solana are both huge and will continue to present many opportunities. I think they are unideal choices for a Rust beginner though - Polkadot because Substrate is an extremely complex and configurable system; Solana because its programming model is challenging to understand.

Polkadot's developer documentation is a pretty enjoyable read though.

Polkadot has many smart people working there, and they have a lot of experience with fostering open source community, but how approachable their development community is I can't really say.

I can say that I have found contributing to Solana a bit alienating - it is developed by a small in-group of employees, and their process is missing a community focus. Filed issues don't get triaged. Questions don't get answered sufficiently.

I haven't contributed to NEAR but them having Alexey is a +1 for me - if nothing else you can count on him to be a good role model. I was impressed by their documentation and developer tooling when I last tried it over a year ago.

I don't know enough about Holochain to speak to it.

For my personal taste I find that the larger the project the more alienated I feel in it. Hard to find a unique role that feels meaningful in the ocean of personalities.

Within the Polkadot ecosystem it may be prudent to pick a single chain, where there is a smaller community, and get involved there. The Gear project is one that I know people at and has good prospects.

Personally, I might look for a smaller project that has strong prospects. Some smaller Rust blockchains that are interesting, or well-funded, and may provide continuing developer opportunities over a long term include:

  • Aptos and Sui - Diem successors, by Diem team members. Diem's Move language seems to have legs with at least 6 blockchains adopting it.
  • Aleo - a chain based on zero-knowledge proofs. Funded by a16z
  • Dfinity (ICP) - they had a rough launch and took a big reputational hit, but have an interesting programming model and strong VC funding.

I don't know much about Concordium but several people I respect appear to be associated with it and I know they actively focus on community management.

There are some other blockchains with momentum that use Rust, but aren't primarily written in Rust, like Elrond, and the Cosmos ecosystem.

As a beginner, is it realistic for me to work on the runtimes?

Yes. Blockchain runtimes are filled with interesting systems-level problems to solve, but they are also just big codebases that need maintenance like any other.

A great way for junior developers to get involved in a project is to find the little corners that need polish that the full-timers are too preoccupied to bother with. Things like API documentation. Without fail when I read a big Rust codebase I find many places where the code just isn't great and I can submit simple patches to fix things, and this process often leads to further work. Some of this work may require deep knowledge of e.g. how unsafe Rust works, but some doesn't. An example of something that has born lots of fruit for me on unfamiliar codebases: get the test suite running under miri, the dynamic analysis tool, then fix the bugs it inevitably finds in unsafe code.

Find a niche of repeatable tasks and do them over and over until they are the pride of the project, e.g.

  • make all the errors have great and consistent descriptions
  • make sure every function has a doc example
  • make all the test work under miri or other analyzers
  • explore every corner of the CLI tools and make sure they are polished and consistent and produce actionable error messages

Find a niche. That's the key to getting involved in a project.

Should I 100% concentrate on Blockchain projects for now, etc?

My personal rule is to always do the thing that holds my attention and imagination. If you enjoy making a game do it.

I tend to have many projects going at once and alternate between them as my interest changes. I have a hard time focusing one project consistently. Everybody is different though.

Where and how should I contribute to the open source projects?

Run the project, perhaps by working through its tutorials, and when you see a bug, fix it. That includes in the documentation. This is how most of my contributions to any project start.

Blockchain runtimes are actually a great place to contribute - so many of those in a blockchain community are looking to make money off of the platform they are interested in, but far fewer care to contribute directly to the platform. There's a certain glamor in creating a DAO, making grandiose marketing, leading a Discord community, getting a following on twitter, launching a dapp. Less so in the nitty-gritty details of building the platform that makes that all possible.

So there are opportunities to be one of those willing to dig in and do the infrastructural engineering work.

Pick a bug on the issue tracker and try to fix it. Join the developer chat and ask and answer questions so people know you as part of the community.

What should be the ratio between my personal projects for a portfolio and the open source ones?

For employment purposes it doesn't matter much. Having an active GitHub profile does look good though. If your github profile shows lots of green squares and lots of events that looks better than nothing. Activity on private repos is reflected in your profile, though not as well us public activity.

Personal projects can be open source.

When I want to get paid to work on a project though, I focus on that project and integrating into its community.

What books, tutorials and other learning resources would you recommend?

I'm not a great source for this. I learn piecemeal and through trail and error. There are many good and commonly recommended resources for learning Rust. Here's a good start: https://lborb.github.io/book. I'm not familiar with general blockchain learning material. I usually read the developer docs of any project I'm looking at front to back. Polkadot's are good, I recall NEAR's being good.

What approach to project-making / learning would you recommend?

This is surely a personal matter. I find that I am a slow learner and fail over and over, building up an incomplete understanding of something. Eventually I'll have some breakthrough realization that now I am finally a master of the topic. Then 5 years later I have another realization that no I am not.

I'd say I hack on at least 10 projects for every one that goes somewhere.

There are some progressive smart contract tutorials, like https://cryptozombies.io/ for Solidity. There may be similar for other projects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment