《软技能2软件开发者职业生涯指南》
- 评价:比较适合刚入行的程序员阅读,可以帮你规划自己的职业路线。如果你已经有比较深的工作经验的话,这本书的内容可能对你的帮助不会太大。
- 作者:Guide 哥

阅读建议 :
- 对于刚刚从事编程的新人来说可以从第一篇开始读。
- 对于已经工作几年的编程老鸟来说可以直接跳到第三篇或者第四篇开始读。
入行成为软件开发者
如何入行
首先要明确的一点是: 软件开发不仅仅是写代码那么简单 ,它涉及到了很多相关联的东西。
1、了解软件开发
知道关于软件开发的一些必备知识。
软件开发不仅仅是编程。编程是其中的一个重要部分,但是如果只知道如何编程,你不会走得很远;尤其是当你想在这个领域中脱颖而出的话。
2、理解问题
软件开发的过程往往都是从对问题的透彻理解开始的。也就是,你需要自动化些什么?你的软件是为了解决什么问题?
3、软件设计
在开始编程之前,你需要对软件进行某种程度的设计。
4、写代码
写代码本身是一门学问。推荐两本必读的书籍。这两本书将帮助你学习如何结构化你的代码,以及如何编写易于理解和维护的代码。
- 《代码大全》
- 《代码整洁之道》
5、测试和部署
软件只有在经过了测试之后才可以被部署。
技术技能
- 一门编程语言
- 代码规范 :《代码大全》、《代码整洁之道》
- 面向对象设计
- 算法和数据结构
- 某个领域的相关技术:这里的领域可以是 Web 开发、Mac 开发、Java 后端开发......。
- 数据库基础知识
- 构建和部署
- 测试
- 调试
- ......
拓展技术技能
学习快速学习,提高学习效率。
- 确认自己想要学习什么:学习范围
- 针对学习内容获取足够多的信息 :纵览全局
- 把主题聚焦到足够小的范围之内 : 专心致志
- 确定学习目标 :目标指引前进
- 收集学习资源 : 在精不在多,资源可以是视频、书籍、博客......
- 边做边学 :实践非常重要
- 把自己学到的东西交给别人 :可以通过写博客、录制教学视频等方式
如何做到边做边学?
明确你学的东西你帮助你做什么,解决了你的什么问题。有了真实的需求之后,你才会更有动力去实践,这样才更有意义。
拿学习数据库举例:
- 你想要用数据库存储一些电影和音乐
- 你找到了一些学习资源带着你的这个问题来学习数据库
- 尝试实践在数据库中存储一些电影和音乐
把握重点!
任何一项技术可能只有 20% 是比较重要并且常用的,你的重点应该放在这个技术关键的这 20% 上。
多关注业界专家。
在学习的时候多看看你所在的技术领域的专家出的一些书、博客或者其他学习资源,多关注一下他们的最新动态。
编程语言
如何选择适合自己的编程语言?
- 当前与未来的就业前景 : 决定你找工作的难度。
- 你是否感兴趣 : 每一门编程语言擅长的领域可能并不一样。
- 难度 : 初学者不应该选择一门比较难的编程语言。
如何学好一门编程语言?
学习第一门编程语言应该是整个学习编程过程中比较难的一个环节之一。
- 找到一份自己比较感兴趣并且不是特别难的项目的源码作为研究对象,可以去 Github 上找。
- 学习编程语言,了解语言的特性和常用的库
- 通过阅读你找到的项目的源码来检验自己的学习情况。如果实在看不懂的话,可以将这一步往后移,或者说换一些简单点的项目,最好有详细的讲解/注释。
- 开始实践:
- 做一些简易的小项目来练手
- 做算法题
- 使用编程语言来解决自己遇到的问题或者实现一个比较完整的项目。比如说你学习 Java 后端开发的话,可以使用 Java 来写一个简单的网站。
大学深造
软件开发相关专业的学习还是很有必要的,一是找工作的时候通常需要看你有本科学历,二是上大学可以让你更体系化地学习软件开发相关的知识。
不过,国内的大学 CS 教育目前还是有很多缺陷,很多课程的设置都有一些过时了,重要的还是自学。
参加编程训练营
根据自己的实际情况决定是否要参加编程训练营/培训班。
不可否人,一个好的编程训练营确实可以让你学习和进步的更快,让你自学过程中少走很多弯路。
如果你要参加编程训练营,多花一点精力在寻找好的编程训练营上!
自学成才
很多优秀的程序员都是自学成才。
自学的好处 :
- 几乎是零成本 : 网络上免费的资源非常多。
- 可以提高自己的自学能力 : 自学能力非常重要!
- 可以按照自己的节奏和时间安排进行学习 :你可以根据自己的学习进度、掌握情况、时间来规划学习计划。
自学编程可能存在的缺点 :
- 自制力不足 :可能因为自己自制力不足导致自学效率很差。
- 不知道怎么学,该学什么 : 建议自学之前可以根据工作要求以及其他人分享的学习路线规划一份适合自己的学习路线。
- 可能会踩坑 : 很多小伙伴在自学编程的过程中都会踩坑比如在一些对自己帮助不大的技术学习上浪费了太多精力和时间。建议可以找一个比较靠谱的导师。
- 脱离社会 :大部分时间你都是独自一人面对着电脑,可能过不了多久你就受不了了。建议可以结交一些志同道合的朋友,多去参加一些技术社区的活动,学习之余注意多运动锻炼。
- ......
软件开发常识
- 编程语言 : C、C++、Java、PHP、Python、Go 、Ruby、JavaScript 等等。不同的编程语言所擅长做的事情可能并不太一样,并且,它们的学习难度也有比较大的差别。
- 技术方向 :Web 开发、移动开发、后端开发、游戏开发、数据库管理员、DevOps
- 软件开发方法论 : 瀑布式开发、敏捷开发(Scrum 方法)
- 测试和质量保证基础
- 测试驱动开发与单元测试
- 持续集成
- 调试
- 代码维护
- ......
软件开发者的日常工作
与同事相处之道
你可以成为世界上最好的程序员,但是如果你不知道与同事的相处之道,你不仅会在工作中度过一段苦不堪言的时光,而且你的工作效率也可能不会那么高。
建议:
- 不要傲慢自大。
- 自信且有好奇心。
- 尽己所能帮助他人。
- 冲突不应该变为私人恩怨。
- 多站在团队的角度思考问题。
- 留出足够的时间专心工作,做好手头上的事情。
- ......
与老板的相处之道
学会有效地与同事打交道对你的幸福感和工作满足感无疑是很重要的,但学会与老板打交道可能关乎你是被解雇或者一路步步高升。
建议:
- 了解你的老板,站在你的老板的角度思考问题。
- 想办法让你的老板的工作更加轻松比如提前预测老板的潜在需求、及时向老板汇报工作情况。
- 面对一位喜欢威逼恫吓的老板,你应该做的另一件事就是把一切都记录下来。把你们之间的对话记录下来,把他滥用职权的实例记录下来,特别是在什么时间、跟谁讲的。如果你要打一场人事甚或是法律官司,所有这些你记录下来的证据将极大地增强你获得有利结果的机会。
- 如果你的老板技术水平不高,就不要用复杂的技术术语跟他说话。相反,用浅显的事情来解释。广泛使用你老板可能会理解的类比。这个在与非技术人员交流的技术的时候同样适用。
- 面试一位奴隶主似的老板,一定要避免陷入不可能完成的进度表中无法自拔。
- ......
与质量保证人员的相处之道
这里的质量保证人员指代的就是 QA(Quality Assurance),也就是我们通常说的测试。
建议:
- 要意识到 QA 并不是你的敌对一方,他们是为了保证你写的代码的正确性。
- 在开始编码之前和 QA 就验收标准探讨一下,达成一致即可。
- 在交个 QA 测试之前,自己先自测一下。
- ......
工作与生活平衡之道
你想过什么样的生活?对你而言什么才是重要的?这些都是你要问问自己的重要问题。一旦你能够回答这些问题,你就会开始思考如何设计自己的生活(工作也包含其内)、你想要的生活方式,而不是试图让自己的生活去匹配下班后的剩余时间。
建议:
- 加班无意义!工作时间提高效率。不到特别紧急的情况下,尽量避免加班。
- 留一部分时间做自己的事情。比如每天早上早起一小时,把这段时间奉献给自己。把每天的第一个小时,也是最富有朝气的一小时用在自己身上,花在自己的野心上。这一小时可以用来做自己的兼职项目,可以用来强身健体,甚至可以让自己更擅于演奏乐器。我想这一小时甚至都可以用来玩电子游戏,如果玩电子游戏就是你想在你的生活里要做的事情。
- 不要在人际关系维持上花太多精力。在生活中,你试图维持的人际关系越多,你会感觉到自己拥有的时间越少,因为维持所有这些关系都需要时间和精力。保留对你最重要、最有价值的朋友关系即可!
- ......
团队协作之道
作为程序员,你职业生涯里的大部分时间都是与团队中的其他人一起工作。我们已经讨论过如何与同事相处,但当这些同事实际上就是团队的伙伴时,情况又会有很大的不同。
高效能的团队要比团队里所有个体的能力之和更为有效。这就是所谓的协同。无效的团队可能会比团队里效率最低的那个人还要低效。这就是所谓的“这个项目注定要失败了,你们都要被解雇了,你们最好都开始找出路吧”的窘境。
如果团队里的成员将各自的命运联系在一起,一荣俱荣一损俱损,那么团队中每个成员的最大利益就等同于团队的最大利益。
建议:
- 团队应该有共同的目标。
- 对自己的团队负责,尽自己所能。
- 提高自己的沟通和协调能力。
- 坦诚。
- 尽量避免不必要的冲突。
- ......
推销自己的想法
如果你想在你的职业生涯中取得进步,你就需要被看作是一个有很多好想法并能付诸实现的软件开发者。只有好的想法可不能得到提拔,高效能的软件开发者才会得到提拔,特别是那些能够把团队团结起来、让他的想法得到广泛支持进而得以付诸实施的人。
建议:
- 不要争论。
- 要有说服力。表达和思路都要清晰。
- 循循善诱。
- 借助比较权威的人。
- ......
推进你的职业发展
建立声望
成为一名优秀的程序员,拥有高水平的技术能力,是很棒的,但它只能带你走到这一步。如果你真的想要出类拔萃,你真的想把你的事业提升到一个更高的水平,你就需要学会如何建立起稳固的声望,包括如何推销自己、如何打造个人品牌,这些将为你打开常人难以企及的机会之门。
你必须认识到,自我提升、品牌建设和自我营销都不是坏事。关键在于你该如何做到。
你可以成为世界上最好的程序员,但如果你只是独自一人坐在你的地下室里,除你之外没有人知道你身怀绝技,那你还是不为人知。
提升知名度的方式:
- 写博客。
- 参与开源。
- 在其他人博客下面评论。
- 创建自己的视频频道。
- 写书。
- 在大型技术会议上发表演讲。
- ......
社交与人脉
拓展人脉首先是要为他人创造价值。
建立一个大型人脉网络是需要时间的。这不会一蹴而就。你不能只是在需要找工作的时候才开始拓展人脉。
拥有一个庞大而有价值的人脉网络,无论对你的职业发展还是对你的生活,都是一笔了不起的财富。
让自己的技能更得上时代
不断学习新东西!不要让自己被淘汰。
不过,不要学哪些你永远不会用到的东西。
专家还是通才
如果在你的领域里没有对综合性知识的广泛积累作为基础,那么想成为一名优秀的专家是非常难的。
建议成为 T 型人才,至少有一个深入专研的领域。

演讲和参加技术大会
参加技术大会是一个很多拓展人脉的机会,并且,你通常能够从技术大会中学到一些东西。
建议每一年至少参加一个技术大会。
演讲是很好地展现自己以及提高自己声望的机会。
写博客
写博客成本极低,但往往带来的效果会非常好。
你可以搭建一个自己的博客或者在已有的技术交流社区创建一个属于自己的博客账号。
自由职业和创业
自由职业的你可以通过提供第三方服务、贩卖视频教程、写博客等方式来赚取利润。
自由职业的人更加自由,不受公司约束。不过,你需要自己约束自己,以免自己陷入娱乐之中无法自拔。
创业很容易,不过,创办一家能够赚钱的企业非常难!你需要考虑的条条框框非常多。
更新: 2022-02-18 11:28:01
原文: https://www.yuque.com/snailclimb/to3hqu/der4zw