技术总监谈好的程序员如何写代码
要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写代码。
即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码,整洁而规范,视觉上自然有一种美感。空白错落有致,注释恰到好处,命名和排版遵守统一的规范。差的程序员写的代码则经常出现过长的函数,前后不一致的命名方式和排版,过深的嵌套结构,非常复杂的表达式,随处可见的数字等毛病。
再去粗粗阅读,对好的程序员还是差的程序员就会更有把握。好的程序员写的代码,有一种精心雕琢而成的一致性。好的程序员一致会遵守统一的命名方式,如camelCase,而差的程序员的变量命名时不时的就会偏离统一规范。好的程序员的代码中拼写错误几乎不可见,而差的程序员的拼写错误要多得多。好的程序员对于同一类动作,不会忽而用这个动词,忽而又用那个同义词,如add/insert混用。好的程序员采用一致的简写规则,差的程序员则时而不简写,时而简写。好的程序员会很注意名称中形容词与名词谁在前谁在后,而差的程序员没有规则,时而在前时而在后。好的程序员很少会写出大段大段的重复代码,差的程序员却经常搞不定重复代码,他们难以将重复的代码抽取出一个统一的概念进行重用。好的程序员对于对外的API会注重注释与代码的一致性,差的程序员经常注释中的参数名称与函数定义都不一致。好的程序员很少会留下被注释掉的或用#if 0括起的垃圾代码,他们意志坚决,代码有用就要,没用就不要,差的程序员则不一样,他们经常不确信一段代码是否真的需要,他们缺乏保持代码整洁的习惯,因此他们让垃圾代码留着。
如上,即便你不懂他所用的语言,不却关心程序的逻辑,对好的程序员还是差的程序员就能做到八九不离十的判断。程序的好坏几乎总是取决于它们是否漂亮,不漂亮而好的程序,除了C++ STL源码,我再也没见过(如果你稍仔细看,STL的源码虽然不够漂亮,但仍然满足这里提出的一致性原则)。而又好又漂亮的代码则随处可见,如Linux Kernel,InnoDB,JDK,JUnit等等。
如果再仔细阅读,就能更准确。好的程序员写的代码,好似浑然天成,简单而直白。函数通常较短小,函数的名称准确的反映函数要完成的工作。逻辑简单而自然,让你读的时候由衷的发出啊,就应该是这样的感叹,而差的程序员的代码经常让你发出怎么是这样?这是再干什么呀?的疑问。好的程序员会在紧要关头加以画龙点睛般的注释,差的程序员要么没注释,要么注释只是代码的重复,纯粹是废话,更差的是注释是错的,是误导。
好的程序员未必是语言律师,即那种非常清楚的了解语言的各个细节,在编程时到处使用的家伙。好的程序员也不常炫技,在代码中精心构造一些独具匠心的片断,他们偶而会,但大多数时候总是用直白的语言来表述。
从代码也可以看出一个程序员的团队协作精神。注意团队合作的程序员,会严格按照团队规范写代码,而风格与团队规范不一致的程序员则很可能欠缺团队精神。注意团队合作的程序员会注意给模块的对外接口加以重要的说明,如前置条件、后置条件、参数能否是NULL等等,不注意团队合作的程序员懒于处理这些细节。
好的程序员与差的程序员的生产力差别巨大,项目的周期越长,项目越复杂,项目对质量的要求越高,好的程序员的价值就越大。好的程序员与差的程序员,管理成本也差别巨大,好的程序员只需要与他共同确定设计,代码可以不看,差的程序员的代码经常需要经过多次review,且仍有可能达不到理想的质量。
要成为好的程序员,首先要树立要成为好的程序员的志向,再勤加练习,天长日久,就会越来越好,这些人不怕老。没有志向永远成不了好的程序员,这些人若不在老去之前成为经理就会变成废人。
通过两个小时的笔试和半个小时的面试对于判断程序员来说是不够的。通过笔试与面试,你可以判断一个程序员是否具备算法与数据结构等基础知识,可以判断他对编程语言的特性是否掌握,可以判断他对技术是否关注,然而要知道他能否真的能很好的完成工作,不写代码是不够的。
那些显得对技术充满热情的,未必是好的程序员。这些人可能非常乐意从事有新意的工作,但后续的编码、测试、调试、文案工作则可能让他们感到厌烦。他们可能会提出好的创意,但却经常不能够有始有终的将其完成。公司不需要多少这样的人。
因此招聘的方式需要改善。招聘是最重要的,因为进来后就难以出去,即便是试用。转正条件白纸黑字写的很清楚,只要合格就可以转正,要达到合格并不是很困难。今年部门里进了很多新人,并不是人人都很优秀,但确实也都合格,自然也应该转正。
改善招聘的方法,就是让他写程序,可以出两道题,一道让他写程序,一道让他重构一个已有的较长的程序,一天之内完成。假使可以考他半个月,那么重构是不太需要的,但一天的时间太短,通过重构可以考察阅读并理解代码,并通过重构化腐朽为神奇的能力。那些不愿意写别人的代码,不愿意接受别人的代码,经常要重来一遍的人是不理想的。
今年有两个人采用了类似的方法。有一位简历很优秀的人,做了两道编程题被拒了,有一位简历及面试一般的人,通过编程测试,录用了。我感觉比单纯的笔试与面试要准确。
原文链接:http://wangyuanzju.blog.163.com/blog/static/1302920091130104953863/
分享到:
相关推荐
4. **系统架构师/技术总监**:除了拥有卓越的技术实力之外,还需要具备良好的战略眼光与领导能力,负责整个产品的技术选型和技术路线制定等工作。 5. **产品经理**:部分开发者可能会选择转型为产品经理,这一转变...
(4)十年磨一剑,开源促创新——英特尔开源技术总监Dirk Hohndel专访 (5)MSUP三步曲:MPD之因团队施教——聚焦软件研发中心的快速成长 云计算基础架构特别专题 (1)云计算基础架构:没有最好,只有最合适...
内容概要:本文主要提供了名为“PaddleDetMfc-csdn”的zip压缩包文件下载链接与提取码,该资源位于百度网盘之上。 适合人群:有资源获取需求的人员。 使用场景及目标:当用户需要获得这份由csdn提供的PaddleDetMfc资料,但苦于网络搜索效率低下或者难以找到可信源时,可以通过本篇文章所提供的直链以及提取密码快速准确地取得所需资源。
COMSOL三维多物理场仿真软件:固液多相介质力热流耦合分析与位移场、应力场、温度场模拟结果展示,COMSOL三维多物理场仿真 固液多相介质-力热流多场耦合 输出位移场-应力场-温度场模拟结果 ,核心关键词:COMSOL; 三维多物理场仿真; 固液多相介质; 力热流多场耦合; 输出位移场; 应力场; 温度场模拟结果。,"COMSOL三维多物理场仿真:固液多相介质力热流多场耦合模拟结果输出"
"COMSOL模拟碳与碳化硅复合材料微观氧化损伤过程:化学接口与浓物质传递机制的研究",comsol模拟碳和碳化硅复合材料微观氧化损伤。 涉及化学接口与浓物质传递接口。 ,关键词:Comsol模拟; 碳和碳化硅复合材料; 微观氧化损伤; 化学接口; 浓物质传递接口; 界面交互影响。,"COMSOL模拟复合材料微观氧化损伤:碳与碳化硅化学交互研究"
锂电池充电器不对称半桥反激变换器电路仿真:实现ZVS与闭环控制,基于Matlab Simulink环境,锂电池充电器用不对称半桥反激变器电路仿真。 两个管子均可实现ZVS。 模型包含开环和电压闭环控制。 运行环境为matlab simulink ,核心关键词:锂电池充电器; 不对称半桥反激变换器; 电路仿真; ZVS实现; 开环控制; 电压闭环控制; MATLAB Simulink。,"Matlab Simulink仿真:不对称半桥反激变换器电路模型,实现ZVS的锂电池充电器"
8. CH374U_STM32F429IGTx_SPI(HW)HOST_HID(键鼠同时插入).zip
基于双路神经网络和多输入时频图像算法的滚动轴承故障诊断研究——涵盖振动信号与多种时频算法的数据集实践(支持小波变换、短时傅里叶变换等),基于双路神经网络的滚动轴承故障诊断 融合了原始振动信号 和 二维信号时频图像 的多输入(多通道)故障诊断方法 单路和双路都可 时频图像算法可选小波变,短时傅里叶变,马尔可夫变迁场,格拉姆角场等 数据集可选凯斯西储大学,东南大学,江南大学等等 Pytorch和Tensorflow框架做的。 ,关键词:双路神经网络;滚动轴承故障诊断;多输入故障诊断方法;原始振动信号;二维信号时频图像;小波变换;短时傅里叶变换;马尔可夫变迁场;格拉姆角场;Pytorch框架;TensorFlow框架;凯斯西储大学数据集;东南大学数据集;江南大学数据集。,基于双路神经网络的滚动轴承故障诊断:多输入时频图像融合诊断方法研究与应用
适合于小白,初学者,课程设计,毕业设计参考,MATLAB设计构思
基于GWO-CNN-LSTM-Attention算法的24步超前多特征单输出回归预测模型:MATLAB 2023版多领域应用研究,基于GWO-CNN-LSTM-Attention超前24步多变量回归预测模型 多特征输入,单输出 运行平台:MATLAB 要求2023及以上版本。 1、多特征输入,单序列变量输出的超前24步预测。 2、优化参数:学习率、卷积核大小、神经元个数3个关键参数,以最小MAPE为目标函数。 3、预测结果图:损失、RMSE迭代变化极坐标图;网络的特征可视化图;测试对比图;适应度曲线。 4、提供MAPE、RMSE、MAE等回归模型评价指标。 适用领域:(包括但不限于) 风速预测、光伏功率预测、发电功率预测等多种应用。 数据格式 直接使用EXCEL表格导入数据,无需大幅修改程序。 内部有详细注释,非常适合小白。 ,基于GWO-CNN-LSTM-Attention; 多特征输入; 单输出; 超前24步预测; 优化参数; 最小MAPE目标函数; 预测结果图; 回归模型评价指标; 风速预测; 光伏功率预测; 发电功率预测; EXCEL表格数据导入; 详细注释。,基于MA
增材制造温度场与应力场仿真模拟:Ansys Workbench操作教程与双椭球热源应用实战,增材制造模拟,增材制造仿真。 ansys workbench ,cmt, waam ,slm,电弧增材制造焊接,温度场应力场仿真模拟分析案例教程apdl命令流。 单道单层,多道多层,搭接,增材仿真。 增材制造温度场应力场仿真,电弧增材ansys workbench仿真,双椭球移动热源,不需要掌握命令流,直接输入参数按照流程操作就可以。 ansys workbench ,电弧增材制造焊接模拟,同轴送粉增材制造模拟,温度场应力场仿真模拟分析案例教程apdl命令流。 多道多层,搭接,增材仿真。 增材制造温度场应力场仿真,双椭球移动热源,双椭球热源 ,增材制造模拟; 增材制造仿真; ANSYS Workbench; CMT; WAAM; SLM; 电弧增材制造焊接; 温度场应力场仿真; APDL命令流; 单道单层; 多道多层; 搭接; 仿真教程; 双椭球移动热源。,"ANSYS Workbench电弧增材制造仿真教程:温度场与应力场模拟分析案例"
flask 使用flask,websocket开发的简易在线聊天室.
基于卡尔曼滤波的分布式驱动电动汽车路面附着系数估计进阶模型:四种组合工况下的精准估计,基于分布式驱动电动汽车的路面附着系数估计,分别用卡尔曼滤波对电动汽车四个车轮的路面附着系数进行估计。 本模型参考scilunwen搭建,开发了分布式驱动电动汽车路面附着系数估计的进阶版本,可在高速,低速下,对开路面,对接路面四种组合工况下对路面附着系数进行准确估计估计。 ,分布式驱动; 电动汽车; 路面附着系数估计; 卡尔曼滤波; 不同工况。,"分布式驱动电动车辆的附着系数估计模型:高速低速下的准确估计进阶版"
固体氧化物燃料电池SOFC模型COMSOL仿真计算研究,固体氧化物燃料电池SOFC模型,COMSOL电池仿真计算 ,核心关键词:固体氧化物燃料电池SOFC模型; COMSOL电池仿真计算; 电池模型; 仿真计算; 能源技术。,基于COMSOL仿真的SOFC电池模型研究
Comsol仿真:考虑集流体的SOFC固体氧化物燃料电池性能与温度场分析,考虑集流体的 Comsol sofc固体氧化物燃料电池仿真(温度场分布,气体分布,极化曲线,性能曲线) ,核心关键词:Comsol; SOFC固体氧化物燃料电池; 仿真; 温度场分布; 气体分布; 极化曲线; 性能曲线; 集流体。,"Comsol仿真:SOFC固体氧化物燃料电池温度场与性能分析"
在 Flask 中使用 Web Scraping 创建 Cricket Score API
适合于小白,初学者,课程设计,毕业设计参考,MATLAB设计构思
1、文件内容:LibRaw-0.19.4-2.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/LibRaw-0.19.4-2.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
半桥LLC谐振变换器滞环控制与变频控制对比研究:启动与切载过程性能仿真分析(附波形图及matlab simulink环境),半桥LLC谐振变器滞环控制仿真,与变频控制作对比。 启动过程输出电压更平滑,切载过程滞环控制响应速度更快。 管子软开关特性仍能保持。 仿真0.1s处为切载过程。 第二、三幅图分别为启动和切载时输出电压波形,第四幅图为S1管子ZVS情况。 运行环境为matlab simulink ,半桥LLC谐振变换器; 滞环控制仿真; 变频控制对比; 启动过程输出电压平滑; 切载过程响应速度快; 管子软开关特性保持; matlab simulink环境。,"半桥LLC谐振变换器:滞环控制仿真与变频控制对比研究"