从技术打磨到产品验证:读《程序员修炼之道》的务实之道

news2024/11/13 18:10:15

在编程世界里,技术的打磨往往像是工匠雕琢作品,但若无法转化为产品的成功,所有的精致都不过是空中楼阁。读《程序员修炼之道》时,我深刻意识到,务实不仅仅是技术的选择,更是产品迭代和商业模式成功的关键。

图片

在现代社会,全身心投入之前,测试想法并得到反馈是至关重要的。由用户参与评判,够好的软件就是最好的,而不能过度追求完美。好改,能适应使用者的就是好的设计。

贯穿商业模式、产品到软件设计,有一个原则就是其实谁也没有标准答案,尽早交付,通过持续的收集信息,不断调整方向瞄准,直到击中,这是最重要的原则。作者在书中严格地区分了原型和曳光弹这两种探索正确产品方向的方法。

从技艺精进到产品突破:刻意练习的反思

有几年的时间,我自己对于刻意练习非常偏执,在技巧、熟练度和手艺的提升上确实有很大的收获,但是当时感受到两个问题。

首先,光是单纯的磨练技艺,是无法带来产品和商业模式上的成功的。过度的修饰和精炼很多时候反而会消磨前进的动力。相比之下,使用曳光弹,快速原型、沟通反馈,数据驱动,才是更好的解决方案。

其次,就是缺乏对前沿知识的关注,总是在特定的波段上温故已有知识,有种停滞的感觉。这样会想,大学时,一个学期十八门课,定期考试,用产出来推动的学习的模式,虽然不那么舒适,但是这种方式的确更适合学习大量新知识。

像专业投资理财一样学习

对于阅读技术书籍,其实作者的要求不是很高,在广泛阅读的同时,一个月一本技术书是基准。我觉得还可以在一年里,集中性的再抽出一个月时间,大量阅读技术书,效果也会很好,可以尝试一下。

作者非常务实的思想,还体现在,对于成功投资原则的理解,完全不亚于专业书籍和理财专家。我们对于专业技术,计算机软件工程和科学知识,也应该这样投资。

正规投资者有定期投资的习惯,多样化是长线成功的关键,聪明的投资者会平衡保守型和高风险高回报型投资组合,投资者用低买高卖来获得最大的回报;同时还应该定期审查和重新平衡投资组合。

图片

正交性与DRY原则

务实的软件开发方法中,如果说有一条最重要的原则,我觉得一定是正交性。正交可以带来低耦合,分离关注点、单一职责都是正交的体现。微服务同样也是在部署层面和团队职能上的正交。

DRY(不要重复自己),也是很重要的原则。但是我们知道,在软件开发中复用不是最重要的事,关键是语义清晰,知识必须单一、明确、权威,看似一样的代码未必是重复。这也正是编程中艺术的地方。

可测试性与解耦

可测试性和正交解耦是分不开的,具备良好可测试性的代码,一定是没有对全局变量的依赖,保持不可变性,确定的输入产生特定的输出。还有对外部资源的的引用,也应遵循这一原则,因为任何可变的外部资源,都是全局数据,也就是有副作用,会被共享。

把所有都外部依赖封装成抽象是一个良好的实践,依赖抽象而不是实现,可以提高整个系统的灵活性。

对此,我觉得非常同意作者说的,保持代码简洁,不要打破第一扇窗户。

软件开发就像园艺:可测试和重构的思考

测试是从代码中获取反馈的过程,而不仅仅是寻找Bug。正如作者所说,测试的好处更主要来自对测试的思考,什么样的代码设计出来更易于测试,思考可测试性对代码的影响,用这样的方式,设计出的代码就是可测试的。

关键在于对代码的思考和理解,而不是必须真的写出来的自动测试代码。这也是很偏艺术的地方。当然,如果是时间和成本允许的话,在遵循测试金字塔原则的情况下,还是尽量应该把自动化测试的代码写出来。

自动测试同样面临边际收益递减,属于过度追求完美,任何对完美和健壮性的追求,都应该适可而止,不要超过能看见的范围,这个可以确定的预见的范围,不管对于产品还是开发,都应该是几周,最多不超过一两个月。

在作者看来,重构也应该是非常微小步骤的改进,任何大规模的重写,都不能算是重构,就像裁剪树枝一样。所以说软件开发更像园艺,软件并非砖石堆砌,而是一个有机体,无法得到计划中结果的东西都需要删除或者修剪。

我觉得软件开发中,有一个很有用的原则,在决定代码到底分还是合的时候很有用,可以根据最小删除成本来考虑。

