作为一名程序员,小伙伴们有没有想过这个简单的问题,“软件是什么?”可以闭上眼睛让自己想一会,如果觉得有点抽象不太好回答的话,来看看我的答案。

软件 = 程序 + 数据 + 文档 + (服务)
程序 = 数据结构 + 算法

看完这两个直观的公式,是不是有一种恍然大悟的感觉,“哦,原来这样啊。”

再来看四条对“软件”的定义,虽然比较枯燥,但概念是到位的:

  • 软件是能够完成预定功能,达到预期性能的,可以执行的计算机指令;
  • 软件是能够让程序处理适当信息的数据结构;
  • 软件是描述程序操作和使用的文档;
  • 软件是一种逻辑实体,具备知识性的产品集合,是对物理世界的一种抽象,同时又是一种人脑智力的成果。

在很多自以为是的甲方眼里,软件是廉价的,可以随意复制的,因此他们经常提出一些苛刻的要求,其中有一些让软件开发者感到哭笑不得:“这个需求简单的嘞,你去网上随便找个现成的,改一改就好了呀,花不了多长时间的,一个月可以搞定吧?”每次听到类似的话,我的心里就有一万只草泥马奔腾而过。

软件开发并不是一件轻而易举的事情,需要经历下面这些基本过程:

1)软件计划,确定产品定位和目标用户。这一步是需要甲方去规划和调研的。

2)软件需求分析:根据甲方需求,分析出甲方需要的产品功能。这一步是需要项目负责人(或者产品经理)去和甲方沟通的。

3)根据需求进行设计:包括概要设计和详细设计。这一步是需要项目负责人(或产品经理)做的,并且要正确地传达给开发人员。

4)编码并运行。这一步是需要开发人员去做的。

5)测试:确认甲方需求,对设计和结果进行验证。开发人员要进行单元测试,集成测试,如果有专业的测试团队的话,就需要站在甲方和用户的角度去测试整体产品是否符合要求并达到性能要求。

6)维护:保证软件能够在正式环境下运行,并且对一些缺陷(bug)进行修正,或者对功能进行完善,或者对性能进行改进,不断迭代软件版本。

瞧,软件开发的过程并没有甲方想象中那么简单,如果有小伙伴遇到不讲理的甲方,就把这篇文章扔给他好好看看。

既然软件开发的过程是有难度的,是需要付出时间和精力的,那就有必要遵循一些原则,否则开发成本就会变得很昂贵,开发周期就会拖延很长时间。

原则一: Don’t Repeat Yourself

直译叫做“不要重复你自己”,还有另外一个耳熟能详的版本,“不要重复造轮子”。

在你一开始进入软件开发这个领域后,就一定要注意,把你自己写过的一些解决方案汇总到一起,定期梳理一遍,写点文档,不断重构,使它们成为一把把瑞士军刀。如果可以的话,把它们开源出来,服务更多的开发者。

有了自己的工具库后,当你下次遇到类似的需求时,就可以直接拿出来用,省去不少时间。

除此之外,你还应该善于利用那些业界已经开源出来的成熟的技术方案,比如下面这些。

GitHub 和码云是两个充满宝藏的地方,如果你觉得自己的能力还不到自己造轮子的份上,那就一定要多上上这两个网站,里面有很多成熟的解决方案供你免费使用。

比如说,你要一套商城系统,那么 marcozheng 的 mall 就可以直接拿来作为原型。比如说,你要一套人事管理系统,那么江南一点雨的 vhr 就可以直接拿来作为原型。(虽然推荐了很多次,但好朋友的,多推荐一次不嫌多。)

原则二: Keep it simple stupid

著名的 KISS 原则,即“保持简单、保持愚蠢”,和史蒂夫·乔布斯的名言“stay hungry, stay foolish”有着异曲同工之妙。

从苹果产品的设计上也可以体现出来这个原则,起初的手机,比如说诺基亚智能机,带很多实体键,但苹果只有一个 home 键,其他全部虚拟键代替,彻底革了诺基亚的命。

在我们设计软件的过程中,千万不要想得太复杂,越简单越好,等成型了以后再丰富效果,否则开发成本会变得很昂贵,软件就可以腹死胎中。

原则三: You Ain’t Gonna Need It

英文直译为“你不需要它”,该规则要求程序员在必要之前不应该添加功能。极限编程的联合创始人罗恩·杰弗里斯(Ron Jeffries)曾经说过:“总是在实际需要时才实现事物,而不是在预见到需要它们时才实现。”

项目负责人(产品经理)更应该坚持这条原则,千万不要过度拆解用户的需求,在产品设计的过程追加过多自己认为应该追加的功能,因为在一个软件使用中,往往 80% 的请求都花费在 20% 的功能上。

很多次要的功能可能需要,因为它们的存在而使软件锦上添花,但没有它们,软件的商业价值依然是存在的。功能越少,开发周期就会越短,这样就更有可能打败竞品。

原则四: Done is better than perfect

Done is better than perfect because perfect is never done。

很简单的一句英文,能理解吧?

不要总想着把所有的功能做完善,做完美后再上线,应该在产品具有一定的雏形后就立即上线试错,根据用户的反馈,根据市场的需求再去考量是否追加一些其他的功能或者优化。

“人无完人,金无足赤”,应该允许一些瑕疵存在,刻意追求完美并不见得是一件好事。乔布斯想要一整块屏幕,但技术达不到的时候,他也是会留一个 home 键的。

我们程序员在开发软件的时候,也应该遵循这条原则,先把功能做出来再说,至于效果,用户的体验,应该往后放,不要总想着尽善尽美,尽善尽美意味着永远也完不成——没有最好,只有更好。

原则五: Choose the most suitable things

