In this post, you will learn what the two main languages used in Status are, how to learn them, how to build Status, & finally how to find tasks to work on.
Status is largely written in two languages: Clojurescript & Golang and builds on React Native for UI. I'll talk about the rational behind these design decisions and link to offsite resources on learning each of these technologies.
Status (formerly known as Syng) has always aspired to have a single, unified codebase for multi-platform development. This is not so easy to achieve, as many of the non-web-based solutions out there allow you to have a semi-single codebase, but you find yourself creating a lot of seperate logic for handling user interfaces on each platform - Status is 80% frontend code and this presents a problem. We tried Xamarin & Java (EthereumJ was the first implementation we got running on Android & iOS - via RoboVM), and we quickly discovered this problem.
Mobile apps built on web-based technologies, such as those done in Cordova, are great for short-term projects or mvp, but you will quickly run into performance issues on resource-limited devices and may need to rewrite you app. In our tests displaying webview DApps in a chat history with iFrames and all the other bells and whistles we wanted turned out to be a futile effort.
That limited our options to choosing between NativeScript & React Native. We chose React Native because it is more mature and is being used in production for popular apps like Facebook, Instagram, Airbnb, Baidu & Discord. This gave us the impression that this framework was here to stay with many Fortune 500 companies invested in its continuance.
At this point all we had to do is merge Material & iOS design into our unique look'and'feel so that we could minimise the amount of Android & iOS specific code. Our amazing designer Andrei Mironov elegantly solved the rest of that puzzle.
React Native Learning Resources
If you would like to start learning React Native, check out these resources:
“Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.” — Eric Raymond.
To read more quotes on Lisp read Lisp, made with secret alien technology.
There's alot of resources online about why learning Lisps are so great. For us, it's largely about culture; we like the way Lispers think. We want functional programming, macros, homoiconic code and the flexibility that comes with a simple, unstructured language in which to think. The benefits of this become more apparent in later stage development, where functional language allows us to perform rewrites more easily, isolate many bugs to specific functions, as well as enforcing correct coding. Also, I prefer reading it.
Moreover, with hiccup, working with React Native markup becomes a dream.
Clojurescript Learning Resources
If you would like to start learning Clojurescript, check out these resources:
- Clojurescript Community Resources
- Clojurescript Unraveled Book (Free)
- /r/clojure & /r/clojurescript
Of all the Ethereum implementations
go-ethereum has received the most love and implements the newest and best features. Without
go-ethereum we couldn't use the light client protocol and Status would not be possible. We will also get access to Swarm the fastest. We consume
go-ethereum as a library in status-go.
- re-natal README.md
re-frame is simple but expressive library for writing Single Page Applications in ClojureScript, using Reagent. It is a functional framework for reactive 'MVC-style' applications. To learn more:
- re-frame README.md
- re-frame docs
- A Noob's walkthrough of a re-frame Application
- The Angular Phonecat tutorial in re-frame
Reagent provides a minimalistic interface between ClojureScript and React. It allows you to define efficient React components using nothing but plain ClojureScript functions and data, that describe your UI using a Hiccup-like syntax. The goal of Reagent is to make it possible to define arbitrarily complex UIs using just a couple of basic concepts, and to be fast enough by default that you rarely have to care about performance.
- Reagent website
- Reagent README.md
- Building Single Page Apps with Reagent
- You should be using Figwheel & Reagent. Here's why
- Reagent Rocks
Finding issues to work on
So by now you should have a general sense of the tech that goes into Status, managed to get Status built & running and want to find something to sink your teeth into.
The best place to look for tasks to work on is our Github Issues. We've labelled the tasks by our estimated difficulty.
Click the labels below to see what is available.
These are tickets we believe anyone willing to learn Clojurescript can handle. They involve minor UI and localisation changes. Even though they may seem minor that have a huge impact on the usability of Status.
Beginner too easy and your Clojure-fu up to par? Time to level up! These issues require a slightly deeper understanding of what Status is trying to accomplish; an understanding of Ethereum; and more communication and intimacy in the Slack as they are interdependent tasks. They involve things like setting up UI tests, fixing nastier bugs and making decisions that will have a real impact on how Status behaves and functions.
These issues are really there for people deeply into Ethereum, Core Contributors and people who believe in Status and have the skills to make magic happen.