如何写好程序📝📝📝

  • 计算机并不解决问题,它们只是执行解决方案
  • 软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软 件过于复杂,没有明显的缺陷
  • 控制复杂性是计算机编程的本质 ——Brian Kernighan
  • A good programmer is someone who always looks both ways before crossing a one-way street——Doug Linder     好的程序员即使在过单行道时也总是会环顾两边。
  • Simple is better than complex     简洁胜于复杂
  • Complex is better than complicated    复杂胜于凌乱
  • Flat is better than nested     扁平胜于嵌套
  • Programs must be written for people to read, and only incidentally for machines to execute —— Harold Abelson , Gerald Jay Sussman 程序必须首先为了人去阅读而编写,其次才是为了机器执行。
  • Good code is its own best documentation. As you’re about to add a comment, ask yourself, ‘How can I improve the code so that this comment isn’t needed?’" —— Steve McConnell     好的代码本身就是最好的文档。当你打算添加注释时,问问自己:“我怎样改进代码,使之无需注释就能表达清楚?”




    def fibonacci(n):
        """
        返回前n个斐波那契数列的生成器。
        斐波那契数列定义为:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n > 1)
        """
        a, b = 0, 1
        for _ in range(n):
            yield a
            a, b = b, a + b

    # 使用斐波那契数列生成器
    for fib in fibonacci(10):
        print(fib, end=' ')


经典的Python程序片段,何为简洁胜于复杂, 它演示了斐波那契数列的生成器表达式,展示了简洁、高效的代码风格


    public class FibonacciExample {
        public static void main(String[] args) {
            // 初始化斐波那契数列的前两个数
            int a = 0;
            int b = 1;

            // 打印前10个斐波那契数
            for (int i = 0; i < 10; i++) {
                System.out.print(a + " ");
                // 计算下一个数
                int next = a + b;
                // 更新a和b的值
                a = b;
                b = next;
            }
        }
    }



    pub fn fibonacci() {
        let n = 10; // 假设我们要生成前10个斐波那契数列
        let mut fib_sequence = vec![0, 1];

        // 如果需要超过前两个数,则填充剩余的斐波那契数列
        while fib_sequence.len() < n {
            let next = fib_sequence[fib_sequence.len() - 1] + fib_sequence[fib_sequence.len() - 2];
            fib_sequence.push(next);
        }

        // 打印斐波那契数列
        for &number in fib_sequence.iter() {
            println!("{}", number);
        }
    }



软件工程的重要设计原则

  1. 模块化(Modularity):将复杂的系统划分为一系列独立的、可组合的模块,每个模块具有特定的功能和清晰的接口,允许单独开发、测试和维护。
  2. 抽象(Abstraction):使用抽象来隐藏实现细节,仅暴露必要的接口给外部世界。通过定义抽象的数据类型和行为,降低复杂性并促进重用。
  3. 信息隐藏(Information Hiding/Encapsulation):也称封装,是指将数据和处理这些数据的函数绑定在一起,并对外隐藏其内部实现细节,防止外界直接访问或修改内部状态。
  4. 高内聚(High Cohesion):内聚性描述的是模块内部各部分之间的相关程度,高内聚指模块内部的所有元素都紧密相关,共同服务于一个单一的目标或功能。
  5. 低耦合(Low Coupling):耦合度衡量的是不同模块之间互相依赖的程度,低耦合意味着模块间相互独立,减少不必要的相互依赖,增强系统的灵活性和可维护性。
  6. SOLID原则:这是面向对象设计领域的五大基本设计原则:
    • 单一职责原则(Single Responsibility Principle, SRP):一个类或模块应有且仅有一个改变的理由。
    • 开闭原则(Open/Closed Principle, OCP):软件实体应当对扩展开放,对修改关闭。
    • 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们的基类型。
    • 接口隔离原则(Interface Segregation Principle, ISP):客户端不应该被迫依赖它们不需要的接口。
    • 依赖倒置原则(Dependency Inversion Principle, DIP):依赖于抽象而不依赖于具体实现。
  7. 迪米特法则(Law of Demeter):也称为最少知识原则,一个对象应当尽可能少地了解其他对象的内部结构,只和“朋友”交流。
  8. KISS原则(Keep It Simple, Stupid):让设计保持简单,避免不必要的复杂性。
  9. DRY原则(Don’t Repeat Yourself):避免代码重复,提倡复用。
  10. YAGNI原则(You Ain’t Gonna Need It):只实现当前真正需要的功能,避免过度设计。