思考软件开发
计算机是人类迄今为止最伟大的发明之一, 因为在其上能够进一步地创造出无数个凝聚人类智慧结晶的子系统 —— 软件。未来可能存在一个超级软体, 汇聚人类在科学、技术、人文、艺术、文化、法律、政治、医学、历史、地理、建筑等所有领域的优秀成果。未来的教育将是“云教育”形式, 只要在移动设备上安装若干的APP, 便可随身携带人类创造的所有精心整理好的知识以及判断、推理、决策能力, 从而帮助人们更好地创造和生活。
软件开发是什么? 它的优势和价值?
如何做好这项工作? 如何能够让软件更好地为人服务?
软件开发的本质是通过计算的手段解决现实需求和问题。
具体地说, 是通过将计算封装成一个人类可感知可操控的实体, 通过全自动化或人机交互的方式来实现具体问题和需求的解决。
其核心优势是极快极准确。 准确是指元计算单位(加、复制) , 业务上的准确性由软件创建者来保证。
其缺点是不够灵动, 需要人来适应它的“坏脾气”; 有时也常做错事情。
软件可以通过以下几种途径解决问题:
自动化、 通信、 协助创作。
1. 使人工耗时的事情瞬间完成, 比如大量的科学计算;
2. 使困难的事情更容易完成, 比如现实建模分析, 异地交流;
3. 使麻烦的事情更便利, 比如网上购物, 智能家居;
4. 创造有趣的游戏, 让人们乐在其中, 又能够从中受益;
5. 创造天马行空的想象空间。
软件开发者可以创建很多新奇的软件, 去帮助人们做各种新奇的事情;
人们可以使用软件做很多软件创建者无法想象的事情。 可谓是: 只有想不到, 没有做不到。
解决问题的能力依赖于我们所掌握的思考、方法、技术、手段和工具。
1. 思考: 对问题和需求的理解有多透彻, 能否找到解决问题的关键点;
2. 方法: 解决问题的整体思路、常规方法、 可借鉴的现有方案;
3. 技术: 现有技术实现, 需要探究和解决的技术难点, 技术选型与架构设计;
4. 手段: 通常需要通过沟通和协作来获取资源, 组建团队, 制订项目进程和工期, 倾听用户反馈;
5. 工具: 通常是用于构建软件的开发工具、 库、框架和组件。
需求 - 目标 - 设计 - 资源 - 成本 - 进度 - 实现 - 反馈
需求: 所面临的本质性难题在哪里? 需要满足什么样的需要? 提出什么样的问题?
目标: 对需求和问题的仔细分析和定位, 制订可满足需求的明确可达的目标集合;
设计: 选择合适的技术和架构来指导实际活动, 确保能够充分完成预期目标, 同时对未来保持一定的灵活性和应对力;
资源: 合理的设计必定需要考虑的因素, 人力、软硬件、 团队沟通、工具环境等, 这些是完成目标的必要件;
成本: 必须比较准确地估算成本; 没有成本估算的项目和设计是不靠谱的;
进度: 制订基本合理的进度, 作为对项目进程的监督和参考;
实现: 注重细节和过程, 实现预期目标, 同时保证较高的项目代码质量。
反馈: 反馈、总结、 汲取经验教训。
要创建更有能力解决问题的软件, 必须有人的思考进行引导。 因此, 创建软件并不局限于技术, 其先决条件是问题的思考和探讨足够透彻。 而人们常常过于关注技术层面。
现代软件开发通常依赖于成熟的库与框架。 库的作用是提供常用基础任务的解决和实现, 框架的作用是提供某一问题的骨架实现和基础设施, 让使用者能够更专注于业务逻辑的实现。 那么,现代软件开发的重点就转变成: 完整准确理解和使用库的API , 掌握框架所提供的基础设施(必要的时候需要理解具体实现), 从而更快地建立更稳固的应用。
有四种创新:
1. 技术创新: 技术创新意味着对计算世界的深入研究和洞察, 能够提出更优秀的方案去解决已有问题或所面临的难题, 属于非常精微的层面;
2. 产品创新: 产品创新意味着对用户需求的敏锐洞察, 通过组合多种方式达到一种全新的效果, 解决用户的“痛点”, 并对用户产生有益的影响和吸引力;
3. 业务创新: 业务创新意味着能够观察到对客户有益的价值层面, 通过引入新技术或新产品,开拓新的领域, 能够创造更多的价值;
4. 模式创新: 模式创新意味着能够找到业务的增长点和盈利点, 保证企业的正常有效运转, 从而能够扩展其生存空间。
技术通常是创新的第一驱动力; 但创新并不局限于技术层面。
软件开发也面临着诸多挑战。 写写小程序是很有乐趣的, 但一旦发展到中大规模的真实系统, 就令人头疼了。如何建立有用的、稳固可靠的应用系统呢? 此外, 软件开发也面临着竞赛: 更快, 更好, 更有用。 即使今天能够使用成熟技术确保系统可靠可用, 也可能很快被那些敢于冒险使用新技术的人超越, 拉在后面。如何更好地尝试新技术、应用新技术, 在保证应用稳固可靠的同时, 保持着对新技术的探讨和敏锐, 也是一个值得思考的问题。
最后, 要让软件能够更易为人所使用, 必须提供一个有吸引力的界面。 或简约, 或华丽, 取决于具体情况, 但核心的是, 软件出色地完成了它声称和需要做的工作, 错误极少, 体验流畅。 这需要深入调查和理解用户是如何使用软件的每一个功能点, 才能做出切中要害的优化和改进。
值得信赖的软件: 准确, 快速, 流畅, 灵活。
生活即如行船, 不能追求轻松, 而要努力做到平衡中的从容自若。