新書推薦:
《
EDA技术与设计(第2版)
》
售價:NT$
387.0
《
揉碎浪漫(全两册)
》
售價:NT$
320.0
《
古籍善本
》
售價:NT$
2448.0
《
人民币国际化报告2024:可持续全球供应链体系与国际货币金融变革
》
售價:NT$
398.0
《
道德经新注 81幅作者亲绘哲理中国画,图文解读道德经
》
售價:NT$
653.0
《
清俗纪闻
》
售價:NT$
449.0
《
镜中的星期天
》
售價:NT$
347.0
《
世界前沿技术发展报告2024
》
售價:NT$
857.0
|
編輯推薦: |
专业:这本书是由韩磊、郄小虎、陈智峰、鲁鹏俊这4位业内知名高手联合打造的,他们长年坚守在软件工程行业的一线。
真实:这本书还反馈了行业的真实现状,不美化,不忽悠,让你清楚地知道将要面对的风险,甚至还会适时地“劝退”。
全面:不用再去网上搜集七零八碎、参差不齐的行业知识了。一本书帮你搞定对软件工程师的系统认识。
|
內容簡介: |
如果你是一名大学生,正在犹豫要不要入行软件工程。但不知道它的真实面貌是什么,隐形的代价有哪些,怎么办?
如果你刚入行软件工程,起初,你感到新奇而陌生,但是有一肚子的问题不知道问谁;后来,你想快速成长,独当一面,但是不知道该修炼哪些关键能力,怎么办?
如果你想转行做软件工程师,眼看着奔三奔四。学习和培训的门槛高吗?怎样快速学习,让理论变成实践?你每天焦虑不安,怎么办?
别着急!问题的根源来自于选择背后的不确定性。这本书就是让软件工程行业的高手,从入门到进阶,手把手带你预演一遍这个职业,大大降低你职业规划的不安全感和不确定感。
本书第一部分行业地图,带你俯瞰软件工程师有什么特点;第二至四部分从新手到高手,带你预演完整的职业进阶之路,帮你看清挑战和成长分别是什么;第五部分行业大神,带你领略软件工程师行业顶端的风景。第六部分行业清单,给你梳理行业历史、黑话和学习资料,让你求职能够脱颖而出。
|
關於作者: |
编著者:
丁丛丛:得到图书专职作者。
靳冉:软件工程师。
受访者:
韩磊: 增强现实领域专家,新媒体和社区运营专家,技术图书作、译者。2001年创办CoDelphi.com网站;2003年加入中文IT社群CSDN,历任网络总监、副总经理、总编辑等职。2010年加入广东21世纪传媒集团,历任信息中心CTO、新媒体事业部总经理等职。现任AR龙头企业亮风台公司产研副总裁。拥有美国Borland公司“Delphi产品专家”、微软公司“最有价值专家(MVP)”及“腾讯云最价值专家”称号。合著作品有《网络媒体教程》,合译作品有《Beginning C# Objects:概念到代码》,译有《梦断代码》《C#编程风格》《代码整洁之道》《Unix传奇》《匠艺整洁之道》等。
郄小虎:腾讯公司副总裁。前谷歌全球高级技术总监、谷歌中国研究院副院长、小红书CTO、滴滴出行副总裁。主导设计的系统包括Google AdWords、滴滴出行交易平台等,曾两次获得谷歌创始人奖。
陈智峰:谷歌大脑首席工程师。曾参与开发谷歌搜索和邮件系统使用的大规模分布式存储系统;近年来参与设计并实现了被广泛应用的机器学习开源系统TensorFlow,以及谷歌的新一代机器翻译系统和语音识别系统。
鲁鹏俊:前谷歌主任架构师(因QueST 项目获谷歌创始人奖)。曾任百度高级总监、欢聚时代CTO、唯品会联席CTO。
|
目錄:
|
行业地图
软件工程师为什么如此热门 14
软件工程师大多是什么样的人 18
“35 岁现象”“996”是怎么回事 21
做软件工程师能赚多少钱,机会在哪里 31
做软件工程师,底层驱动力是什么 37
成为软件工程师,必须面对哪些挑战 42
成为软件工程师,需要具备哪些条件 49
成为软件工程师,可能面对哪些风险 54
成为软件工程师,职业天花板有多高 59
软件行业最具发展潜力的领域有哪些 62
新手上路
入行前的准备
高中阶段,有哪些需要特别注意的问题 68
大学阶段,如何为步入职场做好准备 75
如何考量城市、平台、岗位,寻找合适的工作 83
如何准备简历、笔试、面试,成为受欢迎的应聘者 91
入行后的成长
入职初期很迷茫,如何快速进入新角色 101
如何跟同事打交道,跟他们顺利协作 111
如何练好基本功,写出好代码 121
如何防范、发现、解决 bug 131
如何在工作很忙的状态下高效学习 144
如何判断自己要不要跳槽 157
进阶通道
手艺上的精进
170 如何分析需求,明确模糊不清的问题
175 如何谋篇布局,做好程序设计
187 如何开展调研,找到最优技术方案
190 如何控制风险,避免发布前后出现意外
分岔路的选择
198 入行三五年,走管理路线,还是专家路线
203 如何成为一名优秀的技术管理者
213 如何成为一名优秀的技术专家
218 如何跟产品经理好好说话
高手修养
如何过难关
225 解决复杂问题,需要哪些高阶能力
229 攻克技术难题,有哪些值得借鉴的思路
如何做管理
235 如何搭建一支有战斗力的团队
243 如何推进技术团队之间的协作
247 如何推进技术团队和非技术团队的协作
如何思考底层问题
255 如何找到思考问题的脚手架
261 如何把软件行业的思想运用于其他领域
266 如何理解“技术是手段,而不是目的”
268 如何做出职业转型的重要决策
274 如何理解“利他就是利自己”
行业大神
丹尼斯·里奇:保持简洁 273
林纳斯·托瓦兹:只是为了好玩 276
吉多·范罗苏姆:允许不完美、保持开放 278
玛格丽特·汉密尔顿:拯救美国登月计划 281
杰夫·迪恩:开创分布式系统 285
法布里斯·贝拉:一个人就是一支队伍 288
行业清单
行业大事记 293
行业黑话 300
推荐资料 302
致谢 322
|
內容試閱:
|
你好,感谢你翻开这本书——《这就是软件工程师》。
你可能是一名有意成为软件工程师的大学生,也可能是一个对这个职业感兴趣的高中生或家长,还可能是一个刚成为软件工程师不久的职场新人。你手里这本书的任务只有一个,就是从你关心的问题出发,带你了解软件工程师这个职业。
为了完成这个任务,本书策划团队、编著团队投入研发,经过多轮调研、讨论、采访、整理、迭代,终于捧出两个“新”,专门服务于你。这两个“新”分别是“新视角”和“新连接”,我们逐个来看。
新视角:这是一个什么样的职业
提起软件工程师,很多人马上想到“码农”、格子衬衫、镜片超厚的眼镜、脱发之类的脸谱化概念。但是我们知道,这些概念没办法解答你关于这个职业的困惑。原因很简单,真正的软件工程师什么样,站在外面看是看不清的,传统课堂和书里也没有答案。而这本书,就是希望帮你从一个新的视角,看清内部图景。
比如,你可能会关心,如果做软件工程师,赚钱多不多,机会怎么样?
你可能早就听说过,软件工程师是一个“热门”“收入高”“机会好”的职业。而这本书希望帮你看到更多。它会告诉你,软件工程师不仅收入高,而且是近年来“我国城镇就业人口中平均薪资最高的群体”,甚至超过了金融从业者。如果你加入这一行,可供选择的岗位比想象中还要多。但是请注意,不要盲目入行。因为在这一行高薪、光鲜的另一面,很可能是写不尽的代码、学不完的知识、没日没夜的加班、频繁变化的需求、追赶进度的压力……
所以你看,这是一个机会巨大,压力也巨大的职业。如果你想加入,就要做好付出120%的努力的准备。
你可能会关心,如果做软件工程师,35岁会被淘汰吗?
如果你去网上搜索“软件工程师”,会看到很多有关“35岁现象”的讨论,比如“35岁瓶颈期”“35岁被优化”……因此你可能会担心,自己会不会遭遇类似的风险?面对这个问题,本书会带你把目光稍微移开一点,我们不纠结于“35岁现象”本身,而是去看它背后的原因,以及可能的应对办法。
你会在本书后面的内容里看到,“35岁现象”之所以存在,跟这个职业的特殊性有关。从本质上看,软件工程师不是一个劳动密集型职业,而是一个智力密集型职业。如果你想入行,初始门槛不算高,会编程就可以。但是越到后面,成长坡度越陡,提升难度越高,人和人之间的能力差距也越大。举个例子,如果说其他职业同行之间的能力差距是3倍、5倍,那么软件工程师之间的能力差距可以达到10倍、100倍,甚至1000倍。
所以你看,这是一个门槛不高,但上限极高的职业,竞争十分残酷。如果你想加入,仅仅踏进门来是不够的,你还要考虑怎么才能在这条路上走得更远。
你可能还会关心,如果做软件工程师,每天敲代码会不会很无聊?
这本书会告诉你,那些戴着耳机、敲着键盘、不爱说话的软件工程师看似无悲无喜,但其实他们有可能正享受着无可比拟的乐趣。
几乎每个软件工程师都经历过这样一些难忘的时刻——当他们用代码做出一个小玩意儿的时候,当他们跑通第一个程序的时候,那种发自内心的喜悦,拿什么都换不了。也正是从这些时刻开始,键盘在他们手中仿佛有了生命,计算机以毫秒速度回应他们的每个举动,让他们像魔法师一样穿梭于现实世界和虚拟世界之间,实施手中的“超能力”。你可能会好奇,这种“超能力”的威力有多大呢?看看硅谷投资人马克·安德森说的这句话吧——“软件正在统治世界。”
所以你看,这是一个看似枯燥无聊,实则激动人心的职业——它的底色是“创造”。就像百姓网创始人王建硕说的那样:“工程师是需要在脑子里面建造一个软件系统,然后再用手敲出来一些代码,最终实现一个世界上以前没有的功能。工程师是建造东西的,程序员是写程序的,写程序是建造脑子里那个东西的手段,而不是目的。”
好了,回到你关心的问题。关于这个职业,你可能还想知道更多。比如,软件工程师这个职业最难的部分是什么?“996”是真的吗?成为软件工程师需要具备哪些条件?这一行最具发展潜力的领域有哪些?从新手到高手如何进阶?……这本书会从内部视角出发,为你一一解答。
新连接:为什么要选这一本
到这里,你对这本书的叙述视角已经有了一定的了解。但是我们知道,选择职业是一件慎重的事情。对你来说,除了采取何种视角,这本书是不是可靠其实更加重要。换句话说,要了解软件工程师这个职业,如果你只能选一本书来读,为什么要选这一本?
给你三个理由。
第一,这本书的目录不是设计出来的,而是调研出来的。
为了弄清楚读者真正的痛点在哪里,这本书的编著团队在前期做了一对一的用户访谈,访谈时长1198分钟,转成文
字超过35万字。接受访谈的用户,有的是想要成为软件工程师的大学生,有的是已经成为软件工程师的新人,有的是高中生家长,还有的是在这一行工作了多年的职场老手。他们从各自的角度出发,讲述了自己的疑惑和建议。
比如,刚刚入职谷歌一年的蕉蕉告诉我们,初入职场,最困扰她的不是技术问题,而是怎么跟跨工种的同事协作。跨专业自学计算机的夏梓皓告诉我们,他特别想知道软件工程师可预期的成长路径是什么样的。跨文化研究专家戴愫老师告诉我们,身为家长,她最关心孩子适不适合这一行,这个职业好的地方在哪里,不好的地方又有哪些。在这一行深耕十几年的冷雪峰建议我们,可以讲一讲软件工程师应该如何处理跟产品经理的关系。
调研结束后,经过分析、筛选、整理,并结合行业高手的建议,我们完成了一份软件工程师从新手成长为高手的问题清单,也就是这本书的目录——不到1000字,却字字真实。虽然这份清单不能覆盖你提出的每个问题,但是我们相信,它可以帮你看到这个职业里很多被遮蔽的部分。
第二,这本书的内容不受限于“愿意写书的人”,而是来自一线高手。
有了问题清单,答案从哪儿来?这本书不是找行业高手约稿,等上几年再出书,而是由编著团队约采访,行业高手提供认知,编著团队再整理、提炼采访中的精华而来的。道理很简单:过去,写一个行业的书,它的水平被这个行业里愿意写书的人的水平约束着。真正的高手,未必有时间、有精力、有动力写作。既然如此,我们把写作这个活儿包下来,行业高手只需要负责坦诚交流就可以了。
那么,这本书为你请来了哪些行业高手呢?他们分别是:
·韩磊老师,他是《代码整洁之道》的译者,而该书是软件工程师的经典必读书。他还是一位跨界高手——做过大学教师,教授一门小语种,做过技术社区CSDN总编辑,也做过全国最大媒体集团的CTO(首席技术官),现在就职于他参与创办的AR技术公司。
·郄小虎老师,他是腾讯集团副总裁,曾经在谷歌工作过12年,先后担任谷歌广告系统核心设计师、全球技术总监、中国研究院副院长,被称为“Google中国在历史上最好的工程师(没有之一)”。
·陈智峰老师,他是谷歌大脑的首席工程师,曾经参与过著名机器学习开源系统TensorFlow的设计工作,是一位典型的高级技术专家。
·鲁鹏俊老师,他曾经担任谷歌的主任架构师,获得过“谷歌创始人奖”,做过百度集团高级总监、欢聚时代CTO、唯品会联席CTO。
这四位高手身上有一些共同的特点:他们经验丰富、独具洞察、乐于分享,对自己从事的职业充满热情。面对我们的提问,他们总是把多年来总结的经验和盘托出。在他们身上,我们看到了行业前辈最好的样子。所以,我们希望在你和他们之间搭建一座桥梁——你关心的问题,请他们来回答。
值得一提的是,得到App在知识服务领域已经打磨出一套成熟的内容生产手艺。过去,我们凭借这套手艺开设了300多门线上课程,包括《薛兆丰的经济学课》《梁宁·产品思维30讲》《万维钢·精英日课》等,广受用户好评。这一次,我们把这套手艺拿出来用在这本书上,编著团队先后采访行业高手23次,总计1925分钟,从483991字的访谈手记中萃取出最精华的10万字,一次性交付给你。
第三,这本书的迭代不是生产驱动的,而是读者驱动的。
一般图书在出版前,修改建议大多来自出版社内部的编辑团队,然后作者和编辑从图书生产的角度去做优化。而这本书不太一样。在这本书的第1版下印前,我们特别邀请了专业审读人和大众审读人提前审读内容,并根据审读人的建议完善了很多细节。遗憾的是,有些结构性问题没来得及完善。在本书第2版的选代中,我们做了进一步优化。
比如,我们接受了专业审读人柳飞和陈文经的建议,在书中新增了关于软件工程师不同工种的介绍,以及自我成长的内容;我们接受了大众审读人孙鹏的建议,在书中新增了更多有助于理解的案例……可以说,你手里的这本书,在品质上又多了一层保证。
说了这么多,其实最想说的只有一句:这本书的使命,就是把读者的痛点和行业高手的指点连接起来。这种连接是一种创新,也是我们愿意持续付出努力的尝试,希望对你有帮助。
特别提醒一点,如果你对软件工程师这个职业,或者对计算机知识一点也不了解,没关系,不用担心看不懂。这本书不讲艰深的技术知识,只讲行业高手最重要的认知和洞察。稍微剧透一下,虽然软件工程师需要具备一些开发技能,比如写代码,但从根本上说,高手软件工程师的能力远远超出了写代码的范畴。不仅如此,这些能力还可以迁移到各个行业、各个领域,给你带来不一样的启发。
人工智能时代,软件工程师会被替代吗?
·韩磊
2023年3月以来,以ChatGPT为代表的人工智能技术飞速发展,不断进化出新的“超能力”,比如通过回答人的问题撰写学术论文、列出采访提纲、输出需求文档、编写程序代码,等等。甚至有人说,人类正在迎来“百年未有之大变局”“第四次工业革命”。而且ChatGPT还在进化中,每回答一次人类的问题,它的能力就会变得更强一点。各行各业的人不得不开始思考:我的工作会被AI(人工智能)替代吗?
在我看来,一方面,大家的担忧很有道理。因为包括软件工程师在内,现代社会相当多涉及创意、创作性质的职业都会受到人工智能的挑战。另一方面,我觉得大家也不必太过担心。因为如果我们从历史的视角来看就会知道,所有新技术,都是为了让人们更高效地生产某种东西。
新技术不光淘汰了旧岗位,也创造了新岗位。比如,19世纪我们有了织布机,原来很多用手工织布的工人被淘汰,但更多使用机器织布的岗位诞生了。同样的道理,我觉得以ChatGPT为代表的人工智能给人类带来了更多参与创作的可能性。
为什么这么说?以前,很多创作工作,你不掌握基本技能就无法参与。拿画画来说,一个不会素描的人,你让他创作一幅打动人心的素描作品,这不太可能。尽管这个人极具艺术思维,头脑中也有相当绚丽的想象,他还是没办法将其转化为美术作品。但是现在,借助AI,他可以跳过基础技能的训练,让人工智能代为作画。实际上,作画所需的很多基础技能,比如使用笔刷的能力,除了少部分大师,大部分人都是机械式的操作。当这样的操作不再是门槛,很多天才就不会被挡在门外。
音乐领域也是如此。我听说有很棒的流行音乐作曲家根本不识谱,但他会把头脑里涌现出来的旋律哼唱出来,请别人记谱。现在有了AI,他不需要找任何人,AI可以连编曲一起帮他做完。
其实软件行业也一样。现在我们在应用商店下载的App,有很多是为了实现某个简单功能,比如翻译、剪辑视频等。这些功能很多人都想到了,但是由于没有编程能力,他们写不出代码、做不出程序。而有了像ChatGPT这样的工具,普通人也可以让AI生成代码。这样一来,大量的想法就会变成代码工具,变成生产力。基于这样的思路,我相信未来会是一个人类创作能力大爆发的时代。
但它也带来了负面问题。一批只提供简单功能的产品(或公司),以及一批只把目光聚焦于实现简单功能的软件工程师会面临巨大挑战。因为他们仰赖的底层技术已经不再是门槛。
先从产品的角度来看。很多做单一功能应用的公司正在面临挑战。比如有一类叫IFTTT(If This Then That)的服务,可以串联各个网站。具体来说,假设你在微博发了一个帖子,用IFTTT服务就可以复制帖子内容,同步发送到Twitter(推特)。提供这种服务的公司应该很郁闷,因为未来普通人只要用自然语言把这样的需求告诉ChatGPT,就可以获得代码。再比如有一类做知识图谱的公司,为客户提供基于知识库的梳理和检索服务,这样的产品也会受到挑战。因为目前已经出现了ChatPDF这样的产品——你只要把PDF扔进去,AI就会替你总结,告诉你这个PDF讲的是什么。以后极有可能出现这样的服务——你问一个问题,AI从特定资料里找出,甚至组合出最合适的答案。还比如,视频剪辑类产品也面临挑战。过去我们使用视频剪辑工具,还需要进行有一定难度的操作。但目前已经有人做出工具——你只需要用语言描述,它就可以生成并剪辑视频,短视频、长视频都能做。所以,除非是非常高级的剪辑师,视频剪辑的门槛已经不复存在。
我还看到Unreal(一家做游戏引擎的公司)的一个视频。它可以用手机拍摄人的面部,生成非常逼真的3D表情模型。这是什么概念?既然面部表情可以生成,未来如果加上人的动作、背景、环境,是不是意味着我只要有好创意,创作出好剧本,就可以在家里用AI制作一部电影?
当然,不止上面列举的产品类型,社会上很多其他商业模式或服务模式都会受到AI的挑战。不过,既有生产方式遭遇挑战,并不代表生产产品或提供服务的公司一定会倒闭。这些公司也可以拥抱新时代,利用新技术提供更好的产品或服务。
看完了产品角度,我们切换到人的角度,看看软件工程师会受到什么影响。在我看来,那些只把目光聚焦于实现简单功能、机械性地写基础代码的软件工程师会面临巨大挑战。实际上,过去软件工程师一天的工作里,有相当一部分是机械性地写基础代码——复制工具库或网站上的代码片段,进行组合,加上自己的一部分能力,得到最终代码。像这样的工作以后没必要每个人再干一遍——极有可能AI会帮你实现。最近我试用了一个AI代码生成工具,发现当我把问题描述清楚以后,它生成的代码还是比较漂亮的。
既然写简单、基础代码的能力已经不再是软件工程师的门槛,那么门槛是什么呢?为了探索可能的答案,我们来看看目前AI还不能做什么。
第一,目前AI还不能一步到位地根据任意自然语言指令生成完美代码。虽然前面提到,普通人也有机会使用ChatGPT编程,但对大多数人来说,这件事仍然存在不小的挑战。例如,假设要做一个类似IFTTT的服务,软件工程师大概率比没有技术基础的人做得更快,因为他们指令下得更准。未来有竞争力的软件工程师,一定是可以用准确的指令和人工智能对话的人。
如何成为这样的人?关于这个问题,我看过一位叫倪爽的交互设计师发的帖子,很受启发。他把交互设计师分成了几个不同级别:
最差级别:可以做设计,但没什么想法,靠拼拼凑凑完成。
中间级别:有一定经验,知道怎么设计,但不明白为什么这样设计。
最优级别:既知道怎么设计,也知道为什么这样设计。
其中最优级别,也就是能说清楚“为什么”的交互设计师,不会被人工智能取代。
软件工程师也一样。若要向人工智能下达更准确的指令,软件工程师必须知道“为什么”。这就要求你对用户需求,以及软件工程、软件技术的底层思维有相当程度的了解。
第二,目前AI仍然无法自主处理复杂的问题集。换句话说,目前AI比较擅长回答“相对独立的问题”;面对“复杂的问题集”,它的回答会相对模糊。打个比方,我们向AI提问100个相对独立的问题,它可以逐个回答,但如果要求它把100个问题组合成比较有机的系统,目前还很难实现。这时候就需要软件工程师把复杂的问题集抽象、拆解为一个个功能模块,这叫架构工作。
架构工作目前还不太能被AI取代,这是因为它涉及具体问题领域里的相关经验和知识。假设你要架构一个有超大访问量的网站服务系统,尽管ChatGPT会给你操作步骤,但由于你面对的问题,或者你的环境不太一样——有的环境是潮涌式访问,有的环境是长期的高访问量等——判断和选择的工作还是要你自己来做。也就是说,未来有竞争力的软件工程师需要具备优秀的架构和决策能力。
第三,目前AI无法生成以前不存在,或者无法用以前的手段组合而成的代码。举个例子,信息流这种展现形式目前已经不稀奇了,大家在短视频等平台上常常看到。但我们不妨想一想,第一次出现信息流概念的时候,你让谁去做?你让AI做,它也很难实现,因为它没有任何数据可以复用。
这件事对软件工程师的启示在于,一方面,我们要不断在实践中发现新问题,提出新想法。另一方面,我们要学会把AI作为伙伴,使用它、优化它、挖掘它的种种可能性。由于软件工程师本身从事跟计算机相关的工作,因此拥有得天独厚的条件与人工智能互动,来提出新想法、实现新连接、发现新机会。
如果说软件工程师以前是用手工纺织,那么现在我们面对的是水力驱动的纺织机,甚至电力驱动的纺织机。未来已来,所有软件工程师都得学会使用新一代的“纺织机”。
|
|