用文本来存储知识

此外作者毫不掩饰用可以版本化的纯文本来持久化存储知识的偏爱,只要不是确定为了性能要压缩信息,用可以自解释的文本永远是最佳选择。这也是我自己非常认同,并且在实践中采用的原则。

首先是可读性,代码和数据不仅仅是机器执行的指令,更是开发者之间沟通和协作的桥梁。在没有足够的精力,维护大量冗余文档的时候,所见即所得的文本信息,是最好的文档,没有任何二义性,也不需要额外跳转和查询知识。

然后是关于建模,这是有点类似活文档的概念,在我们开发软件的时候,第一步,其实是对物理世界,或者需求的建模,将物理世界的所有概念,反映到系统中,所有概念一一对应,是基础,只要有完备的结构化文本,我们可以通过各种代码生成器、规则引擎,自动的生成代码或者执行逻辑;文档本身就解释了程序的行为。

敏捷思维与组织架构

敏捷思想关注的是如何有效地工作,是关于如何做事的,迈出一小步,评估并根据反馈调整下一步行动,持续针对流程做实验,改进流程,才是敏捷团队的核心,而不是迷信时髦的方法。 

康威定律决定了,任何软件的架构,最终都是组织沟通结构的反映。应用康威定律,可以有意识地按照代码所期待的样子,来组织团队。现在比较流行说的组织能力,我觉得也是类似的概念。 

我觉得需要注意的是,组织的沟通结构,不可避免要受到创始人的性格、预算、收入来源和融资结构的影响,而不是空中楼阁。

编程、架构、产品设计和经营都是一样,采取经过深思熟虑的小步骤,及时检查数据和用户反馈,应该在推进前不断调整,避免过大的步骤和任务,用反馈频率作为节拍器。

构建软件的唯一方法是增量式的,逐步构建端到端功能的小块,一边工作一边解决问题,在解决问题的过程中不断学习,应用过程中学到的知识充实代码,让客户参与每一个步骤并让他们指导这个构建的过程。 

图片

结语:务实之道

说到具体的软件开发实践,我觉得,在结果难以预测的产品探索过程中,每次迭代都应该在整个开发流水线上避免重复的工作。每个工序和步骤都应该尽快将可用的产出交付到下游,就像在黑暗中射击一样,不必追求完美主义,关键是尽可能交付可演示且能正常工作的内容,交付的过程就是沟通和学习的过程。当然,推进时要牢记约束理论的指导,及时识别并优化瓶颈,并根据瓶颈调整节奏,以确保整个流程的高效进行。

在《程序员修炼之道》中,务实的方法论贯穿始终。技术的打磨是基础,但只有通过迭代、反馈与不断适应,才能成就伟大的产品。真正的成功在于打破迷雾,精益求精,最终让产品在市场上成功。

从技术打磨到产品验证:读《程序员修炼之道》的务实之道icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/V0i45pRy8Twgz-Jy64x6dw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# .net6 开发数据采集软件(一)

功能: 数据采集:采集任务 数据分析:数据可视化 其他功能:数据上传、数据下拉、软件更新 软件设置:PLC配置、任务配置、软件配置、可视化配置 更多功能:其他软件的入口,或者小工具的使用。比…

打印机无法打印是怎么回事_打印机无法打印多种解决方法

打印机无法打印是怎么回事?我们在使用打印机的时候,可能会遇到打印机无法打印的问题,该问题原因有很多。下面小编就教大家打印机无法打印多种解决方法。 打印机无法打印多种解决方法: 打印机无法打印解决方法一:纸张问…

iOS 超强插件注入神器,Trollfools迎来二次进化

长期以来,注入插件是越狱iPhone的专利。对巨魔玩家来说,越狱用户是如同“上游供应链”一样的存在。 很多增强版的APP,其实都是越狱玩家制作、分享的。直到Trollfools诞生,才彻底扭转了这一现状。 Trollfools是什么?简…

吴津雨银洁刘雅雯获得国际超模大赛四川总决赛网络组三甲

9月8日众人期盼已久的都江堰杯2024国际超模大赛四川总决赛在三遗之城都江堰落下帷幕。国际超模大赛已经举办第12个年头,每年为时尚界、模特界输送无数的优秀时尚模特人才,让世界超模中出现更多的中国面孔。大赛在全球已经布局多个国家及地区,…

攻防世界---->Windows_Reverse1

