第二篇:我作为一位开发人员,确实在走弯路,你也有可能喔!

        2019年,我接了一个商机,是迁拆办的一个项目,要做合同收款管理。我就给客户

定制做了一个BS网站管理系统。当然,该客户不是我的直接客户,是其他合作代理商的客户。

说句丢脸的话,从我做开发开始,这10年间,从来没有完整独立做过一个比较复杂的BS网站

项目,而且还能得到自己认可满意的。这个问题值得深思,这是为什么呢?因为网站开发,

其实也是很坑人的,对于编程开发者,最坑的一件事情,就是不会前台的网页美工设计。没有

美工设计人员配合,首先,网站系统的界面,自己就做不出来。然后,没有一个可接受的网站

页面,开发者代码写在哪里?所以,回过头来说,我先前制作的《零基础C#网站实战教程》,

帮助开发人员暂时屏蔽掉网页设计的障碍,能够独立完成一套效果优秀的网站系统开发学习。

 

        这个项目工期是45天,我愣是做了3个月。从无到有,去做一个项目,时间周期就是极大的

风险。时间周期长也代表服务质量没保障,也代表自己的收入也很难得到保障。

 

         以这个项目为原型,我后面用这个项目做了一套ASP.NET《零基础C#网站实战教程》的

新手教程。我对这套系统模板还是比较满意,就决定在项目中继续完善优化这套系统模板。

个时候,还没有研发软件产品的想法。

 

        2020年,也许是下半年,我心里才有了打造一款开源ERP的想法和雏形。然后,开始打算

了解开源协议的事情。真正去查开源协议,已经是很年底了,我才去专门查了下开源协议。最

终选择了MIT协议。著名的JQuery库,就是选用MIT协议。这个协议的开放程度,允许他人把我

这套产品拿去做商用,也不用担心风险。

 

        在选择把产品做成开源,还是商业运作上,这种选择,真的就是在做一道选择题。而且,

还会有其他人的看法想法,不断对你进行影响。团队内部、团队外部,都是大家的习惯就是

赚钱,要赚钱就是讲商用。俗话讲,好东西要拿来卖钱,这就是大部分人的思维模式。

 

        除了内外部的声音,还有一个更重要的选择题,是内心的灵魂拷问!何为灵魂拷贝呢?

林枫山,你扪心自问,你真的是毫无私心的利他?还是在利他中携带私心?还是为了利益,

在做虚假的利他?拷问完了以后,做出选择,就是MIT协议,希望这款产品,是全人类共同的

财富,而不是属于某个人。

 

        话唠了这么久,其实,我还没有提到正题。这些就当做我在为引出观点,做一番铺垫吧。

然后,我就开始继续在项目中,不断打磨这款产品。重新设计框架,持续不断地优化现有代

码,设计更多功能,完善更多的开发功能。首先是Model层,我没有使用自动生成Model的工

具,手动建很麻烦,有打算自己开发一个自动生成Model功能。后面考虑项目的时间紧迫性,

预留了功能点,暂时搁置。

 

        我在前面制作教程时,已经感受到每个DAL层的函数命名不同,重复工作量很大。我在这次

最近的项目中,进行DAL层的函数重命名优化。比如原来添加用户,我会命名为AddUser,现在

所有的添加操作,统一叫做AddRecord。

 

         这些项目升级优化的经验,更加高级的经验,我会放在《开源项目开发手札》系列里面,感

兴趣的朋友,可以自行去下载学习,学习资料也都在该博客的某篇博文上。这个《开源项目开发

手札》,其实也是今天我刚设定的,我怕一些开发过程中,优秀的灵感和设计,如果不及时记录

出来,时间久了就忘失掉。总结出来,虽然会花费一定的时间,但是共享出来,也能对他人有所

帮助。毕竟,严格意义上来讲,我这是大型开源项目的开发经验。可遇不可求嘛!

 

        后面,我把Model层的数据类型,也有了一次神奇的优化,本来数据类型,按常理来讲,可能

有整型、精度型、字符串型。实际开发过程中,我发现,统一改为String类型,才是对开发最友好的,

非常能够大量减少工作量。另外,这里也顺便补充一个知识点,我在制作《零基础C#网站实战教程》

时,没有完全想明白的一个知识点,但是,最近我完全想明白了:关于项目中,我为什么把aspx和

cs文件要分开放置?这个本来,我是看到别人这么做,就被我偷师走了。但是,这样做有何意义,

当时其实也没搞清楚,自己琢磨很久,也没有琢磨到满意的答案。现在是彻底想通透明白了,假如你

在多人协作开发中,aspx页面和cs页面的分开,有助于开发人员和网页美工的分工。网页美工只能看

