"14 Years of Go" by Rob Pike
At the closing talk of GopherConAU 2023, Rob Pike, one of the original creators of Go, shared a retrospective on the 14-year journey of the Go programming language. Celebrating the anniversary of Go's launch as an open-source project, Pike offered a personal, rather than an official Google or Go team perspective. Check it out! But if you are short on time check our notes below.
Upd: a stranger from hackernews pointed out that Pike also posted a detailed text version of this talk here.
Beyond a Programming Language
Pike told the audience that Go's inception was driven not by a desire to create a new programming language but to address the complexities of modern server software development. Highlighting goals like improved build times, effective dependency management, and efficient multicore CPU utilization, he argued that Go's real triumphs extend into tooling, deployment, and community engagement rather than just language design.
Successes Celebrated
Pike emphasized several aspects where Go notably succeeded:
- Specification and Multiple Implementations: Go's formal specification from the outset allowed for multiple compatible compiler implementations, providing a diverse ecosystem.
- Portability: Go was designed to support easy cross-compilation, allowing developers to write code on any platform and compile it for any other.
- Compatibility: Go team has been committed to a compatibility promise, ensuring that code written for earlier versions continues to compile and run correctly with newer versions. This commitment has been crucial for developers relying on Go for long-term projects, providing them with confidence that their codebase will remain stable over time.
- Concurrency Model: Go's approach to concurrency, leveraging goroutines and channels, was highlighted as a significant advancement, making concurrent programming more accessible and safer.
- Standard Library: The comprehensive standard library was praised for providing a solid foundation for developing modern server software, unifying the community and preventing many libraries from rising at early stages.
- Interfaces: Pike emphasized that the way interfaces integrate into Go, enabling polymorphism through composition, is one of the most distinctive and successful aspects of the language. The interface mechanism aligns well with Go's focus on simplicity, readability, and organic code design.
- Tooling: The reliability, speed, and ease of use of the Go toolchain, including the compiler, linker, and package manager, were highlighted as key factors in Go's adoption. Tools like
go fmt
andgo vet
ensure code consistency and quality, aiding in the maintenance and collaboration of large codebases. - Community and Documentation: The vibrant and supportive Go community was acknowledged for its contributions to enriching the Go ecosystem with libraries, tutorials, and blog posts. Pike also commended the extensive and clear documentation that has significantly facilitated the onboarding of new developers.
Addressing Criticisms
While acknowledging Go's widespread adoption and success in various industries, Pike did areas of contention, such as error handling, the initial absence of generics, and the limitations in reflection capabilities and performance. He expressed personal regrets and areas for improvement, including the standard library and safety measures in the compiler.
Looking Forward
Pike's talk also looked to the future, suggesting areas where Go could continue to evolve, such as improving compile-time safety checks and exploring memory management strategies like arenas for specific use cases. He underscored the importance of balancing innovation with Go's core principles of simplicity and efficiency.
As Go continues to mature, its journey offers lessons in language design, community building, and the iterative process of software development.
Member discussion