日复一日地编程,缺乏新意的编程,是不是会逐渐陷入麻木的状态?
完成工作任务而获取收入,是上班族的常规想法。
“你是在砌砖吗?” “No! 我在建造一座宏伟的殿堂。”
心中的意境不一样,体验和结果也不一样。
编程不是一项工作,更是一种智力挑战。
需要清晰地理解问题的关键所在并制定合理的目标;
需要更强大的技艺和专业武器管理海量业务数据;
需要架构能力去设计一项新业务的实现,不仅要保证后续的可扩展和可维护,还要保证与现有功能的兼容性;不仅要确保独立功能的实现,还要保证多个功能的衔接和组合使用;不仅要确保正常场景的可靠体验,还要兼顾异常场景的友好提示;不仅要考虑单个业务的实现,还要考虑多个业务的组合营销;不仅要考虑单个子系统和模块的实现,还要考虑多个系统的交互设计;不仅要考虑PC端的实现,还要考虑移动端的需求。做好一个无缝的一体化设计,需要相当缜密的逻辑思维能力。
需要在指定时间和质量要求下去完成它;
需要流畅清晰的表达能力与小伙伴沟通,集思广益达成共识。
编程开发的四种技术挑战类型: (1) 峰值:高并发场景; (2) 海量: 十亿级以上数据量; (3) 架构: 一体化无缝设计; (4) 领域难题: 分布式场景下数据一致性问题的求解。
编程开发的三种非技术挑战类型: (1) 关键与目标: 识别问题的关键所在,制定合理的目标和执行方案去达成; (2) 资源与沟通: 明确执行方案所需要的资源要求,并协调相关人员和团队去实现; (3) 研发效率: 更敏捷地开发、测试、部署与持续交付。 能够更流畅地测试新功能、回归原有功能,能够安全可靠地部署,能够持续无错地交付和演示新业务和新功能。
编程到了更高的境界,犹如作画。当外部的数据建筑尚未完全建立时,你将不再依靠外部的有形之物,转而向内心求索,依照内心的图景而编程和绘画。
当意识到编程的挑战性而非任务性,就回到了事情的本源:生活中的很多重要事情,与工作一样,是对个体智力、表达、架构能力的综合挑战。只是性质内容不同。这些事情会在一段长时间范围对生活有深远影响。租房、买房、婚姻、与高手对决,都是一种新业务,既要兼容原有设计保持独立个性,又要实现新的需求与对方融洽相处。
“你只是在租房买房吗?” “No! 我在寻找一个未来的可延伸的明净的生活与创作空间。”
以任务心态去完成工作甚至人生,是一种思维的流毒。它使人平庸,使心绪烦乱,使行动退缩,使生活无意趣。你看有的人过得那么好,其实她或他与你在普通技艺上并无差别(都是吃喝拉撒加说话动手动脑),但她或他在认知和架构设计高出一筹:能够将许多微小的事情组合成一个宏伟的生活蓝图。这就是生活的架构能力,即生活战略。而有的人在战术和细节上做得非常出色。
以挑战心态去认真工作和生活,则意境大不同。生活中充满着大大小小的考验和奖励。大多数都是小的不起眼的考验。洗净一件衣服,只需要简单的技能和一点时间,奖励是能穿着干净的衣服去遇见喜欢的人。扫平小的考验,是不是很爽?而大的考验,虽然很难,却有更多奖励。精心设计一次约会,让心仪的人欢喜,奖励嘛,随机。或者是攻克一项难题,赢得职业上的信誉。或者是完成一个较大的项目,获得更多的奖金,有更充裕的安排。这与游戏非常类似。游戏里,刷小怪是悠闲毫无压力的,单挑BOSS或首领则热血沸腾,能赢得更多奖励和更佳的装备,有更好的后续游戏体验。生活本身就是一场大的游戏,如果愿意这么看的话。
直面编程和生活中的难题和挑战,善于设立合适的挑战和奖励,能收获更多工作和生活中的乐趣。既然无法改变生活的内容和本质,那就改变生活的实现方式。
若你惧怕挑战,那你必将不战而败;若你怀着常规的心思去应对,胜败参半,取决于运气;只有无惧挑战,胆识、智慧与勇气兼备的人才能胜出。这不是鸡汤,而是游戏规则衍生出来的客观规律。
PS:如何识别编程中的挑战?
- 如果是一个小的业务需求,那么是否可以打通端到端的模块及测试,类似需求能够更流畅高效地完成?
- 如果是多个相似小需求的实现,是否可以设计微框架,一致性地实现?
- 如果是一项新功能的实现,那么是否可以遵循开闭原则地更优雅地实现?
- 如果是一个实用工具程序,是否可以更友好高效安全地使用?
- 如果是一个模块的设计,那么是否可以抽离出优质的API,能够更好地复用产生附加价值?
- 如果是一项新业务的支持,那么是否可以将多个关联功能清晰地分离和组合一体化无缝设计?
- 如果是一次技术选型,那么是否可以明确地指出选型的依据与指标的关联?
- 如果是一个对特定要求很高的技术难题,那么毋庸置疑就是一项明显的挑战,比如数据同步的实时性。
- 如果是全新类型的部署,是否可以编写部署脚本,自动化安全流畅地执行?
- 如果是线上数据修复,是否可以抽离出一些公共小工具,组合这些小工具略加定制化就可以实现自动化修复?
身处芊芊大世界,如真似幻, 我只是对内心图景作画。