写点什么

反面教材:搞砸 Web 开发的 15 种方法

作者 | Fotis Adamakis

  • 2023-11-07
    北京
  • 本文字数:2288 字

    阅读完需:约 8 分钟

大小:720.50K时长:04:05
反面教材:搞砸Web开发的15种方法

现如今,网络上关于怎么构建健壮、可维护 Web 应用的文章随处可见,相信大家早就看烦了。那如果公司里刚好来了个你看着不顺眼的新同事,各位打算给这家伙点颜色瞧瞧,该怎么下手?别担心,坏事就由我来做。只要按照以下 15 条建议实施,绝对能让 Web 开发者在浪费一整天时间之后、陷入深深的沮丧与自我怀疑当中。

 

1. 抽象层


多用抽象层、越多越好,直到:


  • 代码已经难以理解和调试。

  • 代码变更变得极为困难。

  • 代码运行速度变慢、效率降低。

  • 代码失去复用性。

 

2. 用各种方式刁难 PR 变更


一定要拖住 PR 请求,借此维护住你在项目中的主导地位。


下面提几个可行的刁难借口:


  • 要求把变更名延长;

  • 要求把变量名缩短;

  • 要求重新命名变更名;

  • 要求代码更“紧凑”。

 

3. 不写提交信息


高质量的提交信息多费工夫啊,我们时间宝贵、才没精力浪费在编写这种东西上:

 

[JIRA-1234] build: replace vue-cli with vite
复制代码

 

相反,大家可以直接用以下命令来推送不带任何提交信息的代码:

 

git commit --allow-empty-message -m "" && git push --force
复制代码

 

4. 多用“幻数”


多用“幻数”,这样会显得你更专业、更神秘、更清楚自己到底在做什么:

 

window.scrollTo({  top: 89,  left: 12,  behavior: "smooth",});
复制代码

 

5. 掺杂返回语句


在函数里混杂返回语句,这样别人就永远不知道你接下来打算干什么了:

 

function shouldPayTax(income) {  if(income.amount < 20_000) {    return false  }  if(income.amount > 20_000 && income.country == 'USA') {    return true  }  if(income.country == 'Panama') {    return false  }  if(this.totalWorkingHoursPerWeek > 60) {    return true  }  if(income.amount > 20_000 && income.isCelebrity == true) {    return false  }  if(income.amount > 20_000) {    return true  }}
复制代码

 

6. Typescript


如果有人厚颜无耻地把 TypeScript 添加到项目中,大家可以到处使用 any 来绕过类型检查。

 

function add(a:any, b:any):any {  return a + b}
复制代码

 

7. 用双等号来替代三等号


使用 == 来代替 ===,理由是在生产包中节约宝贵的存储空间。

 

8. 注释代码


除了要编写难以理解的代码之外,也别忘了留下毫无意义的误导性注释,否则没准哪个聪明人就看懂了你的开发逻辑。

 

相关参考规则如下:


  • 注释应该与代码重复;

  • 注释的作用是解释代码为什么不够清楚;

  • 对于可以写出清晰注释的部分,什么都别写;

  • 注释的意义在于引起混乱,而非消除混乱;

  • 切勿提供复制代码的原始链接;

  • 切勿提供有帮助的外部参考链接;

  • 在修复 bug 时,切勿添加任何注释(或测试);

  • 切勿使用注释来标记不完整的实现。

 

这里还有更多“妙招”供大家参考:

https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/

 


9. 使用 Props 实现状态共享


使用 props 传递状态,能让大家更好地把组件层次结构耦合起来,从而大大提高重构难度。

 


10. 对组件状态使用状态管理


另一方面,记得把组件状态移动至全局存储,这样每个人都可以修改其内容。

 

11. 让组件文件变长


使用大型整体组件,理由是这样能更好地明确组件用途、改善变量的跨函数可复用性。

 

12. 不做 linter 检查


Linter 能够分析代码并检测出潜在错误、不一致性以及与既定编码标准间的偏差,而这显然跟我们的意图背道而驰。

 

以下两个代码片段之间就存在明显差异:

 

const props=defineProps({elements:Array,counter:{type:Number,default:0,},});const{data,method}=useComposable();const isEmpty=computed(()=>{returnprops.counter===0;});watch(props.counter,()=>{console.log("Countervaluechanged");});const emit=defineEmits(["event-name"]);function emitEvent(){emit("event-name");}function getParam(param){return param;}
复制代码

 

const props = defineProps({  elements: Array,  counter: {    type: Number,    default: 0,  },});const { data, method } = useComposable();const isEmpty = computed(() => {  return props.counter === 0;});watch(props.counter, () => {  console.log("Counter value changed");});const emit = defineEmits(["event-name"]);function emitEvent() {  emit("event-name");}function getParam(param) {  return param;}
复制代码

