从小接触电脑,大学开始系统学习软件工程,工作了继续编码,编了这么多代码,我在思考我所做的一切的意义在哪里?也请码农兄弟们和我一起思考一下,我们耕种的作物到底给别人,给社会,给我们自己,有多大的贡献。有时候我在想我们学了这么多东西,意义在哪里,是为了做什么?我们学了组成原理,数据结构与算法,各种语言,设计模式,各种架构,软件工程,敏捷开发,项目管理,云计算,大数据等等,那么这些东西最终的目的又是为了做什么呢? 我觉得目的就是做出好产品,好产品的前提是好程序,我们学的大部分知识都是为了写出好的程序。 我觉得好程序无非三点: 1、性能优秀,性能是程序很重要的一个特性,无论是办公软件、杀毒软件、游戏还是web几乎所有的程序都是很关注性能的,没人喜欢慢吞吞的软件,我们学的计算机原理,算法,数据结构,各种xx性能优化,各种xx调优,各种高性能xxx,各种xx编程艺术,各种架构,分布式也好,并行计算也好最终目的是什么?就是为了良好的性能,说白了就是为了程序效率 2、容易维护:程序不是一成不变的,维护性也很重要,什么代码整洁之道啊,程序员素养啊,大道至简啊,软件工程啊,设计模式,重构,REST,AOP,IOC,面向对象,UML,文档驱动开发,等等各种方法各种概念,其实目的无非就是让程序代码更优美,结构更合理,改起来更方便,以后更好维护。 3、鲁棒性好:作为好程序来讲,BUG一定要少,这是必须的,对于用户的各种合理不合理操作都要有良好的应对方案,我们学习各种测试技术、各种编程思想,安全技术,密码学、各种高可用、各种主从架构,各种备份技术等等都是为了让我们的程序保证良好的运行状态,不论是用户的误操作还是恶意攻击,无论是天灾还是人祸我们的程序都能从容面对。

做到上述3点我觉得就是好程序了,当然,写好程序的前提是得会写程序,所以还有些基础知识是我们必须学习的,比如各种语言啊,操作系统啊,计算机网络啊等等基础的东西,这些东西可以让我们可以开发程序,但不足以开发好的程序。这也是区分初级程序员和高级程序员及架构师的标准。

