7大编程误区,你避开了吗?

CSDN资讯 CSDN资讯     2022-12-20     594

关键词:

作者 | Mohamed Barouma       

译者 | 王启隆

出品 | CSDN(ID:CSDNnews)

我们很少看到有人公开谈论自己的错误。

人非圣贤,孰能无过?虽然难言出口,但反思过去所犯的错误可以让人不会在未来——至少是短期的未来,犯同样的错误。

Mohamed Barouma是位工作5年的专业程序员,但和任何人一样,他也犯过错误。

他这么说:“通常情况下,我不会马上意识到自己做错了什么;只有在接触到正确的做事方法后,我才知道犯了哪些错。”

结合他的原文,本文总结了他犯下的七大误区。

没有使用合适的ORM

数据访问层代码总是混乱、乏味和无聊的。不幸的是,往往这点到最后才能发现。

Mohamed和ORM有着一段孽缘。ORM,即Object Relational Mapping,它是对象关系模型的简称。它的作用是在关系型数据库和对象之间作一个映射,使程序能够通过操纵描述对象方式来操纵数据库。

当Mohamed第一次做一个简单的内部会计应用程序时,他发现只是为了完成基本的程序,就不得不编写大量的代码。于是他开始埋头于ADO.NET,并手动编写了一个自制的、具有非常特殊的、自定义的表模式的ORM,来满足目的。

在一段时间里,这个ORM工作的相当不错,直到几个月后,公司的业务需求发生了一些变化,这导致了整个表格模式的变化,然后,就是对ORM的反复修改。这个流程的痛苦之极,让Mohamed最终选择了强类型数据集适配器。

虽然这件事因此解决,但如果能找到一个更合适的ORM(比如NHibernate)来完成工作,Mohamed仍会义不容辞,至少当他的用户数量增加时,不必担心更改数据库的供应商。

没有学会使用泛型

Mohamed Barouma的职业程序员生涯始于Net 1.1。而在当时,Net 1.1的主要问题在于它没有泛型支持,这代表它不能有一个强类型列表,只能满足于乏味的ArrayList。但是使用Arraylist在Java代码中进行类型转换和装箱,会导致读写起来十分痛苦。

因此,Net 1.1的程序员们使用CodeSmith生成一个强类型集合列表。

但随着代码库的增长,那些定制生成的列表本身就变成了一个无法收拾的怪物。只要经常为了创建对象或调用方法去达到目的,随后就会因为修改代码导致混乱和错误。

如果切换到Net 2.0,并在它可用时立即开始使用泛型,而不是创建越来越多的难以维护的自定义集合列表,那么一切问题都将迎刃而解。

没有放弃“造轮子”

这是个老生常谈的话题,“反复造轮子”(Reinvent The Wheel)。新程序员总是喜欢反复“造轮子”,自认为当前的实现不够好,所以不得不从头重写整个东西。

为什么叫“造轮子”?就像真正的的轮子早在几千年前就被确定是圆形的一样,很多数据库也早就已经成熟易用了,但还是有数不胜数的程序员们锲而不舍的去“造轮子”,有的人飞蛾扑火、蚍蜉撼树,有的人别具一格、推陈出新,这就是“造轮子”魔法一般的吸引力。

这其中也不乏Mohamed,他想重新编写自己的UI控件,因为Windows Forms UI控件实在是太简单了。最后,他造的GUI工具被商业化成体系的.Net UI控件轻松打败,又一辆新生程序员造的“轮子”被击沉到了代码海洋里。

没有精简过多的文档

很多刚入行的程序员,会在一开始觉得代码文档很好,因为它用简单的英语注释了代码在做什么。但事实上这些文档通常在修改了几次代码之后变成了一摊废纸,变得陈旧、过时亦或是完全错误。

常常有人花了很多时间编写代码文档——比如XML文档,结果发现在更改代码时需要更新文档。因为它的功能可能都已经改变了。更新代码是必须的,但更新XML文档不是必须的:这是一种负担,它消耗时间,而且毫无用处。

最终,反复地更改XML文档使人逐渐失去耐心,转而做其他事情。

没有使用自动化构建

