本文主要是介绍[机缘参悟-118] :如何做到:从无到有,从0到1设计一个新系统或产品?如何做到总是能快速的解决复杂技术难题?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
前言:
一、在软件工程化理论和实践上
二、在担任过的嵌入系统的岗位角色上(横向、广度)
三、在嵌入式设备的功能分层上(纵向、深度)
四、在嵌入式通信产品/设备类型上
五、在软硬件产品的项目管理上
六、在团队或部门管理上
七、在沟通技能上
八、在思维方式上(横向、宽度)
九、反思、梳理、总结,构建自己的知识体系和思维体系
前言:
有人问我,对于一个不熟悉的领域,是如何能做到:从无到有,从0到1设计一个新系统或产品?又是如何做到总是能快速的解决复杂的技术难题问题?当时我也一时语塞。好像大多数时候,在目标系统的不同环节,都是:遇到问题,然后解决问题;遇到需求,解决需求;拿到输入,然后得到输出; 与不同角色的人,用他们听得懂的语言与进行交流,是乎都是自然而然的事。有时候,我也在反思,我是如何做到的呢?
反复回顾,突然意识到,不过是各种过往各种因缘的聚合,先总结如下:
一、在软件工程化理论和实践上
《软件工程》是以工程化的理论指导、以科学化、系统化的方法为手段,阐述了构建一个全新的软件信息系统的通用流程和通用方法:需求分析、架构设计、编码实现、测试验证、发布部署、运行维护。本人硕士计算机专业毕业,熟悉软件工程的理论,并且长期以来一致在跨国大公司工作,对软件工程的每个环节都耳濡目染,有深刻的亲身经历和一线的项目实践,深刻熟悉软件系统是如何一步步构建起来的。还深入研究和实践过DevOps和SAFe大规模系统敏捷开发,并获得相应的证书,对软件工程的方法论有这深刻的理解。
备注:
软件工程是一门关注软件开发过程、方法和工具的学科。它将工程原理和方法应用于软件开发,以确保软件项目能够按时、高质量地完成,并满足用户需求。
软件工程涵盖了软件开发的各个方面,包括需求分析、软件设计、编码、测试、部署、维护和项目管理等。它强调系统化的方法和规范化的流程,以提高软件开发的效率、可靠性和可维护性。
软件工程的一些核心概念和技术包括:
需求工程:通过收集、分析和管理用户需求,以确保软件系统能够满足用户的期望。
软件设计:根据需求和架构原则,将软件系统划分为模块,并定义模块之间的接口和关系。
编码:将软件设计转化为实际的编程代码,并使用适当的编码标准和编程实践。
软件测试:通过设计和实施测试用例,检验软件系统是否满足功能和质量要求。
配置管理:管理软件的版本控制、变更管理和发布流程,以确保开发过程的可追溯性和稳定性。
质量保证:通过代码审查、静态分析、性能优化等策略,确保软件质量达到预期水平。
项目管理:使用工具和技术来规划、跟踪和监控软件项目,以确保项目按时、预算和质量要求完成。
软件工程的目标是提供可靠、高质量、易于维护和可扩展的软件系统。通过采用工程化的方法和最佳实践,软件工程帮助开发团队更好地管理复杂性,降低风险,并最大程度地满足用户的需求。
二、在担任过的嵌入系统的岗位角色上(横向、广度)
个人从事过嵌入式系统研发过程中几乎所有角色实际研发工作:
产品经理(用户需求)、系统工程师SE(系统需求)、架构师(架构设计)、硬件工程师(原理图+PCB)、软件程序员(编码实现)、产品售后支持、项目管理(流程管理、DevOps)、团队或部门管理。虽然,没有正式担任过软件测试工程师,但与测试人员打交道可谓日常工作的一部分,并且学习过软件测试理论,可以说,除了没有名分外,其实是理解测试在做什么的。
因此,能深刻地理解软硬件系统的每个环节、理解每个环节的人在思考什么、他们的思维模式、他们的交流语言、他们的关注点、他们面临的难点。同时,这些担任过的角色,让我对嵌入式系统的每个环节、每个功能测试都这比较深刻的理解。
备注:
产品经理:负责理解用户需求,并将其转化为产品的功能和特性。他们与用户沟通,收集反馈并进行市场调研,以确保产品能够满足用户的期望和需求。
系统工程师(SE):负责与产品经理合作,将用户需求转化为系统需求。他们分析用户需求的技术可行性,并将其转化为清晰的系统规格和功能描述,以便软件和硬件工程师能够理解和实现。
架构师:负责设计软件系统的整体架构。他们考虑系统的可扩展性、性能、安全性等方面,并确定系统的模块结构、组件和接口。架构师与系统工程师和软件工程师紧密合作,确保系统的设计符合需求和技术约束。
硬件工程师:负责设计电路原理图和PCB布局,将系统需求转化为硬件的具体实现。他们使用工程设计软件和硬件工具,将电子元件和连接方式转化为实际的硬件布局和设计。
软件程序员:负责根据系统需求和架构设计进行编码实现。他们使用编程语言和开发工具,将软件代码转化为实际的可执行程序。程序员与架构师和系统工程师紧密合作,确保软件的实现与设计一致。
产品售后支持:团队负责为客户提供产品的技术支持和服务。他们解答客户的问题、修复软件和硬件问题,并协助客户使用和维护产品。
项目管理团队:负责规划、执行和追踪项目的进度、资源和成本。他们管理开发团队的工作流程,协调各个角色的工作,确保项目按时交付,并质量符合要求。他们也可以负责实施DevOps实践,以实现持续集成和交付。
团队或部门管理:负责整个团队或部门的组织、管理和发展。他们负责招聘和培训团队成员,设定工作目标和评估绩效,协调跨团队的合作和沟通,以确保团队或部门的高效运作和业务目标的实现。
三、在嵌入式设备的功能分层上(纵向、深度)
个人从事过嵌入式系统功能分层的所有层面的实际研发工作:
从最底层的硬件电路原理图和PCB的开发、到FPGA开发、到CPU体系架构;
从到底层软件BSP、Uboot、Linux操作系统、驱动程序;
从到中间件,再到最高层的应用程序的开发。
都分别有多年的实际工作的经验积累。
因此,对嵌入式系统不同的功能层面有这深刻的理解。
备注:
嵌入式系统的功能分层是将嵌入式系统的功能划分为不同的层次,每个层次都负责特定的功能。
以下是常见的嵌入式系统功能分层:
应用层:应用层是嵌入式系统的最上层,负责处理用户或外部设备的输入和输出。它提供用户界面和交互功能,将用户的操作转化为系统的控制命令,并将系统的输出反馈给用户。
控制层:控制层负责管理和控制系统的各个功能模块。它接收来自应用层的控制命令,并将其转化为对硬件和其他系统模块的控制信号。控制层通常包括逻辑控制、状态管理、调度和任务分配等功能。
驱动层:驱动层是嵌入式系统与外部硬件的接口层。它负责与传感器、执行器、通信设备等外设进行通信,并控制它们的操作。驱动层提供设备驱动程序和接口库,以便上层的控制层与硬件进行交互。
内核层:内核层是操作系统核心,提供系统资源管理和任务调度功能。它管理系统的内存、进程、线程、中断等资源,并负责调度和协调各个任务的执行。内核层通常包括操作系统内核和相关的系统服务。
硬件层:硬件层包括嵌入式系统的物理硬件部分,如处理器、存储器、外设等。它负责执行计算、存储、输入和输出等基本的硬件操作。硬件层与其他各个层次紧密相连,提供底层的硬件支持和功能。
每个功能层都有自己的职责和接口,不同层之间通过定义的接口进行通信和交互。分层可以使系统的功能清晰分割,提高代码的可维护性和可扩展性,同时方便并行开发和测试不同模块。
四、在嵌入式通信产品/设备类型上
个人多年移动终端手机的软件研发经验,也有网络侧设备的软硬件研发经验。
网络侧的设备包括有线设备和无线基站设备。
有线数据通信设备:交换机与路由器,熟悉交换机的CPU管理系统、二层交换机板卡、三层路由器板卡的软硬件、二三层网络协议都有这较多的理解和经验。
无线通信设备包括:宏基站和小基站,在无线通信协议上,从RF、L1、L2、L3的通信协议规范有过较深入的研究。
因此,本人对数据通信系统、无线通信系统等嵌入式系统有着深刻的理解。
备注:
网络架构通常包括终端、接入网、传输网和核心网这四个层次,这些层次一起构成了一个完整的通信网络。
终端层:终端层是网络的最底层,包括用户设备(如电脑、手机、智能设备等)和终端设备的软件系统。终端层负责与用户进行交互,接收和发送数据包,提供各种应用和服务,如浏览器、应用程序、电话通信等。
接入网层:接入网层是连接终端和传输网的桥梁,它提供从终端向网络传输数据的接入功能。接入网层包括各种类型的网络接入技术,如以太网、无线网络、光纤接入等。它负责管理接入设备、分配网络地址、实现接入控制和安全等功能。
传输网层:传输网层是连接接入网和核心网的传输网络,它负责将数据从源终端传输到目标终端。传输网层提供数据的可靠传输和路由选择功能,以确保数据的高效和可达性。在传输网层中常见的协议有IP(Internet Protocol)和TCP(Transmission Control Protocol)。
核心网层:核心网层是网络的中央部分,它承载大量的数据交换和路由任务。核心网层通过高速的传输设备和路由器来连接不同的传输网和接入网,实现不同区域和网络节点之间的通信。在核心网层中常见的协议有BGP(Border Gateway Protocol)、MPLS(Multiprotocol Label Switching)等。
这种架构的设计使得各个层次可以独立发展和演进,从而实现网络的灵活性和可扩展性。同时,不同层次之间的接口标准化和协议定义也提供了互操作性和互联性,使得各种不同类型的网络能够相互连接和通信。
五、在软硬件产品的项目管理上
有过丰富的项目管理实际经验,以项目经理的身份管理过多款从无到有的产品,也通过了软考《中级:系统集成项目管理工程师》、《高级:信息系统项目管理师》、PMP相关的考试,并获得证书,有项目管理的理论、方法、实际相集合的经验。项目管理的理论和实际经验,有助于我和项目管理人员协同工作,共同解决项目中的技术问题、管理问题、资源协调问题,产品的成功和识别,复杂问题的解决,大多数是技术问题,同时也是项目管理问题,良好的项目管理,能够有助于复杂问题解决中所需要的各种资源的协调和有条不紊的按计划实施,特别是解决复杂系统的复杂问题时,只靠技术,容易导致技术人员各自为政,无法协同作战;只靠项目管理,容易导致流于表面和形式,往往是隔靴搔痒,缺乏对技术问题的敏锐性。因此,技术与管理的协同,能够快速解决项目中遇到的各种技术难题。
备注:
信息系统项目管理师是负责管理和领导信息系统项目的专业人员,他们在整个项目生命周期内负责项目计划、实施、控制和交付。以下是该职位的主要职责:
项目规划:负责制定项目的范围、目标、时间表和资源计划等,确保项目与组织战略目标相一致。
需求分析与管理:与项目干系人合作,收集和分析需求,并确保项目能够满足干系人的期望和需求。
项目执行与监控:监督和协调项目团队的工作,确保项目按计划执行,并通过定期的项目状态报告、会议和评审等手段进行监控。
风险管理:识别、评估和管理项目风险,制定相应的风险应对策略和计划,以确保项目的成功实施。
质量控制:制定质量标准和控制措施,监督项目的质量,确保交付的产品或系统符合要求。
供应商管理:与供应商协商并管理外包合同、合作伙伴或供应商的交付和质量,确保项目的供应商管理。
项目交付与验收:确保项目按照计划完成,并与干系人一起进行项目验收,确保项目交付和客户满意度。
信息系统项目管理师需要具备以下技能和经验:
项目管理知识:熟悉项目管理的理论、方法和工具,掌握项目管理流程和技术,如项目范围管理、时间管理、成本管理、风险管理等。
技术和业务知识:对信息系统和相关技术有一定了解,能够与技术人员和业务用户进行有效沟通,确保项目目标的达成。
领导和沟通能力:能够有效地领导项目团队,激励团队成员,并与干系人建立良好的沟通和合作关系。
问题解决能力:具备分析和解决问题的能力,能够快速应对项目中的挑战和变化。
组织和协调能力:能够有效地组织和协调项目相关的资源,确保项目按计划执行。
信息系统项目管理师在日常工作中需要与多个利益相关者合作,包括技术团队、业务用户、高层管理人员等,他们要能够平衡不同的需求和利益,以成功实施信息系统项目。
六、在团队或部门管理上
复杂系统的复杂问题的解决,除了依赖技术专家(管技术)、项目管理(管事),有时候很大程度上依赖于团队或部门管理(管人)上。包括人力资源的投入上、管理者和关键人物的政治立场上、关键参与能力上、以及他们的动机、态度和积极性上,这都依赖于团队的管理上。
早年,个人带过团队和部门,但后来,个人的职业目标是技术专家,因此,相对于技术和项目管理,这块的经验的最欠缺,是短板。但早年的这些经验都有助于个人在解决复杂问题上与团队或部门的管理者正确到合适的人力资源,并能够激发参与这的积极性、能够与他们和谐相处,带领他们解决复杂问题,并且在遇到政治立场问题时,及时敏锐感觉并化解问题。
备注:
团队管理是一种在组织内建立和管理团队的过程。它涉及到团队构建、目标设定、绩效评估、员工培训、沟通和问题解决等方面,帮助确保团队能够达到最佳的工作状态。以下是团队管理的几个关键要点:
目标制定:建立清晰的目标和工作计划,确保团队成员知道他们正在为什么工作,并明确如何达成目标。
团队建设:鼓励员工之间的交流和合作,增强团队凝聚力和合作精神。这可以通过团队建设活动、培训和公开反馈等多种方式来实现。
绩效评估:确保团队成员能够接收到适当的反馈和奖励机制,以鼓励他们的表现。经常进行评估,并提供建议和指导以帮助团队成员提高绩效。
沟通:建立开放和明确的沟通渠道,并为团队成员提供多种联络方式,从而建立良好的沟通网络。
问题解决:解决存在的问题和冲突,确保团队能够持续运行。团队管理者需要适时地介入,为团队成员提供支持,促进问题的解决。
团队管理是一种重要的组织能力,它可以帮助组织实现最佳业绩,提高员工满意度和员工保持率。团队管理者需要领导团队,建立和管理团队,并为团队成员提供支持和资源,以使团队成员能够达到最佳状态。
七、在沟通技能上
复杂的问题需要协调不同部门、不同角色、不同技术领域的人协同解决,并非单纯的把一群技术专家放在一起就能够解决的,由于技术领域壁垒的存在,不同领域的技术人员,其实是很难沟通的一起的。复杂问题的领导者,一方面需要全面的技术领域的知识,以便与不同的技术人员、项目管理人员进行沟通交流,另一方面,还需要一定的沟通技巧,能够把不同技术领域的专业知识、现象给串联起,并且用对方听得懂的话语和表现形式展现。在向不同的人员展现相同含义的内容时,需要进行适当的转化、隐喻、类比、可视化等手段,确保相关人员能够真正的理解整个系统、理解他人。这对于团队协同的效率起着及其重要的作用。
本人多年的《企业大学的兼职讲师》的经历、多年公司内部、团队内部的技术分享,为自己在上述方面提供了丰富的经验和经历,能够帮助我理解和敏锐捕捉不同人技术观点,并能够快速转化成被他人理解的技术,并能够以某种方式呈现给相关的人员。
另外,国家《初级心理咨询师》和《中级心理咨询师》也能够帮助我与不同的技术人员进行沟通、理解他们情绪、关注点和动机。
不足是:由于后期没有从事全职的管理岗位,并且个人专注于技术专家方向的发展,弱化了这部分的效能。
八、在思维方式上(横向、宽度)
大千世界,千变万化,各行各业,千姿百态,技术领域也是千差万不。然后,我们会发现,无论形态和领域有什么不同,但他们都是“系统”,嵌入式硬件是系统,嵌入式软件也是系统,人体是系统,团队是系统,企业是系统,国家是系统,整个宇宙也是系统,所有的系统都有共同的特征和规律。解决目标系统的问题,首先,要理解目标系统的工作原理,然后,使用通用的方法、结合专业领域的特殊性来解决特定的问题。
个人学习过哪些通用的方法论和通用思维工具呢?
《系统论》、《系统思考》、《深度思考》、《本质思考》、《复盘》、持续改进、PDCA、鱼骨图。
这些方法论都有助于个人快速的学习、认识、理解、熟悉一个未知的技术领域,快速的抓住特定问题的骨干、线索和脉络。
九、反思、梳理、总结,构建自己的知识体系和思维体系
(1)听说读写是常见的方法:
- 听:多倾听别人的观点、多听音频、视频课程。
- 说:积极与他人分享,专业的技术分享课程有助于整理个人的知识体系、思维体系,同时与他人分享中,碰撞出新的火花。
- 读:读网络中他人的文章、读与自己关注一点一致的畅销书,多一些无用的哲学书、开拓思维的书。
- 写:大量的专业博客,如果特别特别的原因,本人每天坚持至少写一篇工作相关、个人感悟的博客文章,长期坚持,反复重复,不断构建、重塑、刷新自己的知识和思维体系。
(2)知识与思维体系
- 计算机知识:CPU体系架构、FPGA编程、Uboot、Linux操作系统、多线程编程、面向对象、C、C++编程、Python编程、架构设计、需求分析、统一建模UML......
- 业务知识:通信原理、移动通信、数字信号处理、3GPP规范、RF/L1/L2/L3的规范、TCP/IP协议栈.....
- 人工智能:机器学习、深度学习, Tensorflow, Pytorch......
- 方法论和思维:系统思维、系统论、本质思考、深度思考、系统思考、西方哲学史、中国哲学史、心理学、儒释道法、佛学......
这篇关于[机缘参悟-118] :如何做到:从无到有,从0到1设计一个新系统或产品?如何做到总是能快速的解决复杂技术难题?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!