没有技术技能的高级管理人员不应在意技术方面,例如功能范式的使用。这不是他们的专业领域,并且散发出微观管理的味道。他们为什么不将那些决定权委托给实际需要技能的人?
话虽如此,这里有一些提示可以说服具有技术背景的人(第一种情况)和没有技术背景的人(第二种情况)。
第一种情况
如果您正在与了解编程的人交谈,那么比较没有功能性编程范例编写的代码和以功能性风格编写的相同代码可能会令人信服:
使用命令式样式的示例C#代码:
var categorizedProducts = new Dictionary<string, List<Product>>();
// Get only enabled products, filtering the disabled ones, and group them by categories.
foreach (var product in this.Data.Products)
{
if (product.IsEnabled)
{
if (!categorizedProducts.ContainsKey(product.Category))
{
// The category is missing. Create one.
categorizedProducts.Add(product.Category, new List<Product>());
}
categorizedProducts[product.Category].Add(product);
}
}
// Walk through the categories.
foreach (var productsInCategory in categorizedProducts)
{
var minimumPrice = double.MaxValue;
var maximumPrice = double.MinValue;
// Walk through the products in a category to search for the maximum and minimum prices.
foreach (var product in productsInCategory.Value)
{
if (product.Price < minimumPrice)
{
minimumPrice = product.Price;
}
if (product.Price > maximumPrice)
{
maximumPrice = product.Price;
}
}
yield return new PricesPerCategory(category: productsInCategory.Key, minimum: minimumPrice, maximum: maximumPrice);
}
考虑到功能编程重写的相同代码:
return this.Data.Products
.Where(product => product.IsEnabled)
.GroupBy(product => product.Category)
.Select(productsInCategory => new PricesPerCategory(
category: productsInCategory.Key,
minimum: productsInCategory.Value.Min(product => product.Price),
maximum: productsInCategory.Value.Max(product => product.Price))
);
然后问他们:
程序员在第一个示例中可能犯多少个错误?那第二个呢?
发现错误有多难?
修改代码有多困难?
所有这三个因素都会影响生产率,因此也会影响产品的成本。
第二种情况
如果您要与不懂编程的人打交道,那么您可以告诉他们的技术知识不多。令人信服的方法之一是显示功能范式对您的工作和同事的工作的实际影响。
例如,比较同一团队的两个项目,一个使用FP,另一个不使用它。说明错误的数量要少得多,或者这是公司按时实际交付的第一个项目,应该足以令人信服。