十余年软件开发经历,经验总结和程序一览(涉及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 ...
随机推荐
- 安装Ubuntu 18.04后的一些操作
安装Ubuntu 18.04后的一些操作 1.设置root密码 sudo passwd 2.登陆root(输入密码后看到井号就是切换成为root账户) su 3.删除预装 apt-get remove ...
- node.js中path路径模块的使用
path模块是node.js中处理路径的核心模块.可以很方便的处理关于文件路径的问题. join() 将多个参数值合并成一个路径 const path = require('path'); conso ...
- 正则冷知识;分组捕获、replace()的用法...
1.var reg=/./; var reg=/\./的区别?? 前者代表任意一个字符,后者代表这个字符串中得有一个.. 2.?的使用?? 如果单独的一个字符串后面带? , var reg=/\d?/ ...
- 《笨方法学Python》加分题6
types_of_people = 10 x = f"There are {types_of_people} types of peoples." binary = "b ...
- 杨其菊201771010134《面向对象程序设计(java)》第六周学习总结
<面向对象程序设计(java)>第六周学习总结 第一部分:理论知识 1)类.超类和子类2)Object:所有类的超类 3)泛型数组列表4)对象包装器和自动打包 5)参数数量可变的方法 6) ...
- [SoapUI] 从测试套件,测试用例,测试步骤,测试数据各个级别控制是否执行
自动保存 # -*- coding: utf-8 -*- import java.awt.Color import org.apache.poi.ss.usermodel.Cell import or ...
- Python select模块学习
select 是常用的异步socket 处理方法 一般用法: # iwtd,owtd,ewtd 分别为需要异步处理的读socket队列, 写socket队列(一般不用), 和错误socket队列, 返 ...
- Python从入门到精通之First!
Python的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jy ...
- centos7 制作yum源
一.依赖 1.rsync yum install -y rsync xinetd 2.nginx,这个就不多说了 二.建立目录 mkdir -p /data/yum_source/nginx/html ...
- CQOI2018 简要题解
破解D-H协议 列个式子会发现是BSGSBSGSBSGS的模板题,直接码就是了. 代码: #include<bits/stdc++.h> #include<tr1/unordered ...