2.4 C语言入职例程一:空心菱形输出

本文通过介绍C语言入职例程中的空心菱形输出,强调了工作闭环、边界判断和代码分节的重要性。作者通过设计有陷阱的例程,引导新人理解不完整反馈的后果,培养闭环工作习惯。在边界判断中,讨论了如何简化嵌入式程序的边界条件,重新定义菱形高度的概念。此外,文章还提到了代码分节对程序可读性和团队协作的价值,并探讨了在资源受限的嵌入式系统中如何进行权衡和优化。
摘要由CSDN通过智能技术生成

2.4.1 工作闭环和边界判断

为了帮助新人快速上手,我将自己当初学习Pascal时的第一个例程借了过来。我给新人布置的第一项任务是:“快速复习阅读《C程序设计语言》前4章,然后写一控制台程序:已知内层和外层菱形的高度,输出一空心菱形”。

大家是否会感觉这是一个很简单的例程呢?实际上这是我精心挑选设计出来的一个例程,因为其中有很多的坑。这个例子本身并不复杂,一般通过公司层层筛选招聘进来的学生,总是可以搞定的,但想不踩坑是不可能的。

多年职场经历告诉我一个很高效的团队工作技能:让工作闭环。遗憾的是,现实世界中,经常给新人安排一项工作后,如果你不主动问,经常就会没有任何反馈了。经常让人感叹,工作做完了,就不能回复一下吗?这个例程中我故意设计了一个陷阱,让新人去体会这种不反馈的后果,然后在顺势培养闭环的这种工作习惯。

已知内层和外层菱形的高度,输出一空心菱形,这个例程中菱形的高度并没有被清晰准确的定义。按照常规理解,习惯性将整个整个菱形高度作为高度,此时需要较复杂的边界判断逻辑,如下:

  1. 内层高度>0;
  2. 内层高度<屏幕边界;
  3. 内层高度为奇数;
  4. 外层高度>0;
  5. 外层高度<屏幕边界;
  6. 外层高度为奇数;
  7. 外层高度>内层高度。

新人的第一个提交版本一般很难做出完善的判断,甚至有很多人都意识不到需要进行边界判断,此时,在我的刻意错误输入下,程序就会出现各种各样异常,如下图所示:
在这里插入图片描述
又或干脆是:
在这里插入图片描述

相比较网络或数据库程序,大多数工控产品代码规模并不大,但对程序质量要求却比较严格。因此,如何写出高效简洁的边界判断语句,是一个嵌入式程序员的基本功。回到该例程,如何简洁且有效的对菱形高度进行判断,成为写好该例程的首个关键点。

在该例程的边界判断有个技巧,如果能约定菱形的高度为菱形上三角形的高度,边界判断就简洁很多(此时程序实现也会简单很多),如下:

  1. 菱形内层高度大于等于0;
  2. 菱形外层高度小于约定值(屏幕边界);
  3. 菱形内层高度小于菱形外层高度。

概念的重定义刚开始可能会让某些新人有不适感。概念是为了目标而服务的,不然就需要增加两条奇数判断逻辑,程序简洁性也会打折扣了。在嵌入式软件中,为了简化程序构建各种各样的概念是经常的事,如为了程序架构清晰,基于小容量eeprom也可以构建文件系统,但又不同于我们传统理解的文件系统。

重新定义菱形高度这个概念后,该例程就需要重新描述了。此时,我一般会让新人用自己的话重新描述该例程,遗憾的是现实世界中很多人做不好,可能源于平时缺乏相应训练吧。该处,希望大家稍微停下来想一想,试着用自己的话清晰描述这个例程。

一个团队协作时,会存在大量的交流,而交流过程中,总是会产生或多或少的歧义,而恰恰是这些歧义会导致需求的不明确,会导致大量的返工,甚至会导致项目的失败。因此,我给新人的第一份工作要求就是:执行前,将任务用自己的语言表达出来,和对方确认后再实施。这一点在以后的团队协作中非常的重要,因此我早早的将这一点嵌入到了入职培训中。如该例程在实现之前能多问一句,我或许就会提醒边界判断,就可能少走一些弯路。

经过这么一折腾,空心菱形例程重新描述如下:“写一控制台程序,用户输入内层和外层菱形的高度,输出一个空心菱形。菱形的高度约定为菱形

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值