专业提示:关于 linting 规则,唯一可以接受的用法就是确保文件长度超过特定行数。这里不妨把数字设定为 1000。

 

13. 在翻译中使用 HTML


要想搞砸 Web 开发,对字符串进行硬编码永远是种好办法。有时候,使用包含 html 元素和类的翻译更能够“锦上添花”。

 

translation.key.name = Hello <span class="red">World!</span>
复制代码

 

14. 编写测试


不编写测试当然也挺好,但要想真正把人折磨疯,最好还是要测试、只是提供一套极差的套件。这里向大家分享折磨人测试的一般准则:

  • 慢——测试时间足够我们去泡杯咖啡;

  • 不可靠——常测常新,永远不确定这测试到底靠不靠谱;

  • 耦合——会影响到其他测试;

  • 过度延伸——尽可能跟应用程序中的其他部分扯上关系。

 

悟性高的朋友还可以参考这份单元测试进阶“教程”:

https://fadamakis.com/8-tips-for-writing-better-unit-tests-8c0a8d8cde16

 

15. 永远信任一切


最后,只有懦夫和小白才需要防御性编程。这世上哪有那么多坏人?

 

总结


请大家别把文章当真,因实操而遭解雇的话,本文作者概不负责。😅

 

如果大家有自己的“奇思妙想”,请在评论栏中不吝分享。

 

原文链接:

https://fadamakis.com/15-terrible-advice-for-web-developers-e821e95f5d18


相关阅读:

Web3当下,最佳投资就是投资自己

Web3的反思,不要抱怨

给Web3创业者的28个原则

和我一起学习Web3

2023-11-07 08:005139

评论 2 条评论

发布
用户头像
没理解第 5 点...
2023-11-07 09:22 · 山东
回复
多条件判断不好找出从哪返回的
2023-11-09 09:55 · 陕西
回复
没有更多了
发现更多内容

京东科技集团21篇论文高票入选国际顶会AAAI 2021

京东科技开发者

机器学习 AI

4. 列表一学完,Python 会一半,滚雪球学 Python

梦想橡皮擦

python 爬虫 Python Monad 2月春节不断更

说说Golang goroutine并发那些事儿

华为云开发者联盟

线程 进程 并发 goroutines Go 语言

我认为的互联网医疗场景用户及场景

卢嘉敏

需求 医疗 用户

【STM32】GPIO输入—按键检测

AXYZdong

硬件 stm32 2月春节不断更

有了这个算法,图像上文字擦除再也用不上PS了

华为云开发者联盟

深度学习 算法 GAN 文字擦除 图像

WEEK4作业

Geek_6a8931

一个只会写Bug的Coder年终总结

z小赵

程序员 互联网 职场成长

Elasticsearch Mapping

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

第四次作业

Geek_79e983

作业之用例

踏凌霄

MyBatis专栏 - 关联查询之一对一

小马哥

Java mybatis 七日更 二月春节不断更

面试官系列:讲几个分布式自增ID的方案?

后台技术汇

28天写作 2月春节不断更

Web页面制作基础

我是哪吒

学习 程序员 面试 大前端 二月春节不断更

我的2020年学习总结

兆熊

学习 总结

LeetCode题解:153. 寻找旋转排序数组中的最小值,二分查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

话题讨论 | 你选择去一线城市还是老家的省会城市?

石云升

话题讨论 职业发展 2月春节不断更

极客时间APP购买课程模块用例文档

夏天的风

用例图

自动驾驶“绝地求生”结束了,但深兰的造车故事才刚刚开始

脑极体

架构的变迁,从分层架构先聊起

华为云开发者联盟

架构 软件 分层架构 架构师 系统

红信圈系统开发,红信圈APP开发

luluhulian

交易所搭建

v16629866266

交易所开发

别困惑,不是你的错!90%的开发者把Clubhouse看成了Clickhouse

京东科技开发者

Clickhouse 社交 clubhouse

Vue开发中可以使用的ES6新特征

devpoint

Vue ES6

产品0期 - 第四周作业 - 附件1

曾烧麦

产品训练营

什么是SNMP

每周总结(2月1日-2月7日)

Nydia

互联网医疗里,用户需要的是什么

卢嘉敏

需求 医疗 用户

当自动驾驶遇到5G,会擦出怎样的火花?这篇文章说明白了

华为云开发者联盟

人工智能 自动驾驶 AI 5G

【新春特辑】发压岁钱、看贺岁片、AI写春联……华为云社区给大家拜年了

华为云开发者联盟

华为云

2021年人工智能数据采集标注行业四大趋势预测;清华提出深度对齐聚类用于新意图发现

京东科技开发者

人工智能 数字货币

反面教材:搞砸Web开发的15种方法_性能优化_InfoQ精选文章