软技能2 软件开发者职业生涯指南

978-7-115-53453-8
作者: [美]约翰·森梅兹(John Sonmez)
译者: 王小刚
编辑: 杨海玲

图书目录:

详情

本书是《软技能:代码之外的生存指南》一书作者的新作,主要围绕软件开发从业者职业生涯的发展历程,描述软件开发者在职场中需要具备的各种“软技能”—如何入行成为软件开发者,如何学会第一门编程语言,如何写求职简历,如何准备面试,如何选择工作岗位,如何选择技术方向,如何拓展技术技能,如何与团队和领导融洽相处,如何以著书立说方式为自己在业界赢得赞誉,等等。 本书适合各层次的软件开发者阅读。尽管本书名义上是专门写给软件开发者的,但实际上这也是一本关于管理个人职业生涯以及如何获得成功的书,对软件开发行业的各类从业者做好职业发展规划都很有帮助。

图书摘要

版权信息

书名:软技能2:软件开发者职业生涯指南

ISBN:978-7-115-53453-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [美] 约翰·森梅兹(John Sonmez)

译    王小刚

责任编辑 杨海玲

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


The Complete Software Development’s Career Guide by John Sonmez.

Copyright © 2017 by SIMPLE PROGRAMMER.

This edition arranged with John Sonmez through BIG APPLE AGENCY, LABUAN, MALAYSIA.

Simplified Chinese edition copyright © 2020 by POSTS & TELECOM PRESS.

All rights reserved.

本书简体中文版由作者John Sonmez通过大苹果版权代理公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


本书是《软技能:代码之外的生存指南》一书作者的新作,主要围绕软件开发从业者职业生涯的发展历程,描述软件开发者在职场中需要具备的各种“软技能”—如何入行成为软件开发者,如何学会第一门编程语言,如何写求职简历,如何准备面试,如何选择工作岗位,如何选择技术方向,如何拓展技术技能,如何与团队和领导融洽相处,如何以著书立说方式为自己在业界赢得赞誉,等等。

本书适合各层次的软件开发者阅读。尽管本书名义上是专门写给软件开发者的,但实际上这也是一本关于管理个人职业生涯以及如何获得成功的书,对软件开发行业的各类从业者做好职业发展规划都很有帮助。


相信我,翻译一本书是一件很辛苦的事情。辛苦的程度,我觉得可以直接类比20多年前我备战考研的历程。

考研和翻译的过程都是很孤独的,既无人陪伴也无人喝彩。考研和翻译的过程都极度烧脑,翻译更胜一筹,其烧脑的程度超过我从事咨询顾问工作12年以来完成的任何一个项目。考研和翻译的过程中都需要耐心和静心,拒绝浮躁与焦急。因为这个过程中你会面临许多诱惑,需要你具有良好的自控能力和时间管理能力,对抗各种各样的拖延症以及“懒癌”。

关键是,在这个过程中你随时都会想要放弃。当然了,放弃了也就前功尽弃了。反过来,坚持住也就修成正果了。但修成正果之时也不会有特别的欢喜—考研考上之后,只会想到“哦,这件事情总算有个结果了”;翻译交稿之时也只会觉得“哦,终于翻完了”。

一句话,翻译一本书跟考研一样,都是自己跟自己的死磕。

那么,为什么还要自讨苦吃做这么辛苦的事情呢?对我来说,二者都是为了一个承诺。考研,是为了我在刚刚走入大学校门时对父母做出一个承诺;翻译本书,也是为了一个承诺。

时钟拨回到2016年7月19日,北京,国家会议中心。

在“TiD 2016质量竞争力大会”的会场上,本书作者John Sonmez向全场2000名与会者做了题为“Personal Development as a Software Developer”的主题演讲。那天,我给他做现场翻译。

承蒙大会主办方鼎力支持,那天演讲过后特别安排我和John Sonmez一起做了《软技能:代码之外的生存指南》中文版的首发仪式,场面相当火爆。

中午休息时,John和我进行了亲切友好的交流,我们一致认为:除必不可少的技术技能与管理技能之外,还应该从“人”与“人性”的角度为软件开发人员提供更多、更好的关于“软技能”话题的指导与倾向性建议,引导大家围绕“如何让开发人员的生活更加美好”的主题展开深入探讨,让这个主题获得更多业界同仁的关注与共鸣。

火爆的首发仪式让我们充分意识到:《软技能:代码之外的生存指南》这本书恰恰满足了这样的需求,从职业发展、自我营销、自主学习、习惯养成、个人理财、健身和自我修养7个方面给予软件开发人员很多优秀的、令人耳目一新又具备高度可操作性的建议和最佳实践。

同时,我们也注意到,《软技能:代码之外的生存指南》一书还是有些许缺憾的—因为必须要关注内容的完整与充分,所以不得不在深入性和专注度上做出一些让步。

John当即表示,他要再写一本专门论述软件开发人员职业发展的书,探讨作为软件开发人员,如何开始自己的职业生涯,如何有效推进自己的职业生涯,如何令自己的事业蒸蒸日上,如何充分施展自己的才华,大展宏图而不至于因为这样或那样的非智力因素而遭埋没。我当即表示:“John,你的新书一旦付梓,我继续来做中文翻译!”时任人民邮电出版社信息技术分社社长的刘涛先生当即表示:“这本书的中文版,我们出版社买下了。”《软技能:代码之外的生存指南》一书的责任编辑杨海玲立刻跟进:“我继续做这本新书的编辑。”

所以,今天我们4个人又聚在了一起,将这本新书《软技能2:软件开发者职业生涯指南》的中文版呈现在读者的面前。我还要这么说:翻译这本书不仅是我对John做出的一个承诺,也是对所有喜欢“软技能”话题的各位同仁所做出的一个承诺。义不容辞!

当然,本书与《软技能:代码之外的生存指南》相比,还是有很多不同之处的。

本书在《软技能:代码之外的生存指南》的基础上,专门就“职业发展”的主题做了很多深入而又富有建设性的探讨。也就是说,《软技能:代码之外的生存指南》关注于“如何让你的生活更加美好”,本书则关注于“如何让你的职业生涯更加灿烂”。

《软技能:代码之外的生存指南》围绕“人”这一核心,用360度环状视角描述我们在生活中需要关注的各种“软技能”。本书围绕“软件开发者”这一核心,以一个从业者职业生涯的纵向发展历程的时空关系来描述在职场中所要具备的各种“软技能”—如何学会自己的第一门编程语言,如何准备面试,如何扩展自己的技术技能,如何与团队融洽相处,如何与领导融洽相处,如何以著书立说和为人师表的方式为自己在业界赢得声誉,等等。

就像《软技能:代码之外的生存指南》一样,本书中依然充满了各种各样的技巧:

所以,像《软技能:代码之外的生存指南》一样,无论你是初出茅庐的新手,还是身经百战的老将,都可以在本书中寻找到属于自己的如何更好地管理个人职业生涯以及如何促进自己更有效获得成功的内容。

这是因为,在本书中,John依然坚持“人本”观点,依然笃信软件开发人员不应该只知埋头拉车而不知抬头望路,依然笃信软件开发人员既然能够写得出优质代码那就一定能够打理好自己的生活。

这也是我喜欢John、喜欢他的书的原因。

于是,一如既往地,我继续承诺:今后如果John还有有关“软技能”的新著问世,我依然义无反顾做中文翻译。


一如既往地,首先,我要感谢我的父母。感谢他们对我的教导和晓谕,让我在这个纷繁复杂的世界上没有胡乱地生长。感谢你们,永远的!

感谢我的太太张炜英(Angel Zhang)女士。由于讲师和咨询顾问的身份,我常年穿梭于各大城市的各个客户之间。感谢她为家庭做出的莫大牺牲和贡献,感谢她给予我的支持和鼓励,感谢她从科技英语专业硕士高材生的专业角度为本书所做的审读工作(于是我才敢于把本书拿出来供大家品评)。

感谢本书的责任编辑杨海玲女士。她的宽容和耐心是我完成本书翻译工作的助推器和润滑剂。

感谢我的儿子小William。翻译本书的历程,恰好跟我给你当好高三学生家长的历程重叠。感谢你在繁忙的学业之余自告奋勇审校了本书的部分书稿,这一年的陪伴让我自己学到了不少。

感谢上海浦东图书馆的所有工作人员。本书的大部分翻译工作是在这里完成的,这里窗明几净的环境和浓郁书香的氛围大大提高了我的翻译效率。

特别鸣谢《疯狂番茄》软件的开发者SuperElement,以及“番茄工作法”(PomodoroTM)的发明者弗朗西斯科·西里洛。如果没有PomodoroTM这么高效易用的时间管理工具,完成本书的翻译工作将是不可想象的。

最后,但并非最不重要的,感谢《软技能:代码之外的生存指南》的广大读者。正是大家的支持与厚爱让我充满动力翻译完这本《软技能2:软件开发者职业生涯指南》!

我从未料到,在写完上一本书《软技能:代码之外的生存指南》之后这么短时间内自己又写了一本书。好吧,我想这个周期也不是那么短:《软技能:代码之外的生存指南》一书付梓于2014年12月,现在这本书搦管自2016年夏天。

但是,写完一本书之后,一年半的休息时间似乎并不那么充裕,毕竟写一本书是一项举步维艰的工作。诚然,看到自己的著作摆在自己的书架上,还是颇有些自鸣得意的,但这中间的过程却无法令人心花怒放。

你可能一直都会问自己:为什么一定要再写一本书呢?至少以我的标准来说,为什么要在这么短的时间内另写一本书呢?

