软件工程师的成长除了个人能力的提升之外,更重要的是形成正确的理论体系,一整套的问题解决方案;在这漫长的成长之路上,一些思维误区值得我们的重视。

  1. 分析麻痹

软件的模块之间存在着各种复杂的依赖关系,又因为软件的易变性和不可见性,各个模块之前的关系更加难以定义清楚。当面对软件的维护和修复任务时,一种消极的态度是面对纷繁复杂的系统,囿于其中的依赖关系,无法前行,而短时间也无法将整个框架流程看清楚。这就导致了在问题面前优柔寡断、裹足不前。而事实上,很多问题都是在一步一步的解决中拨云见日、豁然开朗。

与上述在依赖问题前踌躇不前相对的就是过分积极的行动派。分析不清楚,索性舍弃分析,横刀立马,见招拆招,这样往往能在短时间内见到小小的成效,但如果没有一个大局观念,对项目没有一个整体的把握,往往会是南辕北辙,做很多无用功甚至使情况变得更糟。

初学C语言时,按照书上的例子一点一点写函数,每个函数只考虑自己的功能实现,丝毫不顾及与其他部分的调用配合,在功能增加,函数增加的时候,参数总是要修改很久,有些甚至结构都要修改。后来做了几个小练习,觉得手很热,,就想一步到位:解一道题目,脑海中想明白之后,从头到尾一气呵成。妄图分析清楚全部的脉络,然而事实总是自以为的清晰的脉络混乱不堪。到头来还是要返工。

现在我一般先设计好程序整体的结构,使用空函数补全结构,再填补空函数,使他尽可能的独立、接口尽可能兼容性强。总结起来还是老生常谈的问题:既要埋头苦干也要抬头看路。即便如此,这之间的权衡也够一个软件工程师细细体会领悟了。

  1. 过早优化

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only after that code has been identified.”

— Donald Knuth.

关于这个问题Donald Knuth论文中的这段话已经很好地诠释了优化的核心,找到瓶颈,做全局的性能分析,而不是把时间浪费在对程序中非关键部分的速度的无限思索,相反的,这些对效率的尝试实际上在考虑调试和维护时会产生强烈的负面影响。

听过很多道理,还是过不好这一生。上述问题试问哪个软件工程师心里不是和明镜一样,知道自己某些时候的精益求精对软件性能毫无提升,甚至为了追求某些极致又产生了一些不必要的风险。那我们为什么还要做呢,我说,是因为爱。

这个道理是我在高三那段时间想明白的,那时每周都要写三四篇不低于800字的议论文,题目往往是列出时事热点,请你谈谈自己的看法。大多数情况下,分析出立意,三个小论点,每个论点配一些事实论据,配一些理论论据。开头结尾套用一些名人名言,速成一篇不上不下的、自己不会再读第二遍的、之后从来不会想起的文章。而也有少数情况下,那个题目正好对我的胃口,正好是我最近频频思考的点。这时文思泉涌,而面对如瀚海星云般的精辟观点与无数旁征博引的古今中外论据,我反倒谨小慎微,悉心辩驳每一条观点、筛选每一条例子,想用尽一切珍贵的辞藻给我的文章,尽管那几句诗词换上通俗白话也不会对我最终分数产生影响。

但是我爱,我爱我的文章,我也爱我的程序。那时我们追求的不是精益求精的技术指标。而更像是艺术。

就是艺术!

转载于:https://www.cnblogs.com/hhhua/p/8698632.html

