有关刷题与做工程的异同

声明:这篇只写给自己看,我相信很多人和我有不同的看法。


最近刷了一下ACM题,简单的难的都有。对于题目本身而言,没有什么好讲的,基本偏重于数据结构和算法方面。不同基础的人收获也不一样,猿猿只是拿来保持手感而已。我想说的是这些题目的评判标准与软件工程的异同点。


首先说说相同部分:效率、以及代码简短。这部分应该是所有码农都努力追求的方向。在实际问题下,空间和时间并总是一个矛盾体,有时紧凑的空间反而能够带来更高的效率。这个《编程珠玑》有介绍。在实际工程中,如果能够运用尽量简短的代码来高效解决遇到的问题,那肯定会被别人膜拜为“大牛”。


再说说不同的部分:评价标准和编码规范。写ACM的人大多不愿写复杂的注释,对于变量名称也是能简就简。做过实际工程的人一定被这类“天书”一般的代码折磨过。猿猿就曾经接手一份十万行级别的“天书”,不过那时候还有老员工可以问。现在自己刷题,确实也不愿意多写注释,总想着:“这东西做完又不会再看了”。而评价代码质量的标准,刷题时就仅仅是效率,实际工程中有更多远比效率更重要的东西,比如程序的可读性。


举一个例子:大家知道有个常用操作是swap。普通猿猿一般会声明一个临时变量做暂存,ACM大牛猿猿往往用各种异或来就地完成交换。如果是内存空间非常紧张的嵌入式,或许还有些道理。不过在PC上这么做,带来的麻烦就是几乎没有人看得懂这部分代码。要知道绝大多数的码农水平都只是so so。coding的目标是要让他们也能看懂,而不是孤芳自赏。


扯得有些远。有人会问:那要这些高级的奇淫技巧干什么?我的答案是:应付面试用,仅此而已。这些小trick都是针对特定问题的一些快速解法,没啥普遍性。真正需要仔细研读的是动态规划、线性规划、随机算法、近似算法之类更普遍的问题求解。包括最近研读的stl也是如此。每一个C++码农都用过stl,但绝大多数不会用stl。为啥?因为没有真正了解stl背后的泛型编程的思维方式。而这种思考问题的方式,也正是天朝码农也美帝码农在才能(薪资)上的差距。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值