Skip to main content

Proficiency in 2 Languages

⏱️ ETC: 40-50 hours

Needless to say, mastering at least two programming languages is a fundamental building block for a software engineer. While you've likely already crossed this road if you're reading this document, for completeness of this studying material let's outline the path to becoming proficient on a language.

We specifically recommend mastering:

  • Rust or Go: For systems-level programming and performance-critical components
  • TypeScript: For high-level web development and smart contract interactions

This combination ensures you're equipped to handle both blockchain infrastructure development and web-based decentralized applications.

While "proficiency" can be subjective, a path to reach a strong working knowledge of these languages can be found below. The learning resources we provide will help you become familiar with language syntax and basic patterns. However, true proficiency requires practical application.

All of the material below will bring the engineers to a level that they are quite familiar with the syntax of each language but will not make the engineer proficient with the corresponding language. Thus, after actually going through the necessary material to learn the basics of each language we suggest building a websocket based chat application. You can find its description later on in the chapter. If you want to try something else, take a look at this list of projects that you could build. It is recommended that you focus on the databases or the web sections.

Typescript


Go


  • For learning the syntax you should read Go By Example. Alternatively, if you prefer an interactive learning process you can do the Tour Of Go.
  • Solve all of the exercises of Head First Go.
  • Solve 20 easy problems in Go from either LeetCode or CodeWars.
  • Try to build your own HTTP API that has some POST and GET endpoints using Gorilla mux, Echo or Gin.
  • Spend 2-3 hours to take a look at some interesting open-source Golang code here. If you're already familiar with blockchains enjoy reading Geth.

Rust



After learning each language, to ensure you've moved beyond syntax familiarity to genuine proficiency, we require completing a practical project. In each of the languages you're currently learning we recommend:

  • Building a WebSocket-based chat application. This is a very interesting project since it involves real-time communication, state management, concurrent operations and networks. The project description can be found here.
  • Alternatively, you can select a project from the databases or web sections of this recommended project list.

Remember, the goal is not just to complete these projects, but to implement them with proper error handling, testing, and production-quality code organization.

💡 Tasks

  • Learn Typescript by following the material above
  • Learn Rust or Golang by following the material above
  • Implement a project in each one of the languages

Optional material

Learning multiple programming languages fundamentally reshapes how you approach problem-solving in software engineering. Each language embodies different paradigms and philosophies, offering unique perspectives on how to structure code and manage different problems.

Contributing to open source projects offers an unparalleled pathway to mastering a language that no tutorial or course can match. When you dive into an established open source codebase, you're not just reading isolated code snippets – you're observing how experienced developers structure large-scale applications, handle edge cases, and implement best practices in real-world scenarios.

Each of these languages has a huge ecosystem with many open-source projects that are beginner-friendly. Your reference for finding those is called GoodFirstIssue.