原文:https://my.oschina.net/huangyong/blog/1633257

社区中并不缺少有关软件工程师职业发展的文章,甚至可以说是泛滥。很多人都能在这个话题上说两句,三五年工作经验的编程老鸟也好,架构师也好,技术 VP 也好,CTO 也好,都有各自的看法与实践经验。没有哪一套方法是适用于所有人的,这一套软件工程师职业发展纲要,也不过是在你踽踽前行的路上,迷茫时可用来参考借鉴。你的核心竞争力,永远是你的自身实力。切记!

一、专业技能学习捷径

1、爱上你的编码神器

  众所周知,软件工程师要做的工作就是写代码,准确地说,你的目标应该是写出满足业务需求并且无法找出 Bug 的代码,而不是写一大堆没用的文字。既然你的任务是写出高质量的代码,那么你首先应该训练的就是打字速度,你需要掌握键盘盲打技能,甚至还要爱上你的“编码神器”,并做到将此工具的用法烂熟于心,闭上眼睛都能正确敲中你想要的快捷键。

2、熟悉底层技术原理

  当你完全驾驭了计算机的输入设备以后,你需要进一步了解计算机的内部工作原理,不是让你把机器大卸八块,而是你需要全面了解计算机的组成结构与工作原理。如果你不是计算机科班出生也没关系,在网上买一本关于计算机组成原理的书自学即可。你无需做到精通,能全面了解即可,因为接下来你需要在编程的世界中,慢慢去体会计算机的工作感受,你就是计算机的管理者。

3、深入一门编程语言

  好了,现在是时候学习一门编程语言了,最好的选择是 Java,为什么呢?原因很简单,因为市场需求量最大,我敢保证,你学 Java 肯定比学 PHP 更容易找到工作(希望 PHP 程序员们淡定一些,其实我始终认为 PHP 是世界上最好的编程语言)。当你在学习 Java 时,首先需要掌握它啰里吧嗦的编程语法,此时没有什么比写一个“Hello World”来得更爽快一些。随后你需要深刻理解的是 Java 的面向对象概念(每次我说到面向对象,总会被一些单身汉吐槽,其实我想说,对象是可以 new 出来的),这些概念看上去比较虚,但是它们却能撑起一个强大的软件架构。所以,在面向对象技术上面花再多功夫都不为过,因为它能训练我们对业务的抽象能力,就像当初我们学习数学一样,它能训练我们的逻辑思维能力。

4、选择一位对的老师

  看书、看视频、看源码、看技术文档,其实这些都是较为低效的学习方法,掌握编程技能的捷径就是拜一位资深的程序员为师,你可以尊称他为“码神”,记得一定要把他伺候好,让他愿意传授一些编程技能给你,其实也就是一个微笑外加一顿小龙虾的事情,他就能被你征服。一定要看他写的代码,思考为什么他会这样写,一定要将你不理解的地方记录下来,并且在下班之前紧紧地抓住他,让他一次给你讲个够,此时你一定会有一种打通任督二脉的畅快之感。所谓“师傅领进门,修行在个人”,你需要比你师傅更加努力,甚至十倍于他人的付出,才能在编程之路上尝到甜头。此时你需要学习更加高深的武功,研究更加优秀的源码,实践更有挑战的项目,还需要花整块时间,系统地看技术文档以及技术参考书。假如你想成为架构师,不妨看看我所著的《架构探险》这本书,也许它会对你的专业技能有所帮助。

5、乐于分享你的技能

  你最好要让自己变成一位豁达开朗之人,千万不要吝啬,一定要懂得分享你所学的专业技能。可以尝试做点自己的开源项目,并让这个开源项目变得更加开放,不妨结合开源,写点技术博客,并厚着脸皮给你身边的朋友阅读。这件事情一定要持之以恒,不要担心有人吐槽你,你肯定会被吐槽,那是因为大家在关注你,此时你需要更加努力,让自己变得足够专业。当你成为真正的“大神”时,就不会有人再吐槽你了,他们只会吐槽自己的技术不如你,此时你将得到的是无限的膜拜和称赞。相信我,这绝不是奇迹。在学习专业技能之路上,多一点自信,多一点勤奋,多一点思考,再争取一点机会,你就会成功。

二、不可或缺的软技能

