论程序员的自我修炼

摘要:软件开发是个挑战,尤其是对于那些完美主义的程序员。为了想要成为更好的程序员,总会开发出一些特别的功能,在软件设计上想要做到零瑕疵,但事实上,完美的软件设计是根本不存在的,试着让你的软件“足够好”就好!

软件开发是个挑战,尤其是对于那些完美主义的程序员。他们需要制定大量的决策以及许多问题的解决方案,这对于有些人来说会感到很难。当然,你可以在线搜索到最佳实践方案或在StackOverflow上提问。但即便你找到了想要的答案,也未必能让你感到满意。你怀疑这个设计是否完美,事实上,真正完美的设计几乎为零。

设计难题接踵而来

想彻底解决设计难题是不可能的。这是因为每个需求都会浮现在你的脑海里,你会遇到设计领域里最大的挑战,比如选择数据还是表示层。我是使用MVC还是MVVM?哪种OPM工具适合我?我该如何处理多个数据库?等等。每个问题都会让你不知所措,并且所遇到的设计问题也在日益增长。每走一步都会使你觉得像是有座大山摆在你的面前。不堪负重的感觉让你想要逃避或者拖延解决问题的时间。但拖延并不能解决问题。

解决类似这样的问题最好的办法就是(Divide & Conquer)拆分 & 克服。你必须暂停思考脑海中的所有系统问题,试着将设计拆分成细小的模块,并且一个一个的查看可以做哪些简单的模块。如果可能的话,选择迭代开发方法。这样你就可以将思维专注在设计障碍上 ,那么你就能看到多个小山丘而不是整座大山浮现在你的脑海中。

此外,不要花费太多的时间来选择工具或者API或者规则引擎。这些工具仅仅是为了让我们工作起来更加轻松。相反地,把更多的 时间放在设计原理上,比如关注分离(Separation of Concerns)。SoC(系统芯片)会允许你改变任意软件层或者不影响其他系统的软件工具。

TDD(软件测试驱动开发)会让你鼓足勇气,让你在软件行业发生质的改变。不要忘了,在设计上花费的时间是远远不够的,正如Steve McConnell 在Code Complete这本书中所说:

“When areyou done [designing]? Since design is open-ended, the most common answer tothat question is “When you’re out of time.”


需求变更

为了生存,你的客户或者公司必须适应变化。而这就意味着需求将发生变化。你不可能只编写一款软件就能满足未来所有的需求。总会有些新的需求时不时的跳出脑海中。所以,不要试图掩盖未来的需求,尝试去编写满足目前需求的软件。

不要过量设计

如果你花费数天时间来开发某个特别的功能,而这个功能一年里为你的客户只减少五分钟,那么实际上你的工作是无用的。我能理解,有时我们无法阻止自己做出一些特别的改变,因为它似乎使我们觉得像是一个更好的程序员或者只是为了好玩而已,但是考虑到成本/效益,时间是宝贵的,把时间花费在其他方面或许会更好。


简洁原则

简化,当你需要存储某个对象到系统文件时,没有密集型的工作或者特别需求,编写一个自定义对象序列化是毫无意义的。我看到有些设计从工程学角度来看,它们像是杰作,但它们过于复杂。你不应该让你的设计过于复杂。有时,最好的解决方法就是简单。因此,请保持 KISS原则。

相信自己,鼓足勇气

设计其实是为了检验程序员成果的好坏。不同的程序员可拿出不同的设计思路。因为没有单一的解决方案,这可能会导致你为某个特性搜索所有的最佳方案, 但这并不意味着你应该停止学习或聆听他人的想法。在设计过程中,不是学习所有最佳实践就能适合你的问题。相信自己,做最好的设计,实施自己的设计思路。

重构是个非常好的做法。当出现坏代码时,试着用重构的方式来解决。从错误中学习,它将有助于你未来设计。


没有完美的设计

无论你做什么,最终都会以一款无法令你满意的软件而告终。正如 Hunt and Thomas在《The Pragmatic Programmer》中写道的:

“完美的软件是不存在的。在计算机历史上,没人设计出完美的软件。这是不可能的,也许你是第一个,除非你不接受这个事实,而浪费时间或者精力去追逐一个不可能实现的梦想。”

我很抱歉,但他们是对的。不要去追逐一个不可能实现的梦想,试着让你的软件“足够好”就好!

英文出自: Thingstocode

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

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

相关文章

利用 Charles Proxy 下载旧版本 iOS App

一、软件准备 1、旧版本 iTunes1.IPSW Downloads:https://ipsw.me/2.百度网盘链接:https://pan.baidu.com/s/1PO9Z12o-rqZ_JG68zRqEnA 提取码:fe1v 2、抓包工具 Charles Proxy1.Charles官网链接:https://www.charlesproxy.com/2.百…

禅道8.2-9.2.1注入GetShell

漏洞分析附上某老哥的漏洞分析,来了解下原理。 漏洞利用查看版本:访问Url:http://127.0.0.1/zentao/index.php?modegetconfig即可获取禅道的版本号以及一些其他的信息,目前漏洞存在于v8.2~v9.2确定版本号之后,我们就…

2020-3-23

题目一&#xff1a; JavaScript 复选框全选和全不选 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> body{font-size:12px;} ul{list-style:none} </style> <script type"te…

Maven 依赖-镜像仓库替换为 -- 阿里云镜像仓库(飞快实现 pom 引入)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 在本地 maven 的 setting 配置文件中加上阿里云镜像地址就行了&#xff1a; 新增配置内容&#xff1a; <!-- 阿里镜像仓库 --><…

