1 Introducing Go
This chapter covers
- Solving modern computing challenges with Go
- Using the Go tools
Computers have evolved, and programming languages have needed to evolve with them. While processor speed continues to increase, the demands of modern computing are such that this alone has not been enough to keep up with the pace of technology, and many of the recent advances in CPU manufacturing have focused on ways of doing work in parallel. The mobile devices in our pockets might have more CPU cores than the high-end laptops we used just a few years ago, and high-powered servers now have 64, 128, or even more cores, yet programming languages have struggled to enable effective use of these advances.
In part, this is because programming languages had little cause to embrace parallelism during much of their evolution in the face of ever-increasing processing speed. The problem space of concurrent programming is much larger, with exponentially more interactions that can occur between parts of otherwise simple code, and so it was easier to defer the problem. Now that the needs are greater, modern programming languages need built in abstractions around concurrency, freeing the programmer to focus less on minutiae of coordinating concurrency, and more on the important work of solving problems.