选择最适合的,不要盲目追求时髦。技术日新月异,应接不暇,如果在开发软件的时候,一味追求最前沿的技术,可能就会让产品变成小白鼠。

就好像我们谈一场恋爱,不要一味去追求高不可攀的,往往那些在我们身边的,肯陪伴我们的才是最好的。

技术选型的时候,适合就好。如果产品的目标用户只有一千人不到,就没必要搞分布式,搞大数据,否则就有点“蛇吞象”的意味;等真到了需要搞分布式,搞大数据的时候再升级完全来得及。

最后,希望小伙伴们在软件开发的过程中,能够去遵循这 5 条原则,毕竟每天工作的时候可以多摸鱼 4 个小时。

肝了三天三夜,《程序员不可或缺的软实力》第一版强势来袭,纯手敲,足足 20 万字精华文章,贯穿了我十余年的编程生涯,涉及到了生活和工作中的方方面面,如果你是迷茫的在校大学生,或者刚入职的新人,相信我的个人经历,可以给你带去一些思考,从而树立起正确的人生观和价值观。

那这份 PDF 该怎么获取呢?

链接:https://pan.baidu.com/s/1p-akwfNQPs0bzKHAK_xZ8w 密码:9ps5

最后,真心希望这份 PDF 能够对大家起到实质性的帮助,我也会在后面不断完善这本电子书,敬请期待。

当然,也日常求个赞

自从掌握了软件开发的 5 条核心原则,我每天工作时至少可以多摸鱼 4 个小时相关推荐

  1. 有效软件开发的25条军规

    作者 | Allen Holub 译者 | 马超 出品 | CSDN(ID:CSDNnews) 今天笔者在外文的技术博客上看到了一个非常亮眼的建议合集,整理一下姑且起名叫有效软件开发的25条军规,下面 ...

  2. 软件开发的22条黄金法则

    编程本质上是一门手艺活,既然是手艺,里面就会有很多个人技巧和经验. "破窗理论",DRY(Don't repeat yourself),曳光弹,正交性,这些词的意思是什么你还记得么 ...

  3. 多媒体中控软件开发流程_网络多媒体:视频工作流程提示

    多媒体中控软件开发流程 Just as with images, there is a production workflow to creating video. By necessity, I a ...

  4. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 The End 导航页及收尾工作

    导航: 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 1 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 2 桃词 ...

  5. java软件开发培训班靠谱吗?好找工作吗?

    其实现在很多大学生毕业都找不到工作或者对自己所学专业并不喜欢,自然毕业了也就很迷茫,也没有一个自己的职业规划.相信大部分人都知道目前IT行业平均薪资都挺高,前景也不错.其中,Java软件开发更是其中特 ...

  6. Java软件开发好学吗?学完好找工作吗?

    互联网高速发展的当下,Java语言无处不在:手机APP.Java游戏.电脑应用,都有它的身影. 作为最热门的开发语言之一,Java在编程圈的地位不可撼动.可是,听名字就很专业的样子. Java语言到底 ...

  7. 敏捷软件开发宣言ndash;Manifesto for Agile Software Development

    敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改? 下面是一个笑话,  王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 ...

  8. 敏捷软件开发宣言–Manifesto for Agile Software Development

    敏捷开发, 谁不会呀, 不就是 没文档, 出活快, 用户说啥都能改? 下面是一个笑话,  王屋村的大牛说 - 我最近转手接了一个活, 完事能挣四五万, 我拿过图纸一看, 不就是盖一烟囱吗? 我们是敏捷 ...

  9. 软件开发工程师--经验之谈

    分享一位软件工程师的多年总结,经验之谈,借此导航自己人生. 1.分享第一条经验:"学历代表过去.能力代表现在.学习力代表未来." 其实这是一个来自国外教育领域的一个研究结果.相信工 ...

最新文章

  1. angularJs 之deferred
  2. 看看那些令你惊叹的PCB设计艺术
  3. 用websploit获取管理员后台地址
  4. 【J2SE】java实现简单照片查看器
  5. 思考 | 西湖大学博导:都说不唯论文,那我们发表论文是为了什么?
  6. # 安卓手机启动黑阈服务
  7. KND数控系统PLC开发环境
  8. nRF Sniffer抓包环境搭建
  9. 前端怎么加粗字体_【推荐】皮卡丘怎么画?教你如何轻松绘画出可爱的宠物小精灵!...
  10. 什么是php PHP能干什么
  11. 脉冲宽度调制pdm_如何通俗易懂地解释「脉冲宽度调制(PWM)」?
  12. 双摄像头测距的OpenCV实现
  13. RouterOS(ROS)+OpenWRT(LEDE)双软路由奶妈级配置
  14. c语言之数据结构学习心得
  15. 区块链共识协议最详细的分析
  16. Altium Designer 封装绘制时批量重命名焊盘编号
  17. Ant Design Pro使用之--EditableProTable 可编辑表格
  18. vue实现登录路由跳转到成功页面
  19. What inspires designers? Preferences on inspirational approaches during idea generation
  20. 智力题 诚实国和说谎国

热门文章

  1. 【转】使用Java实现MP3音乐播放器
  2. Murphy's law
  3. 计算机研究生 在职2018,在职人员选择报考2018年五月计算机技术在职研究生的原因是什么...
  4. 如何使用HomeBank作为Quicken的开源替代方案
  5. socket pipe
  6. Android拍照录像框架Camera2使用简介
  7. 使用人工智能赚钱的方式,行业领域有哪些?
  8. saltstack自动化运维工具
  9. mysql5.7刷脏报错_mysql5.7安装 - osc_136ia3e6的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 硬件笔记(1)---- 以太网控制器类型