If you learn primarily by coding up your own projects, here are some ideas to get started:</p>\n<ul>\n<li>Build your own wallet. It can be a be a web, mobile app or desktop app. </li>\n<li>Create your own ERC-20 token and deploy it on the test net. </li>\n<li>Modify crypto kitties (dogs, tanks, zombies…) and deploy it on the test net.</li>\n</ul>\n<h2>Looking Forward</h2>\n<p>In its current state, yes, blockchain development is messy. No, there aren’t clean frameworks and tools analogous to those that exist for modern web development. But why not see the blockchain’s nascent state as an opportunity to impact a paradigm-shifting technology?</p>\n<p>On the blockchain, you don’t need to deploy any centralized servers, which means that there’s no single point of failure. If your whole stack is decentralized, there is no trusted third party involved making it censorship resistant, and your database is publicly verifiable. As the new paradigm offers opportunity to publicly share data, we observe a supreme advantage to decentralizing databases. This is the future we’re building towards on the Blockchain— where information and power are distributed systematically by cutting out the middleman.</p>\n<p><a href=https://www.ycombinator.com/"https://news.ycombinator.com/item?id=16107597\%22>Comment on Hacker News</a>.</p>\n<hr />\n<p><em>Thanks to Ben Yu (Stream) and Brandon Millman (0x) for lending their time to be interviewed, and thanks to Niharika Bedekar, Craig Cannon, Claire Shu for reading drafts of this post.</em></p>\n<!--kg-card-end: html-->","comment_id":"1101697","feature_image":null,"featured":false,"visibility":"public","email_recipient_filter":"none","created_at":"2018-01-09T03:28:17.000-08:00","updated_at":"2022-02-03T16:40:50.000-08:00","published_at":"2018-01-09T03:28:17.000-08:00","custom_excerpt":"If you’re here, we assume that you’re a developer/hacker who’s intrigued by the blockchain. You’re convinced that you understand how it works and now you’re itching to figure out what the blockchain means for you and your developer skill set.","codeinjection_head":null,"codeinjection_foot":null,"custom_template":null,"canonical_url":null,"authors":[{"id":"61fe29e3c7139e0001a710cf","name":"Vincent Chen","slug":"vincent-chen","profile_image":"/blog/content/images/2022/02/vincent-chen.jpg","cover_image":null,"bio":"Vincent Chen is a student at Stanford University studying Computer Science. He is also a Research Assistant at the Stanford AI Lab.","website":null,"location":null,"facebook":null,"twitter":null,"meta_title":null,"meta_description":null,"url":"https://ghost.prod.ycinside.com/author/vincent-chen/"}],"tags":[{"id":"61fe29efc7139e0001a7118f","name":"Blockchain","slug":"blockchain","description":null,"feature_image":null,"visibility":"public","og_image":null,"og_title":null,"og_description":null,"twitter_image":null,"twitter_title":null,"twitter_description":null,"meta_title":null,"meta_description":null,"codeinjection_head":null,"codeinjection_foot":null,"canonical_url":null,"accent_color":null,"url":"https://ghost.prod.ycinside.com/tag/blockchain/"},{"id":"61fe29efc7139e0001a7118d","name":"Paths","slug":"paths","description":null,"feature_image":null,"visibility":"public","og_image":null,"og_title":null,"og_description":null,"twitter_image":null,"twitter_title":null,"twitter_description":null,"meta_title":null,"meta_description":null,"codeinjection_head":null,"codeinjection_foot":null,"canonical_url":null,"accent_color":null,"url":"https://ghost.prod.ycinside.com/tag/paths/"}],"primary_author":{"id":"61fe29e3c7139e0001a710cf","name":"Vincent Chen","slug":"vincent-chen","profile_image":"https://ghost.prod.ycinside.com/content/images/2022/02/vincent-chen.jpg","cover_image":null,"bio":"Vincent Chen is a student at Stanford University studying Computer Science. He is also a Research Assistant at the Stanford AI Lab.","website":null,"location":null,"facebook":null,"twitter":null,"meta_title":null,"meta_description":null,"url":"https://ghost.prod.ycinside.com/author/vincent-chen/"},"primary_tag":{"id":"61fe29efc7139e0001a7118f","name":"Blockchain","slug":"blockchain","description":null,"feature_image":null,"visibility":"public","og_image":null,"og_title":null,"og_description":null,"twitter_image":null,"twitter_title":null,"twitter_description":null,"meta_title":null,"meta_description":null,"codeinjection_head":null,"codeinjection_foot":null,"canonical_url":null,"accent_color":null,"url":"https://ghost.prod.ycinside.com/tag/blockchain/"},"url":"https://ghost.prod.ycinside.com/building-for-the-blockchain/","excerpt":"If you’re here, we assume that you’re a developer/hacker who’s intrigued by the blockchain. You’re convinced that you understand how it works and now you’re itching to figure out what the blockchain means for you and your developer skill set.","reading_time":8,"access":true,"og_image":null,"og_title":null,"og_description":null,"twitter_image":null,"twitter_title":null,"twitter_description":null,"meta_title":null,"meta_description":null,"email_subject":null,"frontmatter":null,"feature_image_alt":null,"feature_image_caption":null},"mentions":[],"related_posts":[{"id":"61fe29f1c7139e0001a71a7d","uuid":"de61cb6f-3e7e-43eb-94b4-e999d5c380ec","title":"Learning Math for Machine Learning","slug":"learning-math-for-machine-learning","html":"<!--kg-card-begin: html--><p><em>Vincent Chen is a student at Stanford University studying Computer Science. He is also a Research Assistant at the Stanford AI Lab.</em></p>\n<hr />\n<p>It’s not entirely clear what level of mathematics is necessary to get started in machine learning, especially for those who didn’t study math or statistics in school.</p>\n<p>In this piece, my goal is to suggest the mathematical background necessary to build products or conduct academic research in machine learning. These suggestions are derived from conversations with machine learning engineers, researchers, and educators, as well as my own experiences in both machine learning research and industry roles.</p>\n<p>To frame the math prerequisites, I first propose different mindsets and strategies for approaching your math education outside of traditional classroom settings. Then, I outline the specific backgrounds necessary for different kinds of machine learning work, as these subjects range from high school-level statistics and calculus to the latest developments in probabilistic graphical models (PGMs). By the end of the post, my hope is that you’ll have a sense of the math education you’ll need to be effective in your machine learning work, whatever that may be!</p>\n<p>To preface the piece, I acknowledge that learning styles/frameworks/resources are unique to a learner’s personal needs/goals— your opinions would be appreciated in <a href=https://www.ycombinator.com/"https://news.ycombinator.com/item?id=17664084\%22>the discussion on HN</a>!</p>\n<p><strong>A Note on Math Anxiety</strong><br />\nIt turns out that a lot of people — including engineers — are scared of math. To begin, I want to address the myth of “being good at math.”</p>\n<p>The truth is, people who are good at math have lots of practice doing math. As a result, they’re comfortable being stuck while doing math. A student’s mindset, as opposed to innate ability, is the primary predictor of one’s ability to learn math (as shown by <a href=https://www.ycombinator.com/"https://www.theatlantic.com/education/archive/2013/10/the-myth-of-im-bad-at-math/280914//">recent studies</a>).</p>\n<p>To be clear, it will take time and effort to achieve this state of comfort, but it’s certainly not something you’re born with. The rest of this post will help you figure out what level of mathematical foundation you need and outline strategies for building it.</p>\n<h2>Getting Started</h2>\n<p>As soft prerequisites, we assume basic comfortability with <a href=https://www.ycombinator.com/"http://cs229.stanford.edu/section/cs229-linalg.pdf/">linear algebra/matrix calculus</a> (so you don’t get stuck on notation) and introductory <a href=https://www.ycombinator.com/"http://cs229.stanford.edu/section/cs229-prob.pdf/">probability. We also encourage basic programming competency, which we support as a tool to learn math in context. Afterwards, you can fine-tune your focus based on the kind of work you’re excited about.</p>\n<p><strong>How to Learn Math Outside of School</strong> I believe the best way to learn math is as a full-time job (i.e. as a student). Outside of that environment, it’s likely that you won’t have the structure, (positive) peer pressure, and resources available in the academic classroom.</p>\n<p>To learn math outside of school, I’d recommend study groups or lunch and learn seminars as great resources for committed study. In research labs, this might come in the form of a reading group. Structure-wise, your group might walk through textbook chapters and discuss lectures on a regular basis while dedicating a Slack channel to asynchronous Q&A.</p>\n<p>Culture plays a large role here — this kind of “additional” study should be encouraged and incentivized by management so that it doesn’t feel like it takes away from day-to-day deliverables. In fact, investing in peer-driven learning environments can make your long-term work more effective, despite short-term costs in time.</p>\n<p><strong>Math and Code</strong><br />\nMath and code are highly intertwined in machine learning workflows. Code is often built directly from mathematical intuition, and it even shares the syntax of mathematical notation. In fact, modern data science frameworks (e.g. <a href=https://www.ycombinator.com/"http://www.numpy.org//">NumPy) make it intuitive and efficient to translate mathematical operations (e.g. matrix/vector products) to readable code.</p>\n<p>I encourage you to embrace code as a way to solidify your learning. Both math and code depend on precision in understanding and notation. For instance, practicing the manual implementation of loss functions or optimization algorithms can be a great way to truly understanding the underlying concepts.</p>\n<p>As an example of learning math through code, let’s consider a practical example: implementing backpropagation for the ReLU activation in your neural network (<a href=https://www.ycombinator.com/"https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b/">yes, even if Tensorflow/PyTorch can do this for you!</a>). As a brief primer, backpropagation is a technique that relies on the chain rule from calculus to efficiently compute gradients. To utilize the chain rule in this setting, we multiply upstream derivatives by the gradient of ReLU.</p>\n<p>To begin, we visualize the <a href=https://www.ycombinator.com/"https://en.wikipedia.org/wiki/Rectifier_(neural_networks)/">ReLU activation, defined:</p>\n<p><a href=https://www.ycombinator.com/"https://ghost.prod.ycinside.com/content/images/wordpress/2018/08/Math-for-ML-1.png/">
here.
Generally, statistics and linear algebra can be employed in some way for each of these questions. However, to arrive at satisfactory answers often requires a domain-specific approach. If that’s the case, how do you narrow down the kind of math you need to learn?</p>\n<p><strong>Define Your System</strong><br />\nThere is no shortage of resources (e.g. <a href=https://www.ycombinator.com/"http://scikit-learn.org/stable//">scikit-learn for data analysis, <a href=https://www.ycombinator.com/"https://keras.io//">keras for deep learning) that will help you jump into writing code to model your systems. In doing so, try to answer the following questions about the pipeline you need to build:</p>\n<ol>\n<li>What are the inputs/outputs of your system? </li>\n<li>How should you prepare your data to fit your system? </li>\n<li>How can you construct features or curate data to help your model generalize? </li>\n<li>How do you define a reasonable objective for your problem?</li>\n</ol>\n<p>You’d be surprised — defining your system can be hard! Afterwards, the engineering required for pipeline-building is also non-trivial. In other words, building machine learning products requires significant amounts of heavy lifting that don’t require a deep mathematical background.</p>\n<p><strong>Resources</strong><br />\n• <a href=https://www.ycombinator.com/"https://developers.google.com/machine-learning/guides/rules-of-ml//">Best Practices for ML Engineering</a> by Martin Zinkevich, Research Scientist at Google</p>\n<p><strong>Learning Math as You Need It</strong><br />\nDiving headfirst into a machine learning workflow, you might find that there are some steps that you get stuck at, especially while debugging. When you’re stuck, do you know what to look up? How reasonable are your weights? Why isn’t your model converging with a particular loss definition? What’s the right way to measure success? At this point, it may be helpful to make assumptions about the data, constrain your optimization differently, or try different algorithms.</p>\n<p>Often, you’ll find that there’s mathematical intuition baked into the modeling/debugging process (e.g. selecting loss functions or evaluation metrics) that could be instrumental to making informed, engineering decisions. These are your opportunities to learn!</p>\n<p>Rachel Thomas from <a href=https://www.ycombinator.com/"http://www.fast.ai//">Fast.ai is a proponent of this “on-demand” method — while educating students, she found that it was more important for her deep learning students to get far enough to become excited about the material. Afterwards, their math education involved filling in the holes, on-demand.</p>\n<p><strong>Resources</strong><br />\n• Course: <a href=https://www.ycombinator.com/"http://www.fast.ai/2017/07/17/num-lin-alg//">Computational Linear Algebra</a> by fast.ai<br />\n• YouTube: <a href=https://www.ycombinator.com/"https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw/">3blue1brown: Essence of <a href=https://www.ycombinator.com/"https://www.youtube.com/watch?v=kjBOesZCoqc&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab\%22>Linear Algebra</a> and <a href=https://www.ycombinator.com/"https://www.youtube.com/watch?v=WUvTyaaNkzM&list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr\%22>Calculus
Linear Algebra Done Right</a> by Axler<br />\n• Textbook: <a href=https://www.ycombinator.com/"https://web.stanford.edu/~hastie/ElemStatLearn//">Elements of Statistical Learning</a> by Tibshirani et al.<br />\n• Course: <a href=https://www.ycombinator.com/"http://cs229.stanford.edu/syllabus.html#opt\">Stanford’s CS229 (Machine Learning) Course Notes</a></p>\n<h2>Math for Machine Learning Research</h2>\n<p>I now want to characterize the type of mathematical mindset that is useful for research-oriented work in machine learning. The cynical view of machine learning research points to plug-and-play systems where more compute is thrown at models to squeeze out higher performance. In some circles, <a href=https://www.ycombinator.com/"https://arxiv.org/ftp/arxiv/papers/1801/1801.00631.pdf/">researchers remain skeptical</a> that empirical methods lacking in mathematical rigor (e.g. certain deep learning methods) can carry us to the holy grail of human-level intelligence.</p>\n<p>It’s concerning that the research world might be building on existing systems and assumptions that don’t extend our fundamental understanding of the field. Researchers need to contribute primitives— new, foundational building blocks that can be used to derive entirely new insights and approaches to goals in the field. For instance, this might mean rethinking building blocks like Convolutional Neural Networks for image classification, as Geoff Hinton, “the <a href=https://www.ycombinator.com/"https://en.wikipedia.org/wiki/Geoffrey_Hinton/">Godfather of Deep Learning,” does in his recent Capsule Networks <a href=https://www.ycombinator.com/"https://arxiv.org/pdf/1710.09829v1.pdf/">paper.
To make the next leaps in machine learning, we need to ask fundamental questions. This requires a deep mathematical maturity, which Michael Nielsen, author of the Deep Learning book, described to me as “playful exploration.” This process involves thousands of hours of being “stuck”, asking questions, and flipping problems over in pursuit of new perspectives. “Playful exploration” allows scientists to ask deep, insightful questions, beyond the combination of straightforward ideas/architectures.</p>\n<p>To state the obvious— in ML research, it is still impossible to learn <em>everything</em>! To properly engage in “playful exploration” requires that you follow your interest, rather than worrying about the hottest new result.</p>\n<p>ML research is an incredibly rich field of study with pressing problems in fairness, interpretability, and accessibility. As true across all scientific disciplines, fundamental thinking is not an on-demand process— it takes patience to be able to think with the breadth of high-level mathematical frameworks required for critical problem solving.</p>\n<p><strong>Resources</strong><br />\n• Blog: <a href=https://www.ycombinator.com/"https://www.maa.org/external_archive/devlin/devlin_10_00.html/">Do SWEs need mathematics?</a> by Keith Devlin<br />\n• Reddit Thread: <a href=https://www.ycombinator.com/"https://www.reddit.com/r/MachineLearning/comments/73n9pm/d_confession_as_an_ai_researcher_seeking_advice//">Confessions of an AI Researcher</a><br />\n• Blog: <a href=https://www.ycombinator.com/"http://www.people.vcu.edu/~dcranston/490/handouts/math-read.html/">How to Read Mathematics</a> by Shai Simonson and Fernando Gouvea<br />\n• Papers: <a href=https://www.ycombinator.com/"https://papers.nips.cc/book/advances-in-neural-information-processing-systems-30-2017/">NIPS and <a href=https://www.ycombinator.com/"http://proceedings.mlr.press/v70//">ICML recent conference papers<br />\n• Essay: <a href=https://www.ycombinator.com/"https://www.maa.org/external_archive/devlin/LockhartsLament.pdf/">A Mathematician’s Lament</a> by Paul Lockhart<sup id=\"footnoteid1\"><a href=https://www.ycombinator.com/"#footnote1\">1</a></sup></p>\n<p><strong>Democratizing Machine Learning Research</strong><br />\nI hope that I haven’t painted “research math” as too esoteric, because the ideas formulated using math should be presented in intuitive forms! Sadly, many machine learning papers are still <a href=https://www.ycombinator.com/"https://arxiv.org/abs/1807.03341/">rife with complex and inconsistent terminology</a>, leaving key intuition difficult to discern. As a student, you can do yourself and the field a great service by attempting to translate dense papers into consumable chunks of intuition, via blog posts, tweets, etc. You might even take examples from <a href=https://www.ycombinator.com/"http://distill.pub/">distill.pub as an example of a publication focused on offering clear explanations of machine learning research. In other words, take the demystification of technical ideas as a means towards “playful exploration”— your learning (and machine learning Twitter) will thank you for it!</p>\n<h2>Takeaways</h2>\n<p>In conclusion, I hope that I’ve provided a starting point for you to think about your math education for machine learning.</p>\n<ul>\n<li>Different problems require different levels of intuition, and I would encourage you to figure out what your objectives are in the first place. </li>\n<li>If you’re hoping to build products, seek peers and study groups through problems and motivate your learning by diving into the end-goal. </li>\n<li>In the research world, broad mathematical foundations can give you the tools to push the field forward by contributing new, fundamental building blocks. </li>\n<li>In general, math (especially in research paper form) can be intimidating, but getting stuck is a huge part of the learning process. </li>\n</ul>\n<p>Good luck!</p>\n<p><strong>Notes</strong><br />\n<b id=\"footnote1\">1.</b> A rather pointed criticism about math education that details “playful exploration.” But I suspect that Lockhart would disagree with the thesis of this post — that math should be used for anything <em>but</em> fun!.<a href=https://www.ycombinator.com/"http://cs229.stanford.edu/section/cs229-prob.pdf/">↩
/nIf you’re here, we assume that you’re a developer/hacker who’s intrigued by the blockchain. You’re convinced that you understand how it works and now you’re itching to figure out what the blockchain means for you and your developer skill set.
If you need more of a primer we’d recommend starting with the bitcoin white paper and Ethereum white paper.
Our goal in this post is to:
1. Explain how blockchain development differs from existing development paradigms
2. Provide context for the opportunities and challenges in this space
3. Point you to resources that will give you the foundation to start developing in this new paradigm
Internet applications benefit from network effects because they maintain centralized silos of information. Built upon shared, open protocols (e.g. TCP/IP, HTTP), companies like Yelp, Facebook, and Amazon benefit from having all of their users – and, as a result, data – in one place. This way they not only have an advantage over competitors with less data but also complete control over the way they monetize the data. In the words of crypto investor Joel Monegro, the current Internet paradigm captures most of its value through fat application layers, whereas the thin, underlying communication protocols capture minimal value.
Alternatively, the distribution of value in the blockchain paradigm can be described with fat protocols and a thin application layer. This paradigm shift is possible due to the innovation of cryptographic tokens, which are described well by Albert Wenger of USV:
“Historically the only way to make money from a protocol was to create software that implemented it and then try to sell this software (or more recently to host it)… With [cryptographic] tokens, however, the creators of a protocol can ‘monetize’ it directly and will in fact benefit more as others build businesses on top of that protocol.”
Previously, the creators of open communication protocols for the Internet, largely DARPA researchers and non-profit contributors, could not align financial incentives with protocol development. In contrast, protocol creators today can issue “tokens”, like Bitcoin and Ethereum, that represent the value of their decentralized protocols.
Monegro believes that this paradigm shift affects the way that developers should think about their applications: “The combination of shared open data with an incentive system that prevents “winner-take-all” markets changes the game at the application layer and creates an entire new category of companies with fundamentally different business models at the protocol layer.”
We’ve come to the understanding that in the blockchain paradigm, developers can capture value through protocol innovation. To continue our discussion, we review how blockchain technologies evolved to eventually cater to developers. Eight years ago, Bitcoin was conceived as a virtual currency that removed the need for centralized financial systems. Initially, developers actually tried building applications upon the Bitcoin blockchain by storing data in the blockchain itself, but it turned out to be pretty inefficient (as described in another old Joel post!). One of these developers, Vitalik Buterin, was frustrated by Bitcoin’s immobilism and risk averse culture for adopting new developer-friendly features. So, he built his own platform, Ethereum.
While Bitcoin was originally intended to serve as a new medium for financial store of value, Ethereum was invented to serve as a Turing complete developer environment. In Ethereum, developers write smart contracts in the Solidity programming language, and those smart contracts are run in the Ethereum Virtual Machine (EVM). Here, we observe an opportunity for developers to fork and implement their own blockchains to serve different purposes. To do so, however, would require rekindling developer support and network effects that existing blockchain technologies had previously achieved. Today, building on top of existing networks like Ethereum allows developers to become stakeholders in not only their own applications, but also the underlying protocol.
Today’s blockchain developers often build decentralized applications, or dapps, on top of existing protocols to address specific markets and end users. In doing so, developers can issue tokens, or app coins, that are used to execute certain “functions” of the dapps themselves, not unlike Chuck-E-Cheese tokens are used for specific purposes like skeeball. These “functions” are the “smart contracts” that promise a dapp’s services in return for a digital asset, thereby removing the need for a middle-man to ensure the transaction. In other words, smart contracts promise that for one Chuck-E-Cheese token, you can exchange one game of skeeball.
As the functionality of the dapp becomes more sought after, the fixed number of app coins increase in value as a function of supply and demand. In other words, if it turns out that the Chuck-E-Cheese experience is truly remarkable and highly-demanded, the fixed supply of tokens become more valuable. This is the underlying principle that informs all ICOs (initial coin offerings), in which dapp developers solicit investment by offering app coins in return for capital to fund their projects.
But wait, you might ask, “Why not use an existing token as opposed to issuing your own, dapp-specific token in the first place?” Dapp-specific app coins enable small-scale economies that facilitate the application’s purpose. These tokens serve as scarce resources that can be regulated and governed to more closely align with the functionality of a dapp. This is where Ethereum comes back into the picture — with Ethereum, developers can very easily issue their own tokens for the specified use of their own dapps.
With an understanding of the underlying mechanisms of dapps, it’s important to think carefully about how decentralization would benefit your end users. Rather than jumping into a list of side projects, swapping relational databases for blockchain implementations, we urge you to consider the benefits of decentralization. For instance, Augur creates prediction markets by relying on decentralized participants to make correct predictions because they share financial incentives.
At a meta-level, there are also opportunities for innovation in the developer stack. Many blockchain developers liken the maturity of the blockchain tools and frameworks to those of the web during early days of the Internet. We spoke to Ben Yu of Stream, who described this as a new opportunity for developers: “There is extremely low-hanging fruit in making the field more accessible, and a lot of technical infrastructure needs to be built up to bring blockchain from 1994, in internet terms, to 2017.”
With the innovation of the blockchain, many have identified the opportunity to build a new, decentralized web stack that does not depend on centralized government or corporate entities. The traditional web stack is composed of building blocks like TCP/IP, DNS, databases, web servers, authentication systems and CDNs, and we are in the midst of replicating these components by using platforms like Ethereum as the base layer.
Unfortunately, a technology that is likened to the early iterations of JavaScript almost certainly comes with challenges, the most apparent of which is related to the immutability of new protocols. Developers cannot change the underlying blockchain or higher-level smart contracts. Libraries or contracts cannot be easily versioned. The recent Parity bug that locked 150MM USD in funds, among many other similar incidents, reminds us of the urgent need to build “future-proof” architectures.
Brandon Millman, an engineer at 0x, described how blockchain immutability affects the way he thinks about security concerns: “Being in this space means being a lot more careful, especially because people’s money is at risk. Part of the benefit of the blockchain paradigm is that if you’re holding onto your private key, it’s hard for people to take money from you, but a lot of scams are getting you to willingly send your money to the wrong place instead of reaching in to steal money from your wallet.”
Developers, especially those accustomed to the fast pace of the startup world, are forced to consider tradeoffs between speed and security. As Ben Yu of Stream describes, “You have to move extremely fast, because the space is going enormously fast, but you can’t move fast and break things, which is the traditional philosophy for development being done now. If you break things, you lose hundreds of millions of dollars.”
Building on the blockchain requires a different level of planning. Developers can no longer apply hot-fixes or overnight patches, because they no longer have centralized control over entire systems. Instead, introducing system changes often involves hard forking entire protocols, or in some cases, providing separate sources for protocol parameters that aren’t tied directly into the blockchain.
Beyond the general challenges of immutability, Ethereum includes several limitations that blockchain developers might encounter. For one, Ethereum is unable to access real time data from outside the blockchain. Developers need to rely on trusted third party data providers, called oracles, to provide smart contracts with outside information like weather, random numbers, or currency values.
Moreover, Ethereum’s specification prevents real-time computations. Processing of block transactions takes upwards of 15 seconds (which is lightning fast compared to Bitcoin’s 10 minutes). As a result, developers need to write asynchronous code with front-end frameworks that can update states accordingly (like React).
With Ethereum, you are also tied to paying for your transactions by the operation with gas that translates into Ethereum’s ether. As a result, using the current version of Solidity, you could very feasibly find yourself hitting a transaction limit if the computation you intend to perform is too expensive (like verifying checkmate in a game of chess). As a result, on-chain computations because become costly in terms of money and network bandwidth. There are interesting alternatives like Truebit to perform more intensive computation off-chain.
In general, it can certainly feel overwhelming getting into this space. It’s an interdisciplinary field, spanning domains of economics, game theory, finance, computer science, math, cryptography, and more. However, that also means that there’s a lot of surface area to contribute.
Brandon of 0x recommends diving into areas where you have some interest or experience instead of trying to learn everything at once: “If you’ve done JS development beforehand, there are a lot of JS libraries that you can contribute to. While you will definitely need to know [how everything fits together] eventually, you don’t need to feel like you need to take an entire course initially.”
In the spirit of decentralization, most of the code for projects on the blockchain are also available through open-source. There are a number of good resources to get your hands dirty:
In addition, the developer communities are remarkably receptive and helpful. Check out:
If you learn primarily by coding up your own projects, here are some ideas to get started:
In its current state, yes, blockchain development is messy. No, there aren’t clean frameworks and tools analogous to those that exist for modern web development. But why not see the blockchain’s nascent state as an opportunity to impact a paradigm-shifting technology?
On the blockchain, you don’t need to deploy any centralized servers, which means that there’s no single point of failure. If your whole stack is decentralized, there is no trusted third party involved making it censorship resistant, and your database is publicly verifiable. As the new paradigm offers opportunity to publicly share data, we observe a supreme advantage to decentralizing databases. This is the future we’re building towards on the Blockchain— where information and power are distributed systematically by cutting out the middleman.
Thanks to Ben Yu (Stream) and Brandon Millman (0x) for lending their time to be interviewed, and thanks to Niharika Bedekar, Craig Cannon, Claire Shu for reading drafts of this post.
Categories
Other Posts

Vincent Chen is a student at Stanford University studying Computer Science. He is also a Research Assistant at the Stanford AI Lab.