cmake 常用命令

1. 使用日期 # 获取时间 string(TIMESTAMP DATE_TIME "%y-%m-%d %H:%M")# 获取日期 string(TIMESTAMP DATE_VERSION "%m%d") 转载于:https://www.cnblogs.com/ziyu-trip/p/10697309.html

爱屋吉屋病死后,链家、中原、我爱我家们却哭不得笑不得

作为互联网房产中介最快成长为行业独角兽的爱屋吉屋&#xff0c;还是没能迎来开春之暖&#xff0c;于2019年2月19日便停止了运营。对于这个享有创造中国房市273天四轮融资的奇迹、估值超过10亿美元的速成独角兽、一代“革命者”、创造世界纪录的互联网房产神话等多个美誉企业的…

2020-3-24

题目一&#xff1a; JavaScript 页面跳转效果 实现在10秒之后跳转到指定页面。 代码与解析&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <script type"text/javascript"> function countDown(secs,…

清洗肾脏的绝好秘方(图)

清洗肾脏的绝好秘方&#xff1a;只用香菜&#xff0c;可以在家里尝试。不用花多少钱就可清洗你的肾脏。经过多年来&#xff0c;我们的肾脏过滤血液&#xff0c;排除盐&#xff0c;毒素及所有不需要的物质进入我们的身体。随着时日&#xff0c;盐毒积累&#xff0c;这需要进行清…

列表 字典

一、列表 1.定义&#xff1a; stus ["s1","s2","s3","s4","s5","s6","s7"] #List 列表 数组用中括号定义&#xff0c;逗号隔开 stus2 [] #空的列表stus3 list() #空的列表 【定义空的列表便于往里…

MySQL执行外部sql脚本文件的命令( source命令执行sql )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 sql脚本是包含一到多个sql命令的sql语句&#xff0c;我们可以将这些sql脚本放在一个文本文件中&#xff08;我们称之为“sql脚本文件”&…

【案例】数据量猛增,BI分析效率太低怎么破?

2019独角兽企业重金招聘Python工程师标准>>> 近日&#xff0c;Apache Kylin Innovation Meetup 在上海成功举办&#xff0c;有近200位小伙伴来到了现场。此次会议特别邀请到了金融、互联网等行业的技术伙伴分享了 Kylin 在行业中的实操应用 。今天将首先与大家分享演…

2020-3-25

题目一&#xff1a; JavaScript 数组随机不重复元素 实际应用可能需要从数组元素中随机取出几个元素&#xff0c;并且要保证这几个元素不重复。 有些数组可能有重复的元素&#xff0c;那么可能需要首先去除这些重复的元素。 代码与解析&#xff1a; var theArray[1,3,2,4,5,9,…

人生要小心处理的事

被人羞辱——翻脸不如翻身生气不如争气 有个成语叫做“恼羞成怒”&#xff0c;意思就是说&#xff0c;由于羞愧和恼恨而发怒。被人无情羞辱&#xff0c;只要是有自尊心的人都会愤怒&#xff0c;但问题是&#xff0c;愤怒过后你还会剩下什么?你是马上报复&#xff0c;以牙还牙;…

刷新SWAP分区方法

Linux VPS的使用过程中&#xff0c;SWAP交换分区是一个很重要系统缓存分区。他是在内存不够用的情况下&#xff0c;从硬盘中临时分出一部分空间系统当做内存使用。但是&#xff0c;如果SWAP的占用超过30%的时候&#xff0c;系统的性能就会受到影响&#xff0c;这时候就要刷新SW…

您收到一封 2019 阿里云峰会 (北京) 邀请函

为什么80%的码农都做不了架构师&#xff1f;>>> 摘要&#xff1a; 阿里云峰会&#xff08;北京&#xff09;开发者专场以“云原生和可见的云未来”为主题&#xff0c;不仅涵盖 2 场重大发布&#xff0c;更设置人工智能、机器学习、实时计算、云原生实践等国内外最热…

解决Based on configured schedule, the given trigger ‘triggerGroupName_FREEZE_JOB.triggerName_FREEZE...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题、如下&#xff1a; Caused by: org.quartz.SchedulerException: Based on configured schedule, the given trigger triggerG…

2020-3-26

题目一&#xff1a; JavaScript 获取第n个li元素 下面有两种方法 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> ul{list-style:none} </style> <script> window.onloadfunct…

Django路由(url)

1.基本配置 from django.conf.urls import urlfrom . import viewsurlpatterns [url(r^articles/2003/$, views.special_case_2003),url(r^articles/([0-9]{4})/$, views.year_archive),url(r^articles/([0-9]{4})/([0-9]{2})/$, views.month_archive),url(r^articles/([0-9]{…

熟悉,不等于能力

我们经常会看到有些人做事情非常熟练&#xff0c;不但快手快脚&#xff0c;而且不慌不忙、气定神闲。心中不禁油然产生钦佩之情&#xff0c;同时也认为他的能力很好。 只要假以时日&#xff0c;每个人都能够从生手变熟手&#xff0c;同时是品质效率很好的“熟手” 对一样事情…

高性能、高可靠分布式文件系统 go-fastdfs v1.2.0 发布

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; go-fastdfs是一个基于http协议的分布式文件系统&#xff0c;它基于大道至简的设计理念&#xff0c;一切从简设计&#xff0c;使得它的运维及扩展变得更加简单&#xff0c;它具有高性能、高可靠、…