试论知识工作者的任务分析

在20世纪,管理所做的最重要也是唯一的贡献,就是把生产过程中体力劳动者的生产率提高了50倍;

在21世纪,管理需要做出的最重要的贡献,是使知识工作者的生产率得到同样的提高。

                                    ——德鲁克《21世纪的管理挑战》

 

20世纪初期的美国,资本家们正为工厂的管理问题而头痛:由于实行经验管理,由此造成一个突出的矛盾,就是不知道工人一天到底能干多少活,但总嫌工人干活少,拿工资多,于是就往往通过延长劳动时间、增加劳动强度来加重对工人的剥削。而工人,也不确切知道自己一天到底能干多少活,但总认为自己干活多,拿工资少。当资本家加重对工人的剥削,工人就用“磨洋工”消极对抗,造成恶性循环,工厂的劳动生产率也一直在低位徘徊。

针对这个问题,泰勒运用时间-动作研究方法对工人的工作进行科学研究。泰勒提出,企业应设立一个专门制定定额的部门或机构,设计出合理的工作程序,确定工人“合理的日工作量”,即劳动定额。然后根据定额完成情况,实行差别计件工资制,使工人的贡献大小与工资高低紧密挂钩。泰勒的方法一方面提高了工人的劳动效率,一方面又提高了工人的积极性,使得后来的劳动生产率得到了几十倍的提高。他的方法起初被称为“任务管理法”,后来称为“科学管理”。

21世纪的今天,许多企业又面临着与20世纪初期那些企业相似的困境。历史总是惊人相似,但不会简单重复。只是这次问题的主角,已经不是生产线上的工人,而换成了坐在办公桌旁的知识工作者。对这个问题我们也已经有了一个名称——“大企业病”。其表现就是: 机构臃肿、人浮于事、责任不清、效率地下。得了该病的企业市场反应迟钝,愈来愈不能适应新的、竞争日益激烈的经济环境。

德鲁克指出,在21世纪,我们面临的最主要的挑战不再是提高体力劳动者的生产率,而是提高知识工作者的生产率。知识工作者的生产力不仅决定着个人的成功和所能取得的成就,也决定着组织的成功和最终在竞争中能否生存,还决定着国家的繁荣以及在世界经济中的地位。德鲁克认为,今天知识工作者的生产力同1880年的体力劳动者的生产力一样低。实际上,有数据表明,虽然现在有这么多高新技术、电脑和各种新设备,但知识工作者的生产力并没有得到有效提高,他们中有的人的生产力可能比1929年还要低。出现这种状况的原因与1880年体力劳动者生产力低下的原因是完全相同的,那就是:我们没有认真研究知识工作者的生产力。

那么,21世纪的今天,要提高知识工作者的生产力,泰勒的科学管理还适用吗?泰勒的方法实际是通过对工人工作任务的“定量化”,再辅之以差别计件工资制,从而最终达到提高劳动生产率的目的。

回顾科学发展的历史,可以说,“量化”是一切科学的基础。牛顿力学就是通过对“力”的定量化分析而建立起来的。虽然事实上早在牛顿之前几千年,人类就已经通过劳动实践逐渐建立起了“力”的观念,然而直到牛顿确立了力的定量意义之后人们才茅塞顿开。从此开始,“力”的定量方法很快就渗透到了几乎所有的经验科学领域,伟大的近代自然科学体系就是在牛顿力学和近代分析数学的基础上建立起来的。与此相随的是工业革命的兴起和社会的蓬勃发展。

可以肯定,在21世纪,要提高知识工作者的生产力,量化”仍然是一个关键。我认为,泰勒的“对劳动者的任务进行定量分析,然后据此制定考核标准”思想依然适用。然而,知识工作者的任务是复杂的脑力劳动,与体力劳动者的任务有着本质的差别。

下表是笔者提出的体力劳动与知识工作的比较:

 

比较项目

体力劳动者的任务

知识工作者的任务

任务性质

简单手工操作

复杂脑力活动

任务环境

简单(机器或生产线)

复杂(组织网络)

任务内容

固定、清晰

变化、模糊

需要知识和信息

需要决策

任务来源

单一

多样化

任务产生

顺序

并发

任务数量

单一任务

多任务

任务之间关系

一维线性

多维非线性

考核标准

容易量化

不容易量化

 

可见,知识工作者的任务比体力劳动者在复杂度上提高了不止一个数量级。我们无法采用泰勒的方法来对知识工作者的任务进行定量分析。实际上,我们今天很难找到合适的方法来准确地对每个知识工作者的任务进行定量分析!而且,由于知识工作的非重复性,即使对某个任务可以量化,我们也不能把它标准化,作为其它人其它任务的参照。

不仅如此,更麻烦的是,知识工作者的生产率不仅取决于知识工作者本人,还会受到工作环境的影响,知识工作者之间也会相互影响!也就是说,即使你能单独定量分析每个知识工作者的任务,一旦把他们放入特定的企业系统中,你分析的数据立即就变得不准确了,甚至完全没有价值!

所以,我们今天面临的问题,不仅是要提高个体的效率,还要提高整个企业的效率。因为,所有知识工作者构成了一个有机的系统,企业的整体效率不仅取决于个体的效率,还取决于企业本身所处的环境、结构、功能和状态。企业的整体效率并不是单个知识工作者的效率的总和(这点与体力劳动者的任务也有很大的不同),而是大于或小于个体的总和。所以,我们不仅要分析单个知识工作者的任务,还要研究企业这个系统