软件工程读书笔记(五)——软件工程师的思维误区相关推荐

  1. 英语词缀与英语派生词词典读书笔记,并总结输出思维导图

    大部分构词法知识在词根章节已说到,这里以词缀相关知识点作为重点讲述: 本文摘抄总结于 "英语词缀与英语派生词词典 - 李武平" 往期文章: 英语词根与说文解字词典读书笔记,并总结输 ...

  2. 软件工程读书笔记(四)——软件工程师的成长

    昨天依靠一罐红牛撑了一天,在零点到来前五分钟commit了最终代码.脑袋昏沉地走出实验室,去肥西路的蒸小皖吃了一碗牛肉面,在凌晨一点之前,把自己扔到了床上,当然少不了敲开宿舍楼下的门的时候宿管阿姨的一 ...

  3. 软件工程的先驱 女软件工程师Margaret Hamilton

    谷歌用独特方式纪念登月功臣.女软件工程师Margaret Hamilton 据外媒报道,就在人们在阿波罗11号50周年之际回忆和谈论该次太空任务的一些故事的时候,来自谷歌的软件工程师们认为,有一个特别 ...

  4. 读书笔记:软件人才-管理的艺术

    图灵之前送了两本书,一本是<软件人才-管理的艺术>,还有一本书<***与画家>.这几天把第一本书看完了,虽然有些章节不是那么好,但总体上来说还是不错的,所以才有下面的读书笔记与 ...

  5. 读书笔记:程序员的思维修炼—开发认知潜能的九堂课

    一直以来都觉得学习效率低下,不得其法,对很多知识力不从心,内心一片乱麻.究其原因,大致有: 1.学习方法错误,根深蒂固的应试教育模式,死读书,学任何东西,都抱着书从头看,对于计算机专业书籍,很容易半途 ...

  6. 《架构漫谈》读书笔记五

    什么是软件 软件架构的出现 如同前面描述的架构的定义,软件架构的出现也是同样的.一开始是懵懵懂懂的去写软件,后来慢慢的就有意识的去切分,演变成了不同的架构.这个背后的动力也是一样的,就是提升参与的人的 ...

  7. 这个好用高效的读书笔记app软件一定要收藏

    打开软件首页就是卡片式的读书笔记,可以上下左右滑动切换下一条笔记.首页笔记的推荐是系统根据你原来做的笔记或者看你点赞评论等行为智能推荐的.切换到下一条后就无法返回到上一条笔记. 点击底部中间的相机按钮 ...

  8. 亲测这款读书笔记app软件能提高你的阅读兴趣

    实在是用过太多笔记类app了,但是真正针对读书做笔记这个场景使用的读书笔记app很少.今天就给大家带来一款实测过的软件.绝对无毒无广告. 打开软件就是第一张图的画面,页面下面就三个按钮,非常简洁,甚至 ...

  9. 笔记 | 这就是软件工程师(一)

    一:新手上路 1.1基本储备:入门必学的语言和工具 ①入门推荐语言: Python  JavaScript 这些语言的语法比较简单,有大量的库和语法糖 ②入门必学工具: 操作系统Windows  编程 ...

最新文章

  1. Wijmo 更优美的jQuery UI部件集:爱上 ThemeRoller
  2. Oracle 实例崩溃恢复原理剖析 -- 检查点队列的作用与意义
  3. iOS Base64转码(使用ios7系统自带编码库 和 GMTBase64 两种方式)
  4. Zuul:Cookie和动态路由
  5. 老娘不就是没化妆吗?你几个意思?
  6. linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发
  7. java需要会的工具_Java开发者必备的几款工具,一定要掌握!
  8. Java 修改文件最后的创建日期
  9. Java开发者必须掌握的15个框架
  10. Anconda之常用命令汇总
  11. C/C++[codeup 1907]吃糖果
  12. 2012工行软开中心-广州面试
  13. 16进制颜色代码对照表
  14. 关于BIOS加载BOOT.S的经典解答
  15. 学霸,顾名思义,就是成绩非常好
  16. 用于科学计算机的计算器特点是什么,科学计算器有哪些功能
  17. python代码图片头像_python图像处理-个性化头像
  18. 《易经》与计算机科学技术的关系
  19. python中日期的数据类型_强制日期时间转换,强制日期时间数据类型,在pandas中使用read_表...
  20. 拥有ISO26262认证的软件工具清单

热门文章

  1. 网页设计师常去的综合类网站总结-卢松松博客
  2. 计算机单总线结构的特点,单总线优缺点
  3. 每次压力大到爆,驾校教练总爱跑敬老院干这件事
  4. 如何禁止访问一个网站??
  5. 72、【backtrader期货策略】十大经典策略-Aberration策略(布林带策略)(2021-10-29更新)
  6. itunes cannot read the contents of the iphone
  7. SEO快排系统功能更新
  8. oracle ebs r12 nls,Oracle EBS R12 - 如何通过命令上传XML/BI Publisher数据定义文件和模板文件...
  9. asp功放怎么装_功放音响安装—教您如何安装功放音响
  10. JAVA实现对阿里云DNS的解析管理