软件工程中的人
读了 Bjarne Stroustrup
在 programming principles and practice using c++ 2nd
关于 People
的论述,觉得大师总结的很全面、很完善,遂整理如下,加入一点我的注解、想法。
Computers are built by people for the use of people. A computer is a very generic tool; it can be used for an unimaginable range of tasks. It takes a program to make it useful to someone. In other words, a computer is just a piece of hardware until someone — some programmer — writes code for it to do something useful. We often forget about the software. Even more often, we forget about the programmer.
计算机来自于人同时服务于人。单纯的硬件是没有用的,直到有人写了软件让它做点什么,硬件才有用。
Hollywood and similar "popular culture" sources of disinformation have assigned largely negative images to programmers. For example, we have all seen the solitary, fat, ugly nerd with no social skills who is obsessed with video games and breaking into other people's computers. He (almost always a male) is as likely to want to destroy the world as he is to want to save it. Obviously, milder versions of such caricatures exist in real life, but in our experience they are no more frequent among software developers than they are among lawyers, police officers, car salesmen, journalists, artists, or politicians.
国内的程序员也被贴了各种标签。事实上,程序员和其他行业没啥本质区别。程序员中有一些人确实符合这些标签,但是其他行业的从业人员中肯定也部分人符合这些标签;另外一个方面,绝大多数程序员不符合这些标签。真的不知道这些偏见是从哪里来的,是作者所说的好莱坞、媒体的宣传,还是程序员自身的自黑?No idea.
Think about the applications of computers you know from your own life. Were they done by a loner in a dark room? Of course not; the creation of a successful piece of software, computerized gadget, or system involves dozens, hundreds, or thousands of people performing a bewildering set of roles: for example, programmers, (program) designers, testers, animators, focus group managers, experimental psychologists, user interface designers, analysts, system administrators, customer relations people, sound engineers, project managers, quality engineers, statisticians, hardware interface engineers, requirements engineers, safety officers, mathematicians, sales support personnel, troubleshooters, network designers, methodologists, software tools managers, software librarians, etc. The range of roles is huge and made even more bewildering by the titles varying from organization to organization: one organization's "engineer" may be another organization's "programmer" and yet another organization's "developer," "member of technical staff," or "architect." There are even organizations that let their employees pick their own titles. Not all of these roles directly involve programming. However, we have personally seen examples of people performing each of the roles mentioned while reading or writing code as an essential part of their job. Additionally, a programmer (performing any of these roles, and more) may over a short period of time interact with a wide range of people from application areas, such as biologists, engine designers, lawyers, car salesmen, medical researchers, historians, geologists, astronauts, airplane engineers, lumberyard managers, rocket scientists, bowling alley builders, journalists, and animators (yes, this is a list drawn from personal experience). Someone may also be a programmer at times and fill non-programming roles at other stages of a professional career.
这是很多人持有的另外一个误解,觉得软件是黑客(褒义)在地下室弄出来的。事实上,成功的软件少则数十人,多则数千人,同时是由除了程序员之外,很多很多工种共同合作完成的。在不同的组织中,大家的头衔(工种)可能很不同,即使在同一个组织,很多人的角色也不是一成不变的。程序员在工作中需要和各行各业的人打交道,同时这些行业的人偶尔也会编码以实现自己的想法,但他们不是程序员。
The myth of a programmer being isolated is just that: a myth. People who like to work on their own choose areas of work where that is most feasible and usually complain bitterly about the number of "interruptions" and meetings. People who prefer to interact with other people have an easier time because modern software development is a team activity. The implication is that social and communication skills are essential and valued far more than the stereotypes indicate. On a short list of highly desirable skills for a programmer (however you realistically define programmer), you find the ability to communicate well — with people from a wide variety of backgrounds — informally, in meetings, in writing, and in formal presentations. We are convinced that until you have completed a team project or two, you have no idea of what programming is and whether you really like it. Among the things we like about programming are all the nice and interesting people we meet and the variety of places we get to visit as part of our professional lives.
对于程序员而言,沟通技能、演讲技能、写作技能等等都是很重要的!
One implication of all this is that people with a wide variety of skills, interests, and work habits are essential for producing good software. Our quality of life depends on those people — sometimes even our life itself. No one person could fill all the roles we mention here; no sensible person would want every role. The point is that you have a wider choice than you could possibly imagine; not that you have to make any particular choice. As an individual you will "drift" toward areas of work that match your skills, talents, and interests.
编写好的软件,掌握必备的技能、兴趣、好的工作习惯都是基本要求。大家应该根据自身的情况,去做适合自己的工作。
We talk about "programmers" and "programming," but obviously programming is only part of the overall picture. The people who design a ship or a cell phone don't think of themselves as programmers. Programming is an important part of software development, but not all there is to software development. Similarly, for most products, software development is an important part of product development, but not all there is to product development.
编程只是程序员工作的一小部分,类似的,编码也只是产品研发的一小部分。
We do not assume that you — our reader — want to become a professional programmer and spend the rest of your working life writing code. Even the best programmers — especially the best programmers — spend most of their time not writing code. Understanding problems takes serious time and often requires significant intellectual effort. That intellectual challenge is what many programmers refer to when they say that programming is interesting. Many of the best programmers also have degrees in subjects not usually considered part of computer science. For example, if you work on software for genomic research, you will be much more effective if you understand some molecular biology. If you work on programs for analyzing medieval literature, you could be much better off reading a bit of that literature and maybe even knowing one or more of the relevant languages. In particular, a person with an all I care about is computers and programming attitude will be incapable of interacting with his or her non-programmer colleagues. Such a person will not only miss out on the best parts of human interactions (i.e., life) but also be a bad software developer.
学了编程未来也不一定要专职做这个。好的程序员也不是所有的时间都花在编程上的。他们需要理解问题、分析问题、和其他人沟通等等。很多程序员工作在某个特定的领域,往往对这个领域知识有很深入的理解,顶尖的程序员的掌握程度尝尝不亚于这个领域的人。
生活才是不能错过的事情,而编程不是。编程是生活的一小部分,很多人靠它吃饭,很多人拿它作为自己的爱好,等等,但是,本质是追求好的生活。
So, what do we assume? Programming is an intellectually challenging set of skills that are part of many important and interesting technical disciplines. In addition, programming is an essential part of our world, so not knowing the basics of programming is like not knowing the basics of physics, history, biology, or literature. Someone totally ignorant of programming is reduced to believing in magic and is dangerous in many technical roles. If you read Dilbert, think of the pointy-haired boss as the kind of manager you don't want to meet or (far worse) become. In addition, programming can be fun.
编程是很有趣的,至少对我而言是这样的,因为它是有挑战性的事情。我相信科技改变世界,而编程是其重要的组成部分。不过,现阶段要求多数人去理解编程,或者简单的入个门,要求有点高了,就像很多人不懂物理、生物、文学等领域一样,不懂对他的生活也没啥本质影响。
But what do we assume you might use programming for? Maybe you will use programming as a key tool in your further studies and work without becoming a professional programmer. Maybe you will interact with other people professionally and personally in ways where a basic knowledge of programming will be an advantage, maybe as a designer, writer, manager, or scientist. Maybe you will do programming at a professional level as part of your studies or work. Even if you do become a professional programmer it is unlikely that you will do nothing but programming.
就像前面提到的,很多人学编程,只是为了实现自己的想法,辅助自己的工作,亦或者只是单纯的兴趣罢了。
You might become an engineer focusing on computers or a computer scientist, but even then you will not "program all the time." Programming is a way of presenting ideas in code — a way of aiding problem solving. It is nothing — absolutely a waste of time — unless you have ideas that are worth presenting and problems worth solving.
编程是为了表达想法,解决问题。如果没有问题怎么办?自己制造问题而编程,哈哈。
This is a book about programming and we have promised to help you learn how to program, so why do we emphasize non-programming subjects and the limited role of programming? A good programmer understands the role of code and programming technique in a project. A good programmer is (at most times) a good team player and tries hard to understand how the code and its production best support the overall project. For example, imagine that I worked on a new MP3 player (maybe to be part of a smartphone or a tablet) and all that I cared about was the beauty of my code and the number of neat features I could provide. I would probably insist on the largest, most powerful computer to run my code. I might disdain the theory of sound encoding because it is "not programming." I would stay in my lab, rather than go out to meet potential users, who undoubtedly would have bad tastes in music anyway and would not appreciate the latest advances in GUI (graphical user interface) programming. The likely result would be disaster for the project. A bigger computer would mean a costlier MP3 player and most likely a shorter battery life. Encoding is an essential part of handling music digitally, so failing to pay attention to advances in encoding techniques could lead to increased memory requirements for each song (encodings differ by as much as 100% for the same-quality output). A disregard for users' preferences — however odd and archaic they may seem to you — typically leads to the users choosing some other product. An essential part of writing a good program is to understand the needs of the users and the constraints that those needs place on the implementation (i.e., the code). To complete this caricature of a bad programmer, we just have to add a tendency to deliver late because of an obsession with details and an excessive confidence in the correctness of lightly tested code. We encourage you to become a good programmer, with a broad view of what it takes to produce good software. That's where both the value to society and the keys to personal satisfaction lie.
We encourage you to become a good programmer, with a broad view of what it takes to produce good software. That's where both the value to society and the keys to personal satisfaction lie.
做对社会有价值的人!往简单里说,作为社会的一份子,做好本职工作,不做不该做的事情,就是莫大的贡献了。作一个好的程序员,能够通过自己的力量,让大家生活的更好,挺好的。