怎样才算得上合格的程序员

转自:http://blog.csdn.net/B9Q8e64lO6mm/article/details/78829370


最近同一部门另一个项目组的一位程序员被“主动离职”了,虽然我未曾与这个程序员共事过,但是听过一两次他的内部分享,感觉技术还是挺厉害的。后来与一个消息灵通的同事聊天,才知道真正的原因是老大觉得A难以沟通,搞得其他程序、QA都怨声载道。工作这些年,身边的好多同事来了又走了,主动或被动,这不禁让我思考什么样的程序员算得上合格的程序员。

虽然大家都自称“码农”、“IT民工”,但我相信,这仅仅是自嘲或者自黑,大多数程序员应该还是认可自己的这个职业的,当然,我算不上一个优秀的程序员,因为我都不曾在开源社区贡献过代码、也不精通白板算法、对技术也不狂热、不geek。我的目标是做一个合格的程序员:把本职工作做好,对得起自己的薪水,在生活与工作平衡,996什么的我是难以接受的。

对于程序员而言,技术过关当然是非常重要的,这是硬实力。然而只会技术也是不行的,毕竟大多数的程序员还是要与人打交道,软实力也是不可或缺的。怎样才能算合格,我认为有以下几点:

扎实的基础

计算机领域是一个快速更新换代的领域,每隔一段时间都会有新的语言、框架、思想产生,追随每一个新技术很累。但仔细想想,事实上并没有那么多新东西。很多新东西只不过是已有技术的封装、或者借鉴的其他领域的技术。比如缓存数据库redis、memcached,其基本思想不就是操作系统中的缓存吗;分布式存储中的分片与复制集,不就是文件系统中RAID的扩展吗;还有Google的MapReduce框架,不就是来源于函数式编程语言的map reduce吗。掌握好计算机基础知识,能够更本质的看待新技术。

善用工具

磨刀不误砍柴工,打造好自己的工具集非常重要。

开发中会用到大量的工具,不管是编辑器、调试工具还是监控工具。大家都喜欢争论哪个IDE更好,然而这并没有多大意义,关键在于能够熟练的使用自己喜欢的工具,掌握各种快捷键,高度自定义,这样能够大大提高工作效率。而且对于日常中重复的操作,最好脚本自动化,这里推荐以下python,写小工具还是很快的。

另外,强调程序员必备的两个工具,那就是浏览器和VPN。后者大家都懂的,不多说,主要是有了后者才能发挥浏览器的威力。浏览器大家天天都在用,但是如何高效的使用,比如在指定网站搜索、通过标题、url过滤、选择合适的关键字 还是值得研究一下,对于程序员,要使用好浏览器,那还得具备下一个能力:英语

过得去的英语

不得不承认,在软件创新领域,国内还是落后于国外的,新的技术、一手的资料都是英文的。当新技术被广泛应用之前,我们在百度搜到翻译要么是machine translated,要么错误百出。看翻译的最大问题取决于翻译者本身的水平,即使翻译水平都很高,但同一个单次往往有不同的翻译,导致看文章的时候会有困惑,最好还是直接看英文原文。大多数原文,除去专业词汇、还是比较好理解的,而且,我发现很多牛逼的项目,都有非常通俗易懂的文档。

良好的编码习惯

代码是写给机器执行的,同时也是给人阅读与维护的。维护者可能是别人、也可能是几个月后的样子。良好的代码规范,必要的、清晰的注释可以让自己少被问候祖宗十八代。

对于代码风格,网上争议也很多,最重要的是保持项目内的统一。做为技术负责人,一定要在项目开启之初就顶号规范,当大量代码被堆出来之后就很难统一了,然后做好新人的review。

保持学习

程序员这个职业,相比其他职业,可能还是要年轻许多。特别是在国内,最老的一批程序员好多都转管理了,再过10年20年,我们会怎么样呢,没人知道。前段时间华为35岁程序员被离职的事情,给我们敲响了警钟,悲哀之余,只有尽力学习了,拼不过体力就拼能力与经验吧

学习这个事情说起来就复杂了,我觉得两点很重要:基础、学以致用。

独立思考

合格的程序员解决的是问题,而不是实现某个解决方案。产品经理(特别是知道一点技术的产品经理)的某个需求可能只是某个问题的解决方案,他认为这个方法可以解决他的问题,于是把解决方案当成了需求,而不是真正的问题。程序员应该主动沟通,多问几个为什么,了解真正的问题,也许能有更好的解决方案。

之前就有这么个例子,给到的需求:为每一个用户(用户有唯一的id标示)生成一个唯一的邀请码,同时也要为未来一段时间可能增加的用户预生成邀请码,保存到数据库。而真正的需求是老用户分享自己的邀请码,如果新用户使用了该邀请码,则老用户获得相应奖励。而我提出的方案很简单,直接用户的唯一id生成可逆的邀请码,这样就根本无无需数据库存储。