这绝对不是一个经济问题,因为有太多种赚钱的方式比花时间写书更加有利可图。这肯定也不是因为我自己热爱写作。诚然,我承认自己享受写作的过程,但是投入大把时间去写作还是一种令人痛苦而非快乐的体验。

它既不会让我赚很多钱,又会占用我大量的时间,那么我为什么还要再一次踏上这自讨苦吃的旅程呢? 好吧,主要是因为我不得不又开始写作了。

当我浏览为软件开发者编写的所有书时,我发现没有一本书可以事无巨细、面面俱到地告诉软件开发者如何开始自己的职业生涯,如何推进自己的职业生涯,如何令自己的事业蒸蒸日上,以及为了尽可能地获得成功,他们究竟需要知道些什么。

在我的YouTube频道上,来自世界各国的软件开发者,无论男性还是女性,无论年轻人还是老年人,无论经验丰富的老手还是初出茅庐的菜鸟,都在问我各种各样与软件开发相关的“软”话题。例如:

我还可以罗列很多很多。

坏消息是,我也没有找到一个特别的资料来回答所有这些对软件开发者至关重要的问题;好消息是,你现在手握的这本书恰恰就是这样的资料。

因此,尽管我对写一本书仍然心有余悸(特别是在这么短的时间内,至少我自己认为是非常短的),我还是打定主意写了这本书,不是因为我一定非写不可(好吧,我承认对于重新开启写作生涯自己还是有些技痒的),而是因为我坚信,当你发现某些东西是人们翘首以盼的,那么你要么把它找出来,要么把它创造出来。

对于上述所有问题,我无法找出答案,因此我要创造出答案!

我希望你能和我一起,再一次一路同行。

也许你现在刚好正在关注自己的事业发展,于是你被本书的封面所吸引,于是你捧起了它(或者在电子设备上点开了它)。

你在走马观花般浏览本书的时候一定会自问:“这本书是为我量身定做的吗?”别担心,尽管我对你一无所知,但是我可以向你保证:我写这本书真的是为了你。

“怎么可能?”你问道,“毕竟,你甚至连我会不会读这本书都不知道。”好吧,其实我知道你会读它,因为如果你不读,此时此刻,我的这些文字也不会在你的脑海中发出奇妙的声音。我还知道另一件关于你的事,那就是我们都很有幽默感,或者,至少你可以包容我的幽默,因为到现在你仍在勉为其难坚持阅读这本书。

好了,在我让你感到索然无味之前,在你把本书放回到书架上或者关掉阅读器之前,我想我还是应该郑重其事一些,讲点儿正经事儿:不管你在自己的软件开发生涯中处于何种位置,这本书对你而言都不无裨益。

对于喜欢快速切入主题的人士,请允许我将你快速归类为以下三类读者中的一类,这样你可以快速接触到本书中对你最有用的内容。

如果你刚刚开始学习软件开发/编程,或者你已经学了一些但还没有找到属于自己的第一份软件开发工作,那么本书的前两篇将对你有很大的帮助,在这两篇中我将讨论如何开启软件开发的职业之旅,以及你该如何获得第一份工作。

本书的其余部分将有助于你发现妨碍自己成为成功的软件开发者的知识短板,使你能从容有效地推进自己的职业生涯,并在职场里茁壮成长。

就像我所预期的那样,你还会在本书中找到其他任何关于软件开发的书里不会论及的相关主题,例如,在起步阶段如何拨开迷雾,开启正确的编程人生,如何学习第一门编程语言,以及如何在大学学历教育、编程训练营和自学之间做出正确的选择。

第三篇“关于软件开发你需要知道些什么”可能对你的帮助最大!这篇的内容将有助于你发现自己的知识短板,帮助你积极有序地管理自己的职业生涯,让你在职场上屡战屡胜。

但这并不意味着你可以忽略本书的第一篇“入行成为软件开发者”。因为,即使你已经通晓如何编程,你也可能会在第一篇中学到如何进一步拓展和掌握新的技术技能,如何学习新的编程语言,以及如何申请职位、制作简历和谈判薪酬。

如果你对如何发展自己的职业生涯兴趣盎然(其实你真应该如此),你会发现本书的最后一篇“推进你的职业发展”也是很有用的。

我知道,你已看穿一切。

你并不需要一本入门书来告诉你一些能够开启软件开发职业生涯的所谓“热点”知识,也不需要别人告诉你什么是源代码控制,更不需要别人的洞察力来帮你决策应该去大学深造还是应该去编程训练营精进。

真的,这一切我都知道。但是,相信我,这本书仍然是适合你的。下面我就来解释一下原因。

首先,这本书大约有一半的内容是专注于如何拓展和推进你的职业生涯的。尽管你已经在这一行浸淫许久,尽管你已经看起来功成名就(祝贺你),你还是可能会在本书中发掘到一些有益的东西:如何更好地与同事和老板相处,如何推销自己的想法,如何做好向上管理,甚至如何获得升值加薪。

如果你还没有对上述技巧驾轻就熟,你很有可能会在自己的软件开发职业生涯中遇到所谓的“玻璃天花板”的问题,即你感觉不到自己能取得更大的进步。

这种无奈我感同身受。因为在我的职业生涯中,该经历的也都经历过了[1]。幸运的是,我已经用我的头击破了那层玻璃天花板,所以我可以教你如何打造个人品牌,如何在行业峰会上争取到发言机会,如何启动兼职项目……

另外,尽管本书开始的几篇看起来有点小儿科,但你仍然可以获得一些有用的信息:如何学习技术,如何获得高薪工作,如何谈判薪水,如何在合同制工作和正式职员之间做出选择。

还有,你也会去指导其他开发者,不是吗?如果对于如何起步迈入这一行你有一些好的建议,写下来给他们,那不是一件好事吗?

因此,我再说一遍,这本书就是为你而作的,不管你是谁。我甚至敢冒天下之大不韪,大胆地说:即使你对软件开发没有丝毫兴趣,你仍然可能会从这本书中获益,因为,虽然这本书名义上是专门写给软件开发者的,但是实际上它也是关于管理个人职业生涯以及如何获得成功的。

如果你已经意识到了这一点,那这本书就真的是为你量身定做的。因为,很明显,你喜欢我,而且,你知道吗?我也喜欢你。

[1] 此处原文为“Been there, done that, got the T-shirt.”。这是一句美国俚语,原意是指美国人的一种旅游习惯,到一个旅游景点之后通常买件T恤衫纪念一下,例如,去了纽约就来件上面印有“I love NY”字样的T恤衫。此处取其引申含义“该经历的都经历过了”。——译者注

毫无疑问,本书卷帙浩繁。最终成稿的时候我统计过,英文原文总共20.2万个单词。真的是篇幅巨大。因此,我想我应该先跟你解释一下,为什么这本书有这么多字,以及你如何才能充分利用好这本书

初出茅庐的新手,拥有几年经验的行家里手,或者饱经风霜的专业人士,不管你身处自己职业生涯的哪个阶段,本书的各个章节都会给你带来或多或少不尽相同的感受,甚至有些章节你会想着不断去重温回顾。

你可能想知道:为什么我决定写作如此特别的一本书。(在前言里我已经简要地提到过,但在这里我想再重复一下。)

我的博客和YouTube频道上的读者最常询问我的问题就是:如何开启软件开发的职业生涯?如何拥有成功的职业生涯?从没有找到一本完整的手册能够教导羽翼未丰的新开发者或者经验丰富的老开发者如何真正优化自己的职业生涯,以及如何应对投身这个行业之后那些无法回避的问题。

在《软技能:代码之外的生存指南》的职业篇中,我简要提到了一些这方面的话题,但我觉得,更深入地论述该主题兹事体大,且必不可少。

因此,与《软技能:代码之外的生存指南》一书关注软件开发者的整个生活(包括一个人的职业规划)不同,这本新书只专注于职业生涯发展

在设计上,本书自成一体,所以你不是一定要读过《软技能:代码之外的生存指南》一书或者其他书籍才能最大限度地利用这本书,要阅读这本书,你甚至不需要拥有任何软件开发经验。

首先,我想要帮到那些新入行的软件开发者,让他们了解让自己在这个纷繁复杂而又荆棘密布的行当里初露锋芒所需了解的所有重要的东西。

我想给这些新进软件开发者提供关于这一领域所有重要方面的资源,让他们了解他们所需要知道的知识,并向他们展示获得自己第一份工作的最佳途径。在我看来,这些内容都是软件开发者在“菜鸟”阶段所要面临的最重要的挑战

其次,我想要帮到已经成为软件开发者的人们,帮助他们弥补自己的知识短板(就他们的职业生涯而言),并为他们提供一些关于如何以一个软件开发者的身份工作与生存的指导。我将讨论如何平衡生活和工作,如何与团队一起工作,开发者如何推销他们的想法,如何获取加薪和升职,以及如何处理领导力与偏见等问题。

最后,不管是处于职业生涯中哪个阶段的软件开发者,我都想帮助他们将自己的职业生涯提升到更高层次。我将讨论如何在软件开发行业建立声望,可供软件开发者选择的不同的职业发展路径,以及软件开发者应该阅读的书籍。我将介绍一些有助于你进入更高层次以及成为卓越开发者的兼职项目、行业峰会与其他主题。

本书的所有内容仍然可以归类为“软技能”,因为我会更多地谈论你需要知道的东西,以及从理论上讲解行动项,而不是单纯地讲如何去做。

我坚信,在我们的周围以及我们的行业中仍然缺乏这种智慧,我坚信学习软技能比学习某一种特定的编程语言或框架具有更隽永的价值。

