热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器越聪明,程序员就容易变懒

充分理解业务上的知识也是非常重要的,这些自动化的东西就是为了避免重复造轮子,避免陷入底层代码的海洋。如何制造一个世界上最好的轮子,和如何最出色的使用这个轮子完全是两个不同的领域,世界上最出色的建筑师可能并不知道如何制作一把世界上最好的锤子,那是世界上最好的造锤师傅干的活。

计算机相关产业的进化速度总是让人咋舌,如今随便一个手机的运算能力就超越了少几年前一般台式机的能力,这对使用者来说是好事,对程序员来说更是好事。倘若计算机性能强大到让开发者不用顾忌时间、空间复杂度,一切算法、优化什么的也就完全没了意义,毕竟这些东西都是为了我们能更划算的完成尽可能多的任务。但写出能让人长期维护扩展下去的程序比写让机器高效运行的程序难度大的多,机器性能的增强也不会直接促使程序员写出更优雅的代码,不然怎会看到专门收钱帮项目做设计模式、软件工程的顾问公司却没有做算法顾问的。

记得我曾经做一个项目有一个c文件有5000行,后期在解决跨编译器移植性问题时TC竟然都不能完全加载整个文件,更别谈顺利编译,不得不放弃这个编译器。想来c/c++通过包含头文件以c/cpp为编译单元,再将所有编译单元生成的目标文件连接为可执行文件的编译方式应是受制于计算机早期性能有限,特别是内存资源珍贵无比,一个小点的项目还好,把大项目的所有源码或其AST、符号表等东西都加载进内存就不现实了,于是无奈的只能划分成单个c/cpp编译单元进行操作。因为使用头文件包含做语法分析和部分代码生成,便随之可能产生循环包含、引用的问题,当然,这些都是可以避免的。

现代的高级编程语言环境一般都伴随很多较早期高级语言更智能的特性,比如功能更强大的IDE,代码着色,代码自动完成,类型提示,类型自动推导,注释文档提示,无头文件包含编译等,哦对了,把所见即所得的界面编辑也姑且算进去吧。需要付出的开销,或者说代价就是更大的内存占用,编译器/IDE将内存用于存储整个工程所有源码的AST、符号表,甚至是注释信息,即使程序员还没有点任何编译按钮。

我们希望机器更聪明,这也是一代代从业者努力的目标;更希望机器能摆脱人的干预自己就可以聪明的解决一些问题。语言越来越智能,编程貌似越来越简单,但正如刚才说的,只要像Java、C#这些较新(一般还都是在智能IDE中敲代码)的高级语言给了程序员只要import/using后就可以使用作用域内全盘任意的东西的能力,经验欠缺的程序员用它们写出循环引用、静态变量过多的代码的障碍就会较使用c/c++小很多。我不得不说自作聪明的高级语言会惯坏初级程序员,如果想学编程,先用功能看起来笨些的语言入门吧,用的久了自会分辨出大巧与真拙的区别。无边界效应的函数式编程语言也许能在编程范式上较指令式编程语言更有益于程序员养成好的习惯,可惜这类国外的基础甚至入门实践在国内乏人问津。

语言本身并无功过是非,可是越是智能的语言越是难以让程序员领会到怎样写出更好更易维护的代码,除非写程序的你不甘计算机的真相被埋没在它聪明的背后。

充分理解业务上的知识也是非常重要的,这些自动化的东西就是为了避免重复造轮子,避免陷入底层代码的海洋。如何制造一个世界上最好的轮子,和如何最出色的使用这个轮子完全是两个不同的领域,世界上最出色的建筑师可能并不知道如何制作一把世界上最好的锤子,那是世界上最好的造锤师傅干的活。

唯一的区别在于,做底层做框架的人的客户就是上层业务的开发人员,而上层业务的开发人员的客户就是最终购买产品的消费者。无论你在哪一层,你的最终目的就是要让你的用户觉得你的产品好用,如果你的用户还需要来学你的产品是怎么做的,那还要你干什么?

其实,并没有谁比谁更高端~有的只是无尽的虚荣心和优越感。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1536,欢迎访问原出处。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了数模国赛的报名参加方法,包括学校报名和自己报名的途径。同时给出了建模竞赛的建议,重在历练的同时掌握方法以及弥补自己的短板。此外,还分享了论文的结构和模型求解部分的注意事项,包括数学命题的表述规范和计算方法的原理等。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
東臨天下2502892423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有