图0:怎样才算得上合格的程序员

产品经理经常改需求这是程序员最头疼的事情,作为程序员应该也站在PM的角度思考,帮助PM分析出本质的需求,这也许可以减少需求的变更。当然,前提是得干一行爱一行,需要对业务有一定的了解。

先思考后行动

下笔,而不是先写出一堆代码,然后在开始修bug。

休bug的时候,多看看上下文,搞明白为什么出bug,修改这个bug可能带来的影响,然后再修改。反面教材有两种:第一种随便改改就把代码改好了,但自己心里并不清楚为什么这样修改就修好了,撞运气,也许还有其他同样的bug也发现不了。另一种就是,头痛医头脚痛医脚,不仔细评估修改的影响,这样往往会引入新的问题。

程序员成长的一个办法就是修bug,修别人用不了的bug,但前提是搞清楚bug的缘由,这样才能避免类似的错误,有所收获。

顺畅沟通

不是巧如舌簧、也不是忽悠达人。需要的只是耐心倾听,然后清晰表达自己的意见。

现在的软件开发,已经不再是单打独斗的年代,大多数的软件、产品都需要多人、多部门的协作。而交流、沟通是非常耗时耗力的。沟通之前,先想好目标,组织好语言,尽量不要发散、不要跑题,对事不对人。对于重要的事情,保留沟通记录,最好有邮件,免得说不清。

沟通是门复杂的艺术,最基本是听明白、说清楚。

管理好自己的暴脾气

图1:怎样才算得上合格的程序员

作为 一个程序员,要被PM怼、要被交互怼、要被QA怼,再变态的需求都可能有,QA给你提的BUG可能也不属于你。而且,还有猪一样的队友(自己在别人眼里何尝不是这样呢)和下属。不管谁是谁非,发脾气、吵架都一点用没有,吵完还是得解决问题。calm down,有怒火也得等个几秒再发作,也许这几秒理智思考一下,就能解决问题。

负责任

能力(技术能力)与责任心谁更重要呢,都重要。如果一个新人有培养的潜力,那么责任心就更重要。两个人,第一个技术能力很强,但责任心很差,对项目的事情也不上心;第二个能力差些,但责任心强,是自己的问题一定负责到底,即使自己不能解决也能主动询求帮助。我觉得前者对项目的危害更大,特别是项目紧要时期,因为能力强的人一般负责的是比较复杂、困难的功能,别人上手也需要时间,这个时候如果摞担子,bug也不修,那么就很为难了。

不负责任的典型表现就是扯皮、甩锅:这不是我的bug、不关我的事。有协作的地方更容易出现问题,比如前端与后端、各个部门之间。如果不清楚到时是谁的问题,不妨主动一点,帮助排查。

不要总是说不会

作为程序员,总有一些工作是以前没有做过的,也许来自产品人员的需求,也许来自项目自发的优化。我见过一些程序员,在面临未知的问题、挑战时,总是习惯于说:不会、没办法、不可能,这样的程序员就算不上合格的程序员。事实上,这样的程序员是给自己过早地留好退路,事实上问题可能并没有想象得那么困难,也许经过一番探索就能解决。如果习惯于对未知说不,那么在别人看来就是能力不行,影响个人形象与声誉,而且总是待在自己的舒适区也不利于自我成长。

当然,也不是说要盲目自信,急于拍胸脯保证一定能解决,这样往往是坑自己。

所以,面对新的需求,谨慎对待,既不轻易否决也不随意承诺,而是再理清需要先去研究一下,评估是否能完成,需要的资源与时间。

暂时就想到这么多,当然我也还不达标,比如容易控制不住自己的怒火,与君共勉吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# MEF框架(一 MEF简介及简单的Demo)

转自:http://www.cnblogs.com/yunfeifei/p/3922668.html 在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现:MEF是专门致力于解决…

c# MEF框架(二 MEF的导出(Export)和导入(Import))

转自:http://www.cnblogs.com/yunfeifei/p/3922891.html 上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yun…

c# MEF框架(三 导出类的方法和属性)

转自:http://www.cnblogs.com/yunfeifei/p/3927663.html 前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来…

c# MEF框架(四 见证奇迹的时刻之实战应用)

转自 http://www.cnblogs.com/yunfeifei/p/3940075.html 前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻。如果没有看过前面的文章,请到我的博客首页查看。 前面我们都是在一个项目中写了一个类来测试的,但实…

c# MEF框架(四 MEF高级进阶)