但是,目前我们连单个知识工作者任务的定量化问题都解决不了,还如何能研究企业这个整体呢?科学的发展史也许可以为我们提供一些启示。19世纪末,当经典力学经典电动力学在描述微观系统时的不足越来越明显时,量子力学的出现解决了这一问题。如果说,泰勒对体力劳动者的任务分析可以运用牛顿力学原理进行定量分析的话,那么,对知识工作者的任务分析则应该借助统计学来进行。

统计学是一门通过搜索、整理、分析数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。统计在现代化管理和社会生活中的地位日益重要。它的使用范围几乎覆盖了社会科学自然科学的各个领域。

那么,统计分析的对象是什么?

当前,许多企业已经上了ERP等信息系统,并积累了大量的物料库存数据、产品数据、销售数据。也有一些企业试图用数据挖掘技术去发现一些有用的信息,但这些努力注定不会有什么收获。为什么?因为这些数据都与企业中的活动(任务)无关,而只是活动的结果。我们很难从这些结果数据得出如何改进我们的管理的有用信息。我们可能知道某方面的管理存在问题,但问题出在哪个环节?原因是什么?我们还是一无所知。而这,只有通过分析业务流程中的任务,才能做到。

所以,我们统计分析的对象,当然是任务。在企业管理中,任务应该是我们管理的中心,因为企业就是通过完成各种任务从而创造价值的。

我们可以对企业中所有的任务从不同的角度进行统计和分析,并从中发现一些问题甚至规律,找出问题的原因,不断改进我们的管理,优化我们的系统。

接下来,我会从不同的角度对任务进行一些统计分析。

### RK3588平台NPU调用方法 #### 创建和初始化NPU环境 为了在RK3588平台上成功调用NPU进行神经网络推理或加速,首先需要确保设备已正确配置并加载了相应的驱动程序。Rockchip的官方固件通常已经预装了RKNPU驱动[^3]。 一旦确认硬件准备就绪,可以通过以下方式创建和初始化NPU环境: ```cpp #include "rknn_api.h" // 初始化模型路径和其他参数 const char* model_path = "./model.rknn"; int ret; rknn_context ctx; ret = rknn_init(&ctx, model_path, 0, 0, NULL); if (ret < 0) { printf("Failed to initialize rknn context\n"); } ``` 这段代码展示了如何使用`rknn_api.h`库来初始化一个RKNN上下文对象,这一步骤对于后续的操作至关重要[^2]。 #### 加载和编译模型 接下来,在实际运行之前还需要加载预先训练好的神经网络模型文件(通常是`.rknn`格式)。此过程涉及读取模型二进制数据,并将其传递给RKNN API以便内部处理和优化。 ```cpp // 假设模型已经被转换成 .rknn 文件格式 char *model_data; // 模型的数据指针 size_t model_size; // 模型大小 FILE *fp = fopen(model_path, "rb+"); fseek(fp, 0L, SEEK_END); model_size = ftell(fp); rewind(fp); model_data = (char *)malloc(sizeof(char)*model_size); fread(model_data, sizeof(unsigned char), model_size, fp); fclose(fp); // 将模型数据传入RKNN API ret = rknn_load_rknn(ctx, &model_data, &model_size); free(model_data); if(ret != 0){ printf("Load Model Failed!\n"); } else{ printf("Model Loaded Successfully.\n"); } ``` 这里说明了从磁盘读取模型文件的具体操作流程,并通过API函数将这些信息提交给了底层框架去解析和设置好用于推断所需的资源[^1]。 #### 执行前向传播计算 当一切准备工作完成后就可以开始真正的预测工作——即让NPU执行一次完整的前向传播运算。这个阶段主要是构建输入张量、启动异步任务以及收集输出结果。 ```cpp float input_tensor[INPUT_SIZE]; // 输入特征图数组 float output_tensors[MAX_OUTPUTS][OUTPUT_SIZE]; // 输出特征图数组 struct rknn_input inputs[] = {{input_tensor}}; struct rknn_output outputs[MAX_OUTPUTS]; for(int i=0;i<NUM_ITERATIONS;++i){ memset(inputs, 0 ,sizeof(struct rknn_input)); memcpy(input_tensor, inputData[i], INPUT_SIZE*sizeof(float)); // 启动推理任务 ret = rknn_run(ctx, nullptr); if(ret!=0){ printf("Inference failed at iteration %d", i); break; } // 获取输出结果 for(size_t j=0;j<num_outputs;++j){ struct rknn_output& out = outputs[j]; size_t bufSize = OUTPUT_SIZE * sizeof(float); void* buffer = malloc(bufSize); ret = rknn_get_output(ctx, j, &out.datatype, &buffer, &bufSize, false); if(!ret && buffer){ memcpy(output_tensors[j], buffer, bufSize); free(buffer); } } } printf("All iterations completed successfully."); ``` 上述片段体现了典型的基于RKNN SDK的应用场景:先准备好待测样本作为输入;接着触发内核中的计算逻辑;最后获取到经过变换后的响应值供下一步分析所用[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值