上位机转算法感想

0.前言

不知不觉,自己工作已经快两年了。这段时间内一直做的是.Net上位机相关编码工作,因为工作强度也不算大,所以平时就会有时间去充电,深入去学习C#内部机理,去学习重构、设计模式、敏捷开发相关的知识。再结合公司的业务,学以致用,感觉这两年成长的很快,现在已经可以成为独当一面的专业人员了。

1.对上位机工作的总结

上位机,概要的说就是对下游设备进行数据监测,收集,保存,分析,上传等操作的软件。说简单也挺简单的,没有所谓的大数据、高并发之类的技术瓶颈,基本上懂一点编程的都会做,而且业界也没有一定的标准来评价你软件质量的好坏,因为一般都属于小众产品,用户面很窄,没有对比,就没有所谓的优劣。技术栈单一,技术水平全看个人,很多公司并没有完善的开发流程,更多的是想到啥就做啥,和同事们说一些重构,敏捷开发啊,可能觉得你是吃饱了撑着,没办法,行业如此。
所用到的技术一般都是基于.Net平台的,最多的应该是winform,其次是wpf,还有部门军工企业或者水平比较高的公司用的是Qt平台。现在互联网技术是日新月异,而上位机行业用的还是二十年前的老技术,说着便有了几丝世外桃源的味道了。我们公司用的最多的还是winform平台,对C#的基础知识有所掌握就行了,如果想更进一步提升自己的架构能力,还需要学习更多的面向对象编程的技术,C#最大的优点就是对面向对象支持的非常好,很多技术都是为了解耦而生。下面来简要讲一下我对C#一些特性的看法:
(1)事件:是委托的子集,先了解设计模式中的观察者模式,可以充分解耦观察者与被观察者的业务逻辑,实现发布-订阅模式。
(2)IEnumerable迭代器:刚开始对迭代器也是一头雾水,后来发现可真是个好东西,实现了复杂枚举模式的语法简化形式,只要继承了该接口的对象都可以使用foreach进行迭代处理。很多时候,将List等类抽象为IEnumerable可以极大地简化业务逻辑,也就是面向对象中的里氏替换原则。
(3)查询表达式:这里有风格类似于sql和lambda两种,刚开始我只是使用Lambda使用where,select操作,后来连接等更复杂的操作时使用sql风格的操作符更加简洁。有个业务是查询匹配两个列表中的数据,刚开始没有考虑使用连接,写的代码丑陋,而且有bug,使用的连接技术,代码变得优雅简洁。说到这里,sql数据的知识也要熟悉,这样再遇到数据查询的问题时可以有更广阔的思路。
(4)反射和特性:反射我的理解就是可以通过调用和对象相关的属性,方法字段来调用对象的方法,再运行时动态调用一个类型的成员,而不是编译时绑定,工厂模式,策略模式等都可以使用反射简化代码。特性是对对象成员的修饰,可以通过反射取得,可以在编码时赋予成员额外标志信息。
(5)异步:异步算法C#5.0最好用的一个特性了,它极大的简化了多线程交互的操作,在补阻塞主界面的情况下,实现主线程和后台线程更好的交互。async/await是其关键字。
学习方面:《C#6.0本质论》是基础书,常被案头,《深入理解C#》和《CLR4.0》(没看完)是深入了解.Net平台的必读之作,介绍了很多C#代码的底层机制。编码思想方面《重构》,不读不是程序员,另外《.Net单元测试的艺术》也是开启单元测试大门的佳作,鲍勃大叔的 《敏捷开发》也可以看看,不过不太好懂,我水平太拉了吧,《设计模式》也是提升结构思维的神作,不过也是有点难懂,第一个例子就差点劝退我,啃了两遍后收获还是很大的,至少命名会了不少。
技术发展:技术发展靠平时积累,要知道自己究竟想做一个什么样的人。我的想法就很简单,我就想做一个能写出好软件的程序员,得到客户和同事的满意。公司只能提供平台,不负责你的技术提升,有权利时就积极推动对发展有益的事情,没权利时就把自己手下的或做好。自己也是因为现有工作确实体现不出价值(业务重组,项目中断,人员流失),我也没有能力去改变这个事实,迫于无奈,才会选择去算法那边写写代码,后面更多的是算法软件相关的工作,算法研究应该做的相对少一点。

2.对算法工作的计划

和算法组同事还是几个月前做水质全光谱算法项目时认识的,之前类似的算法项目在公司之前写的一款算法建模软件上建立起来的,当时也是花了很大的人力物力,涉及到了很多数学相关的业务知识,不得不说,还是挺牛的。但是现有算法都是在Python平台上做的,算法人员大多数也都掌握了Python相关的知识。我们公司的这套基于.Net的体系很多新算法无法加入,软件开发和算法研究耦合过于紧密,算法过于依赖软件开发人员,不利于算法部门的发展。所以我就提出了C#调用Python脚本的方法进行数据预测,模型训练等功能。当时是采用脚本调用和tcp通讯两种方式交互的,后来觉得太麻烦,就在网上找了其它解决方案,发现rpc远程调用不要太方便,后面估计就一直用这个方案了。
公司算法这边也算法初创部门,和这位同事也算是聊得来,大家的很多想法都很像,所以就一起来算法组工作了,在工作中遇到几个能聊得来的人还是很难得的。我去的主要工作就是负责算法软件平台的构建,规划,还有提升大家算法调用的便利性。可能是先过去把我全光谱相关的工作做好,对数据采集,保存,模型重建的业务落地。用敏捷开发的思想就是,想自己能想的,等有具体业务需求时再作规划。
自己在最近一个月中可能会一直学习Python基础知识,scikit算法的调用,还有数据清洗等技术,后面可能还要学习PythonUI界面编写,不知道是使用PyQt,C#+Rpc+Python,还是python中的flask,这个后面再说吧。

3.未来如何

不敢说未来可期,只能说在有限的时间里做自己喜欢的事就够了。

你可能感兴趣的:(机器学习,python,python,c#)