本书分为以下5篇,就像我在《软技能:代码之外的生存指南》一书中所采用的结构一样,每篇都由若干规模较小的章组成:

本书的主要目标就是:不管你身处软件开发职业生涯的哪一个位置,你都可以从本书中获得一些东西,这些东西将帮助你的软件开发职业生涯跃迁到更高水平

应该如何使用一本书似乎是显而易见的事情。

使用一本书(如这本书)最实用的方法,就是把它拿起来开始阅读。(当然,如果你有一本印刷版的纸书,而且它又足够厚实,你还可以利用它来垫高你桌上的显示器。)

阅读本书的时候,你当然可以一口气从头读到尾,我想这也是大多数人会选择的阅读本书的方式。但是,你也可以选择一章一章或者一篇一篇跳着阅读的方式。

假设你刚刚开始投身于软件开发工作,甚至你还没有真正学会编程,在这种情况下,选择从本书的第一篇“入行成为软件开发者”开始阅读,获益最大,因为这一篇的内容与你关联度最大,碰巧它也是本书的第一篇“入行成为软件开发者”。

假设你已经有一份软件开发的工作,已经具备了好几年的编程经验,你可以直接跳到第四篇“软件开发者的日常工作”或者第三篇“关于软件开发你需要知道些什么”。

或者你只是对如何推进自己的职业生涯感兴趣,在这种情况下,选择直接跳到第五篇“推进你的职业发展”将是最审慎的行动策略。

同样,本书中的每一章都是独立成文的。因此,你也可以通过浏览目录来选择哪些章适合你,或者可以用来回答你当前以及未来的各种问题。本书之所以设计成这样,是因为我知道,软件开发者所面临的情况和问题在职业生涯的不同阶段会发生改变。

当你刚入行的时候,你想学习如何开始,但也可能你想要获得一些关于学习新的编程语言或者新技术的建议。

你现在可能并不需要立刻工作,也不需要去谈判薪水,也没有机会去和一位令你讨厌的同事或者老板打交道,但是将来的某个时候,这些章的内容可能会与你当时的处境息息相关。以前,当我想回看某本书的某一部分时,我总是感到沮丧,因为我记不起它们在哪里了,它们湮没在其他章中去了。

因此,我努力试图让本书既可以被直接阅读,也可以成为你软件开发职业生涯的参考手册。

现在,在跳到第2章的实际内容之前,我来说说关于如何使用本书的最后一点。最重要的一点是,如果你不将我在这里写的内容付诸实践,那么这本书其实对你并没有多大用处

喜欢读书是一件好事。但是,即使你对书中作者的观点完全同意,但却不把学到的东西应用到自己的生活当中,那它就没多大用处。

不要给自己太大压力,也不用做大量笔记,更不用时刻告诫自己“在每一章的结尾都要做做练习”,或者强迫自己每天都要应用学过的东西。我会给你一种更加简单易行的方法——我自己使用的方法。

如果你真的想改变自己的行为,把那些优良原则和最佳实践应用在自己的生活当中,最好的一种方法就是让你的大脑包裹与萦绕在你想要融入生活的思想与观念之中

做到这一点的最好的方法之一就是反复阅读。这是一种低压力的吸收和应用信息的方式。我自己一直也是这么做的。有几十本书我读过很多很多遍,因为我的事业和生活从中受益良多,我真的想把这些书中的理念与哲学内化为自己意识的一部分。

因此,我非常鼓励你不断重复阅读这本书,特别是那些与你的现实情况关联度最大的内容,你甚至可以在日历上设置一个提醒,以一年或者其他你认为最有利的时间间隔再次阅读这本书。

除非你开始采取实际措施并付诸行动,否则我要和你分享的所有想法和策略对你或你的职业生涯都不会有任何益处。

为了尽可能简化“付诸实践”这件事,我把所有可用的资源集合起来,打包并称之为“软件开发者职业发展规划完整指南数字化工具箱”(可以Simple Programmer网站下载)。

这个“工具箱”里包含了一个个循序渐进的、可一步步操作的过程,例如,快速找到软件开发工作(即使在你没有任何经验的情况下)、备战软件开发工作的面试、赢得上司的青睐和同事的尊重、可以帮你捕获并杀掉讨厌的bug的“调试检查单”……

我真诚地希望,伴随着你的事业蒸蒸日上,伴随着你展翅高飞,本书能为你带来源源不断的价值。

好了,我们开始吧……

“如果你有一个梦想,你可以穷尽一生的时间去研究、去策划、去着手准备。

然而,实际上你最应该做的却是脚踏实地马上开始。”

——安德鲁·豪斯顿[1]

迄今为止,关于软件开发我最常被问到的问题就是:“我该怎样入行呢?”

在生活中,真正开始做某事的最大障碍无外乎“如何起步”。阻拦你成为你想成为的样子的最大障碍也是“如何起步”。无论是开启一项新的健身教程,还是着手开始马拉松训练,乃至于写书、创业,以及更具体的编程,最大的障碍都莫过于“如何起步”。

浪费无数的时间来争论你应该做什么事情易如反掌。与实际操练相比,读书和学习也如探囊取物一般简便。思考永远要比实际迈出去哪怕一步都要简单,无休止的争论应该采取什么步骤也要比实际行动容易。但是,秘诀就是,你需要亦步亦趋、循序渐进。

你只需鼓起所有的勇气并下定决心,你需要努力告诫自己:“我已经逡巡犹豫太长时间了,我已经夸夸其谈太多话语了。我已经有一个计划了,虽然可能不是最好的,但是我要竭尽全力去完成它。”一旦你这么做了,你就已经在路上了。

在你知道这一点之前,你要回望一下来时走过的路。你现在已然是一览众山小了,不需要抬头仰望星空。但是,在做到这一点之前,你确实需要有一个计划。

许多有志于成为软件开发者的人士拒绝迈出这坚定的第一步。还有很多有志于成为软件开发者的人士在迈出这一步时又显得太过于随心所欲了,他们任何准备都没有,也没有制订任何计划,凭着一股子勇气就纵身跳入这前途未卜的地方。

在本书的第一篇“入行成为软件开发者”中,我们将着重介绍作为软件开发者的入门级基本知识。我们将讨论如何制订一份成为一名软件开发者的切实可行的计划——在代码的世界里遨游需要学习哪些的技术技能,以及如何具备这些技术技能。我们还将介绍应该从何种编程语言入手,以及学习编程语言的最好方法,是自学、参加编程训练营,还是通过传统的大学教育。

在本篇,我的目标是让你熟知如何入行、如何制订一份切实可行的计划,以及如何实施计划、何时实施计划。

即使你已然是一名软件开发者,你仍然可能会认为这部分内容很有用。它可以帮你弥补自己的知识短板,更好地规划自己的职业生涯,以及决定如何在软件开发这一行里做好继续教育。(你也可以把这些有用的知识传授给你认识的还在为进入这一行而努力奋斗的人,作为对他们的指导。)

另外,你一定想下载本书附赠的“软件开发者技能评估”(Software Developer Skills Assessment)工具(Simple Programmer网站上可下载)。有了这个工具,你可以快速找到并缩短自己的技术差距,成为一名不负众望的软件开发者。

我可以向你提供关于软件开发的所有建议和信息,我也可以告诉所有你应该遵循的路径,但在你自己坚定地迈出第一步之前,这一切都是水中花镜中月。

  正如我说过的那样,你必须要相信这个过程。那么,让我们一起开始吧。

[1] 安德鲁· 豪斯顿(Andrew W.“Drew”Houston)毕业于麻省理工学院计算机科学系,是著名的互联网企业家、云存储行业Dropbox公司的创始人和首席执行官。Dropbox公司被称为硅谷TOP20的初创型企业。——译者注

如果你刚开始工作,找到工作的最好和最简单的方法之一就是实习。如果你想在微软、谷歌、脸书或者苹果这种所谓的“四大科技公司”中找到一份工作,这一点尤其关键。

许多大型技术类公司只雇用实习生或者经验丰富的软件开发者。实习为公司(雇主)提供了一个独一无二的机会,使其可以在雇用潜在员工之前对他们进行充分的评估。

如果你是刚入行的软件开发者,实习岗位也为你提供了一个独特的机会,让你体验到为一家公司工作是什么感觉——尽管你的工作职责可能不那么具体。

实习的机会可不是人人都有,所以如果你有机会赢得实习机会,尤其是在你刚入行的时候,我强烈建议你要抓住这个机会,即使薪水不是很高,甚至几乎无偿。在职业生涯的初期,以微薄的工资工作一段时间所付出的牺牲,从长远来看一定会有巨大的回报。

在本章中,我们将讨论什么是实习,并且对一些难题(如实习期薪酬、获得实习机会的方法)给出解答,我还会就如何当好实习生、如何利用好实习机会找到工作给你一些建议。

尽管你可能已经对这个词非常熟悉,但是我还是认为我们最好先谈谈什么是实习,尤其是软件开发领域里的“实习”。

实习通常是一个组织对刚入行的学生或者专业人士开放的临时职位——可能有薪水也可能没薪水。

与大多数工作岗位不同,实习岗位通常并不需要你具备任何工作经验。因此,对刚入行的你来说,实习的机会非常宝贵。没有经验很难找到工作,没有工作就很难获得经验。这听起来就是“第二十二条军规”[1]重现!

