Copypasta and Web3
copypasta: a block of text that is copied and pasted across the Internet by individuals through online forums and social networking websites.
What does copypasta have to do with Web3? It's been argued that with the proliferation of smart contracts based on Ethereum technology it’s more exposed to copypasta. Where developers are less likely to think deeply about solving hard problems on the platform and focus on simple solutions using tokens.
The point made by Anatoly Yakovenko, one of the Solana founders was that developers on their blockchain are less likely to copy and paste code to create their applications, as it uses the systems programming language Rust for developing decentralised applications, as opposed to Solidity which is simpler to learn and already widely used for Ethereum and many competitor platforms.
The argument is that Rust will appeal to the deeper, more technically inclined folk, who will think deeper about solving hard problems as opposed to simply finding an existing code solution they can copy and paste to create their application.
The technologist in me is a big fan of Rust, it gets so many things right around memory management that has plagued C/C++ developers for years, and incorporates some really nice features from functional programming languages whilst still being imperative.
That being said, for less experienced developers it is hard to learn. It has however become something of a bedrock for a number of blockchain platforms due to its incredible performance and stability done right.
None of this changes my view is that Ethereum's Virtual Machine which executes Solidity code is likely to be the safest long term bet for building decentralised applications on.
However, this idea of Rust being a safer language due to there not being as much existing code around to copy and paste for developers, coupled with the higher barriers to entry for learning it over Solidity, doesn't stand in my view.
As someone who spent the first 15 years of their professional career living and breathing code every day I feel placed to critique this view. Copypasta is rife with developers from all walks of life during their early years.
When developers first learn programming languages, they will often start with a book or classes where they have examples for them to copy and run themselves. To understand some of the behaviour of these examples they will make incremental changes to enhance or even break them to reinforce their understanding of the code.
When given new projects or assignments to work on based on these learnings, it's highly likely that some of the code that they have already copied and modified will be incorporated into this new program, as they already have something that works.
As they become more competent in working with this new programming language they will need to refer back increasingly less to the work they've done previously as more and more of the syntax will reside in their memory. This process takes weeks or months for experienced developers, and potentially years for more junior developers.
Hence we see how copying and pasting code is not an endemic issue, but a normal behaviour by developers. Prior to the internet this was somewhat harder, programmers typically only had two sources for learning — manuals and existing programs, and often had to manually re-input any code. With the emergence of the internet with forums and sites such as StackOverflow that became the dominant place where developer queries were answered, it became increasingly straightforward for developers to find answers online that they could copy and paste.
The issue with this approach is that inexperience or laziness can push developers to rely too heavily on solutions they find online, without properly understanding the implications of that solution.
I recall a story someone told me about a database administrator in a bank who needed to perform a tidy-up operation for that person. The administrator accidentally obliterated the entire database instead of performing the tidy up, and their justification for this error of their ways was that they were just following the solution they found on StackOverflow!
Yes, this ability to find answers to many technical queries online can be dangerous, but now that we have some more perspective on copypasta we can revisit Web3.
Solidity is the most widely used programming language for Web3 development by a wide margin. It's considered JavaScript-like, however, regardless of syntax, writing correct smart contracts for decentralised applications is hard. Unlike most closed-loop systems that reside within an enterprise, smart contract applications exist on public blockchains where they are the target of the world's hackers. Hence writing correct smart contract code is the domain of specialists, who are not only engineers but also experts in security best practices for them.
I consider it closer to low-level systems programming, such as writing operating systems or device drivers, or even hardware engineering in that the cost of bugs can be incredibly high in smart contracts compared with more conventional web or API based services which are more forgiving.
Because Solidity is so popular, there are far more resources available online to support developers. Hence there is a lot more code available for developers to copy. This is not the case for Solana, as whilst it's a popular platform, it is nothing like as popular as Ethereum. Even though one may argue that Rust is harder to learn than Solidity if Solana was as popular as Ethereum there would likely be just as much opportunity for developers to copy existing code they found online for their project.
The prevalence of more content for any programming language does make it easier to learn, as it provides more opportunities for learning via a variety of mediums and solutions to problems can more readily be found. It also incentivises more people and companies to build better tooling to support the developers, as there is a larger captive audience of potential users for them.
This notion of success does lower the barriers to entry, which can make it easier for naive developers to create buggy applications. However, the larger the investment in a specific technology ecosystem, the greater the number of abstractions are created, which can lower the barriers to entry of using this technology — no-code development tools are one such example of this.
Such abstractions open the doors to more individuals building on these platforms, who may be less technically competent but are absolutely brimming with great ideas for Web3.
Creating platforms that lower the barriers to entry for them benefits everyone by harnessing greater innovation, which is no bad thing. Yes, this does come with risks of copypasta, but I would argue the potential benefits massively outweigh the downside of a few sloppy developers being too lazy to understand their own code.
Hence, whilst I can appreciate where the Solana founders are coming from, I respectfully disagree with their opinion here.