学习笔记。 前言:不会,代码越简洁,越难受 T ^ T 下载 查壳。 UPX脱壳。 此题脱壳后的程序,是不能运行的。 网上wp,说是因为作者采用了ASLR(地址随机化) 解决方法:一:用XP运行调试。 方法二&a…

基于单片机汽车驾驶防瞌睡防疲劳报警器自动熄火设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…

【算法竞赛】栈

栈的特点是"先进后出"。 栈在生活中的原型有:坐电梯,先进电梯的被挤在最里面,只能最后出来;一管泡腾片,最先放进管子的药片位于最底层,最后被拿出来。 栈只有唯一的出入口,从这个口进入,也从这个口弹出,这是它与队列最大的区别。 队列有一个入…

李宏毅机器学习2023HW12—Reinforcement Learning强化学习

文章目录 TaskBaselineSimpleMedium Baseline—Policy GradientStrong Baseline——Actor-CriticBoss Baseline—Mask Task 实现深度强化学习方法: Policy GradientActor-Critic 环境:月球着陆器 Baseline Simple 定义优势函数(Advantage function)为执行完ac…

传统到AI 大数据分析的演变,颠覆智慧水电的未来?

传统到AI 大数据分析的演变,颠覆智慧水电的未来? 前言传统到AI 大数据分析的演变 前言 水电作为一种重要的能源形式,一直在我们的生活中扮演着至关重要的角色。而如今,随着科技的飞速发展,智慧水电和 AI 大数据应用的…

服务器安全,你必须知道的六个知识点

服务器安全 如今没有什么是安全的。各种系统安全漏洞的数量呈爆炸式增长。令人担忧的主要原因之一是服务器安全性。 接下来,就如何提升服务器安全,写几点见解。 虽然很多企业在服务器的安全性方面做了足够多,但是,黑客仍然能够…

Java项目实战II基于Java+Spring Boot+MySQL的卓越导师双选系统设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 在当今高等教育环境中,师生之间的有效沟通与匹配对于促进学生发展、提升教学质量至关重要…

蓝桥杯—STM32G431RBT6(ADC数模转换,从原理到应用)

一、什么是ADC? ADC(Analog-to-Digital Converter)即模数转换器。它是一种将模拟信号转换为数字信号的电子器件。在电子系统中,ADC 起着至关重要的作用,它能将连续变化的模拟量(如电压、电流等)…

openstack中的rabbitmq

基本概念 基础介绍 exchange:用于分发信息,有direct、fanout、topic、headers; binding:exchange、queue之间的虚拟连接,由一个或者多个routing key组成; queues:用来暂存消息,供…

【工具】Windows|两款开源桌面窗口管理小工具Deskpins和WindowTop

总结 Deskpins 功能单一,拖到窗口上窗口就可以置顶并且标记钉子标签,大小 104 KB,开源位置:https://github.com/thewhitegrizzli/DeskPins/releases WindowTop 功能完善全面强大,包括透明度、置顶、选区置顶等一系列功…

API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》

近日,全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape:中国数据安全技术发展路线图,2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用,被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出,数据安…

Python 如何调用讯飞星火大模型API

1 讯飞星火简介 讯飞星火是科大讯飞推出的一款先进的人工智能大模型,它具备强大的语言理解和知识问答能力,能够在多种场景中提供智能化服务。2024年6月27日,科大讯飞发布了讯飞星火大模型V4.0版本,全面对标GPT-4 Turbo。现有的模…

【JavaScript】LeetCode:41-45

文章目录 41 排序链表42 合并k个升序链表43 LRU缓存44 二叉树的中序遍历45 二叉树的最大深度 41 排序链表 递归 归并排序找到链表中心点,从中心点将链表一分为二。奇数个节点找中心点,偶数个节点找中心左边的点作为中心点。快慢指针找中心点&#xff0c…

thinkPHP 8.0.4 安装

windows 上安装最新版 thinkPHP8.0.4 下载phpStudy V8.1:小皮面板安装Composer2.x,Composer是PHP的一个依赖管理工具,主要功能包括依赖管理、版本控制、自动加载、扩展开发以及集成其他工具。安装 php8.0.2 4. 网站-管理-compose&#xff0c…

基于SpringBoot+Vue的图书管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

使用k8s搭建mariadb+nginx+wordpress

前期准备 1.启动docker进程 2.拉取三个镜像 mariadb:latest wordpress:latest nginx:alpine 3.保存三个镜像 docker save -o wordpress.tar wordpress:latest 4.上传到其他的节点主机 scp wordpress.tar root 192.168.118.88:~ 5.切换到node01和node02两个节点上 ctr…