公司招收实习生的原因多种多样。有些公司想借此彰显自己“乐善好施,回馈社会”的企业形象,这种情况下提供的实习岗位实际上只是用于积极公关的象征性职位。(我会尽量避免自己陷入这种类型的实习工作。)有些公司想借此为自己注入新鲜血液,想从大学毕业生中招聘人才,并且借此机会培养青年才俊,从而让他们可以长期服务于该公司。不可否认,还有一些公司之所以开放实习机会就是为了寻求廉价劳动力。他们认为提供实习岗位是一种双赢的局面——在这种情况下,公司可以给毕业生实习的机会,而实习生也可以为公司完成一些不计报酬的工作(给正常职位但不计报酬是不可能的)。

我相信,企业要雇用实习生还有更多理由。但是,开发者为什么要去做实习工作呢?实习到底意味着什么?这很难说,因为做实习工作的原因和公司雇用实习生的原因一样多——这两者往往是相关的。

有些实习工作就跟真正的工作一模一样,那里的人们期望你成为软件开发团队中的一员,并且和团队中的任何其他成员一样工作。做这种类型的实习工作,通常会指派一位经验丰富的开发者作为你的导师,指导你、帮助你掌握做事的诀窍。

有些实习工作其实就是一场面对面的竞赛,公司雇用了好几个实习生,他们将为了某个职位而展开竞争。做这种类型的实习工作,一般所有的实习生都被安排在同一个团队中一起做一个“实习生项目”,这是一种双重测试,目的是观察每个实习生在这种环境下的适应性。

类似地,通常一家公司会挑选一个他们没有资源去完成的项目,然后利用实习生来完成这个项目。这种类型的实习工作也许是证明自己的绝好机会,弊端是你可能无法得到指导和帮助,很可能你只会被告知期待的最终结果是什么,然后就要独立自主地去完成它。

最后,还有一种实习工作,基本上你就是办公室里的一个“跑腿的”。这些类型的实习实在是没有什么含金量,因为你实际上可能无法加入那些将你作为新入行的软件开发者使用的、可以让你发挥技能的项目,你只会被安排去做一些端茶倒水的琐碎工作。

在签约成为实习生之前先了解一下你将做什么,这可能是一个好主意。你可以通过直接询问、联系以前的实习生等方式,了解一下这份实习工作的具体情况。

在开始下一个话题之前,我想再谈一谈那些“端茶倒水”式的实习工作的内幕。“端茶倒水”并不一定都是坏事。做好这些琐碎的工作可以证明你不会看轻任何工作,你愿意做好任何事情,这是一个非常令人钦佩的性格特征。有些公司正是通过这样的实习工作考察实习生的——虽然并不总是如此,但是常常如此。

这是一个很好的问题,而且如此复杂。

这其实真的是要看机会的。如果一个亿万富翁愿意招我为他做实习,我会公开表示:我将乐意接受没有任何报酬的实习工作,我愿意露宿在他家的草坪上,只是为了学习。我建议你也这么做。

话虽如此,但这并不意味着你不应该为你的劳动索取报酬。大多数实习工作都是有报酬的。甚至还有一些关于实习期工资支付的法律规定。我不是律师,所以我不敢就这些事务提出特别的建议,但是如果你对实习机会的报酬问题比较关切的话,你当然应该调查一下。

我想要说的是,当你考虑实习工作机会的时候,报酬是无关紧要的,因为如果将实习工作与报酬关联起来,那就太短视了。相信我,换一个场合我会告诉你如何成为谈判专家,让你能得到最好的工资待遇。但是,在讨论到实习工作时,就完全不是一回事儿了。之所以这么说,有以下几个原因。

当你想去参加实习的时候,你必须先考虑清楚什么才是自己想要的。通过一个你本来无法得到的机会获得经验,这才是你想要的,这也是最重要的——这样你以后才能找到一份高薪工作。

因此,实习并不是为了赚钱。这有点儿像学徒。如果你参加实习工作是以赚钱为目的的,你就错了。相反,你应该考虑一下,这种经历将如何帮助你促进你的事业发展,如何为你打开机遇的大门。当你以这样的方式去考虑问题的时候,时薪10美元、时薪30美元,抑或是什么都没有就是白干活儿,这还真的很重要吗?

总体上讲,实习工作是一份短期的工作,所以总体收入数额不会有太大差别。实习工作不应该成为你“耍小聪明干大蠢事”的地方。因此,如果你可以得到报酬,那当然要收钱,但不要让薪酬成为考虑要不要去实习、要去做哪份实习工作的重要性因素。

我宁愿为一个亿万富翁免费工作,也不愿为得到一大笔钱而浪费自己的时间为一个白痴工作。

现在,我们来讲重要的部分:如何实际获得实习机会。

这并太容易。职位不多,竞争激烈。每个人都衣着光鲜、西装革履,渴望获得职位。你该如何脱颖而出才能申请到实习岗位呢?

如果你在上大学,申请实习岗位显然是你首先要去做的事情。大多数大专院校都有实习项目,你可以注册,他们可以帮助你申请。对我来说,这个问题不需要思考。然而,这可能并不是获得良好实习机会的最好方法。稍后我会有更多的介绍。

如果你没有上大学,而是依靠自学,或者你参加了编程训练营而没有找到工作,那么为了获得实习岗位你就要变得更富有创造力,当然这并不是一件坏事。

如果你搜索关键词“软件开发实习工作机会”,你会找到成千上万个供人们申请的实习岗位,你甚至会发现专门发布实习岗位的网站。去网站上申请吧,看看有哪些你觉得有趣的岗位——这并不算是一个糟糕的主意。但这依然不是最佳方法。

想想看,有多少人都是这样去申请实习岗位的。想想看,有多少无良的、劣质的公司,正试图通过发布实习工作机会获得极其廉价的甚至是免费的劳动力。

想要更好的主意吗?看看这个怎么样:自己找个实习的机会。我不会申请那种已经存在的实习机会,我会自己找个实习的机会。

首先,我会弄清楚我居住的地方有关实习和雇用的所有法律条文,我会从法律和文书工作的角度找出招聘实习生的确切方法。我做好了上述所有研究,这样如果我去找一家没有实习计划的公司,我就能向他们展示提供实习岗位对公司的好处,以及设立一个实习项目有多容易。(我甚至愿意成为他们公司的第一位实习生。)

接下来,我会列出一份公司清单——我觉得在哪些公司可以获得最宝贵的经验,可以为它们做出最大的贡献。我会努力找出本地公司里有哪些是我想为其工作的,或者哪些公司能够为我提供一些良好的经验与学习机会。

然后,我会拿着这份清单,试着找出在哪些公司里有我认识的人,或者我认识的人中有谁认识这些公司的人。

做完这些之后,我会选择最有希望的公司并潜心研究它们。我会了解该公司的历史,它们生产什么产品,谁曾经为它们工作过,它们有哪些工作岗位,以及这些岗位的工作内容是什么。我会在社交媒体上查到在这些公司里工作的人的资料,我会试着联系他们中的一些人,向其解释说:“嘿,我对这个行业很陌生,但我想好好学习一番。我能请你喝杯咖啡聊聊吗?”

最后,我会开始直接联络这些公司(当然最好是通过我认识的人或者我请喝过咖啡的那个人),然后我就开始做自我推销。我会向他们展示我会如何为他们的项目增加立竿见影的价值,我会向给他们提供一些真实的细节信息,这些信息来源于我之前对他们公司的了解,或者与在那里工作的人的交流。我会向他们解释我是多么渴望在这里获得实习的机会,我会向他们展示我愿意拼命工作去做任何事情的决心。我会非常具体地说明我能为他们做些什么,以及如果他们雇用我作为实习生会给公司带来的价值。我甚至会给出一些具体的例子,说明我可以立即开始为他们工作的项目。

如果他们反对,或者说他们没有实习项目,我会说:“没问题。我可以告诉你如何设置一个。”然后我会重申一下,如果他们公司立即开始着手实施实习项目对公司的长期价值。

看到了吧,我不喜欢为了争取一个机会而与一群人拼个你死我活。我喜欢为自己创造机会。我可以以一家企业的负责人和企业家的身份坦诚地告诉你:如果有人以这种方式接近我,试图在我的Simple Programmer找到一份实习工作,他们成功的机会会很大。

如果你要去参加实习生面试,下面是我最应该强调的几个要点。

不要试图炫耀你的技能或者经验,也不要试图用你的所学来打动面试官,专注展示上述这些特质,以及你的基本工作能力,你会给面试官留下更好的印象,千万不要试图说服他们你有10年的编程经验(而实际情况其实为0)。

现在你得到了实习机会,所有的事情正在按部就班地进行。

现在该干什么呢?我知道你想让他们都一一折服,然后为你提供一个全职岗位,但是你该如何展现足够的力量让他们欣然同意呢?让我们从那些在实习生和实习计划中遭受重大挫折的公司说起——为什么有那么多公司认为即使可以获得免费的劳动力,设立实习生计划也是得不偿失?

让我从自身经验说起吧,因为我的公司目前没有实习生计划。

实习生通常是令人厌烦的一群人,因为你需要不断地监督他们工作,不厌其烦地回答他们的问题,告诉他们该做什么。事实上,招聘一个免费的实习生,看起来不花钱,实际上要花掉我更多的钱。为什么呢?因为我不得不花费宝贵的时间告诉实习生该做什么,纠正他们的错误,我实际上是在浪费自己的时间和金钱。

作为实习生,你如何改变这种认知?很简单,把方程式转过来。作为一名实习生,你的任务很简单:竭尽所能节省你老板的时间。这就意味着,你必须做到自我指导,自己发掘自己该做的事情,并在最低限度的监督和反馈下完成高质量的工作。

