web全栈工程师的自我修养2(为人处世心态)

什么是前端工程师

我们最常见的Web栈中靠近用户输入的那一部分,也就是靠近浏览器的部分,属于前端的范畴。具体来说,浏览器中发生的一切和服务器中涉及输入输出的这一部分,都属于前端工程师的工作职责。

不过由于移动设备的爆炸性增长,现在前端开发岗位开始要求有移动端页面开发的经验,或者熟悉响应式页面开发。Grunt等发布流程的成熟,也让前端工程师免除了很多枯燥的工作。总之,变化一直都在发生,这是一个需要终身学习的行业。不夸张地说,如果我一个月没有关注行业动态,就会发现自己已经错过了很多新技术。

前端技术的“易于上手”导致它在某些技术人员那里不受待见。他们认为HTML与CSS根本都不是程序语言,甚至认为JavaScript是一种功能不全的玩具型语言。所以直到我几年前毕业的时候,大学都没有前端相关的课程和专业。而市场对前端工程师的需求又很大,学校的输出跟市场的要求没有对接上,所以往往出现学生找不到工作,公司又招不到人的现状。

我并不是建议直接开设“前端开发”专业,因为前端开发也是软件开发的一个分支,与服务器开发和其他软件开发共享一些基础课程,是所有工程师都需要学习的,比如项目管理、数据库、软件开发流程和C++等。我的建议是,在大三或者大四的方向课程设计上,或者选修课设计上增加与时俱进的前端开发课程,使用业界最新的编程语言去教学,这样对毕业生、对用人单位都是好事。

框架vs库

框架(framework)和库(library)的区别是什么?其实这两个词在不同的语境下,有时候是可以相互替代的。但是严格来说,框架应该是比库更广泛的概念。一个库是一系列对象、方法等代码,您的应用程序可以把这个库“链接”进来。这个库起到了重用代码的作用,为您省下了重写这部分代码的工作量。

而一个框架是一个软件系统中可重用的一部分。它可能包含子程序、库、胶水语言、图片等一些“资源”,这些资源一起组成了软件项目。框架不像库,可能包含多种语言,某些功能可能通过API的方式让主程序调用。所以框架是一个更加灵活和宽松的名词,在具体的情景中,它可能指一个库、多个库、脚本代码,或者多个可单独运行的子程序的集合

每年都会有很多新的框架发布,它们的作者并不是无聊想要新写一个框架,而是为了解决一个新的问题。比如jQuery的优势在于方便地操作Web界面(DOM)。而Angular并不是“更好的jQuery”,而是提出一种新的解决问题的思路:通过数据绑定,让开发者直接修改数据模型,而不用关心界面(DOM)更新。GASP库发现jQuery动画慢的问题,就重点优化JavaScript动画部分,它号称动画速度比jQuery快20倍,而且能开启硬件加速,在某些情况下比CSS动画性能还要好。

因此,不要迷信大框架,有时候越是有名的框架,越需要满足更多人的需求,会封装很多您可能不需要的资源进去。对于您来说,可能只需要一小部分功能,但是引入了一个庞大的库。我常常看到,在某些人的简单的个人博客中引入了一些庞然大物,但是其实没有必要。这对应聘者来说,是减分的。在出现一些热门框架时,建议开发者先去了解框架的创建初衷,合理使用,而不是盲目收集

岗位细分:

UI工程师只负责HTML/CSS,前端工程师只负责JavaScript,这是一种简化问题的解释方法。但我认为这两种职位的区分的重点并不是二者语言不一样,而是责任和关注点不一样。UI工程师更关注视觉上和交互上的体验,而前端工程师更关注逻辑和数据方面的体验,二者是上下游合作的关系。

同时双方的工作也有一些交集,比如UI工程师也会负责一些交互或者动画相关的JavaScript,前端工程师也要熟悉HTML标签才能用JavaScript去操作。双方都必须对对方的知识有足够的理解,合作才能进行下去。两种职位的目标是一致的:给用户提供更好的体验

APP开发流程

App的市场在短短几年时间内就从无到有,它的发展速度比传统互联网要快得多。就像最开始的网站只需要一个开发者,而现在需要很多工程师协力合作,App开发也在经历这样的变化。

扫描二维码关注公众号,回复: 10733056 查看本文章

传统的iOS开发流程是这样的:首先,设计师设计完PSD稿,做好标注,切出各种状态的图片,交给开发人员;其次,开发人员拿到各种切片,根据标注设计稿和切片,实现界面以及逻辑功能的开发。

沟通是软技能

尽管看上去是和计算机打交道的工作,但实际上编程的对象还是人类,因此这是个非常“有人情味”的工作。——松本行弘