会写程序只能算是程序员或初级工程师,满足了好程序标准中的一点,就可以称为高级工程师了,比如你会写高性能的程序,肯定没人说你是初级工程师了,再比如你写的程序没bug,肯定也不是初级程序员能做到的。上述3点满足2个以上就可以达到架构师的水平了,比如有的架构师擅长高性能的架构,有的架构师擅长流程管理开发规范等。通常3点都满足的人事极少极少的,因为其实从成长路线角度讲,其实是三条不同的发展路线。 满足第一点的,也就是写出高性能程序的,通常是计算机科学与技术或相关专业的,这些人逻辑性好,数学算法功底好,计算机底层了解深刻,偏向理论,他们的训练过程中大多注重的是算法和理论,对于工程的概念有所淡化,通常他们习惯面向过程的开发,代码通常看起来没什么组织。 满足第二点的,通常是学软件工程的,这些人不爱数学,不精算法,不太接触理论,更关注的是实际工程开发,更擅长设计模式,开发流程,UML建模,数据建模,他们更关注的是语言和代码,况且他们没太高的智商写出不容易看懂的程序,因此他们写出的程序更加容易维护,可读性好。 满足第三点的,通常是偏测试或信息安全的,他们关注的是软件的漏洞,攻击和防范,这些人通常不写算法也不大规模开发程序,他们更多的是看别人代码,发现问题发现漏洞,和尝试别人的程序。 好比游戏中的法师、战士等职业都是不同的发展方向,想都专精是有些难度的。也正是如此写出好程序通常不是一个人可以搞定的,需要团队的配合。所以谁都别说自己写的程序好,你的算法好效率高,也许代码就像一坨翔,他的代码优美无比各种设计模式运用自如,就是运行起来慢如牛,我的代码效率也高设计也好,就是bug一堆。。所以很难就一方面说谁的程序写的好。 那么有了好程序,是不是就等同于有了好产品呢,当然不是的,好程序只是好产品的前提,是必要不充分条件。你说你的产品一堆bug,运行的还慢,扩展性又不好你敢说你的产品是好产品?当然不能。那是不是好程序就是好产品呢,也不是,很多软件、产品程序很不错,bug少,运行快,代码也漂亮但还是很失败,为什么呢?因为它界面巨难看,用户体验不好,不易用,最致命的的是没有触到用户的痛点,没什么特色,没比别的产品有什么优势。 那什么产品才是好产品呢,我觉得也有三点: 1、创新性,就是说这款产品是有特色的,能触摸用户痛点,帮用户解决以前不能解决的问题的,换句话说用户用过这款产品后就离不开了,变成生活的一部分了,这就是产品的核心竞争力,回顾一下所有成功的产品,windows,office,电子邮件,google,百度,淘宝,QQ等等,这些产品的成功就在于他的创新改变我人们的生活方式,改变的越大,产品就越成功,微软为什么成功,他让世界上进入计算机时代,使世界发生了巨大的改变,linux也是成功的产品,但为什么没有windows成功,就是他带来的影响没有windows大,他只改变了服务器市场。再看qq,10多年前,人们的通讯还是靠传呼机,手机,短信。qq改变了人们的通讯方式,在中国的影响实在太巨大了,几乎每个人都有至少一个qq号,包括中老年人,这就是他成功的地方。反过来想,如果你发现了哪些产品可以改变人们的生活,请马上去做(别忘了叫上我),如果已经有人在做了,请立即加入他们或投资他们,如果已经有人做成了,那你只有诅咒他们了,就像现在骂腾讯那样。 2、充分理解用户,这也是成功产品不可缺少的,一定要注重用户体验,做到这点其实很难,非常难,很多时候是你在臆想用户的需求,其实用户并不希望是那样的,这里的学问就太多太多了,需要的就不光是计算机学科的知识了,心理学,艺术,哲学,数学等多个学科的综合知识才能达到充分理解用户,现在火热的大数据搞得轰轰烈烈的,目的是什么?就是充分理解用户,了解产品的状态,分析和挖掘用户的需求,所以要是挖掘不到用户心理所想,就别说是搞大数据的,充其量是搞报表统计什么的。其实也未必要搞什么大数据才能充分理解用户,理解用户途径很多,最直接的,最有效的我觉得就是,自己就是用户,当然了,这也是有局限性的,毕竟你不代表大多数,不过在没那么大规模做分析前,你的产品首先要自己用着满意,顺手。刚才说qq的成功是改变了人们通讯方式,有人会问,那聊天工具多了,为何qq成功了呢,其实就是卡在了这点上,qq能充分理解用户。另外qq满足好程序的标准了,其他软件可能还到不了好程序阶段呢,有的慢,有的bug多。另外,充分理解了用户,你才知道用户需要什么,用户的习惯是什么,然后你的产品是要符合用户习惯的,同时也是要培养用户习惯的,和搞对象一样,磨合久了就离不开了,你的产品就成功了,你就有钱了。。。 3、好卖相:这个不必多说,人们是比较感性的,对于美的追求是本能的,软件也不例外,好看的总是有优势的,没办法。当然是满足之前前提的了,因为中看不中用当然不行,但是同样好用的前提下肯定用好看的啊,很正常。

以上就是我对好程序和好产品的一些思考,循着这个轨迹,如果这些点都达到了的话,我觉得没有不成功的理由,试想一下,一个可以改变生活,使生活更便利,操作体验良好,界面美观,没有bug,响应速度飞快,经常更新的产品,难道会没人用吗,不可能嘛,不成功绝对是命不好了。但是话说回来,想造出这样的产品又岂是朝夕之功,与君共勉吧。。

05-15 04:27