Красота - понятие относительное


Только вчера написала "самый лучший код" (это здесь), а сегодня задумалась: что означает "самый лучший"?
Код, в котором реализованы все новые возможности языка?
Не факт.
Например, здесь разработчик утверждает совершенно противоположное:

Общее заблуждение что код должен быть "современным", использовать последние стандарты. Новый синтаксис не несет никакой ценности для программиста.


Здесь разработчик удивляется, что рекрутер на собеседовании:

не постеснялся спросить, что такое let и const в моем javascript… Он не проверял мои знания, он действительно не знал, что это.
 
Так кто прав? И, если не новизна, тогда какие особенности отличают хороший код?
Предположу, что хороший код описывают три пункта. Он должен быть:
  • лаконичным
  • понятным
  • быстрым
Лаконичность кода - это время работы программиста, которое более ценное, чем машинное время.
Понятность кода - это время на его последующее изменение, которое по некоторым отзывам составляет до 80% всего времени работы с кодом.
Скорость работы кода - ведущий фактор для высоконагруженных проектов и единственный объективный из всех перечисленных.

И, если окажется, что новый современный код работает медленнее, чем старый, тогда беда. Потому что это означает изменения для изменений.

Бенчмарк для проверки скорости работы кода выглядит так:

function bench(f) {
        var date = new Date();
        for (var i = 0; i < 10000; i++) f();
        return new Date() — date;
    }

    console.log( 'Время count1: ' + bench(f1) + 'мс' );
    console.log( 'Время count2: ' + bench(f2) + 'мс' );
    console.log( 'Время count2: ' + bench(f3) + 'мс' );

Он принимает аргумент  f - это исследуемая функция, определяет время начала выполнения кода, запускает функцию 10000 раз (или 1000, или 100000 - цифры можно варьировать) и показывает сколько времени прошло с момента начала выполнения кода.

f1, f2 и f3 это соответственно моё решение, решение автора и окончательный вариант кода из этого топика.
Ну, с богом.

К сожалению, не получилось.
Ошибка Uncaught SyntaxError: Illegal return statement
Вероятно, браузер не умеет несколько раз запускать код, связанный с DOM.

Если что, код был таким

Попробовала запустить бенчмарк вот с таким кодом

var times = ["5:43", "2:33", "3:45", "0:47", "5:21", "6:56", "3:46", "5:25", "3:14", "3:31", "5:59", "3:07", "11:29", "8:57", "5:49", "5:52", "5:50", "9:13", "11:51", "7:58", "4:40", "4:45", "6:46", "7:24", "7:12", "5:23", "3:34", "8:22", "5:17", "3:10", "4:43", "19:43", "0:47", "0:47", "3:14", "3:59", "2:43", "4:17", "6:56", "3:05", "2:06", "1:59", "1:49", "3:36", "7:10", "3:44", "3:44", "4:36", "3:16", "1:10", "6:10", "2:14", "3:44", "5:05", "6:03", "12:39", "1:56", "4:04"];


function f1(times) {
  var arrTime = [];
for (var j = 0; j < times.length; j++) {
  times[j] = times[j].split(':');
  var time = times[j][0] * 60 + + times[j][1];
  arrTime.push(time);
}
var t = arrTime.reduce((a, b) => a + b);
var seconds = t % 60;
var mins = (t - seconds) % 3600 / 60;
var hours = (t - seconds - mins * 60) / 3600;
console.log(hours, mins, seconds)
}


function f2(times) {
const seconds = times.map(timeCode => {
  const[mins,
  secs] = timeCode.split(':').map(parseFloat);
  return (mins * 60) + secs;
}).reduce((total, vidSeconds) => total + vidSeconds);
let secondsLeft = seconds;
const hours = Math.floor(secondsLeft / 3600);
secondsLeft = secondsLeft % 3600;
const mins = Math.floor(secondsLeft / 60);
secondsLeft = secondsLeft % 60;
console.log(hours, mins, secondsLeft);
}


function f3(times) {
var time = times.map(timeCode => {
  timeCode = timeCode.split(':');
  return timeCode[0] * 60 + + timeCode[1];
}).reduce((a, b) => a + b);
var seconds = time % 60;
var mins = (time - seconds) % 3600 / 60;
var hours = (time - seconds - mins * 60) / 3600;
console.log(hours, mins, seconds)
}


function bench(f) {
var date = new Date();
for (var i = 0; i < 10000; i++) f(times);
return new Date() - date;
}


console.log('Время count1: ' + bench(f1) + 'мс');
console.log('Время count2: ' + bench(f2) + 'мс');
console.log('Время count2: ' + bench(f3) + 'мс');



Ошибка
VM128:8 Uncaught TypeError: times[j].split is not a function
    at f1 (<anonymous>:8:23)
    at bench (<anonymous>:49:33)
    at <anonymous>:54:32


При этом без бенчмарка каждая функция запускаются и работает.
Странно это

UPD: Запустила бенчмарк для каждой функции отдельно

Результат:
Время count1: 2421мс
Время count2: 1884мс
Время count1: 1760мс

Это хорошо. Даже очень. Потому что означает что
а) новый код работает быстрее, чем старый (см. разницу в скорости первой и второй функции)
б) я правильно понимаю "что такое хорошо и что такое плохо" потому что третья функция (моя) работает даже быстрее, чем вторая (автора курса, разработчика с большим стажем и опытом, который учит других как надо делать).

Плохо то, что я так и не поняла почему код выдаёт ошибку. Избавиться от неё получилось добавив в первую функцию приведение times[j] к строке: times[j] = times[j] + "";
При этом код отработал, но появились ошибки в консоли (скрин), а когда попробовала запустить три функции вместе, причём первую уже "исправленную" приведением times[j] к строке, оказалось, что timeCode.split is not a function . А ведь этот код писал автор курса. Вероятно, проблема не в коде, а в его запуске в консоли браузера.