aspx页面,cs页面这种后台代码是对网页美工完全屏蔽的。有助于减少网页美工面对项目的复杂度。

 

        有小细节要精益求精,也有大的问题要去面对。比如,权限管理怎么设计,模块功能可配置化要

怎么设计?表单设计器和审批流如何实现?是自主研发,还是选一个开源组件整合进来?引入组件是

选择开源组件还是商业授权组件?

 

        随着,开发的深入,将要面对和解决的技术问题越来越多。那假如我不开发这个产品呢,按照

某些人说,直接使用某个现成开源的产品,省事省力。也可以按项目为导向,把合同规定范围的功能

开发出来,不要把项目需求做复杂化掉。

 

        我想说的是,在做这个产品前,我大大小小做了十多年的开发,做了十多年的项目。从来没有

经历开发这款产品,所带来的技术思考和技术突破会如此之多,而且在项目型开发都遇不到的问题。

 

        我现在引出本篇的正题,平常我们开发,参与项目也不少。但是,技术提升还是蛮难的。开发

技术的提升很有意思,越是往后,为了提升一点点,要付出的努力是十几倍,甚至几十倍。但是,

技术员,这个时候已经不想进取了。所以,很多技术员技术是停留的,原地踏地,或者非常缓慢进步

一点点。想要升阶很难。特别现在开发分工越来越细化,每个人越来越像螺丝钉,想要独立完成全部

工作太难了。新手学习,这个时候也挺悲催的。进入一家公司,直接被塞入当螺丝钉,学会的也是残

缺的技术。不当螺丝钉,自己就发挥不出来。我经历过的工作经历,就面临这个问题,大量的新人也

是面对这个问题。

 

        优秀的人总是少部分。相当大一部分人,这些人只能在小公司,做小项目,得不到足够的锻炼,

也接触不到大项目的技术,获得不了大项目的技术经验。如果是技术架构,那更是少数人参与的游戏。

进到大公司的,至少是机会多了很多,如果分工很细化的情况下,有时候也很难提升到很核心技术员

的水平。但是,至少大公司的技术员机会多一些,进取比较容易,进取心也比较强。

 

        尤其像林枫山这种学历不入流,开发水平也不入流的,不要说大公司,稍微有点实力的公司,

都看不上我。结果造成,我每次找工作很悲催,每次去厦门软件园找工作应聘,总是失败的。上人才网

投递简历的,要么都不打电话通知面试,要么都是面试失败。只有那些你不投递的,反而打电话通知

面试,还能成功通过。但是,公司实力大多也是一般般。至于猎头,那就不要讲了,高攀不起,人家

眼中根本没有我这号人物。

 

        很多像我这种混的很差的小技术员,也没实力进大公司,因为我自己,其实也没有进入软件行业

的大公司,所以,具体不清楚怎么回事,只能意念揣测,也许也可能就那样子。我觉得很多开发技术

员十有八九都是妥妥的在走弯路。弯路在哪:为了引出这个,我讲了一大堆铺垫文字。没有平台,你

难成功在技术上突破和逆袭。但是,大公司,或者像样的平台,你也没有入场券,伯乐不认识你这匹

千里马。这个时候怎么办?很多人都有一种怀才不遇的痛楚和无奈。我曾经也是怀才不遇,闷闷不乐。

我们要找到解决办法,突破现状。答案来了,你要自我创造,自己创造一个能够让自己逐步成长的平台。

作为技术员成长路线,你有两种选择,第一种你要自己创造研发一个产品,在这个产品上,不断深入去

完善扩展他。至于你的产品,有没有实际用处,这个请结合每个人自己的工作和事业经历吧。但是,无论

如何,请你一定要有产品底蕴和积累。

 

        你不要跟我讲,说你做了很多项目,你有很多项目的源代码。告诉你,我也有,不一定比你少。但是,

我的产品底蕴和积累,几乎为零!!!这很糟糕,知道吗!当我上班时,我总感觉我积累的还是不够。即便,

金蝶从业五年,我还觉得怎么积累还是不够,每次面对项目,都是重新开发,不一样的开发,永远对项目疲

于奔命。当我选择要创业的时候,我才发现真正的问题在哪里?我的产品积累和底蕴几乎为零。面对客户,

面对项目,我只能从零开始构建自己的产品积累和底蕴。

 

         有些人,可能不理解什么叫产品底蕴。我稍微解释下,我在2019年,斗胆接下这个拆迁办的项目,以

这个项目为原型,等于我有了一个基本的后台管理系统。然后,我在2020年,接下了一个需要后台管理系统,

加上手机端开发的项目。后面,以这个有手机端开发项目为基础,作为跳板。我又接下更复杂的项目。这整

