热门标签 | 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,欢迎访问原出处。


推荐阅读
  • 如何寻找程序员的兼职机会
    随着远程工作的兴起,越来越多的程序员开始寻找灵活的兼职工作机会。本文将介绍几个适合程序员、设计师、翻译等专业人士的在线平台,帮助他们找到合适的兼职项目。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文探讨了在AspNetForums平台中实施基于角色的权限控制系统的方法,旨在为不同级别的用户提供合适的访问权限,确保系统的安全性和可用性。 ... [详细]
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 对于非计算机专业背景的开发者而言,如何快速掌握.NET基础知识以应对技术面试是一个挑战。本文将提供一系列实用建议,帮助读者在短时间内提高.NET基础水平。 ... [详细]
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文介绍了多维缩放(MDS)技术,这是一种将高维数据映射到低维空间的方法,通过保持原始数据间的关系,以便于可视化和分析。文章详细描述了MDS的原理和实现过程,并提供了Python代码示例。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • Python 领跑!2019年2月编程语言排名更新
    根据最新的编程语言流行指数(PYPL)排行榜,Python 在2019年2月的份额达到了26.42%,稳坐榜首位置。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • MVC模式下的电子取证技术初探
    本文探讨了在MVC(模型-视图-控制器)架构下进行电子取证的技术方法,通过实际案例分析,提供了详细的取证步骤和技术要点。 ... [详细]
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社区 版权所有