推荐理由：这个项目是《Go 语言入门》的中文译本，目前的翻译进度已经到了全书正文将近大半的位置。项目中还提供了关于 Go 的学习资料和社区索引，同时还有一个面向新手的视频教程，对于正在学习 Go 语言的朋友来说这个项目应该能提供不小的帮助。
今日推荐英文原文：《Building Code》作者：Paul Cathill
Building CodeWe, humans, have always been on the lookout for somebody to do our heavy and unwanted lifting. First it was simple machines, then steam powered beasts, and at the end a bunch of semiconductors and a quartz.
But how do you get a simple stone to do what you want? How do you explain to an electric circuit what you want from it? Through a programming language, of course.
Where did these programming languages come from and who made them up? Everything starts with a theory, and programming was no exception.
Let us start our story with the Analytical Engine. It was a kind of mechanical computer designed by Charles Babbage, one that worked with gears and springs instead of wires and chips. And in 1843, Babbage’s work was being translated by a certain Ada Lovelace.
Ada didn’t stop at translation. At the end of the book she added her own notes on how to use the proposed engine to calculate Bernoulli numbers. Although far from a proper programming language, it was the first step in the right direction.
The next step was Turing machines — again not a computer but a mathematical model for one. A physical model of a Turing machine could be programmed to do some limited computations, like solving mathematical functions, but it was way too simple and far away from anything we could call a programming language.
A language should be readable and expressive. What is use for it if we can only say “ga-ga” and “go-go”? So this subject was shelved until the magical time of 1940, when an earlier version of modern computers, big and full of electricity, came to life and kicked off a whole wave of theories and practices.
The first programming language with a bunch of useful commands was Assembly Language. It is confusing, crazy looking and sometime quite scary, but it allows programmers to communicate with the hardware of a given computer in a rather straightforward manner.
It’s kind of like building a house but without any tools at all. You have to assemble it brick by brick, and make measurements on the palm of your hand. Not very easy to make, but it does produce a very fast and light executable application — so light that it’s still used today for very delicate operations, although the art of Assembly Language only known by the grey bearded wizards and sorcerers.
Assembly Language was useful, but people wanted more. They wanted something more “high-level”, more understandable and friendly.
They wanted something they could speak.
It took some thought and effort, but in 1952 Autocode programming language was developed, for a humongous computer at the University of Manchester.
Autocode was the first programming language that used a compiler, a special piece of software that took your program and translated it directly into machine code for a fast execution. This way nobody had to write in machine code ever again, thanks almighty. But Autocode did have a very limited use, as it was specifically designed for a specific computer. Now you are building a house with some basic hands tools, like a hammer and a crooked saw.
Programming languages are used to write software. But did you know that they are also software themselves?
Every programming language has a compiler, which is usually written using another programming language. The compiler is what reads your program, and translates it into machine code that your computer can understand.
For example, Autocode compiler was written using Assembly languages, but the next iteration of its compiler was written using Autocode and then compiled with the first compiler. Confusing, isn’t it?
Well, a compiler is a software, it is written and then compiled into a machine code, losing its affiliation to a language. So you can use a compiler to write a better compiler, because after it is compiled it is just a machine code. It is like making a better tools with a set of simpler tools, until you got your own power saw.
The next big thing was FORTRAN (Formula Translation). Engineered at IBM back in 1954, it was the first high-level programming language for general purpose and general use. It got around and quickly became the crowd’s favourite, and in some circle still is, especially where you need a lightning fast performance but you are scared of old Assembly Language. FORTRAN gave you some simple, English-like commands such as IF, ELSE and READ — still unpowered, but now you got a hand drill and some nails.
The year 1959 was quite fruitful for programming languages. First came COBOL (Common Business Oriented Languages), created and sponsored by U.S Department of Defence. From ground up it was designed to be used by big businesses, and so it ended up in systems like ATM, telephones, credit cards services, hospitals and other large infrastructures.
Then came LISP, masterminded to be used for artificial intelligence research, but then skewed for a more general use. It was one of the first functional programming languages, which in simple terms means that you use just functions to build a software, there is no permanent state whatsoever.
Now these languages actually gave you some power tools to build your house, not many, but you do get a chainsaw.
The 60s and early 70s brought a wind of change. Computers were becoming cheaper and more accessible. Their metal husks spread all around the world, finding places in many universities and even some homes.
More people wanted to use computers, but not many could overcome the complexities of the earlier programming languages. That was until engineers from the Dartmouth University came up with BASIC — the Beginner’s All-purpose Symbolic Instruction Code — to help their students to get into ever growing field of programming and computation.
The BASIC syntax simplified the flow of many loops, IF got THEN, FOR got TO and NEXT, DO got UNTIL. Now you did not have to deal with strange commas and dots, as long as you knew some basic English you could understand what was going on.
BASIC was a great success and became the first language for many students, and if you are familiar with Microsoft, you will notice that a forked version of it became their flagship product. This was more akin to building an Ikea furniture, you got your pre-made parts, clear instructions and some tools, you just have to work out how to put it all together.
With the rise of these higher level programming languages, a more structured and elegant code could be written, and in many cases people took it to heart, trying to add a touch of beauty to their work. And it could mean anything, some take pride in writing the shortest code possible, other the most confusing code feasible, and some enjoy adding their own flavour to the structure of their software.
Another language that opened the doors to programming for many was Pascal, specifically designed to teach students about mystical art of computers. It was made to be easy to pick up, but hard to master. And it is still around, used in many organizations with somewhat outdated infrastructures. Pascal played a big role for Apple computers and was their main go-to language back in eighties.
In the 70’s, something happened that forever changed the world we know. The granddaddy of it all, the all great and all powerful C programming language was developed at Bell Labs by famous Dennis Ritchie. It is quick, it is elegant, it is simple, it is powerful, it is multi-platform and it got the best syntax of them all.
Yes, I said it — fight me if you want.
Together with Unix it spread like a wildfire, trumping everything before and everything after it. It is still employed to this day and for many it is their most loved and cherished companion.
C also influenced and was used to code half of the current heavy hitters, like Ruby, C#, Java, PHP and many, many others. There is probably a little bit of C on most of the devices around us today. It gives you all the best hand tools, powered and unpowered, but you still have to get your hands dirty if you want to build a three stories high mansion.
The 80’s followed up with more C-flavoured languages. First Objective-C was created as an extension of C to support, you might guessed it already, object-oriented programming, a concept where a code is broken down into objects with data and functions to manipulate said data. Although it never reached the mainstream, it did find its way into Apple’s macOS and iOS operating system.
Then there was C++ by famous and loved Bjarne Stroustrup. And it is a colossal language, taking power of C and expanding it in all directions, making it one of the most widely used languages in the whole wide world. And today it is everywhere, from game engines, to operation systems and high-performance software. Now you have cranes and excavators, heavy machinery and fine tools, you can build a hut or a skyscraper, C++ lets you do it all.
When the 90s rolled in things started to accelerate. Computers went far and beyond, becoming gaming console, web servers, entertainment units and anything you can think of.
And every solution needed a specific programming language, and so languages started to pop up left and right. Influenced by their predecessors, but designed to serve narrower purposes. Haskell popped in 1990 as a purely functional programming language, designed to deal with a large amount of complicated calculations and numbers crunching. Python in 1991 took a niche of a light and quick code. Visual Basic introduced a drag-and-drop style of programming with a support of graphical user interface.
Scala merged functional with object-oriented programming, making a hot but very handy mess. And the list continues, and it will grow and grow as every year new languages pop up, bringing new solutions and solving new problems. These, let’s call them smaller languages, are more like specific tools for window making, floor laying, wall painting, it is hard to build a house using one, but you can lay some nice tiles with them.
These days it is hard to predict where programming language will go. There are more computers, mode devices and more machines. Gone are the days when a programmer knew a single language, today you better know ten if you want to get a lowly position in some high organization. Languages gained specializations and the field of computer programming grew into a major engineering endeavour.
We do not know where we will end up, but there will be computers and there will be programming languages. They might be written or oral, telepathic or self-generating. But they will be there, bending the machine to our wants and our needs.