C#上位机工作感想(2020.7.1-2021.4.4)

  • 前言
  • 一、2020年
  • 二、2021年
  • 总结

前言

不知不觉工作已九个月有余了,从刚来公司还是个啥也不太懂得小菜鸟,现在已经是负责两个项目的大菜鸟啦。这大半年的时间内,师傅教给了我很多业务上的知识,自己也在工作和闲暇时间里学到了很多编程知识。对C#语言的底层实现和一些简单设计模式的应用都有了更深的理解。

一、2020年

先来说说项目路线吧,去年七月份刚来公司的时候,接手的是一个大体功能已经编写结束,还未开始进行联调的一个初版软件。大概花了一周多的时间熟悉代码。这个软件比研究生帮老师做的软件更复杂,原有代码各模块之间耦合度比较高,模块代码量大,初看也是很难抓到重点的,后来在调试过程中慢慢得找到了软件的核心逻辑,也就是上位机的通用做法,一个后台线程监控下位机数据状态,根据状态的不同进行相应事件的触发。当时也在看马丁-福勒写的《重构》,利用一些“简单”的变量改名,函数精简,模块抽象操作将原来的主模块划分成几个小模块,调试难度降低,代码读起来也更加流畅。
有个功能是根据不同的枚举量获取不同的字符,原始代码是利用大量的if else语句进行判断,每当新加一个枚举量的时候,就要修改这个if else的判断,很多bug就是这么来的。开始想利用键值对,虽然if else是没有了,但还是避免不了新添加数据时修改键值对。然后看到了C#特性这个语法知识,就学着利用反射特性获取每个枚举量的特性修饰值,精简了几十行代码。
第一个项目大概调试了半年多的时间,很多需求和功能都是在不断摸索,重做了好几次,后来学者运用xml技术将很多功能做成可配置的,方便后面不同用户的需求。
大概在八月份的时候感觉很迷茫,因为公司人都重业务,轻代码,导致自己不知道如何写好代码,如何优化前任代码。问了领导,说的也是云里雾里。后来网上买了几本书,算是很好的解答了我的问题。买的书有《代码整洁之道》、《重构》、《大话设计模式》还有一本国人写的(不太好,就没看了)。把这三本书先大致看了一遍,学到了很多代码设计的表面知识,没办法,先学样子吧。《代码整洁之道》作者对待一些观点比较绝对,我觉得很多东西不用全照着作者所说的来。《重构》这本书写的非常好,对我的代码优化能力有很大帮助。作者举得例子也是深入浅出,让人真正学到了重构的一些技巧。《大话设计模式》主要是因为我看不懂设计模式这本书,就先看设计模式入门书了。这本书写的很简单,很多设计模式举得例子都是让人一目了然的,配合作者风趣的讲解,让人很轻松的就掌握了设计模式基础的知识。还看了《编程的一百零一中方法》,这本书是日本人写的,没有任何示例,是站在代码设计思想的层面写的,前期看了,准备最近一段时间再啃一遍。
在C#学习方面,也是买了《深入理解C#》这本书,这个作者写的内容也是特别好,值得研读。当时学习异步编程是还买了《C#并发编程经典实例》这本薄薄的书,简单看了一遍,很多涉及的是服务器方面的知识,等以后再研读吧。
界面设计方面,买了刘铁猛的《深入浅出wpf》这本书。是从wpf的原理层面写这本书的,虽然没有大量的项目示例,当时每章的内容都是很好的,能让你知其然知其所以然。很多wpf的设计思想可以用在winform的项目中,优化现有代码。

二、2021年

