十余年软件开发经历,经验总结和程序一览(涉及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 ...
随机推荐
- 每10秒执行定时任务-crontab
* * * * * /data/crontab.sh * * * * * sleep 10; /data/crontab.sh * * * * * sleep 20; /data/crontab.sh ...
- centos7 下安装pycharm
CentOS 7环境下Pycharm安装流程记录: 1.准备安装文件: 方法1: 使用内置火狐浏览器访问下载最新格式为tar.gz的压缩包 网址:https://www.jetbrains.com/p ...
- scrollIntoView()窗口滚动
1.某DIV窗口滚动到顶部: document.getElementById("某DIV的ID").scrollIntoView(true); 2.某DIV窗口滚动到底部: doc ...
- 谷歌开源的一个BTREE实现 Go语言
// Copyright 2014 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "Licens ...
- Chapter3_操作符_别名机制
Java中的别名机制实际体现的是对于“=”这一类赋值操作符的使用规则和内涵.“=”的实际内涵是指将右边的变量的值(对于基本数据类型而言)或者某一个对象的引用(对于某个具体对象而言)复制到左边的变量名所 ...
- javascript常见内存泄露
一.全局变量引起的内存泄漏 function func(){ lmw = 123456 //lmw是全局变量,不会被释放 } 二.闭包引起的内存泄漏 function func(){ var lmw ...
- FastJSON基础
对象的类型 json文本 json数组 json对象 java对象 类型的转换 json文本 转 json对象 JSON.parseObject(str) json文本 ...
- python 更换 版本
这是一个悲伤的安装ipython的过程. 写下来留个教训吧. 也是希望对博友一些帮助吧. 注: 我也写了一篇window下安装bpython的文章(个人感觉bpython要比ipython强大的多), ...
- Linux学习---GCC编译常见错误
预处理错误: No such file or directory 出错原因:①包含错误:eg #include <abc.h> //abc.h为用户自行编写文件 解决方法:⑴应改为#in ...
- 配置微信jssdk自定义分享
前段时间做这个功能的时候遇到这个问题,之前的话是微信自动抓取界面第一张图,现在微信更新api,必须自行配置,接入jssdk,才能实现该功能. 详细可以查看微信的jssdk文档 微信官方开发者文档 ...