个过程,我是从零构建自己的产品积累和底蕴,当然项目做起来就很累。也感谢,客户的支持,没有太为难我!

 

        然后,走到今天,开源ERP产品的雏形和思路出来了。以后,这款产品将会利益很多的企业客户。我呢,我是

这款产品的技术架构师,产品在成长,我也在成长。基础的财务、供应链、生产、OA、电商、PLM、MES、

CRM、SRM、移动端、BI报表、人工智能,产品的帝国在扩张,厉害又高深的技术,在我手中孵化出来。技术

改变世界,不是一句口号!

 

        当然,也有第二种选择,选定一个大型开源项目,深入研发,把他的内核研究吃透,做到了如指掌。然后,

自己也有能力做出一个更好的框架内核出来。这个你的起手式,至于将来你能发展怎么样,那说实话,看个人努力、

运气和机遇!

 

        如果你没有这种思维和实践,开发技术上,你将很难走远。特别,我们很多走入金蝶开发的朋友,我说实话,

技术水平都是比较糟糕的,也很难走出专业的开发路线出来。我在上面讲了那么大段,自己的开发经验,只是想

说明很多的技术深入应用,都是在做产品以后才遇到,并突破。平常如果只是做做项目,都很难遇到。

        

        我最近在把表单页面中,单页签的页面,改进为多页签的方式,发到我的工作团队群聊中。有位小伙伴说:

他们现在做的项目,跟林枫山在做的这个项目,有点很相似的过程。他们开发一个教育类项目,是产品研发,

投入3个研发人员。我就稍微判断下,询问他:你只是其中一名开发人员,不是项目主要负责人。他点头说是。

 

        那你们知道我内心是怎么想的呢?我是这样想的,那糟糕了,你就是再做五年项目,估计都很难突破,或者

很难有较大进步。哪怕花点心思,参与到林枫山这个开源项目,都能学到更多。

 

        我是没有说出来,和人交谈,不要总是去否定他人,要多肯定别人。即便认为对方的思路做法是有问题,

因为人的特性是,别人说他不好,他会觉得不舒服,不高兴,就会远离你。与人打交道,不要总说自己的好,

老找别人的问题。别人的道路也都很好,要这样的思维去走。因此,我是询问到信息,心里有判断以后,也

没有多说什么。

 

        当我在设计一款大型ERP产品时,既要精通掌握ERP领域的技术原理、公式算法,还要面对财务领域,

更要精通软件开发技术,对软件进行架构设计。有时候,哪怕只是一些微小的细节,在项目型开发,和产品

研发,所做的选择是不一样,思维也不同。比如,以常见的分类。分类的叫法有很多种:分类、类别、分组、

组别、分栏、栏目等。项目型开发中,我就可以这样处理,资讯这边叫资讯分类,或资讯栏目,英文名叫Class。

供应链这边,物料的分类,我可以叫物料分组,英文名是Group。

 

        在研发软件产品上,由于用到分类的场景非常多,而且不仅仅只是这一个概念,遇到的概念成千上万,

如果每个概念都有不同的版本和叫法,极易在软件产品上引起一个问题,客户在使用这款产品时,会产生一定

的混乱感。关于分类,这个问题,最终我决定,统一叫分组。资讯分组、物料分组,客户分组等,英文名统一

叫Group。

 

        再比如常见的单据状态,平常使用是随心所欲。在产品研发上,要做到每个表单页面的单据状态,都有统

一的规范可遵循。最终,我做了总结有单据状态、禁用状态、确认状态、审核状态、作废状态、发布状态、上

架状态。每个状态有哪些枚举值,全部做了明确的规定。

 

        项目型开发一般是针对某些客户需求进行开发。更偏向局部性较强,需要解决一时的问题。产品研发,更

偏重规范、标准、共性、行业等。还有软硬件的考虑、版本迭代、封装、运维等。更重要的是产品会成长,技术

员也必须成长,面对的挑战和机遇,是远远大于项目型开发。

 

        以后我在产品上要应用人工智能的技术,我势必会深入研究人工智能技术,并应用到产品上。还有大系统如

何敏捷开发,缓存技术,数据量大的情况,如何做数据分割优化,数据溯源等等设计。

 

         很多技术员,项目做的很多,产品积累一塌糊涂,几乎没有任何积累。技术底蕴也不行,因为你缺乏在一个

平台深入开发挖掘的经验和技术。这种弯路有时候一走就是十年八年。我是今年开发ERP产品,才意识到自己之

前的十年开发全部走弯路了!代价是十年喔!你打算弯路走多少年?

 

        

posted on 2021-02-19 04:47  林枫山  阅读(538)  评论(1编辑  收藏  举报