程序员开发工作之算法和架构
开发三条路:算法、设计、系统。
系统,这条路,需要对文档和环境有足够兴趣,这块不适合我。算法和设计,我倒是很有兴趣。我希望能把算法和设计该怎么做好好想清楚。
算法
对算法有兴趣的朋友可以看这本书:《算法 第4版 Algorithms Fourth Edition》([美] Robert Sedgewick,[美]Kevin Wayne)【摘要 书评 试读】
算法,由难到易,有四件事可以做:
1、扩展现有算法的应用领域。
算法发展到今天,已经积累了相当多的存量。除了新创算法以外,目前最迫切的需求大概是需要一大批去研究现有算法,把这些算法的优点扩展到更多领域,优化那些一直被错误操作的地方。这座算法金矿,有两种生意可以做,一个创出有生产力的算法,一个帮更多人进来挖矿。
2、优化算法的空间。
对存储的读写,一直是计算过程最大的限制。如果可以优化算法的空间占用,更少的读写次数,在更小的读写空间上遍历,将有助于提升算法的速度。空间上的优化,造就时间上的同时优化。
3、优化算法的时间。
CPU/GPU等计算资源的提升,使得时间上的优化越来越没那么重要。但如果是从指数级优化成线性级,不管计算资源怎么改变,都会有明显的差别。随着大数据云的扩张,时间上的优化也会得到更多的重视。
4、理清算法的验证方法。
一个算法能不能用在当前环境,在未来一段应用时间,是否可以满足需求,这是对算法认识的最低要求。
架构
对架构有兴趣的朋友可以看这本书:《设计模式:可复用面向对象软件的基础》([美]Erich Gamma,[美]Richard Helm,[美]Ralph Johnson,等)【摘要 书评 试读】
设计,由难到易,有四件事可以做:
1、测试架构的稳定性、可维护性、可扩展性。
一个架构设计到最后,应该有一份详细的比较数据。清楚地显示在什么地方有提升,提升程度如何。这是架构选择的根据,而不是去靠跟别人讨论、八卦、打嘴仗。
2、叠加现有模块满足需求。
通过已有的基础模块和业务模块的叠加快速搭建需求变化所要求的服务。
3、理清模块间的依赖。
通过模块间依赖最小化的设计,将有助于提高模块的独立性,提高模块的复用程度。
4、清楚问题的充要条件。
什么是业务必需的,有哪些地方可以裁减,尽可能降低业务使用的难度,这是架构设计的基本要求。
算法设计上,我一片空白,只读了《算法》第4版200页的书。架构设计上,我非常新手,只初步熟悉VIPER、MVVM、MVCS、MVC,只看了《设计模式》的150页。这是我的算法设计和架构设计框架的第一版,希望在这方面有经验有想法的朋友可以不吝赐教,帮我完善好应该怎么去做这两块工作的框架,不胜感激。