对你而言这可能不是理想的学习环境,但这是你要创造价值的最佳方式,不要把你自己变成惹人讨厌的人。但这并不意味着你得不到任何指导、什么也学不到,更不意味着你不得不独自创造出自己的项目。

总而言之,你应该明确地意识到,你在这里就是为了让其他人的工作更容易,而不是相反。这种“服务至上”的工作态度不仅会让你在实习期表现优异,还会让你走得更远,成为一名领导者,因为这正是真正的领导者所应具备的素质。领导者的作用恰恰在于能促使其他人的工作更轻松。

很明显,你必定会从实习工作中获益多多。相信我,如果以这样的心态做事,你一定会获益匪浅。

通过观察、预测需求,以及帮助他人完成工作和任务,你学到的东西要比自己埋头工作或者在别人指导下完成工作多得多。而且,实习的意义并不真的是为了获得经验、学习技能(不要误解,其实这两条你也都会逐一达成的)。获得工作岗位才是真正的目的。

我们这就来谈谈如何获得工作岗位。

现在你已经找到实习机会了。你已经向人们充分证明了你的能力,你是一个能让其他人的工作更容易而不需要频繁接受指导和监督的人,你已经令他们折服。现在,是时候成为正式员工了。但是,该怎么做呢?

好消息是,如果你已经做了上述我告诉你的所有事情,这一步应该是水到渠成。事实上,在这种情况下,正式工作的机会应该是唾手可得的,你几乎都不用特别做什么。

如果你加入一个团队之后立即可以对团队有所贡献,让他人的工作变得更容易,并且在不需要频繁指导的情况下就能够产出高质量的工作产品,那么在你的实习期结束的时候,你工作的公司将毫不犹豫地雇用你。

我可不是开玩笑的。我可以负责任地讲,作为一家公司的负责人,如果你能向我证明你的能力,使我得到的比我付给你的薪水更多,我没有理由拒绝你,我绝对会向你保证,我会雇用你。

如果你在做实习生工作期间为你的雇主创造出尽可能多的价值,那么在实习结束后,你就不用做任何事情了,守株待兔就好。他们会追着让你加入,因为他们不想失去你——他们不想损失如此宝贵的资产。

不过,如果出于某种原因,他们没有来敲你的门,这时你发一封礼貌的电子邮件询问一下将是一个好主意。在邮件里,说说你真的很喜欢在这里工作,真的很喜欢他们给你提供的机会,然后礼貌地要求下一步你希望继续保持这种关系。但是,老实说,如果你已经到了要发这封电子邮件的田地,那么你的实习生工作可能做得不太好。

不过,如果你搞砸了,或者如果从一开始你就没有找到实习机会,那也不用担心,还有希望。接下来,我们将讨论入行得到软件开发职位的“艰难之路”——在既没有经验,又没有实习机会,只有满腔热血的情况下,如何获得工作。

[1] 此处原文为“catch-22”,出自美国作家约瑟夫·海勒创作的长篇小说《第二十二条军规》。在这部小说中,根据“第二十二条军规”理论,只有疯子才能获准免于飞行,但必须由本人提出申请,而一旦提出申请,恰好证明你是一个正常人。因此,人们常用“第二十二条军规”来比喻自相矛盾、不合逻辑的规定或条件所造成的无法摆脱的困境或难以逾越的障碍,让人们跌进逻辑陷阱、陷入死循环而处于左右为难的境地。——译者注


通常,新入行的开发者认为,知道大量的编程语言是很重要的,然而事实并非如此。

虽然我认为大可不必成为每一门编程语言的专家,但是我依然坚信,对主流的编程语言要有所了解,并且知晓它们之间的差异还是非常必要的,这样你就可以清楚地知道每种语言工具可以用来做哪项工作。

在本章中,我将介绍我认为你应该熟悉并且可能会用到的主流编程语言。当然,这只是基于我个人的认知,肯定会有一些疏漏。

我知道很多人会不同意我的观点,但我对编程语言的看法来自我使用它们的经验。我相信,即使你不完全同意我对编程语言的选择和对它们的描述,你也会发现大多数有经验的开发者至少会同意我在这里所说的75%的内容。正如你可能已经了解的,在软件开发领域,75%意味着人们的信心指数已经很高了。

此外,你还会注意到,本章的讨论中没有把类似COBOL、Ada、Fortran等编程语言列入其中,这是因为即便有人还在坚持它们也是主流的编程语言,但是今天你是不会经常看到它们了,所以我认为不值得在这里讨论它们。

如果你想要一份完整的编程语言列表,你可以上维基百科上浏览。

C语言最初是由贝尔实验室的Dennis Ritchie于1969—1973年间创建的,C语言是当今仍在被使用的古老编程语言中的一种。尽管它已经被人们使用了很长时间,但今天它依然深受欢迎,可以说是全世界使用范围最为广泛的编程语言。如今的许多其他的主流编程语言都起源于C。

