前言

本文主要介绍我开发的几款软件产品,大概介绍一下功能。可以让读者了解本人的开发能力,所擅长的方面。有相关开发需求可以联系作者。

本人开发软件多年,从事的行业也多种多样;自然接触了不同的业务,开发了各类软件产品。工作的主线一直是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)的更多相关文章

  1. 学习笔记之三十年软件开发之路 - 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 ...

  2. day16(软件开发目录规范)

    模块的使用01 模块的循环导入问题 解决方案一: 把循环导入的语句放到名字定义的后面 解决方案二: 将循环导入语句放到函数内(先定义确定名称空间)02 区分python文件的两种用途 #当文件被执行时 ...

  3. 选择如何的系统更能适合App软件开发人员?

    手机这个词早已经同吃喝玩乐一样.成为了人们生活中的必备元素. 尤其是iPhone一炮走红之后,不但手机世界发生了巨大变化,整个科技产业似乎都格局性的改变.直至今日,手机市场的竞争更是日趋白炽化,这就给 ...

  4. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)

    1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq.微信.百度网盘.腾讯视频这一类是属于需要安装的桌面应用. 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就 ...

  5. C#入门到精通系列课程——第1章软件开发及C#简介

    ◆本章内容 (1)了解软件 (2)软件开发相关概念 (3)认识.NET Framework (4)C#语言 (5)Visual Studio 2017 ◆本章简述 软件在现代人们的日常生活中随处可见, ...

  6. 程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  7. TesterHome创始人思寒:如何从手工测试进阶自动化测试?十余年经验分享

      做测试十多年,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着行业的竞争加剧,互 ...

  8. SaaS系列介绍之十四: SaaS软件开发分析

    1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传 ...

  9. 程序员带你十天快速入门Python,玩转电脑软件开发(三)

    声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...

随机推荐

  1. 微信小程序之---- 数据处理

    exports 关键字      .wxs 通过该属性,可以对外共享本模块的私有变量与函数   使用步骤 1. 在 .wxs后缀文件 exports定义参数 var foo = "'hell ...

  2. centos查看系统版本

    显示系统版本 cat /etc/redhat-release cat /proc/version uname -a 查看位数 file /bin/ls

  3. php memcache 基础操作

    <?php/** * Memcache缓存操作 * @author hxm * @version 1.0 * @since 2015.05.04 */class MCache extends O ...

  4. Django基础—1

    一. Django的安装1. 查看已安装的Django的版本     进入到终端以及Python的交互模式    python3/ ipython32. 交互模式中输入import django    ...

  5. Windows系统编程之异步I/O和完成端口

    Windows系统编程之异步I/O和完成端口[作者]北极星2003[来源]看雪技术论坛(bbs.pediy.com) [时间]2006年7月1日 一.  同步I/O和异步I/O 在介绍这部分内容之前先 ...

  6. 20155326刘美岑 《网络对抗》Exp1 PC平台逆向破解

    20155326刘美岑 <网络对抗>逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  7. Hadoop 系列文章(二) Hadoop配置部署启动HDFS及本地模式运行MapReduce

    接着上一篇文章,继续我们 hadoop 的入门案例. 1. 修改 core-site.xml 文件 [bamboo@hadoop-senior hadoop-2.5.0]$ vim etc/hadoo ...

  8. 参数签名ascii码排序的坑

    参数签名中通常是按键值对中键名称的ASCII按从小到大的顺序排序后进行hash为签名字符串.不要直接使用 SortedDictionary<string, string> 有坑的,他是按数 ...

  9. iOS 抓包

    通过tcpdump对iOS进行流量分析(无需越狱 iOS Packet Tracing 将 iOS 设备通过 USB 连接到 Mac 打开 terminal rvictl -s $UDID 运行 tc ...

  10. jQuery的JS库在本地运行项目时提示无法加载

    最近公司有个项目在我本地运行时引用本地的jquery.js,浏览器提示无法加载 <script src="/js/newperson/jquery-1.11.3.min.js" ...