编程漫谈(十九):编程散思

技术人素养

  • 面向未来的工程师应当是:富有探索精神的、诚实而一丝不苟的、具有审美品味的、头脑开放和灵活的。
  • 技术人首先应当拥有良好的技术素养。技术素养首先是一丝不苟地严谨探索与求知的能力和精神,其次是对一个事物能够构建自底向上的逻辑,具有宏观清晰的视野和对细节的把握。
  • 技术人还应当保持谦逊,要明白自己所知的永远是冰山一角,以冰山一角去评判另一个冰山一角,只是五十步比百步。
  • 理性,专注,务实,懂得追求与平衡,这就是工程师一族内蕴的智慧与力量。
  • 以严谨求知之精神,促成透彻清晰之认知。
  • 像AI那样汲取人类所有智慧的结晶。
  • 把工作当成事业,持久精进,才能取得成就。
  • 追求有意义的目标。编程写代码是一件事情,不是目标;成为架构师,是有激励的长远的手段目标,但它不是意义目标。意义在某种程度上是达成某种效果。让快递在天内可达,就是一个意义目标。每周做一个关于某主题的精品小视频或精品文章,虽然不够长远,也是一个不错的意义目标。一个是长远的,一个是可以鞭策于每周的。实际上,两种类型的目标是可以结合使用的。
  • 写代码只是软件工程师的一个小而重要的部分。一个优秀的软件工程师,具备全域视角:设计程序,写文章,做分享,懂谈判(尽管是初级的),善协作,协调资源,推进事情,带团队或新人,在人与机器的两个世界游走。若是再懂一些产品、设计、运营、商业,就近乎全栈。
  • 软件工程师提供的是软件知识服务。这意味着,不仅仅是写代码,而是解答关于软件的各种问题,以及帮助他人找到解决问题的方法。这样一想,就觉得顿时宽敞明亮了许多。软件知识服务也是要讲用户体验的。既然是要用户体验,就需要做到专业,臻于完善,耐心温和地解决问题。知识经济社会里,知识服务必定是大势所趋。
  • 要坚持理解系统,不仅要理解技术性逻辑,也要学习产品逻辑;不仅要推敲细节,也要综观全景。
  • 过于强调技术含量和技术能力,容易让人遗忘一个本质性的事情,那就是:我们写的每一行代码都是为了帮助人们过得更好。
  • 今天给一个 200 行的函数写了单测,耐心收益率上涨 50% ,净收益值增加 1.4142.

思路与思维

“质量-效率-成本” 创新铁三角

  • 在相同的效率和成本下如何提升质量?

  • 用相同效率达成既定质量如何降低成本?

  • 用相同成本达成既定质量如何提升效率?

  • 品质必定优先于效率。这是不可动摇的原则。当花费更多时间做出有品质的产品时,应该反省方法是否还不够高效,而不是牺牲品质去换取效率。

  • 破坏性创新:更小、更简单、更便宜、更便携、更智能。本质上就是成本、效率、体验。

  • 如果不能将效率提升至少两倍以上,或者不能将成本降低一半以上,或者不能将数据处理量级提升至少一个数量级,那么这项任务很可能不值得花费时间去完成。

  • 编程的乐趣和挑战,就是将体力活自动化,使效率成十倍百倍的增长。

  • 让效率成倍增长的有效之法就是提升代码和方案的复用性。

  • 技术思考框架:抽象-思路-考量-优化-细节。Abstraction -Thoughts -Consideration - Optimization -Details . ATCOD, at code.

  • 专家思维:技术及非技术思考框架 + 知识/技能体系结构 + 原理/本质/细节探索能力 + 大型项目/系统实操经验。

  • 在高科技行业,仅仅踏实做事是不够的。没有宽广的技术和业务视野,很容易丧失继续前进的方向和动力。这是我所走过的弯路。

  • 重要的是磨炼一种自底向上的全链路的宏观与微观并重的逻辑构建能力,这将成为一个人最持久的核心竞争力。

  • 人工智能,无疑是下一代生产力标志了。关注人工智能领域的发展是件激动人心的事情。

