万关茗
上海
高级软件工程师
评分: -
响应率:
约聊人数: 4
  • C/C++与大范围部署协作系统

    大范围协作系统,从结构上看,指从前端的采集,到中间的数据收集处理,到后端的存储和分析。从开发上看,可以指从电路设计,传感器的采用,电源的设计,到通信设计和数据库的结构设计。从范围上看,指覆盖的尺度大,从数十平方米到数平方公里,从家庭的安保系统到地铁线路的检票系统。 开发大范围系统,需要注重概念一致性和重用性的设计风格。我认为,系统的复杂度并非主要来自于系统中元素的个数,而是主要来自于元素间关系。通过这一理念可以对软件架构和系统复杂度进行很好把握。 如果您在开发符合上述特点的系统,则系统将不仅具有范围大的特点,复杂度也将比较高。面对这个复杂系统,如果您在前进的道路上某方面遇到了思路上的困难,不妨来共同讨论一下。其实情况可能并不复杂,有时候只是思路和角度的问题。 当前,很多打算创业的同学,他们都有很精准的眼光,能够看出生产生活中的“痛点”,希望能开发出相应的系统来解决这些现实中的需求。 同时,现在的学校教学和网上的学习资料前所未有地丰富,很多同学毕业时即具有了我们毕业时所不敢想象的知识点,而很多人通过网上学习也能获得比专业教学还要快的进步。 在有了这些知识的武装之后,为什么在开发一个系统时往往还会感觉到非常吃力?一个主要原因是当前已经不存在简单系统的开发需求了。复杂度小于一定值的系统已经完全被开发完。 想象一下在上个世纪80至90年代,你可以任意申请域名,甚至像abc、麦当劳、肯德基这样的域名随手可得,没有什么成本。现在已不存在这样的情况。简单而明显的域名已经没有空闲了。 这是时代本身的趋势。在一定复杂度之上的系统才有空闲,才需要被开发出来服务人类的生产生活。但元素个数增加时,元素间关系会有爆炸式增长,造成复杂度失控,超出了人们的处理能力。 通过与我的讨论: 你不会获得那些已经在各种教材中存在的知识点——你会获得思路。 你不会获得电路设计的具体注意事项——你会获得电路如何与通信协议匹配。 你不会获得传感器的具体工作原理——你会获得采用传感器的原则。 你不会获得通信过程的具体算法——你会获得在系统设计中以通信协议设计为核心的分析方法。 你不会获得多种数据库的优劣比较——你会获得如何把应用需求本身转化成数据库需求的过程。

    ¥299

行家自述

