כלי טוב מדי

02/09/2020

אנחנו יודעים שקל יותר להבריג בורג עם מברג מאשר עם פטיש, ובשביל לקדוח בקיר עדיף שתהיה לכם מקדחה ביד, אבל אנלוגיית הכלים לא תמיד עובדת כשיש לנו כלים יותר טובים ופחות טובים.

ביוניקס מאוד קל לראות את זה כשמסתכלים על פקודות כמו cut ו awk. לכאורה אין שום היגיון להשתמש ב cut: כל מה ש cut יודעת לעשות, awk יודעת לעשות טוב יותר.

וזאת בדיוק הסיבה ללמוד להשתמש ב cut.

או ניקח דוגמא משפות תכנות: כל מה שאפשר לכתוב עם map אפשר לכתוב עם לולאת for. ועדיין אם יש לי רשימה של מספרים ואני רוצה לחשב את סכום הריבועים שלהם אני אעדיף לכתוב:

const numbers = [1, 2, 3, 4];
const plus = (a, b) => a + b;
const square = x => x * x;
const result = numbers.map(square).reduce(plus);
console.log(result);

על פני:

const numbers = [1, 2, 3, 4];
let result = 0;

for (let i=0; i < numbers.length; i++) {
  result += numbers[i] * numbers[i];
}

console.log(result);

ובדיוק מהסיבה הזאת אני מעדיף את const על פני let.

בכתיבת קוד אנחנו רוצים לבחור את הכלי שיש לו הכי פחות אפשרויות שעדיין פותר טוב את הבעיה. עם כלי כזה יש פחות תקלות, פחות מקרי קצה שלא חשבנו עליהם ופחות הזדמנויות לבעיות אבטחה.

הכלי הטוב מדי מביא איתו יותר עומס ומסתיר את הדבר שבאמת רצינו לעשות.