编程

  • 码中有万象。
  • 回到编程的初衷和本质:逻辑构思与表达,发现与创造的快乐。
  • 编程是一件既有益又有挑战的事情。如果它正好还是一件值得热爱的事,因为年龄大、企业不聘用或者别人不认可就不敢坚持要放弃,那太荒唐了。内心热爱的事情,要坚持到不得不离开世界的那一天。
  • 编程使人聪明。人应具备三种素养:算法、文学与审美。算法使人严谨,文学使人感性,审美使人避免庸俗。
  • 模型之美,逻辑之美,表达之美,才是编程的最高目标,亦即编程的“道”。
  • 编程即设计,代码即架构。
  • 编程三境界:编码、设计、模型。
  • 编程即是精炼自己的思考,精炼自己的表达。
  • 编程,是对思维的磨砺;它迫使人将模糊不清的细节清晰化,不如此就完成不了作品;而写作则要布局谋篇,设下伏笔,令人读至开怀一笑或拍案叫绝。
  • 抽象层次越高,编程就越接近数学。
  • 编程教育,并不仅仅涉及逻辑推理和程序思维,还关乎如何写出优美的程序。
  • 程序,亦有审美。优美的程序简洁、清晰、凝练、巧妙、自然,排版朴实有序,符合设计美学,像一首清晰的逻辑音乐,折射出思想的水晶般的光华。它不像音乐、绘画、雕塑等实体能直接为感官感知,—— 必须用理性和神思用心去感受。
  • 编程是有能力同时操控百万台机器工作。这就是一个人释放效能的关键之法,多重影分身术。

技术与设计

  • 原理和设计思想是最精髓的东西。
  • 诸法万千,变幻不定,唯有道是一心,恒久长存。
  • 设计就是未行而先知。在脑中持续回放,直到所有一切都清晰可见。
  • 系统思考与结构化大法是融合众家武学为我所用的基础内功。
  • 数学、数据结构与算法,是计算世界的基石,是最接近于计算世界第一性原理的层次。
  • 存储与模型是设计之基石。
  • 设计的本质是抽象与连接。
  • 写代码是冰山之上的事情,抽象设计是冰山之下的事情。程序是血肉,设计成骨骼。
  • 技术无外原理与细节,只防不陷入琐碎。能入细入精者,亦是乐其人生之道。
  • 在基本原理和事实确定的前提下,软件设计可以像数学那样被推导。
  • 设计之优劣,代码之可维护性,在于在保持清晰性时能够敏捷应对变化。
  • 要使之清晰,分离;要提升性能,合并。方法和原则取决于目标。
  • 与系统打交道,故障不可不看。因为故障是系统设计的指示灯。一个人的经历太有限了,必须学会从别人那里学习。
  • 极端场景的思考。是否考虑过线下流量持续近0的极端场景 ? 系统是否经得起极端场景的考验 ?人们通常不会做这种假设,但只要有可能,就一定会发生。抢购口罩导致退款量短时间剧增,系统出现延迟,这也是一种极端场景。
  • 极端场景让人猝不及防,同时也能启迪人更深刻地思考这个世界。它远比想象中的现实广阔。
  • 软件的复杂性体现在大规模上。因此,软件的研发,也应该用大规模机器集群去承担。因为只有不眠不休的机器才能理解不眠不休的机器的运作。
  • 软件在人与数据间创造连接并赋予意义。

学习

  • 学习究竟是什么 ?我们总是以掌握别人的知识为荣,以知道别人的东西为荣,在别人的经验的守护下“安全”前行。社会的教育和俗利的追逐也驱使我们这么做。在大脑里塞入别人的东西,固然能成为很好的工具,但好工具始终只是工具。
  • 学习,必定是要依靠自身的观察、聆听和领悟,才能获得自己的觉知和觉悟。这样的学习才是鲜活的真正的学习。
  • 只摘录基本原理;只保留最精髓的知识,—— 或者空白。
  • 人的关于某个主题的知识构成了一棵知识之树。人的所有知识之树和技能之树构成了一座知识庄园。这座知识庄园就是一个人的终身财富。
  • 学习要遵循“循序渐进”的原则。比如理解了 2-3 树,才更容易理解红黑树。跳跃性过大往往导致摸不着头脑或欲速则不达。
  • 要设法阅读第一手的资料,论文、官方文档、源码、经典著作,与发明者交流;要努力追溯本质与本源。知识是相对客观的,不能浮夸和造假。
  • 抽象并不一定艰深难懂,可以通过图像、文学、故事更直观地具象化。

原文地址:https://www.cnblogs.com/lovesqcc/p/14126917.html