1、软技能 ≠ 务虚

  如果将专业技能比喻为“硬技能”,那么在我们的职场中,与专业性无关的技能就可以归纳为“软技能”了。但每当我提到软技能时,难免会让人误解为这是“务虚”的一种功夫,我们虽然是“吃软饭的”(做软件开发的),但我们却十分讨厌虚伪。没错!我也很厌恶虚伪之人,尤其是在职场中遇到这样的人物,我从心底鄙视他们,但我从来不会和他们发生任何冲突,反而还能和他们愉快地共事,这种本领靠的就是软技能。

  软件工程师每天都在和机器打交道,机器是没有感情的,你告诉它是0,它一定不会认为是1。但我们与人打交道却不一样,你告诉他是真,他却可能认为是假。与人打交道,正是软件工程师们最为欠缺的方面,有些软件工程师甚至害怕与人交流,害怕在公开场合讲话,害怕抛头露面,害怕做一些组织性的工作。如果你也有以上这些心里负担,那么恭喜你!因为你即将从本文中找到克服这些困难的灵丹妙药,至少我希望是这样。

  需要强调的是,软技能是一种职场必备的核心技能,我敢直言,如果缺乏这方面的技能,你的职业生涯将会变得非常糟糕。软技能包括的方面非常广泛,沟通、协调、组织、气场这些都是最基本的软技能,甚至情商也是一种软技能,会不会讲话,听不听得明白,这些都是软技能。那么我们不妨先从沟通这项软技能开始吧,因为我认为他是软件工程师最重要的软技能之一。

2、口语流利 ≠ 会沟通

  很多人都容易将沟通理解为讲话,说一个人语言很流利,很会讲话,口若悬河,夸夸其谈,其实并非他的沟通能力很强。我认为,沟通可以理解为两方面,即“沟”和“通”。“沟”指的是你将心中所想很清晰地表达出来给对方听,考验的是你的表达能力;“通”指的是让你确信对方是否真明白你所表达的意思,考验的是你的倾听能力。所以,我们很多时候都是在“沟”,往往忽略了“通”,从而形成了“沟而不通”的情况,因此,现在全世界人民都在提倡如何“有效沟通”。还是用一个示例来说话吧。

  当领导交给你一项棘手的工作,但你不知道如何开始进行这项工作,此时你应该如何应对当前的挑战呢?绝大多数人会硬着头皮去做,他们希望通过自己的努力,可以顺利完成任务,但结果往往却无法让领导满意。少数人会主动向领导咨询,以寻求领导对自己的帮助。此时应该如何与领导对话呢?似乎并非很多人都清楚。下面这段话是我的套路,仅供参考。

我:勇哥(他是我的领导),最近我遇到了一点麻烦的事情,想听听您的看法(勾起领导的兴趣,让他认真听我说下去,记得一定要说“您”,而不是“你”)。

领导:哦?说来听听(证明领导此时不忙,他有时间让我占用,如果他此时很忙,你应该能感受出来的)。

我:感谢您对我的信任,昨天您交给我一项任务,回到家我一直都在想这项任务,我在想……(一定要对领导表示感激,是他给了我这次锻炼自己的机会,并强调我是“回到家”都在思考,而不是只在在公司里思考,道理你懂的)

领导:可能是我没说清楚,你把这项任务想复杂了,其实……(可见这是一位 nice 的领导,跟着他,你能学到很多东西)

我:我还想再清楚一下,您期待这项工作的结果是怎样的?(一定要明确领导想要的结果,他只会为结果买单)

领导:我希望……(领导娓娓道来,此处省略1万字,你千万不要打断领导的讲话,他讲累了自然就会停,你只需要认真听他怎么讲)

我:好的,我明白了,您希望我……(一定要学会复述领导讲过的话,而且要用自己的理解来表达,不要当复读机)

领导:没错,就是这样。(领导表示认可了,此时你应该表示给领导一个微笑,让他感到欣慰)

我:感谢勇哥!如果我在执行过程中遇到问题,可以再向您请教吗?(一定要感谢,而且要表现出虚心向领导请教,为下一次求救做好准备)

领导:当然,随时交流。(你真心拿他当领导,他才会无条件帮助你,你不懂得用好这位领导,那是你自己的损失)

  沟通是不是很有趣?其实沟通是一门学问,我们花一辈子时间都在学习,都在改进自己的沟通方式,目的仅为愉快地和身边的人一起“玩耍”,让此生感到愉悦。

  当你已经掌握了必备的专业技能,也具备了让你脱颖而出的软技能,那么接下来你将思考的是自己该走那条路了,继续做软件工程师,还是做软件工程师的 leader?下面这段话将告诉你答案。

