好程序需要写两遍吗?

本文探讨了在编程过程中,通过合理规划模块、需求分析和API设计,可以减少后期开发工作量的观点,强调了高质量API和模块化的重要性。提出了一次性将每个模块设计到最优状态的理念,避免重复劳动,专注于创新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“好程序需要至少写两遍",最初是在博客园看到这篇文章,优快云也转载了:http://sd.youkuaiyun.com/a/20111101/306695.html,不少人从需求不确定的角度出发,很赞成这个观点,我同意代码需要进化,需要迭代开发,但不同意好程序需要写两遍的观点,事实上,如果在程序写之前把一部分时间花在划分模块,讨论需求,设计API上,就能大大减轻后期代码阶段的负担,这也是《Effective Java》的作者Joshua Bloch的观点,好的API是软件公司重要的资产,而把软件模块化,松耦合,就能很大程度上保证软件项目的成功,即使整体不成功,也有部分模块可能成功,而重写代码一般发生软件项目进化时需要采用不同的系统框架时

个人观点是第一次写程序,就把每个模块从划分,设计,编码做到最好,不做重复性的劳动,只做创造性的劳动!


<think>嗯,用户问伪代码是不是就是把程序用中文翻译一遍。首先,我需要明确伪代码的定义和用途。伪代码并不是简单地将代码逐行翻译成中文,而是一种用自然语言描述算法逻辑的方法,不依赖于具体的编程语言语法。 用户可能误解了伪代码的作用,以为只是语言的转换,但实际上伪代码更注重逻辑结构的表达,省略了具体的语法细节,比如变量声明、分号等。比如,用中文描述循环或条件判断的结构,但不需要严格按照C语言的语法来。 接下来,我需要举例说明伪代码和实际代码的区别,让用户更清楚两者的差异。例如,比较排序算法的伪代码和实际的C代码,展示伪代码如何抽象地描述步骤,而实际代码则需要处理语法细节。 还要考虑用户可能的背景,可能是刚开始学习编程的学生,对伪代码的概念不熟悉,或者混淆了注释和伪代码的作用。需要解释伪代码的目的是帮助设计算法,而不是直接执行,因此更注重可读性和逻辑清晰。 此外,应该指出伪代码的优点,比如便于沟通、跨语言适用、减少语法干扰等,帮助用户理解为什么使用伪代码而不是直接代码。同时,纠正常见的误解,比如伪代码是否需要严格的结构或语法,强调其灵活性。 最后,按照要求生成相关问题,确保问题围绕伪代码的定义、作用、与注释的区别以及应用场景展开,帮助用户进一步巩固知识点。</think><< 伪代码并不是简单地将程序用中文翻译一遍。伪代码是一种用自然语言和类编程语法混合描述的算法设计工具,其核心目标是清晰地表达算法逻辑,而不是直接对应具体代码。以下是关键区别: 1. **抽象层级不同**: 伪代码省略具体语法(如变量类型声明、分号等),例如: ```c // 实际C代码 int sum = 0; for(int i=1; i<=10; i++) sum += i; // 伪代码 初始化总和为0 循环i从1到10: 总和增加i的值 ``` 2. **语言独立性**: 伪代码不绑定特定语言,而翻译后的代码仍受语法限制。例如同样的排序逻辑: ```c // C语言实现 void sort(int arr[], int n) { for(int i=0; i<n-1; i++) for(int j=0; j<n-i-1; j++) if(arr[j] > arr[j+1]) swap(&arr[j], &arr[j+1]); } // 伪代码描述 过程 排序(数组): 遍历次数 = 数组长度 - 1 对每个i从0到遍历次数: 对每个j从0到(遍历次数 - i - 1): 如果当前元素 > 下一个元素: 交换两个元素的位置 ``` 3. **设计目的不同**: 伪代码用于算法设计阶段,重点描述: - 控制流程(条件/循环结构) - 数据流向 - 关键操作逻辑 而非具体实现细节(如内存管理、指针操作等) 4. **结构化表达**: 典型伪代码结构包含: ``` 函数名(参数): 步骤1 如果 条件成立: 执行操作A 否则: 执行操作B 循环 满足条件时: 执行循环体 返回结果 ``` 5. **最佳实践示例**: 设计二分查找算法时: ``` 函数 二分查找(目标数组, 目标值): 左边界 = 0 右边界 = 数组长度 - 1 当 左边界 <= 右边界: 中间索引 = (左边界 + 右边界) / 2 中间值 = 数组[中间索引] 如果 中间值 == 目标值: 返回 中间索引 否则如果 中间值 < 目标值: 左边界 = 中间索引 + 1 否则: 右边界 = 中间索引 - 1 返回 未找到 ``` 最终对应的C代码需要处理具体的类型、指针等细节: ```c int binarySearch(int arr[], int l, int r, int x) { while (l <= r) { int mid = l + (r - l) / 2; if (arr[mid] == x) return mid; if (arr[mid] < x) l = mid + 1; else r = mid - 1; } return -1; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值