事实是,程序员的沟通能力所带来的价值被大大低估了。在我们的招聘流程中,技术能力过关,但是因为沟通能力这一项不过关,而直接被拒绝的面试者比例还比较高。

这跟对心仪的女生表白是一个道理,对方基本上会拿这些原因拒绝您:“您是个好人”“我们不太合适”“我已经有男朋友了”“我现在还没准备好”。她绝不会说出“其实您太穷了、太难看”这样的原因。

因为编程的对象是人类,所以欠缺沟通能力的话,就可能造成项目方向错误、进度延期甚至完全失败。

我认为良好的沟通是:“针对目标听众”“有方法地”“表达自己的想法”。接下来我分别谈谈这3个话题。

从功利的角度来讲,这件事情要对我自己有利我才去做。佛家有一个词叫“度己度人”,就是在帮助别人的过程中,其实也是帮助自己。所以反过来想,作为需求的请求方,最开始就得找到那个很关键的人,对于他来说,帮助您对他是很有好处的。也就是说他能把这件事当作自己的关键任务(KPI)。

如果您的要求对于他人纯属累赘,那么他人自然不愿意帮您了,任您多么会沟通,最终都不管用。所以,授权给平级同事的时候,最好的方法就是诉诸对方的利益。如果一件事情可以对双方的KPI都有好处,那么对方也愿意帮您一起分担这个任务。如果您把不擅长的事情授权给对方,而作为交换,能给对方一些资源,那也是诉诸利益的一个好方法。

其次的方法就是把问题上升到上级领导,让上级领导安排资源,但是这种方法不能经常用,否则上司会认为您不会主动解决问题,只会提出问题。被授权的那一方也觉得您在拿领导压制他,可能会存在负面情绪。通过跟对方主动沟通,并且在邮件和RTX群中多赞赏对方,就能唤起对方的积极性。

对于这些特定的目标,有不同的方法,但是有一点是肯定的:上司时间非常宝贵,您需要在20秒之内让他知道您的目标。

内向型性格竞争力

我是内向性格,这让我有很好的学习能力和不错的社会意识。毕业这么多年,我从来没有停止学习,技术、管理、英文……因为内向性格的人更能够沉下心来读书、思考,做一些安静的事情。这样的事情让外向性格的人哈欠连连。

对于内向性格的人来说,跟人交往是对精力的消耗,但并不代表情商低。情商低的人不能察觉到自己和他人的情绪波动,也许很外向,但是讨人厌恶。内向但是情商高的人,能够感知周围人的情绪,并敏锐地捕捉到周围发生的事情。

能灵活自如地适应各种社交场合的内向者往往有很强的自我意识、社会意识、自我管理和关系管理能力,加上自我学习能力,是很强的一种性格特征。

自我意识,是指您能够精准地觉察自己的情绪波动。

社会意识,是指您能感知周围人的情绪,并敏锐捕捉到周围发生的事情。

自我管理,是指您能根据自我情绪的感知,灵活积极地调控自身行为。

关系管理,是指您感知到周遭的“情绪场”之后,能够掌控自我情绪并把握他人情绪值,来让双方进行更好的互动。

记住,您的性格来自您的基因,有其独特的价值,只要充分利用自己天赋,就能得到您想要的。不要为了迎合主流社会,而伪装成一个外向、热情、合群的人。

客户需求:

客户需求只有在实际使用中才能辨明,再多的前期调研也只能发现客户认为他们想要什么,而不是客户实际上想要什么。因此在不了解客户真实需求的情况下,只会多做多错。

让市场认可您的能力,而不是让老板认可,因为老板会变,老板的标准不一致,而市场是一致的

世界上成功的软件都不是完美的软件,而是在合适的时间发布的、刚刚够用的产品。如果它能活下来,在后面的版本中,它才有机会越来越好。

高效工程师:

Facebook获得了巨大的变化和发展,这与它的企业文化是分不开的。但是,Facebook现在除了在意速度,还更注重为用户提供稳定的服务。

知识工作者并不生产具有效用的产品,他生产的是知识、创意和信息。而且,一个偷懒或者低效的工人也不会比一个高效的工人差太多,二者生产力的差别最多可能是两倍。但是,高效的工程师的生产力是低效工程师的几十倍。在过去,一个工人如果干得比较差,他最多只影响自己,而不会影响他人。但是今天的工程师需要跟上下游共同编写程序,生产他人所需的输出。一个人的效能会影响整个团队的效能,所以每个人的高效都很重要。最后,高效的工程师能够拿更多时间运动和休息,这对于长期稳定的工作投入是有帮助的。低效工程师长期熬夜带来的副作用完全抵消了工作时长上的投入。

时间管理四象限