应用程序的部署和打包比编程相对容易,所以它往往被放在了非常低的优先级上。但很快,粗制滥造的构建就会因为无法工作,受到各式各样的投诉:

“先决条件缺失,该如何修复?”

“dll没有更新,你能给我一个补丁吗?”

“我的图标怎么不见了?”

紧接着,电话像雪崩一样源源不断地打到桌旁。这是Mohamed的真实经历,并让他那天精疲力尽——不是因为编程,而是因为令人麻木的重新部署和重新包装过程。

而这一切,本可以通过编写自动化脚本节省一些时间,否则在事后debug浪费的时间绝对比可以节省的时间多上数倍。应该让软件可以一键构建,否则再多都是一种浪费。

没有停止对视觉检测和debug的依赖

Visual Studio让人们可以很容易地调试代码并进行动态检查,这也使得创建一个表单并显示输出非常简单。但如果太沉迷于调试器,这项好处就要变成坏处了。

为什么呢?想象一下,如果一个方法只在应用程序启动并运行45分钟后才被调用,那难道要打算等45分钟再开始调试吗?

所以,动动手将应用程序分解为可以独立调用的子模块,这样就可以准备产生错误输出的输入值,并从那里开始测试它。

没有做单元测试

不少程序员可能这么想过:“我的这个应用程序微不足道,它可以很容易地被手工测试覆盖;单元测试是针对大型和复杂的东西,而不是针对我的程序。”

可想而知,这会直接亲手创造一个没有关注点分离,难以重构,完全不可维护的代码库。

 “蹑手蹑脚”几乎是许多小白程序员的通病,害怕对代码进行哪怕是最轻微的修改,因为任何更改都可能导致或不会导致破坏性的更改。结果到最后一发不可收拾,出现的问题无法解决。使用这种遗留代码不仅仅是无聊和紧张,而且精神上也有压力。

但是使用单元测试,能让代码的寿命大大提高。Mohamed希望自己能学会单元测试的“艺术”,从入学第一天开始练习单元测试,可惜学校并不教这个。

世界上,无数令人为之一振的创新发明都源自无数次的试错,但即便如此,避免基础性的错误依旧是很有必要的。在你的程序人生中,还遇到过哪些令人啼笑皆非的“常见误区”?亦或者是创造了一些百思不得其解的“致命误区”?欢迎下方留言,分享你学习编程时的心得体验。

参考文献:

https://betterprogramming.pub/7-big-mistakes-i-have-made-in-my-career-as-a-software-engineer-f14ef540be10

初学者机器人制作的7大误区——你中招了吗?

...为一个初学者的你,是否也有过这些想法呢?1、机器人编程用什么语言?实际上并没有“机器人编程”这个说法,甚至可以说机器人还不能算是一门单独的学科——尤其是个人爱好者制作的机器人。采用的开发平台完全取决于... 查看详情

避开这十个坑|自学编程很轻松

...在台上讲,要求我们双手背后认真的听。但我要说的编程是工科性质的,强调的是动手能力,那正确的方法应该是一边学一边动手练习,正确的思维方式应该是学会语法、动手敲代码、看到结果、修改代码ÿ 查看详情

7个前端新手常见误区,千万要避开!

...识也各不相同,今天就为您解读,学习web前端都有哪七大误区。误区一:前端只是JavaScript但我要说的是:前端不只是JS。何谓前端开发?我认为,一切以展现为目标的工作,都是前端开发工作。在前端开发中,除了JS,还有很多... 查看详情

独立思考者模型:避开思维误区的沼泽

作为一名优秀的数字侦探,你被邀请到一座豪宅调查主人被刺杀的案件。你已经知道了死者的死因,案件的凶器和罪犯杀人的大致过程,并通过明察暗访搜集到了重要的证据,最后经过高度逻辑化的推理找到了最有可能的嫌疑犯... 查看详情

自学编程的5大误区,早知道早避坑,过来人的宝贵经验

...时候掉进了一些误区没能走出来。今天我们就来讲讲自学编程常见的5大误区,避开这些误区我们定能在自学之路上轻车熟路文章目录前言一、总纠结于学最好的编程语言二、喜欢看不喜欢动手三、出错时选择逃避四、孤军奋... 查看详情

