从小接触电脑,大学开始系统学习软件工程,工做了继续编码,编了这么多代码,我在思考我所作的一切的意义在哪里?也请码农兄弟们和我一块儿思考一下,咱们耕种的做物到底给别人,给社会,给咱们本身,有多大的贡献。有时候我在想咱们学了这么多东西,意义在哪里,是为了作什么?咱们学了组成原理,数据结构与算法,各类语言,设计模式,各类架构,软件工程,敏捷开发,项目管理,云计算,大数据等等,那么这些东西最终的目的又是为了作什么呢? 我以为目的就是作出好产品,好产品的前提是好程序,咱们学的大部分知识都是为了写出好的程序。 我以为好程序无非三点: 一、性能优秀,性能是程序很重要的一个特性,不管是办公软件、杀毒软件、游戏仍是web几乎全部的程序都是很关注性能的,没人喜欢慢吞吞的软件,咱们学的计算机原理,算法,数据结构,各类xx性能优化,各类xx调优,各类高性能xxx,各类xx编程艺术,各类架构,分布式也好,并行计算也好最终目的是什么?就是为了良好的性能,说白了就是为了程序效率 二、容易维护:程序不是一成不变的,维护性也很重要,什么代码整洁之道啊,程序员素养啊,大道至简啊,软件工程啊,设计模式,重构,REST,AOP,IOC,面向对象,UML,文档驱动开发,等等各类方法各类概念,其实目的无非就是让程序代码更优美,结构更合理,改起来更方便,之后更好维护。 三、鲁棒性好:做为好程序来说,BUG必定要少,这是必须的,对于用户的各类合理不合理操做都要有良好的应对方案,咱们学习各类测试技术、各类编程思想,安全技术,密码学、各类高可用、各类主从架构,各类备份技术等等都是为了让咱们的程序保证良好的运行状态,不管是用户的误操做仍是恶意攻击,不管是天灾仍是人祸咱们的程序都能从容面对。linux
作到上述3点我以为就是好程序了,固然,写好程序的前提是得会写程序,因此还有些基础知识是咱们必须学习的,好比各类语言啊,操做系统啊,计算机网络啊等等基础的东西,这些东西可让咱们能够开发程序,但不足以开发好的程序。这也是区分初级程序员和高级程序员及架构师的标准。
会写程序只能算是程序员或初级工程师,知足了好程序标准中的一点,就能够称为高级工程师了,好比你会写高性能的程序,确定没人说你是初级工程师了,再好比你写的程序没bug,确定也不是初级程序员能作到的。上述3点知足2个以上就能够达到架构师的水平了,好比有的架构师擅长高性能的架构,有的架构师擅长流程管理开发规范等。一般3点都知足的人事极少极少的,由于其实从成长路线角度讲,实际上是三条不一样的发展路线。 知足第一点的,也就是写出高性能程序的,一般是计算机科学与技术或相关专业的,这些人逻辑性好,数学算法功底好,计算机底层了解深入,偏向理论,他们的训练过程当中大多注重的是算法和理论,对于工程的概念有所淡化,一般他们习惯面向过程的开发,代码一般看起来没什么组织。 知足第二点的,一般是学软件工程的,这些人不爱数学,不精算法,不太接触理论,更关注的是实际工程开发,更擅长设计模式,开发流程,UML建模,数据建模,他们更关注的是语言和代码,何况他们没过高的智商写出不容易看懂的程序,所以他们写出的程序更加容易维护,可读性好。 知足第三点的,一般是偏测试或信息安全的,他们关注的是软件的漏洞,攻击和防范,这些人一般不写算法也不大规模开发程序,他们更多的是看别人代码,发现问题发现漏洞,和尝试别人的程序。 比如游戏中的法师、战士等职业都是不一样的发展方向,想都专精是有些难度的。也正是如此写出好程序一般不是一我的能够搞定的,须要团队的配合。因此谁都别说本身写的程序好,你的算法好效率高,也许代码就像一坨翔,他的代码优美无比各类设计模式运用自如,就是运行起来慢如牛,个人代码效率也高设计也好,就是bug一堆。。因此很难就一方面说谁的程序写的好。 那么有了好程序,是否是就等同于有了好产品呢,固然不是的,好程序只是好产品的前提,是必要不充分条件。你说你的产品一堆bug,运行的还慢,扩展性又很差你敢说你的产品是好产品?固然不能。那是否是好程序就是好产品呢,也不是,不少软件、产品程序很不错,bug少,运行快,代码也漂亮但仍是很失败,为何呢?由于它界面巨难看,用户体验很差,不易用,最致命的的是没有触到用户的痛点,没什么特点,没比别的产品有什么优点。 那什么产品才是好产品呢,我以为也有三点: 一、创新性,就是说这款产品是有特点的,能触摸用户痛点,帮用户解决之前不能解决的问题的,换句话说用户用过这款产品后就离不开了,变成生活的一部分了,这就是产品的核心竞争力,回顾一下全部成功的产品,windows,office,电子邮件,google,百度,淘宝,QQ等等,这些产品的成功就在于他的创新改变我人们的生活方式,改变的越大,产品就越成功,微软为何成功,他让世界上进入计算机时代,使世界发生了巨大的改变,linux也是成功的产品,但为何没有windows成功,就是他带来的影响没有windows大,他只改变了服务器市场。再看qq,10多年前,人们的通信仍是靠传呼机,手机,短信。qq改变了人们的通信方式,在中国的影响实在太巨大了,几乎每一个人都有至少一个qq号,包括中老年人,这就是他成功的地方。反过来想,若是你发现了哪些产品能够改变人们的生活,请立刻去作(别忘了叫上我),若是已经有人在作了,请当即加入他们或投资他们,若是已经有人作成了,那你只有诅咒他们了,就像如今骂腾讯那样。 二、充分理解用户,这也是成功产品不可缺乏的,必定要注重用户体验,作到这点其实很难,很是难,不少时候是你在臆想用户的需求,其实用户并不但愿是那样的,这里的学问就太多太多了,须要的就不光是计算机学科的知识了,心理学,艺术,哲学,数学等多个学科的综合知识才能达到充分理解用户,如今火热的大数据搞得轰轰烈烈的,目的是什么?就是充分理解用户,了解产品的状态,分析和挖掘用户的需求,因此要是挖掘不到用户心理所想,就别说是搞大数据的,充其量是搞报表统计什么的。其实也未必要搞什么大数据才能充分理解用户,理解用户途径不少,最直接的,最有效的我以为就是,本身就是用户,固然了,这也是有局限性的,毕竟你不表明大多数,不过在没那么大规模作分析前,你的产品首先要本身用着满意,顺手。刚才说qq的成功是改变了人们通信方式,有人会问,那聊天工具多了,为什么qq成功了呢,其实就是卡在了这点上,qq能充分理解用户。另外qq知足好程序的标准了,其余软件可能还到不了好程序阶段呢,有的慢,有的bug多。另外,充分理解了用户,你才知道用户须要什么,用户的习惯是什么,而后你的产品是要符合用户习惯的,同时也是要培养用户习惯的,和搞对象同样,磨合久了就离不开了,你的产品就成功了,你就有钱了。。。 三、好卖相:这个没必要多说,人们是比较感性的,对于美的追求是本能的,软件也不例外,好看的老是有优点的,没办法。固然是知足以前前提的了,由于中看不中用固然不行,可是一样好用的前提下确定用好看的啊,很正常。程序员
以上就是我对好程序和好产品的一些思考,循着这个轨迹,若是这些点都达到了的话,我以为没有不成功的理由,试想一下,一个能够改变生活,使生活更便利,操做体验良好,界面美观,没有bug,响应速度飞快,常常更新的产品,难道会没人用吗,不可能嘛,不成功绝对是命很差了。可是话说回来,想造出这样的产品又岂是朝夕之功,与君共勉吧。。web