事实上,如果你学会了用C语言编写程序,你可能会发现学习其他语言(如C++、C#、Java、JavaScript以及其他语言)将变得非常容易。

因为C语言功能非常强大,所以它也是一种学起来颇为棘手的语言。C语言工作在非常底层的位置,它允许开发者直接访问计算机的内存,操纵计算机的许多底层部件。你会发现C被广泛应用在操作系统、底层硬件、嵌入式系统等方面,甚至还有很多老款游戏。

C语言通常被认为是面向系统的编程语言。

C++是一种经常与C混用的编程语言,这主要是因为许多C++程序员没有掌握C++语言中“面向对象”的概念,所以只能写出所谓“具备C++语言一些特性的C代码”。如果你正维护某些用C++编写的古老的系统,你可能会看到大量这种类型的代码。

从技术上讲,C++是C的超集,这意味着C程序可以在C++编译器编译成功(尽管会有一些例外情况)。

C++是由贝尔实验室的Bjarne Stroustrup创建的,用以扩展C语言,以便融入Simula[1]中的一些功能强大的面向对象特性,如对象、类、虚拟函数和许多其他特性。

今天,C++仍然被广泛应用,特别是在游戏开发中,而且它还被一直持续更新着,现在被称为“现代C++”。

但是,C++是一种非常复杂的语言。我不建议初学者从C++这种高复杂度的语言开始学习。它就像手榴弹一样威力强大,但就像人们说的那样,一不留神也会炸断你的双脚。

C#一直是我最喜欢的编程语言之一,因为它功能强大、使用简便。我觉得C#是一种设计优雅的语言。即使在今天,它的发展和演进速度似乎也相当迅速。

C#最初是微软专门为.NET运行时(.NET Runtime)开发的旗舰语言。它是由Anders Hejlsberg创建的,他还深度参与了Delphi和Turbo Pascal语言的创建工作。

最初,C#与Java非常类似。事实上,它被称为“Java的副本”。这种说法我并不反对。事实上,我之所以开始学习C#就是因为我了解Java。在我看来,它们几乎是一模一样的,只是有几个细微的差别。

不过,近年来C#和Java的区别越来越大。不过,我还是要再说一遍,如果你学会了这两种语言的一种,那么你其实已经学会了另一种语言的90%。

C#是一种面向对象的语言,表达方式类似于C++,但是要比C++简单得多,而且现在还具备许多函数式特性。

Java和C#非常类似,但是它的年代更为久远。因此,从技术上讲,应该说“C#和Java非常类似”。

Java是Sun微系统公司的James Gosling在1995年创建的。Java的理念就是“一次编程,到处运行”,即Java运行在虚拟机上,而虚拟机可以运行在任何计算平台上,这样使用Java编写的程序就能够轻地实现跨平台运行。

Java也是面向对象的语言,主要语法基于C和C++,但是与C#一样,Java也非常简洁,不允许直接对内存进行操作,也不允许其他可能带来麻烦的对底层构造的操作。

如今,Java版权归Oracle公司所有,并且依然在发展壮大中。不过,它现在由一个委员会负责管理,委员会的成员倾向于放慢Java更新的速度。

Python是我希望有一天能够深入研究的语言之一。这是一种非常优雅且简洁的语言,它的核心目标之一就是提高语言的可读性。

Python是在1989年由Van Rossum创建的,他在Python社区里被称为“仁慈的终身独裁者”。

Python可以以面向对象的方式编写,也可以以过程式甚至函数式的方式编写,它是一种解释型语言,这意味着实际上它不被编译。

与C、Java和C#相比,Python代码通常要简洁得多,因为可以用更少的代码行来表示更多的语义。

据我所知,如今Python非常流行,并且越来越深受欢迎。它也是谷歌使用的主要编程语言之一,并且非常适合初学者学习和掌握。

Ruby也是一种非常有趣的语言。

Ruby实际上是由Yukihiro“Matz”Matsumoto于1993年前后在日本创建的。(我很荣幸,Matz是《软技能:代码之外的生存指南》日文版的审稿人。)

Ruby的思路是创建一种面向对象的脚本化语言。然而,直到最近几年,Ruby才真正开始流行起来,成为一种主流的编程语言。

Ruby on Rails(RoR)是Ruby得以成功推广的重要催化剂之一,RoR是由David Heinemeier Hansson(也被尊称为DHH)于2003年创建的。

从那时候起,Ruby的流行程度才有所上升。今天,它仍然是一种非常流行的编程语言,因为用它编程,轻松简单、乐趣无穷。事实上,这也是Matz设计Ruby语言时追求的主要目标。

你会发现许多编程训练营都将Ruby作为主要的编程语言,因为Ruby是一种对初学者非常友好的语言。

这里还要提到另一种非常有趣的编程语言,它就像打不死的小强一样,一直身处主流编程语言之列。

JavaScript始于1995年,最初是由布兰登·艾奇(Brendan Eich)在短短10天之内创建出来的。因此,可以想象,这么短时间内创造出来的语言一定问题多多。JavaScript看起来有点儿像C#,也跟Java和C++类似,但是它的行为跟它们却大相径庭。

JavaScript最初被用作用于开发Web的一种简单的脚本化语言,但我确信,你已经发现了,如今它已经成为Web领域的主要开发语言,而且大有超越Web领域之势。

新版本的JavaScript,或者更准确地说,ECMAScript,已经修复了JavaScript的许多缺陷,使其更加适合大规模。

因为它的应用范围如此广泛,所以今天几乎每一个Web开发者都必须要对这种语言有一定程度的了解。


向John提问:为什么JavaScript设计得不是很好还能成为一门流行的Web开发语言呢? 

这其实是一个很好的问题。

我想要说的是,JavaScript之所以能够大行其道,其实与语言设计得好坏无关,也与它是否适合Web开发无关,真正的原因在于是它的方便性,以及它生逢其时。

在刚开始有Web应用的时候,几乎每一种浏览器都内嵌了JavaScript,它主要被用于完成一些简单的操作,比如显示弹出窗口或者对话框,并不像今天这样。而且,JavaScript并不需要编译,因为它是一种解释型语言。

这就意味着,这种语言可以嵌入浏览器内运行,每次只需要执行一个命令而不必预先编译好。对Web环境而言,这相当方便,因为JavaScript可以与Web页面一起交付,并在浏览器内执行。

随后,其他技术,比如Flash以及其他一些脚本语言,也出现了。有些人会认为它们更加优秀,但我认为JavaScript最终还是赢家,因为你会发现它无处不在,所以Web开发者至少需要了解JavaScript的基础知识。


尽管Perl已经不再像以前那么风光无限,但它仍然是一种被广泛使用的语言,特别是在Unix脚本化空间中。

实际上,Perl最初就是作为Unix脚本化语言由Larry Wall在1987年创建的。

当基于Web的应用开始出现的时候,Perl因其灵活性和能够解析字符串的超强能力而广受欢迎,这使得它非常适合编写CGI脚本。(如果你不知道CGI是什么,那也不用担心,而且你应该觉得自己很幸运。)

我一直有点儿讨厌Perl,因为我发现它是一种难以阅读的丑陋语言。但是,尽管我对这种语言心有腹诽,然而我还是不得不承认,Perl被设计得如此精准,所以它被誉为“像瑞士军刀一样可以精准分割的脚本语言”还是名副其实的。

Perl非常灵活,功能非常强大。只不过,如果我或者其他人用Perl写好一段程序,两天后自己都会看不懂。

这是一种让人爱恨交织的语言,包括我自己。

PHP并非一种设计优雅的语言。事实上,在我看来它还有点儿“脏”,但它和JavaScript一起,支撑了今天绝大多数的Web应用开发。

脸书最初就是用PHP写的,广为流行的博客软件WordPress也是用PHP写的。许多广受欢迎的网站至少在起步的时候都是用PHP写的,甚至很多网站至今仍然是用PHP写的。

PHP最初是由Rasmus Lerdorf于1994年创建的,实际上在2014年之前它并没有任何严格形式的书面规范。(是的,你没看错。)

PHP的设计者从来就没有打算让它成为一门编程语言。它只是一组动态工具,用来帮助构建简单的网页,但所谓“虎兕出于匣”,一旦PHP被设计出来,它的发展就不会只顺从设计者当初的设想了。

尽管PHP存在这样或者那样的缺点,但是易于学习和使用——尽管PHP里面也有许多盘根错节的小道会让使用者迷失其中。

PHP并不是我喜欢的语言,但许多初学者都是从修改已有的PHP代码开始的,这样可以磨炼自己的韧劲。

这是另外一种在短短几年内就从默默无闻登上了大雅之堂的语言。

Objective-C最初是由Brad Cox和Tom Love在20世纪80年代初创建的。基本的设计思路是把Smalltalk里面向对象的特性添加到C语言里。

后来,Objective-C被广大程序员遗忘了,几乎都已经消逝了。然而,苹果公司又把它重新捡了起来,决定在Mac OS X操作系统上使用它。

尽管如此,它还是没有广泛流行,因为只有Mac开发者才会真正使用这种语言。一直到Apple推出了iPhone和iOS,它们吸引了数以百万计的新程序员来跟这门语法奇特的语言开始死磕。

我就是这些程序员中的一员,我必须要学会Objective-C,以便于把我的第一个Android应用程序移植到iOS上。我不得不承认,我不太喜欢这种语言。它的学习曲线弧度很高,想做最简单的事情也得经过相当长时间的学习。

幸运的是,iOS开发者今天不必非得学Objective-C了,因为有一门稍微友好一些的语言出现了,那就是Swift。

这门编程语言是苹果新一代iOS上应用的旗舰语言。

我承认,在撰写本章的时候,我还没有摆弄过Swift。不过,如果我现在再开发iOS应用,我肯定会学学这门语言。

Swift是一种被特意设计出来与苹果的Cocoa和Cocoa Touch框架(用于iOS和OS X开发的框架)一起工作的程序设计语言。它也被特意设计成易于与大量现存的Objective-C代码集成在一起。

Swift支持Objective-C的许多流行的特性,使Objective-C不但变得更加动态、更加灵活,而且还比Objective-C简洁易用许多。

如果今天你要投入iOS开发,我建议你考虑跳过Objective-C直接学Swift。

Go语言是谷歌公司创建的一种相对较新的编程语言。

我非常喜欢它,因为它很简洁也很强大。(我创建了一个关于Go语言的课程,你可以在Simple Programmer网站上找到它。)

Go语言是由Robert Griesemer、Rob Pike和Ken Thompson于2007年创建的,与C语言非常类似,但是与C语言相比也有很大程度的补充和简化。

与C不同的是,Go具有垃圾回收的功能,所以你不必操心内存管理。它还内置了一些并发编程的特性,使其具有极强的性能,并发特性随之也成为该语言的招牌特性。

当你开始使用它来编程的时候,你一定可以感受到它的语法的简洁程度,你也一定会认为它是一种设计得很优秀的语言。

和C语言一样,Go语言主要也是一种面向系统的编程语言,但它也正在被扩展到更多的应用领域,包括Web。

Erlang是一种功能强大、非常有趣的编程语言,具有分布式和并发的特点。它还支持代码的热交换,你可以更改应用程序中的代码而不停止运行它。

它最初是由爱立信的Joe Armstrong、Robbert Virding和Mike Williams于1986年创建的,在1998年被开源。该语言最初是为帮助改善电信应用程序的开发而创建的,因此才会具备“代码热交换”特性,因为你肯定不能忍受电信级应用程序中止运行。

Erlang很容易被认为是当今编程世界里最为健壮的编程语言(和编程环境)。

从本质上讲,Haskell是一门非常学术性的编程语言。

Haskell是一种纯函数式编程语言,它最初是作为一种开放标准设计的,应用于在1987年间存在的少数几种函数式语言。它的设计理念是将当时已有的几种函数式语言整合成一种函数式语言,用于函数式编程语言的设计研究。

不管你信不信,Haskell 1.0是在1990年由一个委员会设计的。近年来,Haskell越来越广受欢迎,并不仅限于学术界。

由于Haskell是一种纯函数式语言,具备强大的静态类型系统,因此学习和使用这门语言非常困难。但它同时也是一种非常强大的编程语言,可以产生高度可预测的代码,没有任何副作用。

再强调一次,我想重申一下关于上述所有编程语言的一些东西。

显然,如果你最喜欢的编程语言不在此列,原因可能是下面两者之一:一是我对年代很敏感;二是我的认知充满偏见。

我把有关上述编程语言的细节也一带而过了,因为我不想卷入静态语言与动态语言的纷争,也不想陷入面向对象语言和过程式语言与函数式语言的大战。如果你想深入探讨这个话题,我建议你在我的博客上阅读“类型与编程语言”(Types and Programming Languages)。

事实上,在如今的编程环境中,许多编程语言并不能按照固有的分类方式来打标签的——是静态还是动态的,是面向对象的还是函数式的,因为许多语言混合了多种特性。

相反,你只需要对当前都有哪些主流编程语言有一个概念,对每一门编程语言建立起一个快速的印象。这样,如果你对其中某一门语言感兴趣,可以再去深入探索。


向John提问:但是你没有列出我最喜欢的编程语言啊!Rust呢?Cobol呢?还有Scala和Lisp!我需要了解它们,我需要了解什么是解释型语言,什么是脚本,什么是编译器…… 

别急,别急,深吸一口气,数到10,现在呼气。

现在我来向你解释一下。

你的诉求我都听到了。我在前面已经解释过了,我对前面要介绍那些语言其实是有偏见的,我可能并没有把你最喜欢的语言包括在内。不过,这一切都是善意的。本章的目的并不是告诉你编程世界里可能会存在的每一门编程语言,而是向你概括介绍其中一些主流的编程语言。是的,只是一些。

而事实是,你也并不需要了解每一门语言。

我知道Baskin-Robbins[2]有31种口味,但这并不意味着,你在做出决定要买哪种口味之前需要拿着一只粉红色的小汤匙尝遍每一种口味。

因此,别担心。如果你看到前面的讨论中缺少了某种语言,也没有关系。如果你对哪门语言真的感兴趣,那你不妨自己查一下它。

至于我的观点,我不过是想让你浅尝辄止,对那些风靡软件开发界的编程语言建立起初步的认知。至于解释型语言、编译器、静态类型和动态类型等这些佶屈聱牙的概念,没错,理解这些概念的确很重要,但是要想把它们解释清楚可不是短短一章的篇幅能够做到的。

本书这一篇的重点是让你知道你需要知道的东西,这样你就可以在心目中勾勒出一幅蓝图,以便今后可以更深入地研究这些东西。

因此,不要误会我,我之所以没有谈论编程语言的工作机理,并不是因为我认为它不重要。这些东西绝对重要,只不过关于编程语言设计理论的著作随手一抓一大把,这些书才是深入涵盖所有概念和理论的典籍。


好吧,我们就此结束对编程语言走马观花式的简要介绍。接下来让我们讨论一下软件开发工作的不同类型,以及软件开发者的不同类型。

[1] 这里应该指的是发布于1967年5月20日的Simula 67语言,它是公认的最早的面向对象程序设计语言,引入了所有后来面向对象程序设计语言所遵循的基础概念——对象、类和继承。Simula 67语言由挪威科学家Ole-Johan Dahl和Kristen Nygaard创建。——译者注

[2] Baskin-Robbins(美国31冰淇淋)是Burt Baskin和Irvine Robbins二人创立的冰激凌全球连锁店,成立于1945年,因其主打概念“每月31天,每天一个口味”而著称于世。——译者注


你的软件开发职业生涯中最重要的事情之一,比学习最新的编程语言或者JavaScript框架都要重要的,那就是建立起稳固的声望

成为一名优秀的程序员,拥有高水平的技术能力,是很棒的,但它只能带你走到这一步。如果你真的想要出类拔萃,你真的想把你的事业提升到一个更高的水平,你就需要学会如何建立起稳固的声望,包括如何推销自己、如何打造个人品牌,这些将为你打开常人难以企及的机会之门。

我是怎么知道这一点的呢?我相对无知(好吧,完全无知)地花了自己软件开发生涯的大部分。我努力发展我的技术能力。我花了很多时间磨炼我的手艺,我阅读了一本又一本有关软件开发的书,我阅读博客、学习新技术,并且勤于实践我已经学到的东西。我在我的团队中指导其他软件开发者,给他们传授技艺。

曾经,作为一名软件开发者,我尽我所能以最佳的方式提升自己。现在,我不会告诉你我当时的努力没有获得成功。我当然大获成功。我的事业发展相当不错。我时不时地换工作,但总体来说,我得到了一些不错的工作和机会,尽管也没什么特别重大的机会。

然后,我很快就撞到了玻璃天花板”。作为一名软件开发者,我无法真正赚到更多的钱,我对此无能为力,至少我自己是这么想的。

然后我开设了我的博客——Simple Programmer。最初的想法只不过是在博客上写一些被某些软件开发者搞得非常复杂的话题,而我认为他们之所以把这些话题搞得如此复杂不过是为了让自己看起来更聪明、更有价值。这就是我把博客叫作“让复杂的事情变得简单”的原因。

但在我开始写作之后,越来越多的人开始阅读我的博客,于是一些有趣的事情就发生了。当我去参加编程训练营活动时,有些人知道我是谁,或者他们至少熟悉我的博客。我开始联系一些流行的播客,希望能为他们的节目接受采访,越来越多的人开始了解我是谁。

很快,我就开始收到工作邀约,而不仅仅是通过电子邮件从垃圾邮件招聘人员那里得到工作机会。然后有一天,当我坐在办公桌前时,我接到一家公司的电话,他们当时就决定要雇用我。什么面试都没有,什么手续也没有。他们公司所有的开发者都是我博客的读者,他们全都听过我的播客,或者参加过我在Pluralsight上的视频培训课程。我感到难以置信。我从来没有听说过,没有面试也能得到一份工作。从那之后,类似的事情越来越多。

我专注于积极主动地打造个人品牌,努力推销自己,事实上,我也开始向其他程序员讲授如何做到这些——须臾之间,我的头突然就撞破了那一层玻璃天花板。于是,很多很多机会以我从未想到的方式向我飞来。

回首往昔,我必须要说,正是当初开设博客的决定使我赚到了数百万美元,让我“提前退休”,并且引导我开拓出自己的事业——Simple Programmer。

现在,你不必复制我从前的道路,并非每个人都想提前退休成为一名企业家,但你不想得到你梦寐以求的工作机会吗?你不想赚到更多的钱吗?你不想在广为流行的软件开发杂志上读到自己撰写的文章,哪怕只有一次吗?这难道不是很酷吗?

很好。在本章中,我将向你展示如何做到这些。

在我们讨论如何让你作为软件开发者建立声望之前,让我们先来谈谈名扬四海的好处。

举个例子。想一想一位真正优秀的厨师和一位明星厨师之间的区别。一位真正优秀的厨师可以赚到相当多的钱,但是一位经常上电视的明星厨师却可以赚得盆满钵满

为什么呢?这真的和厨艺高低有关系吗?真的,问问你自己,年薪100万美元的厨师与年薪10万美元的厨师相比,厨艺真的能好10倍吗?你觉得这可能吗?我是说,我喜欢美食,我喜欢食物,但食物就是食物,无非就是味道很好而已。

因此,如果区别不在于技能,那么区别又是什么呢?没错,区别就在于声望。从本质上说,就是看谁更出名。你可以在音乐家、演员、整形外科医生、律师、房地产经纪人等你随便能说出来的行业里看到类似的现象。

关键是,名声让你得到不平等的回报。你得到的报酬比凭着你的技能所应得的多得多。

这是一件好事,一件非常好的事情,如果你能做到的话。但是,如果你很有声望,如果你是“名人”,你能够得到的还不只是薪水更高。你会让人主动来找你,追着要给你工作、给你机会,而不是你不得不走出去追逐他们。

这真是太棒了。

非常不幸,我把我关于软件开发者如何建立声望和打造个人品牌的旗舰课程命名为“软件开发者如何自我营销”(How to Market Yourself as a Software Developer)。

为什么我说选择这个命名是“非常不幸”的呢?因为,在那个时候,我没有意识到,大量软件开发者反对自我营销以及任何一种营销的想法,特别是营销自己。

这并不意味着这门课程没有价值,也不意味着它卖得不好,事实上,这门课程我卖出了成百上千套,它教会了许多软件开发者如何营造我们一直在谈论的“名气”。但是,如果我可以把它命名得更好一点,我可能就不会遭到很多程序员一听到“营销”这个词汇就产生的那么强烈的反弹。

但是,不管其他开发者如何反弹,你必须要克服这个障碍。你必须认识到,自我提升、品牌建设和自我营销都不是坏事。关键在于你该如何做到。

我经常引用公式

技能 × 营销 = $$$

你可以将其改写为

实质 × 风格 = $$$

编程能力 × 声望 = $$$

我的一位朋友,杰森·罗伯茨(Jason Roberts),发明了一个类似的短语用来定义这种现象——“幸运的表面积”。

基本上他提出来的是这样一个想法:你可以成为世界上最好的程序员,但如果你只是独自一人坐在你的地下室里,除你之外没有人知道你身怀绝技,那你还是不为人知。你不会有太大的影响力,但是,如果你能走出去做一点儿自我营销的工作(我们很快就会谈到如何做到自我营销),你就能取得令人瞩目的成果。

事实上,你都不必一定要成为世界上最好的程序员。我就不是。我不是“最好的”程序员,但我是“名扬四海”的程序员(至少在编程领域是这样的)。我宁愿拥有中等水平的技能但声名显赫,也不愿拥有大量技能而寂寂无名。你不能只专注于如何成就“杰出”,这不是一个非常有利可图的职业发展战略。

在我的墙上,我贴着一张有框架的海报,它有两个维度——说和做。这两个维度可以有以下三种组合:

高谈阔论 + 无所事事 = 江湖骗子

沉默寡言 + 埋头苦干 = 烈士

高谈阔论 + 兢兢业业 = 真正有才干的人

要做真正有才干的人。


向John提问:但我就是想成为某个领域最好的,不想只拥有“中等水平的技能”。 

很棒,令人敬畏,甚至更厉害。

如果成为某个领域最好的,在这里我所说的每件事也会为你锦上添花。或者,如果不能做到最好,至少也有真才实学。(就像Derek Zoolander[1],确实很帅,就算你没有体会到也无妨。)

我的观点是,如果你只有一个选择,那么选择具有“中等程度的声望 + 中等水平的技能”要比“中等程度的声望 + 高水平技能”更为实用、收益更大。

在等式里,声望这部分所占的权重更大。

我知道这个公式可能会惹怒你,但这就是世界运转的方式。这个公式不是我发明的。我只是观察到了它,然后在这里向大家通报一下。


可以接受我的公式了吗?很好,我们继续。

在你能营销任何东西之前,你必须知道你在营销的是什么。如果你想要“风格造型与真才实学相辅相成”,那你就必须有自己的风格。那么,你该如何塑造自己的风格呢?

什么是风格?这看上去有点儿像现在那些爱耍酷的家伙所称的“个人品牌”。个人品牌就像任何商业品牌一模一样,只是它是代表你的品牌。当你在打造自己的个人品牌时,你需要做的第一件事就是明确定义你想要以什么著称于世。你一次只能挑一件东西,所以才这么难。(如何做到这一点?我们将在第51章中详细讨论。)

现在,让我们只讨论:如果你需要做一个简洁的电梯宣传,也就是说,如果你只能用一行字来代表你和你的品牌,你会怎么说?你要去侃侃而谈你所熟知的100种技术和编程语言,还是用一种简洁的方式来描述你自己和你的品牌,让人们“过耳不忘”?答案当然是后者。这样,当人们把你介绍给其他人时,他们会说:“嘿,这是Joe,他教人如何用Android制作动画。”

当我参加企业家会议或者活动的时候,人们会问我“你是做什么的”,这时我会回答:“我教软件开发者如何更酷。”实质上,这就是我打造的个人品牌。我关注软件开发者的个人成长,无外于此。Simple Programmer想要表达的亦是如此。

打造品牌就要从传递一个清晰明确、简洁直白的信息入手。你是谁,你代表什么。从这里入手,你可以继续深入创建一个标识,选择一组你惯常使用的颜色,选择一个你惯常使用的头像,等等。


向John提问:如果我只想成为一名雇员,那我真的需要做这些吗? 

不,你根本不需要这么做。

但是,我想问你,你为什么不愿做这些事呢?我的意思是,你不觉得拥有一个标识、一个清晰一致的信息、一个好的个人品牌和一个非常有型的头像将提高你获得优质工作的机会、让你在这个行业更受尊敬吗?

我知道这看起来可能有很多事情要去做,但只要一步一个脚印地往前走就好。

精耕细作你的职业生涯、努力打造个人品牌和形象,这些都是很重要的,因为从长远来看,这些小细节叠加在一起真的可以为你增色不少。


你可能从上面这一段的最后一句中了解到一个品牌的另外两个组成部分。如果你没有注意到,我在这里再强调一下:品牌的第一个组成部分是你要传递的信息第二个组成部分是视觉效果,也就是这是你的专属标志、颜色等;第三个组成部分是一致性。信息和视觉效果之间如果没有做到一致,那么这一切都会分崩离析,如果你想拥有一个不会昙花一现的品牌,那你就必须保持一致性。

所以挑选一个主题,然后持之以恒吧。尽管人们倾向于关注品牌的视觉效果,但其实你所要传递的信息才是更重要的,所以你应该从品牌想要表达的信息入手。

好吧,我撒谎了。对于任何一个品牌,你还需要再做一件事。

你看,你可以拥有一个很棒的品牌。你的品牌还拥有一条简洁明了、有的放矢的信息。你可以设计一个令人过目不忘的标识,比如一只青蛙拿着一把燃烧的剑。而且,只要是要用到你的个人品牌的地方,你都可以让你的品牌所要传递的信息与品牌的视觉效果保持一致。

但是,如果你没有做到反复曝光,那么这一切就都是徒劳的,还是不能构成品牌效应。人们必须能看到和听到你的品牌,他们必须不止一次地看到和听到你的品牌。

事实上,我想说的是,一个品牌需要在某个人面前曝光过四五次之后才会被记住,人们才会脱口而出:“嘿,我认识那个家伙。”因此,你必须站出来,站在人们的面前。你得把你的名字说出来。你会这么问我:“我该怎么做呢?”

关于这个主题,我已经制作了大量的内容,所以我不想再在这里重复了。在这里我来给大家快速介绍一下就好。

如果你愿意的话,你可以阅读《软技能:代码之外的生存指南》之“自我营销”篇,或者观看“软件开发者如何自我营销”课程来填补这方面的空白。

最基本的策略是要从一种渠道或媒介入手,学习如何掌控它并加以体系化的运用,这样你就可以利用这个渠道结出丰硕的成果,然后借此再把你自己的声望扩散到任何地方。

让我们把这个过程分拆开详细描述。

假设你说“我要开始开博客了,通过撰写博客文章来传播我的名字”。那么,博客就是你决定要去掌控的渠道。因此,你创建了自己的博客(如何做到这一点?看看我的免费课程),然后开始写作。最终,你会开发一个体系来撰写有效的博客文章。

也许,你可以为此而建立一个体系,这样你就可以专注于撰写博客文章,让别人来编辑你的博客文章、安排时间发表文章、添加图片等。(为什么听起来这么熟悉?[2])然后你就可以利用这个体系成为一名非常高产的博客写手,你开始从一周写一篇博客文章变成每周写三篇博客文章。现在你开始真正出名了。

你的声望在博客世界里持续传播着,于是你决定转战更多的渠道。你开启了自己的YouTube频道,开始接受采访,并且发送面向软件开发者的播客内容,也许还会为一本有关软件开发的杂志撰稿,并且在一些软件开发会议上发表演讲。

现在,你的品牌正通过反复曝光而进入人们的视野。现在,无论什么人,只要进入你的空间,他们都会找到你的文章、听到你的演讲或者看到你的视频。

坚持这么做,并且保持一致性,只要假以时日你必将名扬四海。

也许这个过程并没像那种搏出位的做法那样迅速成名,但是,通过这个过程你会建立起足够响亮的声望来大幅增大你的“幸运的表面积”。

下面列出的是可以让你出名的渠道或者方法:

事情往往是这样的:只是做了上述所有这些事情,而且想要成名,也不能让你成名。

我知道,我曾经说过,只要做到这些事情就会让你变得赫赫有名,但我也知道,我之前也骗过你——我曾经告诉你,你所要做的只不过就是设计一个很酷的标志、传递一个很酷的信息。这里,我又骗你了。

你必须要意识到,这里有一条重要的原则,同时也是一个重要的观念:你要为他人创造价值。如果你不是基于这条重要的原则做事,那么在这个世界上再完美无缺的品牌以及所有的自我推销工作都是徒劳无功的。

为他人创造的价值最好都是免费的。我的工作90%是免费的,只有10%是收费的。我的重点是给人们创造出尽可能多的价值,这样他们不仅会使用我所要传递的信息,而且更会帮我传播这些信息。我想让人们说:“嘿,创办Simple Programmer的那个家伙,那个叫什么John Sonmez的,不管他叫什么名字吧,那个家伙真酷,你真应该去看看他的东西。因为他,我不仅找到了一份工作,还找到了女朋友。”

你能做的最好的营销工作就是给别人的生活增添价值。你还应该被人们称为“给予者”。做一个其他人想和你在一起的人,因为他们觉得当他们围绕在你身边的时候,他们时受益的。

很多公司都倒闭了,很多品牌都失败了,因为他们试图从他们的客户那里榨取到最后一点儿利益。他们试图吸取价值而不是注入价值。

我向你保证,如果你能为人们的生活注入价值,能为人们的生活带来真正的改变,而且始终如一地坚持这么做,那么你一定会获得回报。

下面是我最喜欢的一句名言之一:


“只要你能帮助足够多的人得到他们想要的东西,那么你就能得到生活中你想要的一切。”

——Zig Ziglar[3],《金克拉销售圣经》(Secrets of Closing the Sale)(1984)


因此,不管你在做什么,首先要考虑如何让它为他人创造价值。

最后,你必须意识到所有这些事情都不是可以一蹴而就的。事实上,你需要坚持很长时间才能真正看到你的这些行动能够产生显著的成果,为你创造出不菲的声望。这就是你最好现在就开始着手打造个人品牌的原因之一。

很多时候,新入行的软件开发者会对我说,他们还没有准备好开设博客,也没有开始着手为自己建立声望,因为他们知道得还不够多。你永远也不会达到“知道得已经够多”的境地。你必须在你做好准备之前就开始,因为在你看到任何结果之前,准备的时间是漫长的。

即使你是编程新手,你也可以为人们提供一些东西。当你学习编程时,你可以分享你的学习历程,其他人会发现这很有用。你可以选择一个专业领域深入研究,然后把你自己从白丁变成专家的历程作为一个主题,向人们分享你的心得。对其他想要做同样事情的人来说,这段心路历程有巨大的价值。

因此,在你做好准备之前,及早着手,并且要有耐心。这一切都需要时间,但是只要你持之以恒,终将会开花结果。

问题在于:许多软件开发者开始写博客文章大约一年之后,没有看到任何结果就放弃了。如果想获得成功,你就必须愿意坚持更长时间。你可能需要两三年,甚至五年,但是只要你能坚持不懈,你终会到达成功的彼岸

大多数人终其一生也没有取得过任何伟大的成就,因为他们过早地放弃了。不要与他们为伍。

[1] Zoolander是由Ben Stiller导演,Owen Wilson和Will Ferrell等主演的一部美国喜剧电影,2001年上映。剧中的男主角Derek Zoolander是一位有些蠢萌,还有些自恋的男模。——译者注

[2] 如果你关注一下作者的博客,或者稍微浏览一下他发布的视频或播客内容,你会发现,作者在本节所描述的“名扬四海”的整个过程实际上都是他自己的亲身经历,所以他才会调侃“为什么听起来这么熟”。——译者注

[3] 金克拉(Zig Ziglar,1926—2012)是国际知名的企业家、演说家、畅销书作家以及全美公认的销售天王、最会激励人心的大师,曾荣获“密西西比州人奖”“全美演讲家协会影响力大师奖”“国际主持人金槌奖”。金克拉共有20多部著作,主题涉及个人成长、领导艺术、营销、信仰、家庭和成功学。这里提到的《金克拉销售圣经》这本书用700多个提问、100多个招式,指导如何找出潜在客户,如何用正确的心态、新颖的想象力和成功的话术营造有利完美销售的契机。(以上摘编自百度百科)——译者注


相关图书

ChatGPT与AIGC生产力工具实践 智慧共生
ChatGPT与AIGC生产力工具实践 智慧共生
程序员的README
程序员的README
专利写作:从创意到变现
专利写作:从创意到变现
人人都是提示工程师
人人都是提示工程师
产品经理方法论——构建完整的产品知识体系(第2版)
产品经理方法论——构建完整的产品知识体系(第2版)
开发者关系实践指南
开发者关系实践指南

相关文章

相关课程