十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)
前言
本文主要介绍我开发的几款软件产品,大概介绍一下功能。可以让读者了解本人的开发能力,所擅长的方面。有相关开发需求可以联系作者。
本人开发软件多年,从事的行业也多种多样;自然接触了不同的业务,开发了各类软件产品。工作的主线一直是windows下C/S模式软件开发; 最近也开始学习asp.net core。
软件开发和读书一样,先由厚到薄,再有薄到厚。纯粹的软件理论总是很空洞,让人无法适从。如果没有一定的理论做指导,就像在茫茫大海中航行,很容易迷失方向。理论和实践要不断的互动,相互验证,不断的领悟。通过多年的软件开发,不断的学习总结,本人在理论和实践上都有很大的突破,开发各类软件更加得心应手。
软件开发需要多种技能,每个人都不可能成为全才,好像也没必要。比较现实的还是“一专多能”。要有自己的优势,同时知识面也不要太窄。国内软件开发大部分是“游击战”,主力软件开发人员很少,开发过程没有固定的章法。软件的成败很大程度上依赖软件开发人员个人能力,个人英雄主义的色彩比较浓。这种开发模式也是有好处的,在某种程度上能减少开发成本。小的软件产品多人开发,并不能提高效率;如果开发人员能力差别大,沟通能力不强,更易造成开发延期。
程序功能点及实现方案
一个好的软件产品体现在各个方面,不能有任何”短板“。一款产品可以分解为多个功能的组合。下面列出软件开发相关的功能点,以及本人应对方案。
1 通信(Socket): TCP、UDP通信已成为业界标准。UDP通信处理起来较为简单,它是面向消息的协议;你发送100个字节的数据,对方也会收到100个字节,而不会把100字节分成两个包来发送。TCP通信是面向数据流的,涉及粘包的处理;在Windows下,实现TCP服务器效率最高的方式就是采用IOCP(完成端口)。实现一个稳定高效的TCP服务器难度非常大。本人根据自己的开发经营,封装了一套非常易于开发的网络库(由c++和c#两个版本),该库完全根据windows API编写,达到了易用性和处理效率的统一。在此库的基础上,又开发了一套应用层协议,开发人员不再用关心底层处理细节,大大提高了工作效率。
2 界面:开发效率最高的就是WPF;虽然有人对WPF有些诟病,认为WPF的一些概念晦涩难解,华而不实。我刚开始接触WPF也经历了几个月的迷茫期。因工作的需要,先后利用WPF开发了多款产品;对WPF有了全面的了解,才理解了微软如此设计WPF的苦衷。WPF设计的目标是实现快速界面开发,同时能满足各个方面的灵活需求。而一些中间件DevExpress,是无法达到WPF的灵活性的。我也用vc++、Winform开发过多款产品;现在,除非特别需求,我都采用WPF开发界面。
3 数据库: 首选mysql。几年前,推荐使用sql server。不过,mysql最近几年发展很快,功能也很强,也易于使用;前端工具workbench界面也很友好;我认为方便性已不输于sql server。c# EF模式使数据库开发难度大大降低,但是我不推荐使用该模式。这种模式封装的太深,对后期处理和优化带来很大的麻烦。本人对数据库连接,封装了一些轻量级的类,能减轻开发的工作量。
4 视频: H264是现在主流压缩格式,解码采用ffmpeg。本人对ffmpeg进一步封装,以便于c#调用。视频解码后,转换为bitmap图片,每秒按需要的帧数贴图,就是视频。如果需要对视频进一步处理,比如显示文字,可以用GDI+。
5 音频: 音频处理分为播放和录音两类。对这些处理,微软提供了一些列函数,称之为Waveform Functions。本人对这些函数做了进一步封装,可以很方便的实现播放和录音功能。
6 GIS:这里所说GIS主要是应用,而不是制作。可以采用GMap控件,该控件可用在winform或wpf项目中。该控件的功能可能不是非常强大,但是扩展性很强。可以方便的实现标注、轨迹回放、测距等操作,并且这些操作都是可以定制的。
7 图像处理:采用WPF或winform。winform就是采用GDI+绘图,GDI+是一种比较老的技术,无法利用新的显卡性能;当有大量绘图操作时,不停的重绘,会导致性能降低。WPF绘图是“保持型”的,只需要绘制一次就行,当图片被遮挡,也不需要重绘。对于图像旋转、抠图、半透明能特效,采用WPF都可以很方便的实现。
本人开发的程序一览
1 WPF开发的CAD文件处理程序
涉及CAD文件的读取分析,大量绘图操作。
2 移动信令采集解析
对移动通信GSM信令解析,消息量非常大,高峰每秒30万个数据包,带宽占用500M。
3 视频监控平台
符合国标JT1076标准的视频平台,包括RTSP视频服务器和视频播放客户端;匀由本人独立开发。
4 对讲监控管理平台
实现对对讲机的监控,通过电脑与对讲机通话、管理。
5 WinForm版图像编辑小程序(实现图像拖动、缩放、旋转、抠图)
后记:一个人成长为专业的开发人员不是一帆风顺的,经历的各种磨难只有自己才能体会。对本人的开发经验和开发产品的总结,不是为了”炫耀“。软件开发本身就是一种技巧性非常强的工作;专业的人做专业的事,效率是最高的。经过多年的开发积累,掌握了很多开发技巧,但如果仅仅为了工作,大部分经验就会付之高阁。所以,在这里做一下宣传,希望有相关开发需求者联系我。在工作之余,做些兼职开发;本人会保证软件质量、易用性,让客户放心、满意;发挥自己长处,解决你的问题,各取所需!QQ:13712486。
十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)的更多相关文章
- 学习笔记之三十年软件开发之路 - Things I Learnt The Hard Way (in 30 Years of Software Development)
三十年软件开发之路 https://mp.weixin.qq.com/s/EgN-9bIHonRid1DM0csQDw https://blog.juliobiason.net/thoughts/th ...
- day16(软件开发目录规范)
模块的使用01 模块的循环导入问题 解决方案一: 把循环导入的语句放到名字定义的后面 解决方案二: 将循环导入语句放到函数内(先定义确定名称空间)02 区分python文件的两种用途 #当文件被执行时 ...
- 选择如何的系统更能适合App软件开发人员?
手机这个词早已经同吃喝玩乐一样.成为了人们生活中的必备元素. 尤其是iPhone一炮走红之后,不但手机世界发生了巨大变化,整个科技产业似乎都格局性的改变.直至今日,手机市场的竞争更是日趋白炽化,这就给 ...
- python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)
1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...
- C#入门到精通系列课程——第1章软件开发及C#简介
◆本章内容 (1)了解软件 (2)软件开发相关概念 (3)认识.NET Framework (4)C#语言 (5)Visual Studio 2017 ◆本章简述 软件在现代人们的日常生活中随处可见, ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(四)
本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...
- TesterHome创始人思寒:如何从手工测试进阶自动化测试?十余年经验分享
做测试十多年,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着行业的竞争加剧,互 ...
- SaaS系列介绍之十四: SaaS软件开发分析
1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力 ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
随机推荐
- 三 分析easyswoole源码(启动服务&TableManager,略提及Cache工具的原理)
前文连接,讲了es是如何启动swoole服务的. 里面有一个工具类TableManager.这个类为了处理进程间数据共享.是对swoole_table的一层封装swoole_table一个基于共享内存 ...
- day3-selenium的使用及
如果是python2的情况下需要设置: # _*_ coding:utf-8 _*_,这样的编码来保证输入中文在运行时不会报错,另外在中文的前边加上u保证编译时不会报错 from selenium i ...
- To me
1.流泪的时候不做任何决定: 2.不反复思考同一个问题: 3.不害怕做错什么: 4.有负面情绪是正常的: 5.一切的烦恼都是自找的: 6.说过的话一定要做到: 7.不要去害怕做一件事: 8.无论是对是 ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- django的母板系统
一.母板渲染语法 1.变量 {{ 变量 }} 2.逻辑 {% 逻辑语 %} 二.变量 在母板中有变量时,母板引擎会去反向解析找到这个传来的变量,然后替换掉. .(点),在母板中是深度查询据点符,它的查 ...
- Python12/11--盒子的显隐/布局/z-index/流式布局思想
1.盒子的显隐 display:none 在页面中不占位,采用定位布局后,显示隐藏都不会影响其他标签,不需要用动画处理时,一般用这个 opacoity : 0 在页面中占位,采 ...
- 学习Acegi应用到实际项目中(3)
此节将要了解的是AnonymousProcessingFilter.RememberMeProcessingFilter和LogoutFilter三个过滤器 1.AnonymousProcessing ...
- mui 页面提示:Unable to preventDefault inside passive
页面提示: 点击该事件:页面提示:[8mui.min.js:7 [Intervention] Unable to preventDefault inside passive event listene ...
- 安装zookeeper(单机,伪集群)
1.登陆zookeeper官网下载 https://zookeeper.apache.org/ zookeeper-3.4.8.tar.gz 解压:tar -zxvf zookeeper-3.4.8. ...
- JQuery对checkbox的操作
对复选框组的全选.全不选.不全选,获取选中的复选框的值的操作 点击全选按钮,复选框组全部选中或者全部取消. 实现全选按钮和复选框组的联动,当复选框组中有一个没有被选中后,那么id=‘checkedAl ...