1. 算法和数据结构
在基础层面上,软件程序从各种来源捕获数据,并以更可读、更易于理解的格式呈现给人类或机器。如果没有数据,也没有需要处理的东西,也许就不需要软件程序。根据你所学的语言,你会遇到数组、堆栈、队列、链表、双链表、哈希表、字典、图、二叉树、堆、列表、集合、元组等。学习数据结构是没有捷径的,算法是解决特定问题的步骤。
如果你想从A点到B点,你有多种选择。你可以走路、跑步、骑车、乘汽车、飞、坐轮船……为什么不爬呢?算法的问题就是解决这类问题,同样的问题不止一个解决方案,软件工程师最需要的就是找到一个最优解,通过消耗最少的处理机制来执行更快的任务,因此,深入了解算法和数据结构是必不可少的。
2. 随时做好面试准备
跳槽是加薪最快的方式之一,随时做好面试准备是非常必要的,做好面试准备涉及到很多方面,你的面试回答是否是正确的,面对一个问题,你是否可以想出多种选择和解决方案,最后实现推销自己,以及你的穿着是否得体,这一些其实都可以在你的日常工作中得以体现:
- 开会时要集中注意力(远程工作更是如此)并做笔记
- 当你的老板提出问题时,你都能提供一个解决方案。
- 不要成为你老板的问题。就像在面试中,如果他们发现应聘者在面试过程中存在问题,没有公司会招聘他们。
- 每天都以得体的穿着形象出现在办公室,撇开技能不谈,人们都会更喜欢和外在形象好的人相处
- 就像你在面试解决问题的时候一样的,你需要想办法解决工作中潜在的问题
- 成为一个不断学习的人,就像你在准备面试一样,每天都花一些时间来学习新东西
3. 协作
当遇到危险的时候,动物只有两种选择战斗或逃跑,但是人类还有第三个选择,那就是合作,剑桥大学对合作的定义是两个或更多的人一起工作来创造或实现相同的事情,合作的目标很明确——“安全到达目的地”。合作的最大杀手是自负。自信和自私是有区别的。想象一下,在路上,你前面的司机突然停下来,因为他/她该休息了,或者突然在没有指示灯的情况下转弯。然后后面的车辆会停止或遇到事故,造成整个交通故障的情况。在企业界,你经常会遇到这种行为。缺乏合作是耗费精力和金钱的最大原因。
合作其实很简单。如果你曾经踢过足球,如果你不关心谁得分或谁得分,你会毫不犹豫地传球。最后,团队赢了。根据经验法则,如果你不关心谁得到了荣誉,而是专注于达到最终目标,你就是一名优秀的合作者,只要目标明确,写作自然会出现,下次当你遇到难题时,不妨全面分析一下,是不是你们的团队合作出现了问题。
4. 表达能力
我觉得表达能力是最容易被忽视的,它是一种以观众能够理解的方式展示数据、信息和概念的能力,这并不代表你会做一些PPT就可以。
马克·吐温曾经说过:“如果你想让我给你做两个小时的演讲,我今天就准备好了。如果你只想要一个五分钟的演讲,那我需要两周的时间来准备。”以下是一些提高演讲技巧的建议:
- 了解你的听众:不像在公共场合演讲,在公司里,大多数时候你会了解你的听众,你的同事、同事、经理、组长地需求是非常不同的,对错误的耐心程度和可接受性会随着时间的推移而降低。快速切入主题,,使用数据支持你想要传达的内容,通过相关类比使其易于理解,这些技巧通常是非常有用的。
- 练习:演讲前练习一遍可以让你的演讲成功率提高80%,分析你想在哪里花更多的时间,你想强调什么词,你想传达什么信息,你想让你的听众在演讲后有什么感受。记录和听练习过程也是一个很好的练习,但是过度的练习反而适得其反。
- 数据的困境:在没有数据的情况下,很少会提出一些想法或概念。显示数据的最简单方法是通过表格,但通常这不会传达任何信息。
5. 批判性思维
批判性思维是一种清晰而理性地思考应该相信什么以及你需要做出什么决定的能力。有时候,我们的直觉会帮助我们做出决定,这样我们就不会重复造轮子。这没有什么不对,直觉使决策过程变得容易,因为我们的大脑编码了数百万年的人类生存经验。对于一些琐碎的决定,比如穿什么、在餐馆吃什么或看什么电影,凭直觉是可以的。但是在一些重大决定里面,批判性思维是必要的,现在让我们看看批判性思维如何帮助软件工程师。这些都是值得我们每天思考的问题:
- 我每天都在做什么,有价值么?还能把功能实现的更好么?
- 我在处理什么类型的数据?数据的来源是什么?如果没有资料,我该怎么办?
- 谁是我的用户?如果应用程序不可用,他们会怎么做?
- 当API关闭时,我需要提供什么样的用户体验?
- 这是最好的数据结构或算法吗?有更好的方法吗?
- 如果我是用户,我会喜欢使用我创建的东西吗?
- 在我构建的模块中会出现什么问题?
- 问题的根本原因是什么?为什么我的用户对我的应用程序不满意。