如果您平时没有做重要的事情,就会发现自己常常在做紧急的事情。如果您平时没有注意锻炼身体,就会常常去医院,花费更多时间。如果没有培养后辈,为每个项目设置接班人,就会常常需要到处救火。如果您没有配置好版本管理系统就开始工作,就会浪费更多时间去找回丢失的代码。

如果偷懒硬编码(hard code)了一些变量在代码中,后续一定会花费更多时间去调试。时间管理四象限将我们平时需要做的事情分为4类:重要而且紧急、重要但不紧急、不重要但紧急、不重要而且不紧急。第三象限是重要但不紧急的事情建议工程师把80%的工作投入到该象限中,避免“瞎忙”。

消除重复工作重复的工作

应该交给计算机去干,这是我们都知道的一个道理。有趣的是,我们往往不知道我们的时间花在哪里,有一个办法就是详细地记录自己一天的时间消耗。在合并代码上面花费太多时间?还是提交测试?发布流程繁琐?编译太久?切图的工作枯燥无味?第一步便是识别出自己的时间花费在了哪里,以此作为优化的目标。有了优化目标之后,第二个思考的问题是,能否使用已有的工具——免费的或付费的——来无缝衔接在已有的流程中。如果新的流程成本太高,那就无法有效推进。普通工具可以用英文在GitHub上搜索相关的关键词,前端开发者可以在Gulp和Grunt社区寻求帮助。

给自己留出不被打扰的时间

当我们被QQ、微信、RTX、电话等提示工具打扰时就会频繁分神,这使得专注力如今已成为稀缺资源。

编写程序需要大量的精神投入,需要整块连续的时间思考,所以工程师工作时是不希望被打扰的,若思路被打断则后果很严重。

每一个团队成员都知道,除非万不得已,不要在这一天安排任何会议。事实证明这对团队的效率很有好处,它鼓励所有人(包括产品经理)成为“做事情的人”而不是“计划事情的人”,而且所有人都有一整块的时间工作。对于远程工程师来说,还可以选择在家里工作,根本不用出现在办公室。

番茄工作法:

有些时候,我们没有办法得到一整天的大块、连续的工作时间,为此可以采用短迭代的工作方法,高效地利用每一小块的工作时间

注重锻炼身体,每天早上开始工作之前都会花一个小时跑步和健身,然后洗澡吃早餐,再开始一小段高效的工作时间。下午的工作时间中也会穿插一些运动和甜点时间,等等,不会像国内的工程师们,需要长时间地坐在电脑前。这种状态的转换让他们的效率得到了很大的提升。所以包括腾讯在内的一些国内公司现在也开始把健身房和团队运动作为一项员工福利,有时候还会组织晨跑或者徒步等团体运动。

番茄工作法极大地提高了工作效率,还会有意想不到的成就感。为什么25分钟是一个比较好的时间点?因为如果过短,思维还没有恢复过来,就马上要被打断,不利于创作。番茄工作法主张在25分钟时间段内专注地完成高质量的工作,接着是5分钟的休息。如果让压力系统一直工作,而不借助心智休闲进行调节,一些症状会找上门来。

我不认同加班是一种“文化”。

加班就是加班,是由于工作没有完成导致的。在一个项目和人力都很稳定的团队中,有两种原因会导致加班。一种是糟糕的项目管理,领导失职,没有安排好工作。第二种是员工能力不够,效率不高,没有按时完成目标。在这两种情况下,我都建议您跟领导去沟通,我时常听人抱怨说,团队有加班的氛围,他早早完成了工作,可是看见大家下班后还待在座位上(尤其是领导还在),就不好意思自己一个人下班,只好留下来“陪加班”

认为领导推崇加班的氛围,以及领导按工作时长来判断投入度,以此作为升职加薪的考量因素;或者认为领导不知道谁工作成果更好,所以按劳累程度来判断……所有这些认知都是因为茫然和不自信,不知道自己的核心竞争力是什么,也不知道老板真正需要的是什么。拿工作时长来拼,这还是体力劳动时代打工者的心态在作祟。稍有常识的老板,或者接受过一点点管理培训的领导者,都知道评估员工是看结果,而不是看努力和过程。您在把老板当傻子,拼命展示“辛苦”,结果更加不如意。

我认为一个接受过高学历教育的成年人,应该有能力权衡自己的健康、家庭的责任,以及长期工作回报。每个人都可以有自己的选择。工作上瘾者不光把自己逼上绝路,也把老板逼上绝路。您认为自己能高负荷工作坚持一个月,他就认为您还能坚持半年。总结一下,加班不是一种“文化”,它往往是我们心中假想的老板,还有媒体渲染出来的一种畸形工作模式。在这种模式中,加班狂习惯了熬夜和过量的工作,他们往往也给了老板长期加班的预期,同时也带来低迷的士气,以及疲倦的身体。

发布了71 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hello250sunshine/article/details/104774915