一、专业与素养
1. 专业人士的核心能力
成为专业人士的核心包括:解决问题的方式(怎样分析问题、找哪些资料、怎样设计方案、方案利弊分析等等),步骤(怎样执行方案、怎样控制风险、怎样快速解决故障等等)以及反思(出现问题,如何避免同样错误再次发生)
2. 职业素养
那么,什么又是职业素养呢?不是天赋,也不是技艺高深,而是持续积淀的结晶。一方面它体现了能力和素质;另一方面,强调持续的积累和养成。拥有良好的职业素养,会让你变得更加专业。
作为职业开发人员,基本技能不够熟悉,当然谈不上职业素养。但是仅仅能够迅速编码,却不关心代码背后的意义,不能迅速判断、解决程序运行中的各种问题,不能自信满满地为自己交付的程序承担责任,同样是没有职业素养的表现。
二、培养自己的职业素养
1. 职业是件严肃的事
首先,要明白自己的责任和义务,视公司的利益如同个人利益。
假如,你代码里的bug给公司造成100W损失,这些损失全部由你来赔偿。你还会提交没有经过测试的代码吗?
2. 担当责任
自己犯的错误,一定要承担起责任。并且事后,要进行复盘,反思有哪些地方需要改进。
自己许诺的事情,一定要做到,哪怕加班赶工。
3. 不行“坏事”
作为软件开发人员,能做出什么“坏事”呢?从纯软件的角度看,他可以破坏软件的功能与架构。不行“坏事”,就需要学会对自己的错误、不完美负责。如何避免做“坏事”呢?
- 让QA找不出任何问题。充分的功能自测和单测;
- 确信代码能正常运行。设计易于测试的代码,要求每一行代码都要测试(参考测试驱动开发);
- 自动化QA。完备单测和集成测试;
4. 不破坏结构
(1)易于修改的原则:设计良好的软件结构,就会很灵活,也更易于修改。
因此,所有软件项目,软件结构的指导原则就是:软件要易于修改。如何创建灵活可维护的结构。这方面的设计原则和模式很多,网上可以查到很多资料。
(2)随时优化结构:跟随着项目的迭代,要不断调整代码的结构,以适应易于修改的原则。最好的状态是,每次提交代码,就做点简单的修改,来改进结构。点滴改善的积累,会让你从中受益。
调整结构的前提,需要有变更模块的充足自动化测试,以保证你调整结构后,可以快速验证。
5. 职业道德
工作要认真做。每周的40小时,是为雇主工作,你要付出时间和精力,因为雇主付了钱。工作之余,每周要再抽20小时来为自己的职业发展工作,保证自己在职场中立于不败之地。
(1)了解你的专业领域
设计模式、设计原则、方法、实践、工具使用等等方法面面。
(2)坚持学习
扩展自己的技术。看看文章,关注技术博客,读书,甚至学学别的语言。
(3)练习
练习常见算法,或练习某类工具的使用,让自己更娴熟。
(4)合作
专业的软件开发,往往更愿意与他人一起编程、一起练习、一起设计、一起计划,这样可以从彼此身上学到很多东西
(5)辅导他人
教学相长,教会别人,成长自己。
(6)了解你的业务领域
了解自己开发的解决方案所对应的业务领域。了解同领域下别人的方案,最好能读两本相关领域的书籍。
(7)与雇主/客户保持一致
雇主的问题就是你的问题。你必须弄明白这些问题,并寻求最佳的解决方案。
(8)谦虚
多听取他人建议,思考能否改进。
三、该说“不”时就说“不”
“能就是能,不能就是不能,不要说 ‘试试看’ ”—— 这关乎你的职业素养。
专业人士对一件事情有准确的预估。当无法达成对方要求时,应该懂得说“不”,而不是“试试看”,“试试看”是不专业的表现。只有敢于说“不”才有可能真正做成一些事情。
1. 对抗难于避免
无论是产品经理,还是业务方。他们都有自己的工作目标,也都会竭尽所能地捍卫目标。而作为开发的我们,同样也有自身的目标,也需要去捍卫。但是,多数的开发把自己设定为弱势群体,被(业务、产品)逼着做出不可能的承诺,然后默默忍受。于其冒险一试,承担不可预期的后果,反而不如与施压者聊一聊。最好的结果就是找到大家共同的目标,这有赖于协商。
如果你答应对方 “试一试”。最终没有完成,那么你就是失职。
如果你坚持说 “不可能,办不到”。这样才是你尽职的体现,才有机会去协商。
协商的过程可能会很愉快。比如聊聊哪些功能点可以砍砍?时间点可不可以延长一点,等等。没有必要给对方解释“为什么”不行,“为什么”远不如“事实”重要。有时候解释太多细节,反而会招致更多的麻烦,让对方参与到微观管理,更容易偏离协商的目标。
如果对方真有技术背景,协商有结论后,解释一下细节也无妨。另外,非技术人员,也没必要去了解太多技术上的细节。
2. 高风险时刻
要知道,开发软件,其实也是一件高风险的工作。项目进程中,随时可能出现不可预见的风险。专业人士对风险需要有控制力。遇到可控风险,要及时同步团队成员,以便获得决策的快速响应,矫正项目方向到安全轨道上。而对于难以控制的风险,也需要及时通知相关方。
当发现项目存在风险需要延期时,要及时向相关方同步结论。不然,相关方会以为你的项目可以按时保质的上线。一旦到了deadline,你的项目还没有完成,这时候再告诉相关方。我相信,你会被喷的很惨,而且,也会承担巨大的责任和职业失信。
3. 所谓团队精神
具备团队精神,意味着恪尽职守,意味着当其他队友遇到困难时你可以援手相助。有团队精神的人,会频繁与大家交流,关心队友。也会说出自己遇到的困难,寻求帮助。
有团队精神的人不会总是说“是”,而是会根据自己的专业,去否定不可能完成的事情。
只考虑一己之利,随意承诺,并且一个劲地鼓吹别人做不可能完成的事情,是没有团队精神的表现,因为他不是为团队努力,而是在损伤团队。
(1)拒绝“试试看”
“试试看”,就意味着你要“额外付出”,同时还得承担失败风险,对团队协助是不利的。
(2)拒绝消极对抗
当有人“逼你”做不可能完成的任务时。不能消极对抗,心里抱怨:“等着出问题吧”。这时候更应该主动协商,千万不能任其发展,走向悬崖。
4. 那些不靠谱的陷阱
(1)这个需求很简单
当你听到这句话时,一定要谨慎,防止自己直接允诺对方。可能这个允诺,会让你陷入痛苦的加班赶工中。
对方所说的简单,有可能是因为对需求理解不够深刻导致。你需要通过自己的专业知识去分析原始需求。
有时候,你的领导或者产品经理,也会不经过你的确认,直接允诺需求,这种做法很不靠谱,应该拒绝
(2)这个需求很重要
还有一些需求被提出来的很突然,完全是规划外的事情。记得去具体问题具体分析。存在不靠谱时,就与对方协商,而不是盘算着怎么“挤出”更多时间来完成任务,这会让你痛苦不堪。
通常,临时增加的需求,是价值很低的需求。开发完成后,就会闲置或使用率很低。这种无关紧要的需求,让你付出很多,却价值很低。专业程序员一定要学会识别需求的价值,因为雇佣你真的很“贵”。
5. 只为写出好代码
(1)多与相关方沟通
多与你的相关方沟通。开发工作中会涉及多个角色合作:产品、测试、前端、后端。你需要确保,大家的认知是持续跟进的。
多沟通,也是发现不合理需求的一种手段,对不合理需求及时说“不”;
定时(每日或每两日,按自己的习惯)确认功能与约定一致;
约定变动,需要快速同步,以便快速得到响应;
(2)不可以追求荣誉
别逞能去当“救火队员”,体验“救火”的光荣。“救火”意味着你要接受可怕的加班,牺牲个人时间与精力。而且,高压状态下,你会打破自己养成的专业习惯。
(3)拒绝打破专业习惯
避免让自己进入“时间很赶”的状态,这样,你会写破坏软件结构的代码,让你的系统不可维护;你会忽视测试;你会心存侥幸,以为只改了一点代码不需要回归。这样做,倒霉迟早发生,要学会拒绝那些打破你专业习惯的事情。
四、只说“是”不说“试一试”
1. 承诺
(1)承诺
口头上说。心里认真。付诸行动。
口头上说自己将会去做。心里认真对待做出来的承诺。真正付诸行动。
(2)识别“缺乏承诺”的表述
需要/应当:“我需要减肥”。通常只是嘴上说说,没有具体行动方案的说说,都只是说说。
希望/但愿:“希望明天能完成任务”。没有完成任务的决心,说明没有足够的掌控力。
让我们(而不是让我):逃避责任的常见手段,把个人责任,嫁接到团队成员上。
(3)真正的承诺
“言必信,行必果”。几种导致食言的原因和避免办法:
- 之所以没成功,是因为我寄希望于某某去做这件事。
只承诺自己能完全掌控的事。如需要跨团队配合,不妨先理一下依赖,然后向对方承诺会采取的行动,以保证最终集成。 - 之所以没成功,是因为我不太确信是否真能完成得了。
有必要让对方知道,你可以给的最大支持,但确实没法完成。即使目标无法完成,你仍需要全力前进,离目标更近一些。 - 之所以没成功是因为有时候我真的无能为力。
无法兑现诺言,就需要尽早向你的承诺对象发出预警,越快越好,越早越好。如果你不尽早告诉他人可能的问题,就错失了让他们帮助你达成目标、兑现承诺的机会。
2. 不说试一试
试一试的另一面,往往隐藏着风险。一定要坚守自己的原则,承诺自己能做到的,捍卫自己的目标。
作者:刘洋