你中招了吗?《心理学常见误区》

心理学常见的误区常见的心理学误区狄德罗效应背景18世纪,一位朋友送给狄德罗一件质地精良、做工考究、图案高雅的酒红色长袍,狄德罗非常喜欢。于是,他马上将旧的长袍丢弃了,穿上了新长袍。可是不久... 查看详情

自学编程的人,90%以上都会掉进这些坑,避开这些误区能提高n倍学习效率

前言几乎每一个程序员都会走上那么一段自学的道路,尤其是在校生或进入工作岗位之后,技术的提升基本都靠自学,有的虽然是网上报班学习,但更多时候还是自己在学习,师傅引进门,修行靠个人。有... 查看详情

朋友圈营销中的7大核心错误你中枪了吗

1.你的朋友圈里分享的全是广告砰!中枪了吗?这是80%微商犯的第一个错误就是,朋友圈里都是广告。产品、找代理、团队培训、收入截图、转账截图、发货......一照面就觉得你很讨厌,只要一接触你就知道你要卖东西给我,就像... 查看详情

如何避开无线ap选购的“误区”呢?

...会仔细考量。但是,很多企业在选购时仍然存在着许多“误区”。那么,企业应该如何避开无线AP的选购“误区”,选择适合企业自身网络环境的产品呢?无线AP选购许多用户会有以下几点“误区”。一、 查看详情

低代码的5个误区,你踩雷了吗?

...。虽然低代码平台能让人轻松创建应用程序,但仍有许多误区需要揭开。下面分享有关低代码开发的5大误区。误区1:低代码平台不再需要开发团队低代码平台使用可视化建模工具来表达逻辑,并将底层代码转换为开发人员和业... 查看详情

教你避开o2o电商系统4大风险

...线了。所以O2O电商平台要时刻关注政策的电话,以免走入误区。④经营作为电商系统,每一个决定都可能影响未来的走向,尤其是涉及到转型等问题。很多O2O电商平台最终走向灭亡,都不是在建立初期存在问题,而是在经营过程... 查看详情

避开消息推送的3个误区,用对你的华为推送

...为推送从另一个视角,总结了过往消息推送中常见的误区,希望能帮助各位运营同学避雷。误区一& 查看详情

socket网络编程的5大误区(代码片段)

隐患1.忽略返回状态第一个隐患很明显,但它是开发新手最容易犯的一个错误。如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失。反过来,这可能传播错误,使定位问题的源头... 查看详情

让你避开机器学习模型构建10大错误!(配解决方案)

最近,小编抓取了近 600份2020年的招聘JD进行分析,不难发现——越来越多的企业重视“大数据算法 ” 这一技能。具体表现在这一点:“大数据算法工程师”招聘需求旺盛,并且薪资待遇从2016年来不断走高。坐... 查看详情

数据中台建设常见的几大误区,如何规避,你需要知道这几点

...能导致数据中台建设的失败。下图为数据中台建设的9大误区,下面详细介绍每个误区。图 数据中台建设的9大误区01. 数据中台等同于数据工具的集合数据工具的集合能有效地提高数据开发和使用的效率,实现让数据易用... 查看详情

数据中台建设常见的几大误区,如何规避,你需要知道这几点

...能导致数据中台建设的失败。下图为数据中台建设的9大误区,下面详细介绍每个误区。图 数据中台建设的9大误区01. 数据中台等同于数据工具的集合数据工具的集合能有效地提高数据开发和使用的效率,实现让数据易用... 查看详情

socket编程tcpudp通信你会了吗?

...,除非你家你有矿!今天来说说嵌入式必备技能之一Socket编程。一、什么是socket?Socket的英文原义是“孔”或“插座”。在编程中, 查看详情

js继承的7种方法,你学会了吗?(代码片段)

🌈JS继承的7种方法,你学会了吗?📢大家好,我是小丞同学,本文主要写JavaScript中的7种继承方式,深入理解每种方式所存在的问题同时新的方式是如何解决问题的📢非常感谢你的阅读,不对... 查看详情