21年开始,工作也有两个月了。从去年11月份便开始承担两个项目的开发任务了,这几个月还是相当忙的。两款的仪器很多地方相似,但又不完全相同。之前分离出来的很多小模块都得到重用,缩短了大量的开发时间。两款软件的业务逻辑层原来是在一个项目中的,我在第调试过程中将第二个软件代码逐渐分离出来,新建一个项目。准备将两部分代码完全分离,后来发现难度太大,自身水平有限,就分离了大部分,好在最后二者的相互之间也没太多干扰。
最近几个月也是一直在加班。写了很多工具小模块,之前看项目配置DataGridView表格时,都是通过粘贴复制修改后将每一个需要显示的属性成员进行绑定的。于是运用反射技术,提取数据成员,然后存储在xml文件中,最后通过修改xml文件来进行DataGridView列的修改操作。也是干掉了上百行的配置代码,代码又优雅了有木有?
接着发现上位机很多调试都需要下位机配合,再一研究,好像也就数据监控那个通讯指令触发的,那我直接进行这个指令模拟不就完事了吗。这样我又开发了数据模拟模块,可以随意设定需要的数据量,极大地提高了调试了效率,减少了很多bug。这个也是在《重构》上学的——完善的测试才是顺利重构的基础。对上一个软件也设计了数据模拟模块,这样就可以对代码进行愉快的重构啦。
这两天在做Excel导出的一个通用模块,原有开发者利用的时offiice自带的模块,那速度,很感人啊,一个报表十几秒。为了提升客户的使用感受,我尝试使用NPOI对原有模块进行扩展,现在基本已经实现差不多了,顺便也是学习了NPOI。速度提升很明显,缩短至一两秒。
还有最近一直在学习wpf和算法的一些知识,算法这里推荐《算法小抄》这本书。为啥学习算法呢,一方面觉得自己算法能力实在太弱,另一方面当是为了跑路做准备啊。想趁着年轻多尝试几次机会,做一做Qt或者Net Core啊,以后的就业面也会更宽一点。

总结

其实现在挺迷茫的,网上都是大把的Java,Python,前端的一些工作机会,涉及到.Net的确实很少,可能这就是国内的氛围吧,无脑跟风。我是不太想去互联网,但是比较向往互联网很多的先进技术。虽然先进的技术都是来自老技术,但是没见识过怎能知道到底啥样呢。以我现在的工作经历来看,基本很难进一些互联网大厂,技术栈差的太多了。所以可以找一个中和的,做一做工业互联网(mes等),也算是用上了现有的经验,同时也是对现有技术栈的一个扩展。另外,也可以尝试做一做Qt上位机,毕竟人家是跨平台,在嵌入式里也是很吃得开的。最后我也想通了,既然选择了做自动化软件这条路,就应该走下去。写好自己现有的,在现有基础上不断拓展,多思考代码架构,多看书,总有一天我会成为自己的大神的。

