User:Soniakeys/Go/Introduction

Go, the language
Go is a general purpose programming language, good for many different computing tasks. Some of its features follow familiar paths of well established languages. Other features though, are unique and innovative, and aimed at improving programmer productivity. It is designed to be both easy and effective for all sizes of programming projects, from the smallest to the largest.

It is a relatively new language, being first introduced publicly in 2009. Why could the world possibly need a new programming language in 2009? Mostly because of some big changes recently in the world of computing, but also in a conscious effort to shape the software development process. Go aims to relieve programmers of work that is tedious, distracting, and error-prone.

One big change in the world of computing is the ubiquity of multi-core processors. The most popular programming languages today were designed when processors did only one thing at a time. Go is designed from the start as a concurrent language. The concurrency features of Go are based on well-accepted theoretical foundation, and based on experience with concurrency features other languages. The result is a fresh treatment that is both powerful and intuitive.

Another big change is the scale of programming that exists today. Large programs today are tens or even hundreds of thousands of lines of source code. It turns out to take immense computer power to compile these programs. We say that the task doesn't scale well. That is, compiling a program twice as big doesn't just take twice as long, but often many times longer. Go was designed to address some of the most obvious scaling issues. The example programs in this book are small and do not highlight this feature of Go. Once you start writing large programs of your own however, you will appreciate how quickly Go compiles, and how easily large programs can be built.

Large programs present challenges for computers, but they present even greater challenges for programmers. Principles of object oriented programming have been explored widely in the last decade for taking on these challenges. Some of these object oriented principles have been spectacularly successful, while others have tended to mire programmers in complexity. Go boldly rejects certain features that many would consider standard or even essential features of object oriented programming. Rather, it focuses on a small and carefully selected set of features. The goal is to provide a minimal set of features that provide all the expressiveness needed for programs of any size.

Purpose of this book
Teach the base language, common idioms, and elementary concurrency techniques. (I have a pretty good grasp of that. I'm less familiar with libraries, web programming, large projects, concurrency theory, etc.)

What is covered
Installation. All elements of the language definition, and common idioms. Concurrency. Attention to speed and memory. Essential commands. Simple build techniques. Web resources and services. Core general purpose packages and functions from the standard library.

Who should read this book
People with prerequisites of basic skills with a computer, operating system, and an editor. Beginning and novice level programmers who wish to learn Go and increase programming skills to a level where they can become productive at solving real problems. Intermediate level and experienced programmers who wish to acquire a thorough base knowledge of the Go language. Programmers with no or little experience in concurrent programming. Programmers who may be skilled in some form of concurrent programming but are interested in Go's concurrency paradigm.

Concept for audience target: Body text assumes novice level programming skill. Some sidebars offer background information for true beginners. Other sidebars are aimed at programmers skilled in specific languages point out where Go differs in some important way from what they are used to. Sidebars are labeled or somehow differentiated so the different audiences can recognize at a glance if it is of likely interest to them.