精华内容
下载资源
问答
  • 对一个程序员的能力评价
    2020-07-29 11:39:29

    想写这篇博客很久了,但一直没时间,觉得自己技术还差的太多,拼命累积代码量,这件事一拖就是好久。。。今天终于下定决心,把自己心里一直以来的结打开。于是写下了这篇博客,由于自己的经验有限,在写之前特地了解一下别人的看法。

    一、先从一个故事开始

    魏文王问扁鹊家里三兄弟谁的医术最好。扁鹊回答说大哥最好,二哥次之,他自己最差。魏文王疑惑了,又问道,为什么扁鹊最有名呢?扁鹊回答说因为大哥治病的时候人没病就防止了,所以毫无名气。二哥呢,病刚起来的时候,就给治好了,大家以为只能治小病。而自己呢,能耐不够,非要到了病的很厉害了才能看出来,治起来的动静就大了。好在还不至于庸医能治好,结果大家看到每次治的都是顽疾,反而出名了。

    我觉得好的程序员,第一点就是能思维严密,防范于未然。当然救火队员可能会更受领导欢迎,坑虽然很多,但是永远都活跃在第一救火现场。

    二、计算机底层原理

    我觉得各种语言及规则都时可以通过联系很好掌握的,甚至很多小的不常用的知识点,比如断点续传、单点登录等(我之前做的一些项目),但是只有真正掌握底层原理,才能更好的运用。在这个基础上的解决问题能力、思考能力、交流能力是考量因素,至于是否熟悉编程语言,这根本不是问题,因为对于熟悉计算机底层原理的人来说,学习程序语言、熟悉架构这些事情就是顺水推舟的事情,掌握了最根本的东西,那些招式根本就不是个多费力气的事。

    三、软件设计能力

    很多伟大的工程,伟大的开始都是始于设计,当然它们的伟大也离不开设计,良好的设计可以使代码易于维护,同时降低代码负担,减少BUG的产生,设计是独立于语言的,语言只是工具。一个程序员的设计思想决定了一个程序员的伟大程度。

    四、深度

    一个伟大的程序员需要有一门绝对够硬的手艺,一门绝对拿得出手的语言。除此之外,还需要在一个领域有够深的经验,值得一提的是,领域经验绝对不亚于编程经验。

    五、广度

    一个好的程序员,除了深度之外,广度也需要掌握,这样不仅可以拓宽自己的思路,而且还可以更方便的解决问题。

    六、学习

    不断的学习,不断的思考,不断的提高。编程就是这样,永无止境!

    对于学习:一是要有心态;二是要找到自己的学习方法;三是学习专业技能;四在学习专业技能的时候,还得学习方法论,反身自省,比如,怎样才能成为一名优秀的程序员,怎样才能把代码写好。

    更多相关内容
  • 程序员考试刷题ICT专家水平考试 CSC 现在授予 ICT 专家资格。 信息和通信技术 (ICT) 专业人员可以申请电子数据处理专家资格,他们可以使用该资格来争夺政府职能相关职位的永久任命。 常见问题 来源:。 当 DICT 发布...
  • java简历自我评价 java简历自我评价1 具有很强的团队精神有良好的组织和协调能力有强烈的集体荣誉感 自学能力强喜欢钻研新技术敢于面对和克服困难 熟练使用spring struts hibernate整合开发 熟练使用...
  • 程序员的自我评价

    千次阅读 2022-01-17 14:57:14
    注重专业基础学习和实践能力的培养,在校期间不仅做过多课程设计暑假期间也去过单位实践过,java编程和网站开发具有浓厚的兴趣。 篇二:优秀的程序员自我鉴定 优秀的程序员自我鉴定 以下篇是名优秀并且有...

    篇一:程序员简历自我评价
    程序员简历自我评价

    本人勤奋踏实,工作认真负责,自学能力强;性格开朗,容易与人相处,注重团队协作精神,且能承受较大压力。

    注重专业基础学习和实践能力的培养,在校期间不仅做过多个课程设计暑假期间也去过单位实践过,对java编程和网站开发具有浓厚的兴趣。

    篇二:优秀的程序员自我鉴定
    优秀的程序员自我鉴定

    以下一篇是一名优秀并且有工作经验的程序员的自我鉴定范文:

    大家好,我叫xxx。我性格开朗,乐于与人交往,诚实,正直,有教强的上进心,较强的学习能力,在学校团学会的工作使我组织和协调能力得到进一步加强,有较强的社会责任感。

    我的计算机能力: 程序员 语言能力:英语(一般);普通话(标准) 熟悉windows,能够熟练使用word,powerpoint等office软件; 熟悉c,c#,html,xml,了解数据结构©,软件工程学,c,c++,java,ajax。 熟练掌握c#语言。 熟悉开发工具vs、net…; 且利用b/s开发过物业网络管理系统。 在公司从事教育软件的开发。
    我曾经获得物业管理系统
    软件环境:windows系统 开发环境:vs.net XX(c#) sqlXX 项目描述:本系统主要包括前台和后台两部分,前台主要实现了管理员登录、物业管理人员信息、公告信息、住户欠费信息、住户投诉、住户报修、欠费查询等。后台主要对本网站进行管理,主要实现了受理物业信息管理、物业管理、公告管理、基本设置、系统维护等。

    XXXX年-XXXX年 “优秀团员”称号、“三等奖学金”、“校篮球比赛第一名” XX年-XX年被评为“系团总支学生会宣传部部长” 、“校书法大赛第一名”

    XXXX年-XXXX年 “优秀学生干部”、“优秀团干”

    通过以上的自我鉴定,我能更好地了解自己,了解自己在各方面的实力。作为一名有工作经验的计算机程序员,我为自己而感到骄傲。

    篇三:JAVA程序员个人简历范文
    (一)

    个人信息

    姓名:***

    性别:男

    年龄:22

    学历:本科

    专业:计算机

    联系电话:***

    毕业院校:广东XX大学

    主修课程:汇编语言程序设计、C#程序设计、JAVA程序设计、数据库原理、操作系统

    英语水平:通过国家六级考试。有较强的阅读和翻译能力,能进行日常英语对话。

    计算机水平:通过全国计算机等级考试三级网络技术。熟练操作OFFICE办公软件。

    实践与实习

    2012年上学期----与同学共同开发校园网站,完整地学习了网站的建设流程和相关技术。

    个人技能

    1、熟悉网站开发流程,开发文档格式;

    2、熟悉MVC体系结构模式、C/S模式,掌握面向对象的设计开发思想;

    3、熟练掌握JSP、Servlet、JavaBean、Struts、Hibernate等相关建站技术,熟练运用HTML、CSS、XML、JavaScript等页面控制技术;

    4、熟悉UML,了解PowerDesigner等建模工具;

    6、熟练掌握SQL语言,MySQL的设计和构建过程及相关维护,了解Access、MSSQL、Oracle等常用数据库;

    7、熟练运用Eclipse等开发工具,Apache、JBoss等服务器开发平台;

    8、能在WindowsServer、操作系统,上搭建网站平台及进行相关维护,了解RedHat、FreeBSD等Linux操作系统。

    求职意向

    JAVA软件工程师

    个人简介

    热爱编程,有良好的分析问题、解决问题的能力。能

    吃苦耐劳、待人热情、真诚,有较强的适应能力和团队协作精神。

    (二)

    个人资料

    姓名:个人简历

    性别:男

    目前所在: 广州 年 龄: 23

    户口所在: 广西 国 籍: 中国

    婚姻状况: 未婚 民 族: 汉族

    身 高: 160 cm 体 重: 45 kg

    求职意向

    应聘职位: 软件工程师:JAVA软件工程师 工作年限: 2 职 称: 中级

    求职类型: 全职 可到职日期: 随时

    月薪要求: 3500–5000 希望工作地区: 广州,

    工作经历

    广州东方标准信息科技有限公司 起止年月:2008-03 ~ 2010-06

    公司性质: 民营企业 所属行业:计算机/互联网/通信/电子

    担任职位: java程序员

    工作描述: 1.参与需求的挖掘;

    2.负责java程序开发, 测试,维护;

    3.带领实习生进行项目开发,并协助其攻克技术难点;

    4.重构“个人简历范文www.dlqql.com”。

    教育背景

    毕业院校: 广西职业技术学院

    最高学历: 大专 获得学位: 毕业日期: 2008-07 专 业 一: 计算机 专 业 二:

    起始年月 终止年月 学校(机构) 所学专业 获得证书 证书编号

    2007-11 2008-02 新东方IT培训学校 JAVA软件工程师 - -

    语言能力

    外语: 英语 一般 粤语水平: 一般

    其它外语能力:

    国语水平: 优秀

    工作能力及其他专长

    1.具有面向对象思想,扎实的编程功底以及良好的编码习惯;

    2.熟练应用Struts+Hibernate,SSH2框架和MVC三层架构开发模式;

    3.熟练Oracle数据库的操作,能够编写存储过程,熟悉Mysql和SqlServer数据库;

    4.熟练Tomcat服务器的部署及应用;

    5.熟悉版本管理器SVN;

    6.熟练使用Jsp,HTML,JavaScript,Jquery,Ajax,Css等WEB客户端技术;

    7.了解设计模式,代码重构和项目过程管理,能够编写文档。

    自我评价

    我身体健康,性格随和,五官端正,不怕苦不怕累。两年多的程序员生活锻炼了我坚强的意志,缜密的思维,以及强的抗压性;我做事有耐心,并且乐于

    学习新知识,更注重巩固旧知识。作为一名程序员,更重要的品质就是要懂得团队合作,而我恰好拥有团队合作精神,对工作认真负责。

    项目经验

    2010/3–2010/6:综合管理系统

    软件环境:TOMCAT6.0+ MYSQL

    硬件环境:windows

    开发工具:MYECLIPSE5.1

    项目描述:项目团队: 开发人员4人

    开发语言:JAVA

    SCM工具:SVN版本管理器

    项目技术:STRUTS 2+SPRING+HIBERNATE3.0、LOG4J、JQUERY、AJAX

    软件描述:“综合管理系统”专门针对社会各类培训学校、培训中心而开发的一套综合性管理软件,对学校的日常事物进行记录,提高学校管理的工作效率。主要有“权限管理”,“历史记录”,“教务管理”,“学员管理”,“教学管理”,“财务管理”等模块。 责任描述:

    1.带领实习生进行项目开发,从需求挖掘到程序开发;

    2.协助实习生攻克技术难点;

    3.负责“教务管理”,“学员管理”模块的开发;

    2009/12–2010/2: 创业测评系统

    软件环境:TOMCAT6.0+ ORACLE10g

    硬件环境:windows

    开发工具:MYECLIPSE5.1

    项目描述:项目团队: 开发人员4人,经理1人 开发语言:JAVA

    SCM工具:SVN版本管理器

    项目技术:STRUTS+HIBERNATE3.0、JQUERY、AJAX 软件描述:“创业测评系统”是省劳动保障厅主办项目“广东远程职业培训网”的一个子项目;以“广东远程职业培训网”的用户为用户,主要实现“测试”,“统计”,“行业方向管理”,“题库管理”,“测评报告管理”功能。

    责任描述:负责“统计”,“题库管理”模块的程序开发;

    1.“统计”中“自定义”统计功能以存储过程方式实现;

    2.以树形菜单显示题目种类。

    2009/2–2010/6:广东远程职业培训网

    软件环境:TOMCAT6.0+ ORACLE10g

    硬件环境:windows

    开发工具:MYECLIPSE5.1

    项目描述:项目团队: 开发人员6人,经理1人 开发语言:JAVA

    SCM工具:SVN版本管理器

    项目技术:STRUTS+HIBERNATE3.0、IBATIS、JSP、JAVASCRIPT、JQUERY、AJAX

    项目描述:“广东远程职业培训网”是省劳动保障厅主办项目,是一项长期项目;主要有以下功能:

    1.“后台管理系统”,用于管理学员信息,课件信息,三级权限分配,对各地市级的学员进行统计等;

    2.“学习平台”与FLASH进行交互,播放flash课件,提供给学员学习课程;

    3.“CMS新闻发布系统”丰富页面内容。

    我的任务:

    负责“学员管理”,“课件管理”模块的程序开发;重构“统计”、“注册”模块。

    1.“学员管理”实现增删改查,导入导出等功能。

    2.以树形结构显示课件信息,并实现增删改查,停用启用功能。

    3.重构“注册”功能,采用jquery.validator插件进行校

    验,ajax异步获取数据。

    责任描述: 负责“学员管理”,“课件管理”模块的程序开发;重构“统计”、“注册”模块。

    提示:上述信息仅供参考

    篇四:程序员转正自我鉴定
    程序员转正自我鉴定

    年的见习期就要到了,现就本人在这一年里的工作情况先作一整理,并做如下自我鉴定:

    在这一年里,我经历了从学校到企业、从学生到员工、从理论到实践这三个转变,围绕着这三个转变,我始终保持良好的心态,一步步成长。

    我于XXXX年XX月开始到xxx公司工作。在开始几个月的工作和学习当中,在各位领导和同事的指导和关心下,学习专业知识,向前辈请教经验,向同事学习专业技巧,正是在这个过程中,认识到自己不足,也深刻体会到了团队的力量和魅力,并且很快认识并融入这个团队,为我以后的工作树立一个良好的开端.

    在这段工作时间里,我做了一个比较棘手的项目——XXX系统。为什么说棘手呢,因为我以前没有做过这方面的项目,而且我问遍了所有认识的朋友,搜遍了网络也没有找到如何解决的方法,之后我翻书籍,接着搜索网络。功夫不负有心人,终于我找到一个聊天室的小例子,但是功能差的太远,于是我把这个示例一点点的研究,从一点也不懂到后来慢慢看懂,从对AJAX技术一无/fanwen/1600/所知到基本熟练运用。接下来我就开始自己开发,到最后终于把它开发了出来,虽然不是很完美,功能不是很强大,但是它是我辛苦的劳动结晶,我相信以后会把它开发的更强大,更完美。

    通过见习过程,我知道短暂的迷茫和情绪的低谷,有了各位同事的帮助和关心,以及个人的努力,可以让我顺利突破困境,找回自信和充实!

    在此,这就是我试用期的工作情况及心得体会的汇报,希望公司领导能对我的工作态度、工作能力和表现,以正式员工的要求做一个全面考虑,我会以炙热的工作热情继续投入到今后的工作当中,以自己踏实努力的工作,报公司知遇之恩!

    年的见习期就要到了,现就本人在这一年里的工作情况先作一整理,并做如下自我鉴定:

    在这一年里,我经历了从学校到企业、从学生到员工、从理论到实践这三个转变,围绕着这三个转变,我始终保持良好的心态,一步步成长。

    篇五:程序员的自我定位与思考
    程序员要做什么?

    版权所有:不知道

    以下文章都是经典,看不看随你的便,我只希望知识掌握在更多中国人的手里! 中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的Cfans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓人。

    程序员基本素质: 作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。

    1.团队精神和协作能力

    把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。

    2.文档习惯

    说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。

    3.规范化,标准化的代码编写习惯

    作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。

    fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。

    再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。

    4.需求理解能力

    程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,你给他深蓝那套系统,他也做不出太极链

    的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。

    5.复用性,模块化思维能力

    经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。

    复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。

    一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。

    6.测试习惯

    作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测;软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,程序员在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。

    测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责,可惜在很多公司这成了唯一的测试任务,实际上还差的远那;第二方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。当然并不是程序员要对自己的每段代码都需要进行这种完整测试,但是程序员必须清醒认识自己的代码任务在整体项目中的地位和各种性能需求,有针对性的进行相关测试并尽早发现和解决问题,当然这需要上面提到需求理解能力。

    7.学习和总结的能力

    程序员是人才很容易被淘汰,很容易落伍的职业,因为一种技术可能仅仅在三两年内具有领先性,程序员如果想安身立命,就必须不断跟进新的技术,学习新的技能。

    善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。但是学习也要找对目标,一些小coding有些codingTO就是这样的coding上只是一些Cfans们,他们也津津乐道于他们的学习能力,一会学会了asp,一会儿学会了php,一会儿学会了jsp,他们把这个作为炫耀的资本,盲目的追逐一些肤浅的,表面的东西和名词,做网络程序不懂通讯传输协议,做应用程序不懂中断向量处理,这样的技术人员,不管掌握

    了多少所谓的新语言,永远不会有质的提高。

    善于总结,也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。

    一个不具备成长性的程序员,即便眼前看是个高手,建议也不要选用,因为他落伍的时候马上就到了。具备以上全部素质的人,应当说是够格的程序员了,请注意以上的各种素质都不是由IQ决定的,也不是大学某些课本里可以学习到的,需要的仅仅是程序员对自己工作的认识,是一种意识上的问题。

    那么作为高级程序员,以至于系统分析员,也就是对于一个程序项目的设计者而言,除了应该具备上述全部素质之外,还需要具备以下素质:

    1.需求分析能力

    对于程序员而言,理解需求就可以完成合格的代码但是对于研发项目的组织和管理者,他们不但要理解客户需求,更多时候还要自行制定一些需求,为什么这么说呢?

    一般而言,进行研发任务,也许是客户提出需求,也许是市场和营销部门提出的需求,这时候对于研发部门,他们看到的不是一个完整的需求,通常而言,该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图;但是这都不够,因为客户由于非技术因素多一些,他们可能很难提出完整和清晰,或者说专业性的性能需求,但是对于项目组织者和规划者,他必须能够清醒认识到这些需求的存在并在完成需求分析报告的时候适当的提出,同时要完整和清晰的体现在设计说明书里面,以便于程序员编码时不会失去这些准则。

    程序设计者必须正确理解用户需求所处的环境,并针对性做出需求的分析,举例而言,同样一个软件通过ASP租用方式发布和通过License方式发布,性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强调在各种平台下的普适性和安装使用的简捷性。

    2.项目设计方法和流程处理能力

    程序设计者必须能够掌握不少于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法等等),并能够根据项目需求和资源搭配来选择合适的设计方法进行项目的整体设计。设计方法上选择不当,就会耽误研发周期,浪费研发资源,甚至影响研发效果。 一个程序设计者还需要把很多功夫用在流程图的设计和处理上,他需要做数据流图以确立数据词典;他需要加工逻辑流图以形成整体的系统处理流程。一个流程有问题的系统,就算代码多漂亮,每个模块多精致,也不会成为一个好的系统。当然,做好流程分析并选择好项目设计方法,都需要在需求分析能力上具有足够的把握。

    3.复用设计和模块化分解能力

    这个似乎又是老调重谈,前面基本素质上不是已经说明了这个问题吗?作为一个从事模块任务的程序员,他需要对他所面对的特定功能模块的复用性进行考虑,而作为一个系统分析人员,他要面对的问题复杂的多,需要对整体系统按照一种模块化的分析能力分解为很多可复用的功能模块和函数,并针对每一模块形成一个独立的设计需求。举个例子,好比是汽车生产,最早每辆汽车都是独立安装的,每个部件都是量身定做的,但是后来不一样了,机

    器化大生产了,一个汽车厂开始通过流水线来生产汽车,独立部件开始具有一定的复用性,在后来标准化成为大趋势,不同型号,品牌甚至不同厂商的汽车部件也可以进行方便的换装和升级,这时候,汽车生产的效率达到最大化。软件工程也是同样的道理,一个成熟的软件行业,在一些相关项目和系统中,不同的部件是可以随意换装的,比如微软的许多桌面软件,在很多操作模块(如打开文件,保存文件等等)都是复用的同一套功能模块,而这些接口又通过一些类库提供给了桌面应用程序开发者方便挂接,这就是复用化的模块设计明显的一个佐证。

    将一个大型的,错综复杂的应用系统分解成一些相对独立的,具有高度复用性的,并能仅仅依靠几个参数完成数据联系的模块组合,是作为高级程序员和系统分析员一项最重要的工作,合适的项目设计方法,清晰的流程图,是实现这一目标的重要保证。

    4.整体项目评估能力

    作为系统设计人员,必须能够从全局出发,对项目又整体的清醒认识,比如公司的资源配置是否合理和到位,比如工程进度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量,评估项目所需的资源,评估项目可能遇到的困难,都需要大量的经验积累,换言之,这是一种不断总结的累计才能达到的境界。在西方一些软件系统设计的带头人都是很年长的,比如4,50岁,甚至更老,他们在编码方面已经远远不如年轻人那样活络,但是就项目评估而言,他们几十年的经验积累就是最重要和宝贵的财富。中国缺这么一代程序员,主要还不是缺那种年纪的程序员,而是那种年纪的程序员基本上都是研究单位作出来的,都不是从专业的产品化软件研发作出来的,他们没有能积累那种产品化研发的经验,这也是没有办法的事情。

    5.团队组织管理能力

    完成一个项目工程,需要团队的齐心协力,作为项目设计者或研发的主管人,就应当有能力最大化发挥团队的整体力量,技术管理由于其专业性质,不大同于一般的人事管理,因为这里面设计了一些技术性的指标和因素。

    首先是工作的量化,没有量化就很难做到合适的绩效考核,而程序量化又不是简单的代码行数可以计算的,因此要求技术管理人员需要能真正评估一个模块的复杂性和工作量。 其次是对团队协作模式的调整,一般而言,程序开发的协作通常分为小组进行,小组有主程序员方式的,也有民主方式的,根据程序员之间的能力水平差距,以及根据项目研发的需求,选择合适的组队方式,并能将责权和成员的工作任务紧密结合,这样才能最大发挥组队的效率。

    一个代码水平高的人,未必能成为一个合格的项目研发主管,这方面的能力欠缺往往是容易被忽视的。

    综上可以看到,作为一个主管研发的负责人,一个项目设计者,所需要具备的素质和能力并不是程序代码编写的能力,当然一般情况下,一个程序员通过不断的总结提高达到了这种素质的时候,他所具有的代码编写能力也已经相当不简单了,但是请注意这里面的因果关系,一个高水平的项目设计者通常已经是代码编写相当优秀的人了,但是并不是一个代码相当优秀的程序员就可以胜任项目设计的工作,这里面存在的也不是智商和课本的问题,还是在于一个程序员在积累经验,逐步提升的时候没有意识到应当思考哪方面的东西,没有有意识的就项目的组织和复用设计进行揣摩,没有经常性的文档习惯和总结习惯,不改变这些,我们的合格的项目设计者还是非常欠缺。

    另外,为防止有无聊的人和我较真,补充一点,本文针对目标是作商业化的软件项目和工程,那些科研机构的编程高手,比如算法高手,比如图象处理高手,他们的工作是研究课题而非直接完成商业软件(当然最终间接成为商业产品,比如微软研究院在作的研究课题),因此他们强调的素质可能是另外的东西,这些人(专家),并不能说是程序员,不能用程序员的标准去衡量。

    最后补充一点东西,一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为例,(不过笔者喜欢快速原型法)。

    第一个步骤是市场调研

    技术和市场要结合才能体现最大价值。

    第二个步骤是需求分析

    这个阶段需要出三样东西,用户视图,数据词典和用户操作手册。用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。用户操作手册是指明了操作流程的说明书。

    注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。

    需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或公司市场部门)能够有真正的沟通和了解。

    第三个步骤是概要设计

    将系统功能模块初步划分,并给出合理的研发流程和资源要求。作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于新领域,技术主管人员一上来无法给出明确的详细设计说明书,但是并不是说详细设计说明书不重要,事实上快速原型法在完成原型代码后,根据评测结果和经验教训的总结,还要重新进行详细设计的步骤。

    第四个步骤是详细设计

    这是考验技术专家设计思维的重要关卡,详细设计说明书应当把具体的模块以最‘干净’的方式(黑箱结构)提供给编码者,使得系统整体模块化达到最大;一份好的详细设计说明书,可以使编码的复杂性减低到最低,实际上,严格的讲详细设计说明书应当把每个函数的每个参数的定义都精精细细的提供出来,从需求分析到概要设计到完成详细设计说明书,一个软件项目就应当说完成了一半了。换言之,一个大型软件系统在完成了一半的时候,其实还没有开始一行代码工作。那些把作软件的程序员简单理解为写代码的,就从根子上犯了错误了。

    第五个步骤是编码

    在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都出现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候吗?从来没有!

    第六个步骤是测试

    测试有很多种:按照测试执行方,可以分为内部测试和外部测试;按照测试范围,可以分为模块测试和整体联调;按照测试条件,可以分为正常操作情况测试和异常情况测试;按照测试的输入范围,可以分为全覆盖测试和抽样测试。以上都很好理解,不再解释。

    总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会又不可预料的问题存在。

    完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营状况并持续修补升级,知道这个软件被彻底淘汰为止。

    写这些步骤算不上卖弄什么,因为实话讲我手边是一本《软件工程》,在大学里这是计算机专业的必修课程,但是我知道很多程序员似乎从来都只是热衷于什么《30天精通VC》之类的,他们有些和我一样游击队出身,没有正规学过这个专业,还有一些则早就在混够学分后就把这些真正有用的东西还给了老师。

    fans乱嚷嚷,混淆视听,实际上真正的技术专家很少在网上乱发帖子的,如笔者这样不知天高地厚的,其实实在是算不上什么高手,只不过看不惯这种对技术,对程序员的误解和胡说,只好挺身而出,做拨乱反正之言,也希望那些还fans们能认真想想,走到正途上,毕竟那些聪明的头脑还远远没有发挥应有的价值。沉迷于一些错误人士的coding
    ————————————————
    版权声明:本文为CSDN博主「老刘编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/ssssswsrjhtdj/article/details/114014850

    展开全文
  • 第一篇算是一个导论 不知道大家有没有经常回溯、追溯或者抱怨过这样的内容。 第一种抱怨:工作了4年、5年,晋升不明显,最最多做到一个小Team Leader,管了3-5个人。跳来跳去工资增涨只不过多个2千、3千。而眼看着...

    第一篇算是一个导论

    不知道大家有没有经常回溯、追溯或者抱怨过这样的内容。

    1. 第一种抱怨:工作了4年、5年,晋升不明显,最最多做到一个小Team Leader,管了3-5个人。跳来跳去工资增涨只不过多个2千、3千。而眼看着快有希望一年突破50万时,已经35,36了。然后一旦公司有一个什么风吹草动,就等着被优化了。天天受到这样的心灵“煎熬”。
    2. 第二种抱怨:天天我们PM、我们老大要我们写文档,文档我是写了,可是我不是作协的啊,我交付的是代码不就可以了,写这种东西有什么用呢?要看文档?不如去看代码。
    3. 第三种抱怨:这家公司、这个团队一塌糊涂,没文档、没传承,一切靠口口相传,做3个月我可以离开这个团队了,这简直就是一个“坑”。
    4. 第四种抱怨:每次开会被大老板骂,要做点事先要写文档,直接不可以上代码吗?那个XXX有什么了不起的,不就是PPT做了好吗?
    5. 第五种抱怨:唉呀这个什么对接第三方,文档一陀XXX,什么都没有,一会变一会变,刚调试通过的东西和他们给的文档相差巨大;

    基本就这5大类抱怨占到了平时工作的90%。

    很多人可能不知道,技术文档的写作有多重要!重要的什么程度呢?如果说你的技术能力占到了50%,文档的工作也是占到了50%,如果你是在一些大型点的或者是甲方型企业工作,文档的这一块工作能力甚至是占到了60%的重要程度,和技术能力的占比就长江商学院探讨过的一个话题来说,文档功夫对比技术能力是达到了六比四开。

    程序员知道文档很重要,可是每次在培养文档能力和培养技术能力时,有90%以上的程序员们情愿选择了有时间去看一个语言、一个技术点、而忽略了文档写作能力的培养。

    难道我们培养的都是一群“连话都不会说的”真的猿吗?不是,我们的语文教育贯穿了幼儿园、小学、初中、高中,长达10几年,不少211、985还是有大学语文的,特别是大一、大二,如果大学语文挂了是不可能毕业的。

    笔者因为工作原因,接触过上百个供应商、友商,交往和有交集、工作上配合的程序员、架构也超过了万人,但是看到了太多清华、北大、复旦的尖子生,写个文档逻辑不清、颠三倒四,交给别人看别人直接一脸的懵。。。

    知道文档写作能力的重要性为什么程序员们还这么不去有意培养自己的能力呢?这源于以下几个原因造成。

    造成程序员写作能力差的原因分析

    觉得技能点的提升不如文档描述能力的提升有价值

    很多程序员比较淘醉于网上的一些技能点,什么redis锁啦、抢红包啦、秒杀啦、JDK的new features啦。

    没错,这些点很重要。还学你连饭都没得吃了!但是这些点不能够直接为你带来个人能力上暴发式增涨。请注意“暴发式增涨”这5个字。即一年后你的工资待遇是准备好50%这么一翻的能力,而不是说什么跳个槽涨个30%,这个太简单了。如果这边有人说我这边拿3千我出去了拿8千,这个抬杠就没意思了。

    暴发式增涨怎么理解呢?那就是:如果你跳脱了写增、删、改、查的企业级IT(包括大厂,大厂也是增删改查+数据库+非数据库而己)你能作什么?如果你40了你还是高级工程师时你可以干什么?

    这两个问题如果可以轻而易举的自我回答,你的工资就会暴发式增涨。因为文档能力就是取代你的敲代码能力的一种综合能力。此处的“文档”能力是综合软实力的代称而己。

    具有这样思维的程序员们属于比较典型的固步自封。

    看文档不如读代码去

    这种程序员也得不到上升?为什么呢?说出这种话的人甚至不能够作为一个team leader。因为leadership中有一项非常重要的能力,即:PDCA环能力。

    说文档哎?和PDCA环有什么毛线关系呢?不然!请耐心看下去

    PDCA环是基本的Leader能力,因为很久。。。久在福特公司的第一辆汽车诞生之时世界的企业界就开始提出如何培训员工,要培训员工仅仅只是带着他带6个月就行了吗?带3年?这种叫“死带”,没用的,带、培、管员工成熟的做法是

    1. 你先要和你的下属共同制定计划。
    2. 制定完计划后没完呢,你要让他明白这份计划为什么要这么制定,其中每一个步骤到底是用来干什么、解决什么痛点的;
    3. 你不能替手下、替员工去做。一种是万事亲历亲为行领导要不得,这种领导容易把自己做成瓶劲。另一种就是什么都不去管的领导,你好我好大家好,这种领导会把企业作废。这就是一个度的把握了,因此一般来说好的领导会如此行事:教一遍、让员工照着做一遍、然后给一个同样的类型但内容不同的活让员工做一遍。
    4. 做完了就好了吗?你要去不断的check他的成果,以结果为导向。告诉他这样做是好了还是错了?错在哪?为什么?
    5. 逐步放手,最终如雏鹰的第一次“试飞”、“放单飞”后也只是把这个check、跟踪和及时反馈给到员工他的成果是怎么样的这么一个频率放长而己。

    这就是标准的leader要做到的最最基本的点,现在你碰到你手下有一个leader或者你遇到了你们的leader,他在一个团队一个公司至少存在了2年以上了,对着你来一句:文档没必要,自己看代码吗?

    嘿嘿嘿,作为领导、作为这个leader下属,请问你是什么感想?想想一开始我总结的5种抱怨?是不是?

    那么到底是代码注释重要还是文档重要呢?

    这边客观的告诉你:都重要,但又要区分一个“度”的问题了。下面开始敲黑板了,加粗文字很重要:

    1. 如果只是一个30行,40行的代码,而你的工程就这么一个东西。请你对类的作用、文法名、返回值、语句块内的for、while、if-else分支、抛错都做注释即可;
    2. 如果是参与模块开发、接口对接,那么你除了第1点中的那些注释外你必须要把:设计方法、系统边界、模块边界、逻辑交互、接口文档、同步还是异步、是否有schedule那么schedule是怎么设置的、属性配置文件里每一行是干什么的、如果有超过2个以上的类那么每个类是什么作用、启动时有什么加载、数据库表关系、redis里存的key的名字数据结构失效时间等等这些框架级的东西,我们不说需要多少beautiful,你至少拿个文本文体1,2,3,4这样一行行列在那边也可以呀?这能花你1小时吗?就算 花你1小时,这1小时你都不去记你参与什么模块化设计、编程呢?换了我碰到这样的人,那我会让你天天只改BUG,但是改BUG你也要在Jira里写为什么会造成这个bug和贴图呀,对不?这也是cmmi3基本要求的;

    凡事要讲究一个度、一个边界。我们可以去看tomcat源码或者spring源码。spring源码是有详细的类与类间的class diagram、sequence、use-case的UML图的。而且spring的源码里的注释可以到达某个方法、某个参数有哪些不同的类型每种类型的传入又会引起什么样的结果,很多看过开源软件源码的人知道注释的量基本上和源代码的量为1:1的比例,有时甚至注释超过了源代码的量。

    这也是文档啊?因此。。。什么叫文档没必要直接读源码?这本身就是错误的观点。

    个人或者是企业因为主观行为意识疏忽了文档功底的培养

    知道技术文档的重要性,可是就是不知道该如何去写?公司、团队也知道一直以来IT团队缺文档,可是领导就是不断的强调:要文档,要文档,甚至骂了娘。但也不知道如何去培养。

    这也是因为很多时候业务驱动型公司的性质导致的。很多时候包括大厂都是业务导向型公司天天做业务功能开发,因为这些业务功能可以引流、可以增单、可以拉风投。而这些时间已经花掉了程序员们平时绝大部分的时间了。

    当两个培训方案报到老板手里或者是部门主管手里,一个是培训presentation能力,一个是培训某个技能点,而这个技能点在3周内就可以带来实际业务收益,领导肯定会选择硬技能培训。同时硬技能也更容易培训,它可以达到短期内的效果

    而软技能的培训通常是要中长期才会出现效果且无专门的对口的培训,这钱花了很多企业、个人都觉得“不值”。

    以上问题没有错,错在:疏忽

    我们先提一个点:既然知道了重要性,时间总是可以挤得出来了。提高效率的同时,每个月抽4课时5课时(小时)难道没时间吗?

    个人来说:工作占满了我8小时,我哪有时间写文档

    这又是一个意识的问题。

    你高中入学后为了三年后冲刺高考,你一天难道就学8小时吗?而且是明知对自己1年、两年后会起到至关重要的效果的东西你还不去学?打游戏有时间吗、泡MM有时间哈、摸鱼也有的是时间哈。

    每天自己有意识的额外的去写点文档、甚至没人让你写时你自己也去写写看,每天额外的2小时会要了自己的命吗?当日积月累、月复一月、年复一年,量变到达了质变,人和人之间的差距就此拉开了。

    关键的还是在于“自己”,这个世界没有人会去阻止你你想要干的事!通往成功的道路的唯一障碍只有“自身”,至于方法论,也正是这个系列要教给大家的。

    道理都懂、话不多说,后面系列会上干货

    我们举一些实例吧。

    苏步清

    伟大的数学家、诗人、文豪。“三十年前在贵州,曾因奇异点生愁。如今老去申江日,喜见故人争上游。”开篇《射影几何概论》惊为天人,《湄潭吟社诗存第一辑》品茶论道忧国忧民。当别人问他为什么你一个搞纯数学的要去学文学。苏步青笑笑说:科学是为人民大众作服务和普惠的,如果你的技术、你的学术不为普通大众所能接受,这个技术有用吗?如果一个人数理化要学得好,他的语文必须要学的好。所谓语文就是你的逻辑、抽象思维。因此我常用“碎片化”学习方法来补我自己的语文。

    李四光

    大散文学家,他本业是地质学,“崎岖五岭路,嗟君从我游。峰峦隐复见,环绕湘水头。风云忽变色,瘴疠蒙金瓯。山兮复何在,石迹耿千秋。”短短40字悼念其学生,堪称语简情深,感人肺腑。

     凡尔纳

    这不是个文学家吗?NO。。。他是科学家。科学幻想小说并非从凡尔纳开始,但在幻想的规模上,特别是在科学的语言性上,凡尔纳大大超过了前人。凡尔纳的才能在于,他实际上是在科学技术所容许的范围里,根据科学发展的规律与必然的趋势做出了种种在当时是奇妙无比的构想。因为这些构想符合科学的发展趋势,他们到了20世纪几乎全都成为了现实。凡尔纳对于科学的态度是严肃认真的,他尽可能把自己的想象建立在科学的基础上,例如,为了写从地球飞行到月球的故事,他就是先仔细研究过空气动力、飞行速度、太空中的失重以及物体溅落等等科技问题。正是基于此,他的科学幻想就是科学的预言。最厉害的是这个人没有环游过地球,他的大半生是在图书馆渡过的。

    爱因斯坦

    哎呀,很多人看到这边会说了:这个你就不要说了,科学家,不是文学家。

    哈哈,你们又错了。科学是他的“业余”,他的主业是伟大的“文学家”、伟大的“音乐家”。“凡音之起,由人心生也”。在他十五岁那年,他爱上了几何学和康德哲学。因为欧几里得几何的清晰性和可靠性使他激动不已。此外,当他谈完了《纯粹理性批判》,康德又成了他最喜爱的哲学家。如果他的文学功底不好,试想一下,当他到达美国时,在他之前已经有很多人向罗斯福解释过:德国正在发展原子弹,如果一旦德国掌握了原子弹,那么对人类来说是一个灾难”,但是对于原子弹的解说陷于太深奥、学术,美国国会和总统无法接受。于是当时罗斯福只能摆摆手:下次再谈这个问题吧。于是人们找到了爱因斯坦,爱因斯坦用了科幻小说一般的解释手法给罗斯福上了一下午的故事会后,罗斯福终于决定当天即启动著名的“曼哈顿计划”。

    这些例子,生动说明了写作、文学、甚至是文学的旁枝“艺术”乃至哲学对技术、对科学有着多么重要的推动力。

    除去敲代码你还能干什么

    你可以写作!

    你可以开微信推广号!

    你可以做管理层!

    你可以做顾问!

    最菜最菜你可以做架构师(设计能力-就是文档能力)!

    最后,让我们以爱因斯坦著名的一句话来结束我们的第一篇“导论”吧。

    音乐和文学是我思维的源泉”。

    看,这位大哥是“不仅有工作更有远方和诗”的最早躺平人之一呢!

    展开全文
  • 聊聊程序员的核心能力

    千次阅读 2020-11-06 10:22:45
    随着互联网和移动互联网的快速发展,各类应用软件(app)如雨后春笋般涌现,许多应用程序甚至成为超级app,一些活跃用户过亿的应用程序成为国民app,这些app的兴起与程序员群体密不可分。快速发展的行业、互联网...

    随着互联网和移动互联网的快速发展,各类应用软件(app)如雨后春笋般涌现,许多应用程序甚至成为超级app,一些活跃用户过亿的应用程序成为国民app,这些app的兴起与程序员这个群体密不可分。快速发展的行业、互联网巨头的光环、国民级的应用程序带来的成就感、远超出普通行业的薪水,每年都在吸引着大量的程序员。竞争变得越来越激烈,程序员的35岁门槛已常年成为社交媒体热议的话题,程序员的中年焦虑已成为常态,作为程序员,我们应该建立怎样的核心能力,让使自己摆脱焦虑并在漫长的职场道路上不掉队呢?

    今天就来聊一聊我在十多年的程序员生涯中总结出的一点感悟。

    从基础到高级,我将从三个方面进行概括:通用能力、专业能力和进阶能力。

    01 通用能力

    通用能力是作为一个职场人员都需要具备的基础能力。
    通用能力包括学习能力、沟通能力、执行力。

    • 学习能力

    在互联网行业,技术日新月异,并且不断升级;3G和4G在10年内逐渐普及,5G也即将踏浪而至,随之带来对IT相关技术要求也越来越高。从我们每天在使用的编程语言、技术框架等,到更复杂的通信协议、音视频编解码、网络数据传输等等,各项技术都在持续的更新与进步。作为一个程序员,我们还会在不同的子行业、公司之间辗转,接触不同的业务和产品,快速学习和理解不同业务及产品背后的逻辑和本质,是一项必备的素质。这些都要求至少及格往上的学习能力,不断的学习、研磨技术,丰富自身技能,以适应时代的快速变化带来的技术更新和挑战。

    • 沟通能力

    作为程序员,大部分时间是和机器在打交道,但并不意味着程序员就可以和外界完全隔离,良好的沟通技巧,能够让工作事半功倍。许多程序员会排斥与人沟通,总是希望通过代码、做出来的产品来展示和表达自己,在某些时候也许行的通;但在大部分工作中,我们还是要与其他人沟通与交流,比如需求评审需要和产品同学沟通,bug需要和测试人员沟通,即使是代码也需要做出良好的技术架构设计,通过文字、图形或语言表达出来。沟通首先需要具备沟通意愿。

    其次要掌握好沟通技巧,学会换位思考,避免无谓的冲突。随着90后、千禧一代迈入职场,社会也越来越包容倡导多元、自由的文化,这带来的一个问题是越来越多的人会走向自我、封闭甚至极端,直接的体现是他们在社交、职场上与人沟通经常出现冲突,团队合作愈发困难。因此掌握良好的沟通技巧,学会共情也是沟通能力的一种体现。

    • 执行力

    任何一个团队和组织,都会在目标明确后要求每个人能够全力以赴,不折不扣的执行既定的计划,高质量高效率的完成任务,因此良好的执行力也是程序员在一个团队中必备的基础能力。

    以上是作为程序员在职场中所需要具备的几项基础能力。除此之外,我认为程序员还需要构建以下几项专业能力。

    02 专业能力

    专业能力是程序员能够进入IT行业从事软件开发的关键。专业能力的不同也意味着可以达到不同的职业高度。
    专业能力包括基本的技术能力、架构设计能力和项目管理能力。

    • 基本的技术能力

    基本的技术能力是一个程序员在工作中赖以生存的基础。对于一个java程序员,需要深入的理解java的语法知识、jvm的原理和调优、java的高级特性等等;需要了解常见的数据结构和算法;需要熟悉主流的应用框架,如spring、spring cloud、spring boot等;需要对常见的中间件有实践经验,如缓存、消息队列、NoSQL数据库等等;另外还需要对数据库、运维等领域技术有一定的研究。如果能够对基本的技术能力有了较深入的掌握,基本就可以拿到一份工作的offer。

    • 架构设计能力

    架构设计能力是一个程序员突破自我所需要迈过的第一个坎。

    技术、框架不断更新进步带来的一个新的问题是,许多程序员在日常工作中通过简单的复制粘贴,已经可以完成大部分工作,也有一个名词叫“Crud Boy”,泛指那些每天最多做的事情就是简单的增删改查的程序员。重复的复制粘贴或Crud让程序员的思维逐步退化,不愿意思考,随着时间的推移面临被淘汰的困局。如果在工作中,能够多思考总结,逐步积累起架构设计能力,那结果可能是另外一种境遇。

    架构设计能力首先包括最简单的设计模式。在写代码的时候,是否考虑过对代码进行有效的组织,按照GoF所倡导的23种设计模型进行重构,让代码更易读、易维护,这些都是架构设计能力的体现。

    其次需要掌握对系统进行分层设计的思想。前后端分离,表现层、控制层、模型层各司其职,无论你是从事后端开发还是前端开发,观察那些主流的框架如springMVC、Vue等,无不在告诉我们分层设计的重要性。同样当你在设计一个大用户量产品的系统架构,有必要将系统合理的划分为接入层、接口转发层、服务控制层、服务执行层、缓存层、数据访问层等。

    再次,对于具有高并发大流量的系统,还需要掌握如何做服务划分和模块拆分,识别领域边界,做到高耦合低内聚的同时支持水平扩展和垂直扩展。这个时候需要对分布式服务、微服务、RPC、数据库分库分表等技术有更深入的研究。

    最后,还要了解一些容灾备份解决方案。当应用系统所在机房或云存储网络故障了怎么办?当数据库数据被误删了怎么办?当某些区域发生了不可抗力的自然灾害又该如何应对?这些都是在系统的访问量级、用户量级、数据量级等达到一定规模后必须要考虑到的点。

    架构设计能力可以再不断的细分和扩展,例如随着抖音、快手等视屏和直播类应用的崛起,对于超大流量下的视频、图形图像类系统架构如何设计,随着5G和AIoT时代的到来,如何设计系统来支撑大规模和超大规模的物联网硬件终端接入及其产生的数据等等。以上这些架构设计能力在每一个维度都有可以深入研究挖掘的技术点,如果你有时间并且希望不断突破,应该深入到每一个领域中去,通过不断研究和实践积累经验,直到有一天你能够根据不同的业务、应用场景、用户等,自己设计出一套合理的架构。

    • 项目管理能力

    专业能力中的另外一项是项目管理能力。

    项目管理能力是一项综合能力。

    许多人对项目管理能力都有误解,认为它是一项很简单的能力,或者不认为是程序员所需要具备的核心能力。在一些互联网大厂,也有专门的项目管理人员或类似PMO的组织去推动和完成项目管理工作,但这不意味着对于一个程序员就不需要掌握项目管理能力。项目管理是任何一个组织能够完成产品、项目成功上线,都必须要做好的一件事。对于一个程序员来说,能否主导或负责完成一个中大型项目的项目管理工作或者在项目的某一个细分领域完成项目相关的管理工作,更是综合能力的体现。最近几年,无论是百度、快手的春晚营销技术支撑团队,还是京东、淘宝每年双十一的技术保障支撑团队,无不是大规模、跨团队、跨地域的大型项目,在这些项目中,从上到下都需要各个不同领域、不同组织、横向、纵向的项目管理人员,而这些项目管理人员往往都是资深的程序员、技术专家成长起来的。他们需要对项目的目标、战略意义理解的很透彻,组织做好项目细分的目标对齐、任务分解和计划落地,协调项目的各项资源突破各项技术瓶颈和项目难点,做好项目的风险管理,同时统筹兼顾做好项目组的氛围,形成项目组的团队合力,最终为项目的目标达成负责。

    如果你已经具备和掌握了上述所有这些专业技能,则可以从一个程序员菜鸟成长为技术专家,大部分工作中遇到的技术问题已经可以自行研究解决。如果这时你仍不满足想进一步提升自己,就需要修炼以下几项进阶能力。


    03 进阶能力‍

    进阶能力是程序员能够迈入更高层级突破职场天花板的必要条件。

    进阶能力包括技术的广度、系统化的思考能力、团队管理能力、组织协调能力和业务理解能力。

    • 技术的广度

    每个人的精力和时间都是有限的,当我们对自己专业领域有足够深入的了解时,我们还需要拓展自己的知识。作为程序员,除了要完成架构设计和编码之外,还会接触到更专业的技术领域,例如安全、大数据、算法和AI等。一方面,扩展这些专业技术领域可以促进对程序员所具备的基本专业技能更深刻理解,同时也可以获得其它技术领域的新知识和突破点。

    • 系统化的思考能力

    在具备一定的知识深度和广度后,从单纯的某一项具体技术细节中跳出来,做系统化的思考和总结,以领域视野、全局角度,举一反三,梳理和建立自己的技术知识体系,形成自己的解决问题的方法论。当具备系统化的思考能力,技术或知识犹如滚雪球一般,快速识别、提取、学习、积累,循环往复,建立一套不断更新迭代的技术知识体系,无论市场、业务、技术如何变化已经可以及时的适应,甚至抓住新技术红利,去引领新技术的发展。

    • 团队管理能力

    当程序员成长到一定阶段,必然会面临着成为管理者的可能。有些人会成为一个3到5人小组的组长,有些人会带领几十人甚至上百人的团队,不排除有一心只想写程序而拒绝走上管理岗位的同学,但这并不意味着不需要关注团队管理能力的提升。每一个人都是团队管理的参与者和受影响者,通过良好的团队管理能力发挥出团队的价值,能够让程序员的工作更有意义。

    团队管理能力的建设包括管理方法论的沉淀和管理动作的落地,这两个方面相辅相成,互相促进。

    管理方法论的沉淀,第一需要进行领导力的培养。领导力应该成为你管理团队的指导思想。
    不同的企业组织会构建自己的领导力模型。在我曾经学习和实践过的一种领导力模型中,把领导力按照三个维度六个领域进行了解释,这里做下分享。

    领导力主要目标是为了组织协同,发挥团队的力量以达成绩效结果。领导力需要关注哪些方面呢?

    1,管理者需要理解公司战略和方向,根据公司战略和方向制定团队的目标。任何组织都需要明确的方向指引。当年成为团队管理者后,对于你所在的公司,既需要去理解公司远期的目标我们称之为愿景,还要理解公司的近期目标;用公司愿景指导团队长期努力的方向,按照公司近期目标分解并制定自己团队的短期目标,来指导团队接下来半年度、季度或月度的工作。我们可以借助不同的目标管理方式如OKR等来管理团队的目标。

    2,需要做好良好的激励措施。激励能够让团队成员产生更强的工作动力。短期的激励可以通过日常工作中的奖励、表扬或称赞来实现,而长期的激励还需要通过对团队成员预期的管理和工作授权来实现。

    3,需要做好团队成员的指导工作。通过对团队成员日常的辅导提供指导和帮助,通过树立典范来指明团队成员未来所需要学习的目标员工画像。领导力最终通过行动计划来落地,而不能只停留在口号和文字总结中,这将在后面进行解释。

    领导力是一个很大的课题,每个感兴趣的人都可以去深入研究,找到和建立适合自己的领导力模型。

    第二,有了领导力模型的指导,我们还需要做好团队人才盘点和梯队建设,识别团队中的明星、潜力、骨干和后进人员,在做到对团队人员了如指掌的同时,通过目标和绩效促进团队成员不断提升和进步。

    第三,做好团队流程与机制沉淀。一个团队能够高效的运转下去,需要依赖合理的流程和机制。关于这一点,我曾经看到过一个很精炼的总结:将复杂的的事情简单化,将简单的事情标准化,将标准的事情流程化,将流程的事情自动化。它阐述的道理即是不断的做流程、机制的沉淀,最终能够实现效率的极大化。

    第四,需要做好向上管理。了解你的上级对你和团队的预期,懂得通过上级协调资源寻求帮助,同时能够站在上级的角度考虑问题,替上级分担解忧。

    最后,建立有特色的团队氛围和团队文化。一个好的团队与良好的团队氛围和团队文化密不可分,团队文化也能够吸引和过滤志同道合的人一起,促进团队氛围的不断发展。

    有了管理方法论的沉淀,并不意味着一定能够做好管理,如何在日常的工作中通过管理动作的落地去影响团队更为重要。

    我们需要针对工作中的每一个环境和每个动作细化管理方法和管理手段。

    例如,年度、季度、月度的目标设定和定期的复盘,提升团队人员的目标感和团队凝聚力。定期的one-one沟通,了解团队人员的想法和困惑,给予他们辅导和帮助。组织项目和需求迭代的复盘总结,发现需求迭代过程中的问题,找到流程可以优化的点并形成可复制可复用的方法论。定期的团队绩效复盘和团队成员绩效反馈,让大家知道如何提升改进。组织团队技术分享,参与行业的技术交流构建团队和个人技术影响力,打造团队的极客文化等等。

    在管理动作的落地的过程中,通过实践得来的知识,又可以丰富管理手段和管理工具箱,进而总结成新的管理方法论,指导下一阶段的团队管理工作。

    • 组织协调能力

    组织协调能力和项目管理能力既有相似处,又有差异。相似的地方在于它们都强调团队合作的重要性,注重通过团队的力量达成既定目标。不同的地方是,项目管理能力更强调项目,一切围绕项目的目标去努力。而组织协调能力强调的是组织和人,相比项目管理能力,组织协调能力是更高的一个层级。当你在组织协调能力上具备一定的积累后,任何项目或任务将不再是问题。组织协调能力需要你了解组织及组织的部门、人员,快速识别关键人物和核心目标,建立自己在组织内的连接,提升自己在组织内的影响力。可以很好的理解和倾听他人,产生共鸣和共情。当你需要完成一项任务时,发挥自身的组织协调能力优势,把握关键点,找到关键人,成功也就随之而来。

    • 业务理解能力

    技术本身不产生价值,只有将技术应用到业务和产品中,通过产品解决用户的需求才能产生价值。作为掌握技术的程序员,站在业务的角度去思考问题,解决业务的痛点永远是第一位的。程序员不能仅仅满足于被动的完成业务需求,更需要通过主动对业务的理解和思考,洞察业务的核心和本质,把业务问题转化为技术问题。在业务的开始阶段,快速的构建MVP版本产品,支撑业务发展,在业务步入高速发展或稳定阶段,通过不断的抽象、模块化,打造服务化、平台化的技术体系,支撑业务的规模化扩张,让技术真正发挥出支撑业务甚至驱动业务的转型。最后,通过一幅图对以上的解释做个总结。

     

     

    北哥通过多年的实践经验证明,程序员的这些核心能力在工作中相互交织而又层层递进,每天我们都在使用、学习和积累这些能力。通过在工作中不断的总结和回顾,接受项目和产品的历练,相信每一个人都可以突破自我,迈上新的台阶。

    当然程序员的核心能力在不同人的眼中会有不同,正如一百个读者眼中就有一百个哈姆雷特。重要的是每个人在工作中不断总结,找到适合自己的能力圈。

    如果你对程序员的核心能力圈有新的认识或不同的看法,也欢迎与我联系交流。

     


     

    我是程序员北哥,一个资深程序员,架构师,团队管理者。先后经历过程序员、技术经理、架构师、技术专家和团队技术总监等多个身份变化,也经历过数个产品从0到1的打造。
    在这里会分享我的一些工作经历、思考和总结。偶尔也会发发感悟、随想和读书笔记。希望这些能对您有所启发。
    欢迎关注公众号:程序员北哥。

    展开全文
  • 性格开朗容易与人相 处注重团队协作精神且能承受较大压力 注重专业基础学习和实践能力的培养在校期间不仅做过多课程 设计暑假期间也去过单位实践过 java 编程和网站开发具有浓厚 的兴趣 篇二 java 程序员简历 ...
  • 程序员能力具体体现在哪些方面

    千次阅读 2020-12-21 14:18:14
    技术人员无论说深度和广度是衡量一个技术人员的优势和能力都是一个重要指标,并且来讲技术的深度和广度也是作为一个技术人员的基础能力。并且有了技术的深度和广度,在技术方案选型或者排查问题解决问题才会有更多的...
  • 记得之前在知乎上看到一个...综合来讲,其实评判一个程序员是否优秀的标准就一个:就是解决问题的能力。 在项目开发中,一个程序员能力往往就等于其解决问题的能力。假如想有个尺度来衡量这个能力的话,一个程...
  • 程序员的简历自我评价熟悉软件的安装及维护 熟悉计算机硬件组装及维护,熟悉windowsXX,xp,severXX操作系统的安装配置与维护 有良好的计算机基础知识和网络技术基础,网络设备,局域网和组网技术有一定的了解...
  • 安卓程序员自我评价

    2020-12-20 00:12:46
    安卓程序员自我评价【篇程序员简历自我评价程序员简历自我评价本人勤奋踏实,工作认真负责,自学能力强;性格开朗,容易与人相处,注重团队协作精神,且能承受较大压力。注重专业基础学习和实践能力的培养,...
  • 一个好的程序员

    千次阅读 2018-02-28 13:52:09
    我们认为的一个好的程序员一个不好的程序员具备的特点。 编辑器 如果一个程序员还在用 记事本,没有 SublimeText 或者 VSC 、notepad++,那么这个程序员不是一个好的程序员。 除了使用 IDE ,文本编辑器在...
  • 如何找一个程序员做男朋友?

    千次阅读 2020-06-01 22:00:43
    给广大单身妹子提供一个新思路:找不到程序员当男朋友的话,不如试试把男朋友培养成程序员~ 我对象本科是学机械的,现在在某top3读计算机视觉方向博一,主要使用语言是python和c++,除了完成学校小导师的科研任务...
  • PHP程序员简历自我评价范文一具有9年多互联网php和前端开发;熟练使用mysql,memcache,redis,mongodb,hbases等数据库,熟悉linux和搭建服务器环境;具有p2p平台、游戏后台、企业和门户、数据接口、单点登录、支付...
  • 有哪些让程序员受益终生的建议

    万次阅读 多人点赞 2019-10-28 07:11:59
    从业五年多,辗转两大厂,出过书,创过业,从技术小白成长为基层管理,联合几业内大牛回答下这问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由...
  • java程序员简历自我评价怎么写

    千次阅读 2021-02-27 08:21:17
    自我评价(案例)相较于其它工作过几年的人来说,或许我的自身能力并不是特别明显,一年多的工作经验,让我学会了学如何在团队中团合作交流,也累积不少知识与工作经验,生活磨练了我坚毅的性格,良好的品行,我一定...
  • 1、 每次临到周二的时候,我...我在想,要不要加入一个写作训练营呢?我时不时在内心会这样问自己。瞅瞅人家这个写作训练营的课程大纲,每一节课都是我想吃的药啊! 第一节课:养成写故事的思维,摆脱碎碎念。 ...
  • 一个毕业一年程序员的感悟

    万次阅读 多人点赞 2018-07-22 00:01:04
    段看到朋友圈里的学弟学妹们开始晒毕业照,这一晃据我毕业也一年多了。走出了校园,工作了一年...这问题,我在毕业半年之后就意识到了。经常听到有人说“学校里的知识都是过时的,没用的,工作中顶多也就能用...
  • 了解、入门、熟练、精通 ...一个优秀的程序员,则需要极强的抽象与概括的能力,还有优秀的逻辑分析能力,沟通和理解能力也是程序员非常重要但总是被忽略的能力;抽象概括的能力是代码简洁优美的基础,...
  • 对于某位网友对程序员评价有感

    千次阅读 2016-09-23 16:32:57
    1.程序设计行业是项科技含量高的行业: 金融行业低级的有业务员、交易员,高级的有分析师、精算师。 建筑行业普通的有包工头、制图员,高级的有结构师和设计大师 IT行业新手的有熟记api的编码员、有静态某...
  • 面试:如何评价程序员

    千次阅读 2018-06-02 14:38:00
    他 们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其实我是一个程序员 自己有哪些优势?  1,具有良好的英语阅读能力,能够阅读英文资料...
  • 如何辨别一个程序员水平的高低?

    千次阅读 2018-06-15 09:44:15
    之前公司有同事,满嘴跑火车,说他朋友多么牛逼,什么月薪多少K,什么技术最牛逼,之类的。每次听他说话我都只能微微笑以作回应。后来项目上线后出了点问题,让他排查,结果他一点头绪都没。遇到报错,他就顿...
  • 一个中科大差生的8年程序员工作总结

    万次阅读 多人点赞 2021-01-14 15:52:01
    今年终于从大菊花厂离职了,离职前收入大概60w不到吧,在某乎属于比较差的,今天终于有空写一下自己的职场故事,也算是给自己近8年的程序员工作做总结复盘。近8年有些事情做了,也有更多事情做错了,在这里记录...
  • 题目是比较复杂的,它包含的...因为技术招聘除了考察人的协作精神和工作态度,大目标便是判断人的技术能力和实际水平。在这件事情上多做观察、思考是很有意义的。 对于考察人的技术等级,学界是有认真的研...
  • 作者 | 伍杏玲头图 | 下载于视觉中国出品 | CSDN云计算(ID:CSDNcloud)在知乎上,有近四百万浏览的程序员热帖:有没有不用加班的程序员程序员为什么需要加班大概可总结为...
  • 中国第程序员简介与现状

    千次阅读 2019-03-28 16:20:59
    这代表着一个时代的过去,在求伯君风光的年代,程序员身上充满着个人英雄主义 的浪漫情怀。而随着时间的不断推移,单个程序员能力显得越来越渺小,程序员逐渐沦为软件生产流水线上一颗螺丝钉,这让第一代程序员的...
  • 程序员能力等级分析

    千次阅读 2016-02-17 10:35:05
    一个维度是编程技能层次,另一个维度是领域知识层次。   编程技能层次  编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。 0段—非程序员:  初学编程者,遇到问题,完全是...
  • 最近好几个读者问:...程序员行业还有一个特点,优秀程序员的产出是普通程序员的好多倍,甚至是10倍!这是因为编程不是一门「线性科学」,而是一门「非线性科学」。 「线性科学」,比如跑步的速度就是,世界冠军的速
  • 没人愿意和程序员阿海合作,阿海表面上挺积极勤奋的,每天很早到公司,周末在家加班。可他并不是个靠谱的人:需求逻辑梳理不清,代码注释从不多写,做事有头无尾。...以下几点,是判断一个程序员是否靠谱...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,441
精华内容 15,776
热门标签
关键字:

对一个程序员的能力评价