技術的なスキルのない上級管理職は、機能的なパラダイムの使用などの技術的な側面を気にするべきではありません。これは彼らの専門分野ではなく、マイクロマネジメントの匂いがします。なぜ彼らは実際にスキルを必要とする人にそれらの決定を委任しないのですか?
これは言われていますが、ここでは技術的な背景を持つ人々(最初のケース)とそうでない人々(2番目のケース)を説得するためのいくつかのヒントがあります。
最初のケース
プログラミングを知っている人と話している場合、関数型プログラミングパラダイムなしで記述されたコードと関数型スタイルで記述された同じコードを比較することで十分に納得できます。
命令型スタイルを使用するサンプル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))
);
その後、彼らに尋ねます:
プログラマーは最初のサンプルでいくつの間違いを犯すことができますか?2番目のものはどうですか?
間違いを見つけるのはどれくらい難しいですか?
コードを変更するのはどれくらい難しいですか?
3つの要素すべてが生産性に影響し、製品のコストにも影響します。
2番目のケース
プログラミングを知らない人を扱っている場合、彼らに伝えることができる技術的なものはあまりありません。説得力のある方法の1つは、あなたの仕事と同僚の仕事に対する機能的パラダイムの実際の影響を示すことです。
たとえば、同じチームが作成した2つのプロジェクトを比較します。1つはFPを使用し、もう1つは使用していません。バグの数がはるかに少ないこと、またはこれが会社が実際に予定通りに納品した最初のプロジェクトであることが十分に納得できるはずです。