C#上位机工作感想1(2020.7.1-2021.4.4)相关推荐

  1. 小米大佬分享8年工控上位机工作经历

    本文来源于我的好友何忠耀,现任职于深圳小米.前期阳哥做过多期C#方面的学习视频,并免费分享给了群员.在阳哥的感染和带领下,何大佬也将自己8年的工控行业工作经历总结汇总,无私奉献给了群友.好的东西要分享 ...

  2. chroma负载机恒压工作原理_双轴撕碎机结构有哪些部分组成?双轴撕碎机工作原理...

    双轴撕碎机的破碎原理是在两个刀轴上都装有交错的刀片,两个刀轴在相向旋转的过程中通过刀刃的剪切.以及刀齿的撕裂来实现破碎.主剪切方式为相邻动刀刀刃口的剪切作用,副剪切方式为动刀刀齿的撕裂作用.在设备组成 ...

  3. 防爆真空上料机工作原理是什么?

    防爆真空上料机说白了除了具有真空上料输送作用,还具备防爆作用.烟尘生产车间的烟尘物料在触碰可燃性气体.蒸气及气体将会产生发生爆炸,一般煤碳.原油.化工厂.纺织品.粮油加工等行业的生产制造.生产加工.贮 ...

  4. 银行ATM机工作流程

    银行ATM机工作流程 # 定义方法business(n),n为卡号下标 def business(n):times[card[card.index(card_No)]] = 3 # 将当前卡号的密码输 ...

  5. 不锈钢真空脱气机工作原理介绍

    不锈钢真空脱气机工作原理介绍: 不锈钢真空脱气机简介 杭州励进系列的真空脱气机是通过物理减压的原理,将系统中的压力水释放到真空状态,达到分离空气作用.其排气效果好,解决了暖通空调水系统中的气体问题,从 ...

  6. Smt贴片机工作流程

    Smt贴片机工作流程 贴片机工作流程大致包含以下几个流程:进板pcb板固定-吸嘴选择-feeder选择–元件拾取–元件检测–位移定位–元件放置贴装-出板 待贴装的pcb板进入贴片机工作区并固定在预定的 ...

  7. 2020春招 / 2021秋招阿里、腾讯、字节、快手、美团 JAVA 开发岗面试高频问题总结

    2020春招 / 2021秋招阿里.腾讯.字节.快手.美团 JAVA 开发岗面试高频问题总结 2.1 进程和线程的区别? 2.2 进程的调度算法有哪些?(主要) 2.3 常用 IO 模型? 2.4 s ...

  8. 总结自己的2020,展望2021

    文章目录 一.工作 2020年全职工作了1年 从1到多,在工作中寻找方法,承担更多的责任 完成职级晋升 二.成为博客专家 三.生活 旅行 养了一年多的柯基 情感 2021年的falg 一.工作 202 ...

  9. 回忆展望 | 再见2020,加油2021!

    ​看了就要关注我,喵呜~ 告别2020,2021越来越好! 时光荏苒,岁月如梭.还记得这是以前写作文时的常用开头,用到今天这个地方一点也为过,2020年,确实过得很快,唰的一下子就过去了.今天已经是2 ...

  10. 为什么2020年到2021年A股可能有牛市?

    ​ 为什么2020年到2021年A股可能有牛市? 要知道每一次牛市它背后的基础逻辑都不一样. 首先我门说一下2006年到2007年牛市从998点涨到了6124点的基础逻辑. 这个大牛市的基础是当时的利 ...

最新文章

  1. 香港中文大学Center for Gut Microbiota Research招聘启事
  2. 在python3.3后urllib2已经不能再用,只能用urllib.request来代替
  3. (转)Spring读书笔记-----Spring的Bean之Bean的基本概念
  4. 光标定位在文本框的末尾
  5. dlink打印服务器重置,单口打印服务器 D-Link DP-302简析
  6. python 杂记(二)
  7. 基于PageRank的作弊检测算法
  8. MySQL服务器硬件和操作系统调节
  9. Linux 网络编程详解四(流协议与粘包)
  10. Python中出现:RunTimeError:implement_array_function method already has a docstring.异常解决
  11. ue4 怎么传递变量到另一个蓝图_[UE4蓝图]虚幻4中实现简易天气系统(三)—— 受风力影响的Cascade雨水粒子...
  12. 基于CentOS7,MySQL5.7的同步/半同步复制实现
  13. Android 系统(72)---Android系统增加字体库及修改系统默认字体
  14. 基于javaweb+jsp+mysql的美容院管理系统
  15. springboot+mybatis+redis实现分布式缓存
  16. 单片机广告灯实验总结_关于单片机的一些小实验lowbar;01点亮一个灯
  17. 数据库报duplicate XXX entry for key primary错误的可能原因以及解决方法
  18. Server:基本的服务器
  19. python计算方位角_python实现两个经纬度点之间的距离和方位角的方法
  20. appium driver参数及命令行参数

热门文章

  1. do sb suggest to_suggest_suggest to do 和 suggest doing 的区别
  2. Js实现炫酷随机抽人
  3. pymysql的使用
  4. 最佳和最快的游戏 DNS 服务器
  5. 已安装flash插件,chrome仍提示未安装的解决方法
  6. 【人工智能】一文读懂人脸识别技术
  7. 创客使用Fusion 360 - 制作模型
  8. 基于netvibes源码实现类似igoogle的个性化主页
  9. postman怎么设置中文
  10. 腾讯与清华大学物理系签署合作备忘录,探索材料计算新领域