三、正确制定职业路线

1、给自己提几个问题

  首先要澄清的是:我并非职业导师,更不是人生教父,所有的路都由你自己选择,我的责任是告诉你,我认为行之有效的方法。

  当你正走在职场的十字路口徘徊,思考走技术,还是走管理?我的答案只有一个:根据你自己的优势来决定。合理利用好自己的优势,会让自己走的更加顺畅,让自己无怨无悔。还是举一个例子来说明吧。

  前段时间有位朋友在微信上私聊我,他也遇到了这个问题,继续做技术,还是转管理?我当时是这样问他的,但我希望你可以用这样的方式来问自己。

我:你工作多久了?

朋友:时间不长,写了10年的代码。

我:那相当资深啊,现在还对写代码有激情吗?

朋友:喜欢写,周末有时都会宅在家里写。

我:那你还在纠结什么呢?

朋友:我都工作10年了,身边的人要么当 CTO,要么做总监,自己却还在撸代码,我现在到底该不该转管理?

我:你为什么会考虑转管理?说说你在管理上的优势吧。

朋友:我觉得自己对技术有一定深度,可以帮助团队解决一些技术难题。

我:如果你团队中有位小伙伴遇到一个很棘手的技术问题,没辙了,你会做些什么?

朋友:撸起袖子,就地帮他解决掉。

我:建议你走技术专家路线,这条路也许更加适合你。

朋友:……

2、转管理之前,先理解管理

  当我们在纠结是否应该转管理时,不妨首先理解一下什么是管理?以及什么是管理者?只有当我们正确理解了这些概念以后,再来思考自己是否具备这样的特征,才能顺利帮助自己转型。

  管理(management)是协调和监督他人的工作,从而使他人的工作可以有效率且有成效地完成。效率(efficiency)指的是以尽可能少的投入,以获得尽可能多的产出,效率常常被说成“正确地做事”,即不浪费资源。成效(effectiveness)常常被称为“做正确的事”,即做那些可以实现目标的工作活动。管理者(manager)就是完成所有管理工作,并使组织目标能够实现的人。管理者的工作包括计划(planning)、组织(organizing)、领导(leading)和控制(controlling)四种职能。

  以上都是管理学告诉我们的知识,如果你想成为一名管理者,那么你必须首先正确理解这些概念的真实含义,才能完全驾驭管理者的岗位,否则你会从管理岗位上摔下来,自己一定伤得不轻。

  如果你想成为一名优秀的管理者,那么你需要做些什么呢?

  • 亲自且专业地给团队激励。
  • 激励团队完成你无法独立完成的任务。
  • 对问题提供指导和指引。
  • 对团队的表现给予反馈。
  • 帮助团队改善绩效。
  • 使团队对组织的改变知情。
  • 改善团队小伙伴们的生活。

  如果团队和你共事过,那么团队应该觉得他们是幸运的,因为你能够让他们更加愉快和高效地工作。

写在最后

  不论选择技术还是管理,在任何时候都不要放弃你的硬技能,因为它是你的“生存之本”,同时你也需要具备强大的软技能,因为它是你的“发展之源”。

  学习硬技能其实是有捷径的,你无需一味地学习这些知识点,更多的其实是与人交流以及加以应用。软技能其实是可以训练的,你只需抓住一切可以抓住的机会,有意识地加以训练和反思,你就能悟出很多宝贵的经验。软件开发是一门艺术,你需要能够静得下心,不断地优化和雕琢你的作品,因此你需要具备工匠精神。如果你想成为一名工匠领袖,那么你就应该比他人思考得更多、更高、更深、更全面,你需要更多的软技能。你只有认识到自己的优势,才能正确地选择自己的职业路线。

  祝你成功!