我毕业于南京航空航天大学,计算机软件专业本科。在软件工程师的职业经历中逐渐形成了注重概念一致性和重用性的设计风格,任高级软件工程师一职期间形成了独到的设计架构。我认为,系统的复杂度并非来自于系统中元素的个数,而是元素间关系。通过这一理念对软件架构和系统复杂度能够进行很好的把握。对从单片机系统的设计到地铁检票系统的大范围部署协作的系统设计开发有独到的见解。 【主要经历】 项目名称:改造电火花线切割机床项目 行业:航空工业 职务:软件工程师 任务:参与项目设计和相关模块的开发,提供技术支持 电火花线切割机床可以加工几乎任何导体材料。但对于老式的机床及软件,其加工指令和技术资料都很欠缺。为了扩展它的加工指令,提升加工能力,团队进行了深入研究。最终我们意识到,基于现有加工指令,进行合理组合即可形成新的加工指令,而不必全部重新创造。在组合过程中还要防止短路等非法状态出现。最终我们制做了一个解释器来形成新指令和避免非法加工动作。另外还制做了导入AutoCAD的DXF文件的一个转换软件。本项目获得了当年的厂科技进步三等奖。 从本项目中我学习到,如果目标系统可以被看作一个虚拟机,我们就可以通过组合它现有的指令来扩充指令集,通过这种方法可以以更低的成本升级现有系统。 在此项工作中,把目标系统看作虚拟机,通过组合其指令序列以达到扩展功能的目的又不改动真实系统的想法形成雏形,为以后的工作奠定了良好的基础,并在以后的工作中得以发展。 项目名称:EDI 接口系统 行业:国际贸易 职务:软件工程师 任务:重设计EDI接口系统 EDI(Electronic Data Interchange)电子数据交换是一种在公司之间传输订单、发票等作业文件的电子化手段。它通过计算机通信网络将贸易、运输、保险、银行和海关等行业信息,用一种国际公认的标准格式,实现各有关部门或公司与企业之间的数据交换与处理,并完成以贸易为中心的全部过程。 在本项目中,作为EDI数据的接收者,不但要解析标准格式,更要为各公司自创的地方格式作好专用解析工作。显然,此时不但需要制做一个EDI解析器,并使其工作于某一标准之下,还要制定一个如何描述一个标准的一套标准,以便使该EDI解析器能够灵活地选择自己工作的标准。 根据经验,可以将后台数据库系统经包装后看作一个虚拟机,同时可以通过组合该虚拟机上的指令来扩展它的指令集。外来的EDI数据则经由相应的解析器解析成该虚拟机的指令集上的操作,通过修改虚拟机状态来达到接收和保存数据的目的。核心的设计思想是为每个数据来源构造一个编译器,通过对编译器对象的管理来达到对接入数据的管理。 为此,我创建了一种专用语言 (WLL)用来描述如何构造一个语法析器。即可以通过WLL这个标准来制定EDI工作标准。由于这种用来构造标准的标准也是一种标准,所以它显然也可以通过WLL自己来被构造,这样的自展过程缩减了WLL的构造成本。整个设计过程是基于我的一篇论文《快速构造语法分析器》来进行的。 新的EDI接口系统比原有的基于BIZTALK的系统工作速度更快,开发成本更低,更有弹性容易修改。如果来源数据解析出错,也能更精确地指出出错原因和位置,这些都使得新的客户更愿意接入到我们的系统中。在新系统的支持下,EDI相关的业务的数据量在6个月内有了数倍的增长。 项目名称:AFC自动售检票系统 行业:地铁afc 职务:高级软件工程师、技术经理 任务:相关模块的设计和开发 AFC是Auto Fare Collection的缩写,是指全自动收费系统。是融计算机技术、信息收集和处理技术、机械制造于一体的自动化售票、检票系统,具有很强的智能化功能。不仅是地铁和交通系统发展的一个趋势,也是城市信息化建设的一个重要体现。 AFC主要由线路中央AFC系统、车站AFC系统、终端设备和车票四部分组成。整个系统由多个计算机节点构成,每个节点上运行着一到多个模块。所有的模块有机地组成AFC系统。由于系统范围较大,所以设计难点在于如何提高模块间通信的可靠性和多个工程师如何大范围地合作。 我负责相关模块的分析设计和开发。AFC系统的设计特点就是它是一套由很多组件构成的软件,且组件分布在空间上很大的尺度范围内,组件间的通信必须设计为可以断线的方式,组件应该能在断线后进入某种降级模式持续运行。我采用把握系统中元素间关系的方式来把握和管理系统复杂度。例如,各节点间需要通信,考虑到整个系统中各节点间是群,即具有自反关系,对称关系和可传关系,利用这一特点可以降低通信结构设计的复杂度。 在设计参数传递模块时,由于参数是树状结构,我们必须以广度优先的策略来编写和配置程序静态结构,而程序表达的却是一个深度优先动态运行时模型。我开发了一个小型的解析器来辅助构造这种双重结构,从而降低开发成本和出错概率。从本项目我体会到,客户需求是我们工作的目标和意义,敏捷开发越来越受到重视,是行业发展方向。 项目名称:上海地铁某线闸机 职务:高级软件工程师、设计师 行业:地铁afc 设计和开发的闸机程序应用在上海地铁12号线全线和9号线部分车站。用C++开发,整个项目规模约19万行。应业主需求,操作系统采用Linux, 7乘24不间断运行。为了有效控制开发成本和质量,我采用了两大举措: 第一是部分高度规整的结构采用由需求直接转译成C++代码的方法编程。用工具来达成需求到代码的过渡过程。由于工具是转换规则的体现,只要转换规则正确,需求无误,代码即正确。此举控制了人为编程失误,并可快速应对一定范围内的需求变更。 第二是利用高度抽象的开发者编程接口达到在windows下开发和调试并可移植到Linux的开发方法。此举降低了业务应用型软件开发的难度。 在开发过程中,我还仔细反思相关的系统结构和设计方法,写有论文《一种51单片机任务调度编程方法及其实现》,发表在《电脑编程技巧与维护》 -2013年21期。从理论角度阐述了如何分析需求中的任务对象以及对任务的调度方法方面的一些个人见解。 后来将此理论升级扩展后运用此理论开发了嵌入式WEB服务器框架,使得闸机同时可提供页面来进行后台访问和控制,降低了维护成本。 项目名称:多功能自动售票机 行业:地铁afc 职务:高级软件工程师、设计师 任务:设计和开发 将上述理论再次扩展后,形成了隐式有限状态自动机模型编程规范,用此理论来实现状态迁移类型的设计和编程可极大降低开发成本使维护更清晰。并完成了此规范的一个实现。在自动售票机开发中应用后达到了开发快速,敏捷应对客户需求变更的效果。 【业余爱好】 音乐

用户评价

暂无评价

暂时没有评价哦

常见问题

  • 「在行」能帮我做什么?
    展开
  • 如何开始使用「在行」?
    展开
  • 行家值得信赖吗?
    展开
  • 约见有什么规范?
    展开
选择约聊话题
C/C++与大范围部署协作系统
选择约聊方式

推荐专题