首页
学习
活动
专区
圈层
工具
发布

低代码可能铲不掉“屎山”,但能让这个它更有「型」

本文作者:知乎 神们自己 原标题:为什么祖传代码被称为「屎山」? 驾驭屎山的唯一方法,不是重构,而是不重构。 为什么有人可以在屎山里加功能?...而某些有洁癖的码农,他们非要强行降低这个复杂系统的熵--不是做不到,但需要巨大的能量,也就是成本。 你想让谁来付这个成本?老板还是客户? 屎山不是一天拉成的。每一代屎山的建设者,都是非常聪明的人。...这个决定对于每一个人都是最优解,因为每一个人只需要对他当下的目标负责。每一次“继续拉屎”的决定都是正确的,不这样做才令人匪夷所思。...这段话可能会让你误以为,微软、谷歌都是垃圾。但实际上,他们是地球上最强的软件公司。世界上最高的屎山,都是最聪明的屁股拉出来的。...所有代码的最终归宿都是坟墓,而绝大多数代码早已死无葬身之地。屎山是不可能重构的,这辈子都不可能重构的。打败屎山的唯一方法,唯有另起炉灶,建一座新的屎山。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL 提取字符串中的字母

    问题描述 我们在进行数据处理时,可能经常需要对不同类型的字符进行抽取。比如一些产品型号,批次之类的会使用字母表示,这个时候该如何提取这些数据呢?...具体解法 我们创建一个函数,通过调用这个函数来找出所有的字母。...CREATE FUNCTION dbo.GET_LETTER (@Str VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[^...; END; GO 代码解读 上面的解法主要使用了两个函数,PATINDEX函数和STUFF函数 PATINDEX函数 PATINDEX ( '%pattern%' , expression ) 返回pattern...理解完上面的函数,我们来测试一下我们自定义的函数GET_LETTER () SELECT dbo.GET_LETTER('SQL数1据2库3开4发road') 结果: 这与我们预期的结果一致,证明这个自定义函数是可行的

    3.1K10

    006从零开始学Python—自定义函数

    另外,为了避免重复编写代码并使代码简洁易读,可以将常用的代码块封装为函数,在需要时调用函数即可。...,语法如下: lambda parameters:function_expression 注如上语法中: lambda 为匿名函数的关键起始词; parameters 是函数可能涉及的形参,如有多个参数...3.可变参数 上面讲解的必选参数和默认参数都是在己知这个自定义函数需要多少个形参的情况下构建的。如果不确定该给自定义函数传入多少个参数值时,该如何自定义函数呢?...对于选填项来说,电商平台并不知道用户会不会填,以及可能填多少个信息,而且这些信息都是有对应含义的。...整体感受:自定义函数是一种非常灵活有用的技能,并且可以简化代码,提高可读性。写到这里,顺便分享下如何在VBA以及SQL Server数据库中自定义函数,供大家对照学习。

    1.1K30

    你可能不知道的字符比较中的“秘密”

    有时候,一个简单的字符比较,你可能也会被弄得晕头转向。为什么这样说呢?请看下面这个例子(代码就不贴了,因为后来发现页面不支持这两个字符的显示)。猜测一下,会是什么结果?是1还是0?...这个库为每个已经辨识的字符定义了一个权重值(Weight),并以这个权重值进行字符的比较。然而,并不是所有代码点(code point)都已经在排序库中进行了定义。...它们可能被未定义的原因是: 代码点在Unicode标准中未进行定义。 代码点在Unicode标准中已进行了定义,但在Windows中却未进行定义。这需要花费时间和精力为新的字符定义语言语义的排序。...有些字符也许已经具有字体的定义,因此可能会正常地显示,但仍然没有对比较进行定义。比如NCHAR(13144) - NCHAR(13174)。...这也可能导致混淆的结果出现在如CHARINDEX, PATINDEX或LIKE等内置的字符串匹配(功能)中。 虽然这些结果似乎令人迷惑不解,但基本规则其实很简单。即未定义字符和字符串的比较将被忽略。

    1.5K70

    那些年我们写过的T-SQL(上篇)

    常见的,我们在一般的查询中,比如检验数据等,是推荐使用SELECT *,包括加上top 1000的,但在项目代码中,是严禁这样的操作的。...这儿有点需要补充的是,在同样的ORDER BY条件下,可能会得到不一样结果的问题,这个其实和数据结构中排序的概念一样。...那么有没有稳定的情况呢,那么就需要排序条件中的每一项都是独一无二的,比如是主键列,唯一列,这种属性也称之为排序的决胜属性(tiebreaker)。...前者返回子串第一次出现的位置,后者返回匹配的子串第一次出现的位置,SELECT CHARINDEX(' ', 'xiong er 1'), PATINDEX('%[1-9]', 'xiong er 1...DATEDIFF(month, '19000101', CURRENT_TIMESTAMP) + 1, '19000101')) 这部分如果和之前的筛选时间日期的知识点结合在一起就能写出非常灵活的SQL代码

    4.5K100

    5个提升开发效率的必备自定义 React Hook,你值得拥有

    那么,有没有一种简单的方法,可以让我们优雅地处理这个问题呢? 问题与需求 假设我们有一个用户信息表单,需要用户输入姓名并且希望在用户再次访问时保留这个信息。...如果我们每次都从头实现localStorage的读写逻辑,不仅麻烦,还容易造成代码冗余。有没有一种方法,可以既简化代码,又确保数据的持久化呢?...这个自定义Hook不仅简化了媒体查询的处理逻辑,还使代码更具可读性和维护性。...如果每次都手动编写fetch逻辑,不仅代码冗长,而且容易出错。有没有一种方法可以简化这个过程,同时处理好加载状态和错误呢?...如果每次都手动编写状态切换逻辑,不仅代码冗长,还容易出错。有没有一种方法可以简化这个过程呢?

    5K10

    ✨如何让复杂代码变简单?此文告诉你答案!

    别急,接下来我就带你看看我是如何一步步地施展这个魔法的! 复杂代码的“魔力”:它为什么总让我们束手无策?  ...实现这一点的诀窍,就是代码优化。 优化的黄金法则:简洁、清晰、高效  你有没有听过一句话:“代码就是语言,语言的精髓在于简洁。”...在优化代码时,我们需要遵循以下几个黄金法则:1️⃣ 消除重复:DRY原则  你可能已经听过“DRY”原则(Don’t Repeat Yourself),这是编程中最基本的法则之一。...重复的代码不仅让整个项目变得臃肿,还容易引发错误。比如,假如你在多个地方都写了相似的代码块,一旦需要修改某个细节,就可能忘记同步修改,最终导致bug的产生。...优化心得与技巧  通过这个简单的示例,我们可以看到,代码优化的核心在于:减少不必要的重复和嵌套:把复杂的判断和重复的逻辑提取成函数或简化掉。

    61710

    从全栈开发到微服务架构:一次真实的Java面试经历

    你能解释一下Spring Boot是如何简化配置的吗?...**面试官**:没错,那你有没有遇到过自动配置冲突的情况? **应聘者**:有,比如在引入多个数据库连接的时候,可能会出现数据源配置冲突,这时候就需要手动指定数据源。...**面试官**:非常好,那你有没有遇到过状态更新不及时的问题? **应聘者**:有,尤其是在异步请求完成后,如果直接修改状态,可能会导致视图未更新。这时候我会使用Vue.set或者$set方法。...那你能写一段代码示例吗? **应聘者**:当然可以。 ```javascript // 在Vue组件中 this....**面试官**:那你有没有写过单元测试? **应聘者**:有,比如在订单服务中,我为每个业务逻辑编写了单元测试,确保代码的健壮性。 **面试官**:那你能展示一个简单的测试用例吗?

    25310

    从Java到Vue的全栈开发之路:一次真实的面试对话

    应聘者:是的,Spring Boot简化了Spring应用的初始搭建和开发,通过自动配置减少了很多样板代码。...比如在一些复杂的查询场景下,MyBatis可以写更高效的SQL,而JPA可能会生成不太优化的查询。 面试官:非常准确,看来你对这两个ORM框架都有深入的理解。那你在项目中有没有遇到过性能问题?...那你在使用Vue3的时候,有没有尝试过Composition API? 应聘者:是的,我觉得Composition API让代码更清晰,特别是对于复用逻辑来说。...那你在前端项目中有没有使用过TypeScript? 应聘者:有,我们团队现在都用TypeScript开发,它可以帮助我们在编译阶段发现很多类型错误,提升代码质量。...## 技术点总结与代码示例 ### 后端技术点 - **Spring Boot**:简化Spring应用的初始搭建和开发,支持自动配置。

    25110

    从Java全栈到前端框架:一次真实的面试经历

    你有没有用过Spring Boot的自动配置功能? 应聘者:是的,Spring Boot的自动配置极大地简化了项目的搭建过程。...那么,你在实际项目中有没有遇到过Spring Boot的自动配置冲突的情况?你是怎么解决的? 应聘者:有,有时候多个依赖包可能会引入相同的Bean,导致冲突。...那你有没有用过Vue3的响应式系统?...应聘者:ref用于创建一个响应式的引用对象,它包裹了一个值,并提供value属性来访问或修改这个值。当这个值发生变化时,视图也会相应更新。 面试官:很好,看来你对Vue3的响应式系统理解得很深入。...应聘者:Webpack是一个完整的打包工具,适合生产环境,支持代码分割、懒加载等高级特性;而Vite更适合开发环境,速度快,但生产环境可能需要配合Rollup或Webpack进行打包。

    25300

    怎样避免开发时的深坑

    简化并优化你的代码 ? 你可能已经注意到,简化和优化是经常性的话题。 “简单性是可靠性的先决条件。” ——荷兰计算机科学家Edsger W....selectEvenNumbers(arrayofNumbers) { let evenNumbers = arrayofNumbers.filter(n => n % 2 === 0) return evenNumbers} 简化和优化代码可能需要迭代多次...,以确定进一步简化和优化代码的方法。...这里有一些需要牢记的问题: 简化和优化的目标是什么?目标会被你的团队风格或个人喜好所左右。是尽可能地压缩代码还是使代码更易阅读?...如果是后者,你可能会用单独的代码行来定义变量或计算某些变量,而不是试图在一行中做这些事。 怎样做才能使代码容易阅读? 还有没有多余的步骤可以去掉? 有没有变量或函数始终没有被用到过?

    1.1K20
    领券