软件工程师必知之事 —— 如何定义自己的职业路线?相关推荐

  1. 干货 | 软件工程师必知之事 —— 如何定义自己的职业路线?

    有关软件工程师职业发展的文章并不少,甚至可以说是泛滥.很多人都能在这个话题上说两句,三五年工作经验的编程老鸟.架构师.技术VP.CTO,都有各自的看法与实践经验.没有哪一套方法是适用于所有人的,这一套 ...

  2. 23中北大学计算机/软件考研必知

    23中北大学计算机/软件考研必知 一.学校简介.学院简介及师资力量.学科排名 中北大学(North University of China),位于山西省太原市,是山西省人民政府与工业和信息化部.国家国 ...

  3. Python开发工程师必知十大机器学习库

    Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,再加上其简单.易学.速度快.开源免费.可移植性.可扩展性以及面向对象的特点,Python成为2017年最受欢迎的最受欢迎的编程 ...

  4. 电子工程师必知必会——矢网史密斯Smith Chart圆图测试阻抗

    史密斯圆图是由很多圆周交织在一起的一个图.正确的使用它,可以在不作任何计算的前提下得到一个表面上看非常复杂的系统的匹配阻抗,唯一需要作的就是沿着圆周线读取并跟踪数据. 本期视频贝贝就带大家学习矢网的史 ...

  5. 软件工程师必学的9件事

    本文是html5tricks原创翻译,转载请看清文末的转载要求,谢谢合作! 三年前,我还在巴塞罗那的神经科学实验室工作,忙着研究脑电波.教授心理学上的认知系统课程.而今天,我以设计和写软件为生. 你或 ...

  6. c语言goto语句用法_硬件工程师必知的10个C语言技巧

    硬件设计师最常见的工作内容是通过写代码来测试硬件.这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生并造成维护方面的困扰. 为了成功的推出一个产品,软件开发 ...

  7. 软件工程师必须知道的20个常识

    作为一名优秀是软件开发工程师,以下的这些常识你知道吗?在实际工作中有没有总结过呢?小编就带大家一起分享这20个软件开发常识. 1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开 ...

  8. 跟光磊学Java从小白到架构师-001软件开发必知必会计算机基础

    1. 计算机基本介绍 1.1 什么是计算机 计算机(Computer)俗称为电脑,计算机是一种高速计算的电子机器,计算机可以进行数值运算,逻辑判断,接收或者是存储信息数据(文本.图片.音频.视频),按 ...

  9. 软件开发必知必会的计算机基础

    1. 计算机基本介绍 1.1 什么是计算机 计算机(Computer)俗称为电脑,计算机是一种高速计算的电子机器,计算机可以进行数值运算,逻辑判断,接收或者是存储信息数据(文本.图片.音频.视频),按 ...

最新文章

  1. 立体显示与BCN双稳态手性向列相
  2. 测试半桥电路 TPS28225,NCP3420驱动MOS半桥
  3. windows form (窗体) 之间传值
  4. C++中成员函数和成员变量的隶属问题
  5. 关于Spring的笔试题(一)
  6. excel中如何et vb根据数据自动生成表格_如何实现excel与PPT互联互通(动态生成PPT)...
  7. WebStorm荣获InfoWorld2014年度科技奖
  8. python伪造请求头x-forwarded-for的作用_Pyspider中给爬虫伪造随机请求头的实例
  9. PHP使用Pear发送邮件-Windows环境
  10. 应用程序委托协议栈发送消息
  11. js遍历数组和遍历对象的区别
  12. LINUX 内核调试基础+编程基础
  13. 御剑情缘服务器维护吗,御剑情缘常见问题 解决方法分享
  14. 小册上新 | 区块链开发入门:从 0 到 1 构建基于以太坊智能合约的 ICO DApp
  15. 数据库实验——T-SQL编程
  16. Introduce·艺术学超级友好必投普通期刊推荐之《戏剧之家》
  17. 综合评价模型的缺点_城市黑臭水体:污染现状、成因、评价方法、治理技术与对策...
  18. 区域生长算法原理及实现
  19. 怎样看股市K线图指标之市场盈亏指标CYS
  20. (PTA)数据结构(作业)12、查找

热门文章

  1. 编写Java程序,判断一个email地址是否合法
  2. drupal安装教程 linux,linux:搭建Drupal
  3. Java中获取CPU与内存利用率
  4. win11右键菜单不折叠
  5. 计算机毕业设计Java租车网站(源码+系统+mysql数据库+Lw文档)
  6. 【愚公系列】2023年03月 Java教学课程 070-HTTP协议
  7. 矩阵、坐标变换、相控阵天线拟合方向图代码
  8. Python调用pikepdf模块解密PDF文件(使用tkinter模块绘制GUI)
  9. linux cp目录到指定目录,linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...
  10. 职称计算机ppt2003大纲,全国职称计算机考试PowerPoint2003考试大纲