转自:http://www.cnblogs.com/yunfeifei/p/3991330.html 好久没有写博客了,今天抽空继续写MEF系列的文章。有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后。 前面四篇讲了MEF的…

Unity3D求向量间的夹角

如下图 Vector3 srcPos new Vector3(0,0,0);Vector3 tarPos new Vector3(0,0,-1);Vector3 srcRot new Vector3(0,90,0);Quaternion srcQua Quaternion.Euler(srcRot);Vector3 direction tarPos - srcPos;Vector3 r Quaternion.Inverse(srcQua) * direction;Debug.Log(r);…

面向切面编程--AOP

转自:https://www.cnblogs.com/qicosmos/archive/2013/04/07/3003480.html (原创) C 轻量级AOP框架 c11 boost技术交流群:296561497,欢迎大家来交流技术。 c中开源的AOP框架AspectC需要单独编译才能将切面的代码织入到核心逻辑代码…

面向切面编程--AOP(二)

转自:http://www.cnblogs.com/qicosmos/p/3154174.html (原创)c11改进我们的模式之改进代理模式,实现通用的AOP框架 c11 boost技术交流群:296561497,欢迎大家来交流技术。 本次要讲的时候如何改进代理模式,具体来说是动…

VS2013+VSVIM

上世纪90年代后期出现了一股.com热潮,相信大家对其都有美好的回忆,那时使用CGI和Perl创建“动态的”网站,通过使用在Unix上的vi编辑器快速打字和格式化,这也包括后来使用的vi的复制版本vim。我可能是怀旧的,但我想念将…

一个程序员的日常书单

本想谈谈读书这个话题,想来想起觉得无从下手,就此作罢.毕业这几年,一直不敢放松,在现代这个互联网时代更加认同萧抡谓的”一日不读书,胸臆无佳想;一月不读书,耳目失清爽”.如果非要给自己找个读书的理由的话,这句诗就是最好的理由:”胸藏文墨虚若骨,腹有诗书气自华”. 与书结缘…

Amr and Pins

Description Amr loves Geometry. One day he came up with a very interesting problem. Amr has a circle of radius r and center in point (x, y). He wants the circle center to be in new position (x, y). In one step Amr can put a pin to the border of the circl…

分布式系统的工程化开发方法

转自:http://blog.csdn.net/solstice/article/details/5950190 以下是我在珠三角技术沙龙 2010Q4 上的演讲投影片。 演讲视频: http://www.youku.com/playlist_show/id_5238686.html ---------- ---------- ------

程序员的知识广度

转自:http://blog.csdn.net/EGEFCXzo3Ha1x4/article/details/79070190 “知识变现”的口号一喊 确实让很多人都摩拳擦掌蓄势待发 那么作为程序员的mu们 不管是思维逻辑,还是知识广度 是不是都迫不及待了 今天,我们也来测试下 【单选题】 1 …

多线程---条件变量

互斥器和条件变量的区别:互斥器具有加锁原语,用来进行排他性的访问共享数据,而条件变量具有等待原语,用于等待某个事件的发生。 等待条件变量的正确姿势: void wait() {mutex.lock()while (wait_flag false) {conditi…

ARP-地址解析协议(在实践中深入理解ARP协议)

在同一个网络(无特别说明,均指以太网络)中进行通信的主机,必须要拥有目标主机的MAC地址才能够正确地将数据发送给目标主机,那么如何知道目标主机的MAC地址呢?可以通过ARP协议。ARP协议就是用来获取目标IP地…

Maven私服

1 Maven私服简介 Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。 1.1 下载构件顺序 建立私服后,当局域网内的用户需要某个构件时&a…

Unity3d--跨平台(一)

转自:https://www.cnblogs.com/murongxiaopifu/p/4211964.html前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇。到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在。所以&#xff0…

linux定时任务的用法详解

crontab的基本格式: f1  f2  f3  f4  f5  command 分  时 日  月  周  命令 第一列f1代表分钟1~59:当f1为表示每分钟都要执行;为/n表示每n分钟执行一次;为a-b表示从第a分钟到第b分钟这段时间要执行;为a,…

Unity3d-跨平台(二)

转自:http://www.jiandaima.com/blog/archives/945.html 是如何输出到多平台的? 我的第一篇文章,选择了一个不那么简单的主题,但是是我近期比较感兴趣的。这周,我和一个朋友,谈到了游戏开发和Unity3D&#…

svn冲突解决方案

解决方法 步骤一、清空svn的队列 1、进入到项目的.svn目录中,查看是否存在wc.db文件 C:\Users\Administrator>D:D:\>cd D:\BBK_SVN\I3_TrunkD:\BBK_SVN\I3_Trunk>cd .svnD:\BBK_SVN\I3_Trunk\.svn>dirVolume in drive D has no label.Volume Serial Nu…