编程物语
编程即人生
浪游东戴河
专注于SIP/VoIP协议、音视频、Linux C/C++网络编程等领域,长期提供技术咨询、问题解答、软件开发、知识讲座等服务
学无止境,习有所长,没有终点,永不放弃
展开
-
减少软件使用的复杂度
对软件使用者来说,软件的安装和使用要足够方便,比如输入参数少、一键安装等。避免操作复杂度高导致用户使用的不适,使产品失去竞争力。原创 2024-06-03 21:25:35 · 126 阅读 · 0 评论 -
持续不断的学习
软件行业技术更新速度快,要想保持竞争力,需要不断的学习,所谓”技多不压身”。软件工程师在工作过程中,不仅要在自己的领域范围内深入学习,还要在整个软件行业链条上,不断的扩展自己的视野和能力,从而不被行业淘汰。原创 2024-06-03 21:24:29 · 113 阅读 · 0 评论 -
非紧急的难题延期处理
在日常工作中,经常会收到一些待处理的新问题,有些是紧急的,有些是非紧急的。遇到这种情况时,一部分人会停下手上的工作,去处理新问题,造成现有工作思路的中断,而处理完新问题后,已经忘记当时的思路了,又得重新思考之前的工作状态,导致效率降低。比较好的方法是:如果是紧急的问题,记录当前的工作状态,优先处理新问题;如果是非紧急的问题,则不要中断进行中的任务,将新问题放入待处理任务列表,延期处理。原创 2024-06-03 21:23:21 · 353 阅读 · 0 评论 -
程序员要做好软件测试
众所周知,软件完成开发后,要经过测试人员测试,找出问题,然后由程序员修复后再提交测试验证,直到没有问题。而这个修复测试过程中含有很多沟通、交互环节,耗费大量时间和精力,容易造成产品交付延期。因此,程序员在开发过程中,要做好用例测试,避免软件中出现低级错误,减少问题,从而减少反复提测版本造成的人力时间损耗,保证软件交付时间。原创 2024-06-03 21:20:30 · 240 阅读 · 1 评论 -
将成果加入版本管理
无论是代码、脚本、或是文档,都会根据需求进行不定期的修改,有时需要以前的版本。如果单靠备份机制维护不同版本文件,既占用空间,又容易出错,这时需要使用版本管理工具(如 git)将阶段性的版本管理起来并在提交时添加必要的说明。这样,在后面需要恢复到上一个版本的状态时,就很方便。一般公司也都有相应的代码和文档管理工具或机制,重点要说明的是,对于临时开发的 demo 程序、编写的文档等也要用版本管理起来,方便恢复到以前的版本。原创 2024-06-03 21:17:34 · 686 阅读 · 0 评论 -
先编码后调试
对于初级程序员来说,大多是写几行代码就编译看看有没有错误, 有错误改好了再编码,反复如此。这样做的缺点是造成了频繁的思路中断,编码效率降低。高级程序员的做法是先编码再编译调试,但这也不是说把所有代码全部写完再编译,重点是要尽量保持编码思路的连续性,从而提高编程效率。原创 2024-06-03 21:16:33 · 312 阅读 · 0 评论 -
与主流代码风格一致
不同的编程语言有不同的编程风格,软件工程师在编码时,要与主流代码风格保持一致,这样可以提高代码的可读性和可维护性,不同团队成员之间的协作更加顺畅。因此,建议参考大厂的编码风格进行编程。原创 2024-06-03 21:14:24 · 168 阅读 · 0 评论 -
从开源代码中学习
经典的开源项目都是经过多名顶级软件开发者的设计开发,里边一般都有值得学习的东西,比如架构设计、编程思想,语法技巧等,多分析和学习开源代码能够提高软件设计能力和编程水平。原创 2024-06-03 21:11:29 · 164 阅读 · 0 评论 -
确认好再开始编码
编码是软件开发的核心,在开始编码前一定要确认好相关事项,以免出现差错。原创 2024-06-03 21:10:24 · 188 阅读 · 0 评论 -
掌握常用的快捷键
无论在 windows 系统还是 Linux 操作系统中,各个应用软件都有很多快捷键,如打开、保存文件,复制/粘贴等等。相比于使用鼠标进行菜单选择,通过快捷键操作可以更快完成相应的操作,从而提高工作效率。因此,要尽可能掌握更多的快捷键。原创 2024-06-03 21:09:04 · 471 阅读 · 0 评论 -
提高打字速度
程序员打字速度的高低,往往直接影响着他们的工作效率。如果打字慢或左右手分工不明确,建议花费时间进行键盘指法练习,从而提高编程效率。原创 2024-06-03 21:07:57 · 92 阅读 · 0 评论 -
为自己积累编程积木
复杂程序代码其实是简单程序代码的组合。不同项目中经常会用到相同的功能函数、API 接口、功能库。为避免重复查询函数用途、参数调用等信息,可以在工作中将常用的程序片段、函数/API 示例、功能库调用框架等整理出来,构建成自己的开发库。在需要的时候,将相应的代码拷贝粘贴使用,避免重复开发代码耗费时间,像搭建积木一样来构建软件来提高整体的开发效率。原创 2024-05-30 20:37:49 · 121 阅读 · 0 评论 -
工欲善其事,必先利其器
因此,很多程序员都会自已准备顺手的设备,比如机械键盘、鼠标等。原创 2024-05-30 20:34:11 · 138 阅读 · 0 评论 -
程序与程序产品的区别
程序是指实现某些功能的演示程序,可以是示例程序(如demo)。而程序产品是交付给客户使用的产品,是产品级的程序。demo 程序开发可能 1 小时就能完成,但只能作为内部少数人技术交流使用。如果要达到产品级别,需要完成参数检查、性能优化、单元/系统测试、各种文档说明等等,需要花费更多的工作量。这也是软件工程师估算开发周期要注意的关键点。原创 2024-05-30 20:30:34 · 130 阅读 · 0 评论 -
软件架构应该由少数人设计
软件架构设计决定了软件的基础框架和主体结构,必须由经验丰富的软件架构师或者高级程序员主导,在一个公司中,通常只有少数人具备这样的能力和责任。因此,要避免过多的人员参与软件设计,从而导致软件架构、逻辑设计的不一致。原创 2024-05-30 20:25:11 · 116 阅读 · 0 评论 -
人月互换就是个神话
人月”是指项目时间安排的单位,多用于大型项目,一般小的软件开发也用人天作为单位。项目开发中,人和月是不能互换的,人和月互换就是个神话(不可能实现)。比如,需要 1 个人 5 个月完成的项目,5 个人在一个月内一般是完不成的,基于的理由是:有些任务不能拆分,不能并行去执行,需要按顺序实施。另外一个举例:一个女人 9 个月可以孕育一个小孩,但是 9 个女人一个月不能孕育一个小孩,即阐明了任务的不可拆分性和不可并行性。原创 2024-05-30 20:18:48 · 136 阅读 · 0 评论 -
通过邮件备忘决策
在工作中,经常通过会议或面对面沟通的方式来确定解决问题的方法,一般会得出结论性质的决策,比如人员进度安排、任务分配、截止时间、接口定义、功能定义等等,如果仅是口头上的约定或通知,难免出现遗忘、记错的情况,导致项目组内成员或跨部门成员之间的协作失败、相互推卸责任的情况。不仅影响项目进度,还影响公司内部的氛围。因此,在软件开发或其它工作中,一定要通过邮件备忘决策结果,厘清责任,避免出现扯皮的情况。原创 2024-05-30 20:15:20 · 109 阅读 · 0 评论 -
学习从 0 构建软件工程
好多程序员能够快速融入到团队已有的项目开发中,但当让他去创建一个新的软件工程时,却无从下手,这是典型的平台依赖型选手,即需要别人创建好软件程后自己才能开始内容开发。这在初、中级程序员中很常见,但要想成为高级程序员,成为独挑项目大梁的大牛,那么就必须要掌握软件构件流程和方法。因此,在日常开发中,要深入了解整个软件工程的组成和架构,以便日后成为架构师或创造出更多优秀的软件。原创 2024-05-30 20:12:15 · 120 阅读 · 0 评论 -
身体不适时,及时休息
在日常工作中,难名出现身体不适的情况,比如感冒或者前一天晚上没休息好。在这样的情况下,有些人还在继续工作甚至有的晚上还坚持加班。虽然这可能是因为绩效的压力或者公司的要求不得不加班,但还是要以自己的身体为重,在身体不适的情况下尽早下班,回去好好休息。咬牙坚持只会透支自己的免疫力,效率低下同样会浪费公司的时间,也浪费自己的时间;只有休息好了,才能更有效率的工作。原创 2024-05-30 20:08:47 · 122 阅读 · 0 评论 -
数据结构设计是软件设计的中心环节
数据决定了数据结构,而数据结构设计是整个软件设计的中心环节。数据结构设计的复杂度直接影响了软件的功能和逻辑复杂度,决定了开发和测试的工作量。因此一定要先做好数据分析和数据结构设计。原创 2024-05-30 20:05:27 · 77 阅读 · 0 评论 -
做好软件开发的时间安排
可以注意到, 编码时间是最少的,设计时间也是编码的 2 倍,测试时间占到了一半时间。这样的安排也间接说明,要留给调试/测试更多的时间,因为程序员代码写的再好,也难免有疏漏和缺陷,需要通过完善的测试来发现隐藏的问题,多次问题修复、测试的迭代流程会耗费很多时间。如果考虑不全,则会造成项目延期。另外,软件设计中的功能和逻辑复杂度直接决定了编码的工作量,因此,花费更多的时间去做好软件设计是事半功倍的。原创 2024-05-30 20:03:14 · 846 阅读 · 0 评论 -
新人开发新系统,旧人维护旧系统
通常来说旧系统存在一些难以解决的问题,软件架构及逻辑实现可能会有一定的缺陷和复杂度,甚至有些烂系统可以称为”焦油坑“,意思是出现问题难以分析解决,谁来谁陷进去。因此,如果同时存在新系统(可能正在开发中)和旧系统, 建议将新人安排到新系统的开发和维护中,旧系统仍然由旧人维护。原创 2024-05-29 22:51:38 · 706 阅读 · 0 评论 -
开发第二个系统时,容易陷入过度设计的麻烦
开发第二个系统时,会引入之前开发的设计经验和理念,并且会考虑尽可能解决以前遇到的所有问题,倾向于实现更多、更完备、更强大的功能,同时在软件其它质量属性如可运维、可扩展、可测试等方面进行更多的兼顾。过多的功能设计使系统的复杂性增加,难以开发和维护,产品交付时间会大大延后,最终可能导致产品错过最佳的市场机会。因此,开发新系统时,应该根据实际需求来确定系统的功能和特点,而不是过度设计。要以实际需求为导向,快速交付产品,抢占市场。同时,也需要注意系统的性能和可扩展性,以便使其能够适应未来的需求和变化。原创 2024-05-29 22:39:45 · 122 阅读 · 0 评论 -
日志不是核心功能,避免过度设计
日志是记录用户操作、系统运行状态的一种手段,完整、准确的日志能够帮助开发和运维人员快速定位和分析问题。但在实际工作过程中,经常将软件问题过多和问题修复过慢归结于日志记录不完善方面,而去大张旗鼓的去设计开发日志记录、备份功能,耗费大量时间精力,最终对真正的软件问题帮助有限。因此,一定要注意,日志不属于软件系统的核心功能,不要花费大量的时间去过度设计,要将更多的时间、精力用于软件本身的开发和优化上。原创 2024-05-28 22:05:58 · 240 阅读 · 0 评论 -
少画流程图,多用文字表述
在软件开发设计时,一般需要绘制一些流程图、时序图来表明程序的交互逻辑。这些图虽然能够清晰的表述软件的运行逻辑,也方便项目组不同角色成员沟通原创 2024-05-28 21:53:55 · 86 阅读 · 0 评论 -
项目延期,不要随意加派人手
项目出现延期时,尽可能不要向落后的项目增加人手原创 2024-05-27 22:27:27 · 556 阅读 · 0 评论 -
Linux C软件工程师进阶必备
大多数软件都会涉及到数据库,服务器上mysql使用的比较多,而对于linux嵌入式设备,一般使用sqlite. 无论哪种数据库,程序员都需要掌握基本的数据库操作指令。Linux C编程是linux C软件工程师的核心技能包,也是必备技能,涉及内容比较多,需要在工作中不断学习,熟练掌握Linux C编程,对于工作得心应手。有时间需要理解下内核的双向链表,设计的比较好,理解了内核的链表的设计,可以说是掌握了C语言链表精髓。在实际编程中,会用到第三方或开源的软件库,也会以库的形式向第三方提供功能模块。原创 2023-06-23 11:56:36 · 344 阅读 · 0 评论 -
Linux c/c++技术方向分析
c语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,如嵌入式。C语言能以简易的方式编译、处理低级存储器。是一种高效率程序设计语言。c++(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,是一种面向对象的语言。原创 2023-03-07 22:03:44 · 3635 阅读 · 11 评论 -
IT人员出差(远程工作)装备
IT人员经常遇到远程办公情况,比如居家办公、出差酒店办公、客户现场办公等。为了提高工作效率,达到事半功倍的效率,一套舒适、顺手的软硬件装备是必不可少的,能够起到如虎添翼的效果。笔记本电脑一台性能优秀的笔记本绝对是办公最好的助手外接(无线)键盘、鼠标笔记本电脑的自带键盘不是标准的布局,打字比较不方便,严重影响效率,尤其对于软件人员,需要快速的输入速度,外接键盘是必不可少的。同理,鼠标也是必须的。U盘出差在外,需要拷贝或携带一些资料,U盘是最常见的存储设备。一般8GB即可。网线有...原创 2022-02-18 21:18:00 · 1476 阅读 · 0 评论 -
git常用命令
原创 2022-01-05 20:04:09 · 65 阅读 · 0 评论 -
编程人员常用工具软件
一、 Packet Sender 向指定IP/PORT发送UDP/TCP等报文, 用来单步调试使用。 比如发送SIP报文二、Beyond Compare4用来比较代码、文本、二进制内容的差异。 软件开发人员经常依靠此软件来比较两段代码的差异、两个消息或数据的差异, 有助于帮助快速找到问题产生的原因。注:由于该软件需要注册码,首次安装后试用30天,到期后可以通过以下操作来继续试用修改注册表1、在搜索栏中输入 regedit ,打开注册表2、删除项目CacheId :...原创 2021-12-11 15:33:26 · 9634 阅读 · 0 评论 -
《人月神话》之读后感想
读了Brooks的《人月神话》一书,很有感触,记录下自己印象深刻的观点并结合自己的职场经验分析一下。0. 人月神话 在阅读《人月神话》之前,只理解“人月”是指项目时间安排的单位,没太注意“神话”的含义。通读了全文后,才懂了其中的见解:Brooks认为,项目开发中,人和月是不能互换的,人和月互换就是个神话。1个人5个月的项目,5个人在一个月内一是完不成的,这个观点基于的理由是:有些任...原创 2019-05-04 19:25:32 · 943 阅读 · 0 评论 -
软件工程中新功能开发流程
在软件生命周期内,根据市场和客户的需求,会不断的引入新的功能。由于经验、技术、视野、开发流程等方面的差异,不同的软件工程师的开发出的功能质量各不相同;经常出现功能不全、稳定性差、并发低、容错性差等缺点,可谓是一千个程序员能开发出一千个不同质量的功能。笔者结合亲身经历和它山之石总结出下面的功能开发流程,在流程上提高功能质量。一、 需求分析一般来说,需求分析是由产品经理来作的。软件工程师(以下...原创 2018-08-22 18:50:43 · 2655 阅读 · 0 评论 -
软件工程师解决测试人员测试出的bug流程
软件工程师在工作过程中,难免要解决软件中的各种bug,但是经常由于各种问题导致一个bug反反复复修改,甚至引出更多的bug。纠其原因,更多的是处理bug过程不规范导致的。笔者总结了工作中遇到bug的处理流程,如下: 一、bug确认分配到一个bug后,要根据bug单号到bug管理系统查看该bug的详细信息。1. 查看问题现象,了解问题2. 查看软件版本和操作流程,检查当前版本和操作...原创 2018-08-07 20:56:46 · 2786 阅读 · 0 评论