/--- date: 2015-01-11 18:20:39 +0800 categories: 扯淡 ---/

编码之渐入佳境

有人说,编程的世界就如同江湖武林,门派纷杂,往往让人自顾不暇。而大师的境界在于,他们拿根树枝往往同样可以轻松战胜敌手。年终了,想想自己这一年的闯荡,也确实有些感触,现基于自己当前的理解整理如下。

收获

武学的境界之一讲究的是融会贯通,李小龙也是在吸取了各门各派的精髓之后,开创了截拳道,我想编程之道亦是如此。如今各种语言层出不穷,时常会在网上看到一些牛逼公司综合采用了c++,php,python等语言,也会很好奇他们又是怎样将各种语言融合在一块来共同开发应用的。我虽然先后也接触了几种语言,比如c、java,shell、python,lisp,但学起来也都是各学各的,又何谈彼此间的联系。直到后来我接触到了定时脚本,再是有人在QQ群里问java如何传一些值给python运行。

我觉得这里面的核心即是服务。假如你想在一个项目中采用多种语言来开发应用,那么就需在该语言的基础上搭建服务,在这种服务的基础上提供接口即可,这样便可融合多种语言的优势来有效的开发应用。比如,我使用php生成了一些数据,然后需要交给python来进行处理,那么这里该怎么弄呢?一种简单的方法是写个python脚本,然后在php中需要的地方直接调用命令行执行该脚本即可。还有一种比较优雅的方法,就是搭建一个python的服务并提供相关的接口,然后在php中需要的地方调用该接口。

还有一种例子就是,假如我想在php中使用C语言该怎么办了?我现在还没有想到合理的解决方案(虽然我了解到可以使用C来拓展php,但这又仿佛偏离了问题的本质),这里留个悬念待以后解决。不过那天在qq群里有人就之前的问题这样总结:“python程序一直需要运行,java程序随时可能需要调用,这种明显就不能用命令行了,相当于进程间通讯,可以使用http服务,socket,甚至是文件”。这里面后半句是关键,但还是服务的思想,倒是可以思考下去,只是该怎么实现的问题。

确切的讲,我没有真正学过什么MVC,只是在工作中看见这样用,然后就用了。然后在机缘巧合之下,又了解到了restful,只是在经过工作的洗礼之后才感受到一个设计良好的api接口的魅力。我就想:除了api之外,网站的url是不是也可以这么来设计?采用这样的方式,将web浏览器看作一个软件生态环境(所谓的webapp),只要网站服务器那边代码逻辑设计良好,那么对于相同的url都可以复用到很多类似的业务场景。views层与controller和model层才能真正的分离,届时他们之间交互的信息可以只是规定格式(比如json)的数据而已。

这里面有一个概念,将web浏览器看作软件生态环境。我认为为什么不可以将浏览器看作与安卓、苹果以及win相同的一套软件生态系统?只不过浏览器端的软件在云端而已。这样看还有一个好处,软件的更新与用户无关了(本来就是这样嘛,用户只是使用者,没必要天天更新软件的新版本吧。说到这里,我就想到了一本书《黑客与画家》)。

其实,与上面概念相反,还有一种看法,将浏览器的功能做到软件里去,微信不就是这么干的嘛。

大学那会儿就学过一个等式:程序=算法+数据结构。现在想想那时真是too young。现在工作了一段时间后,开了眼界,也重新理解到了这个等式的含义。

算法相当于逻辑,小部分已为人们发掘出来(这里的小部分指的是书本里讲的各种算法,属于人们对于特定模式抽象出来的核心,比如排序),可以看做一种模式。对应于业务来说,一种逻辑(可能由其他元子逻辑组合而成)一旦确定下来,便可看做常量,固定不变。

数据结构即数据表示,说白了就是数据,比如用户数据,属于互联网玩的主要部分。这里面有一个问题,就是如何合理高效表示数据。为此,人们想出了各种各样的数据结构,比如数组,比如树。还有一点就是代码通用性的考量。对于一个设计良好的数据(结构)来讲,应当可以保证在代码逻辑不变的基础上,功能的增加只需在数据层动点手脚完成:下拉菜单数据中追加一条“详情页”的数据和对应的回调方法,即可完成新菜单项的添加工作。

工作中用到了bootstrap,在这之上,我发现去构建一个页面时,是那么的快速简单高效,从而也能让我更专注于后端的开发中来,也更快的提高了工作的效率。不然光是调整页面,就得花费不少功夫。当然,因为个人兴趣,私底下造着玩也不是不可以的。

2015

(好了,暂时就这么多吧)