Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2014, 00:33
Аватар для sphere89
Интересующийся
Отправить личное сообщение для sphere89 Посмотреть профиль Найти все сообщения от sphere89
 
Регистрация: 02.04.2013
Сообщений: 15

Функция для работы с массивами reduce
Доброго времени суток уважаемые участники форума. Хочу вам рассказать историю, которая не оставляет меня в покое уже долгое время, она связана с функцией reduce.

Предисловие:

По своему опыту я ее использовал зная, что это функция высшего порядка (функция получающая в аргумент другую функцию и возвращающая функцию или результат функции обратно). Никогда не задумался о реализации, зная что с ее помощью можно суммировать каждый индекс массива и в результате получить общую сумму чисел (с помощью заданной в аргумент функции обратного вызова). Где-то в глубине своих знаний о JS и программировании подразумевал, что внутри итератор (for, while) и происходят всякая магия на уровне Ecmascript или C++ - который под капотом в браузере.

Случай из жизни

Некоторое время назад меня уволили из HeadHunter, я начал активно искать работу как Front-end разработчик. Соответственно использовал HH для этого с его Python (Tornado, XSLT и морем JAVA API Бэкендов). Назначили собеседование в фирме которая занимается VPS, телофонией и прочими услугами. Пришел на собеседование, сразу перешли к тестированию. Первый вопрос напишите реализацию наследования, вариант с наследованием при помощи proto подошел (Первое что пришло в голову, хотя можно было и с помощью вложенных конструкторов написать и фабрику классов). В общем написал быстро, думаю ну ладно первый вопрос готов. Спросили про Pub-Sub, рассказал как в jQuery работает он, что паттерн Observer очень люблю использовать.

И тут пришел полный провал, мужик просит написать реализацию функции в которой без итератов нужно сложить в строку все аргументы функции, в общем начал придумывать, что arguments (массив), хотя он Object-like array. Написал return arguments.toString(). (Он на меня с недоумением посмотрел и говорит давай дальше)...

Дальше еще круче, я конечно в течении не долгого времени программирую и изучаю JS (1.5 Года). Мужик дает бумажку и говорит, вот есть два массива (разный набор чисел) напиши реализацию функции map, reduce и после этого получи мол вот эту сумму с помощью этих двух функций и на бумажке показал какая логика суммирования должна быть (Аргументировал что в больших проектах все разработчики должны идеально понимать мат.часть Javascript). В общем я просто взорвал мозг, понимая какие входные данные у функций и что возвращают, пытался сообразить, как это сделать. Но спустя 10 минут, мужик пришел и спросил: Видимо не потянул, ну ладно, тебе надо учить мат.часть Javascript. Хочешь последний воспрос? Я говорю окей, он в ответ: если ответишь развернуто, получишь работу "Какую роль в регулярных выражениях занимают конечные автоматы и сможешь объяснить как они внутри работают?". Последний вопрос меня вообще в пух и прах разбил и заставил задуматься о том, что бы взять Вирта, Алгебру, Высший Матан, Факториалы, C++, структуры данных, указатели, изучить досконально машину тьюринга, записаться на TopCoder или повеситься дома из-за разочарования.

Спасибо всем кто прочитал мою историю, возможно многим она будет полезна, но интересует мнение более опытных программистов и разработчиков с большим стажем. Вот откуда черпать знания? Например javascript.ru - да есть описание функций базовых, входных - выходных данных. Даже сам Ecmascript - мат часть не раскрывает тех функций которые встроены в языке. Изучаю Python - там так-же. Единственное где видел что-то около похожее на, то что бы получить знания по реализации подобных функций (Вирт, Кнут, учебники политехов. (Теория и практика ЯП, В. Математика и прочее). Вот как систематизировать знания? Хотелось бы самому полифилы для браузеров писать, понимать как составить алгоритм. Что посоветуете?

P.S: По поводу реализации всех функций, я нашел у Mozzilla Foundation ресурс который описывает все полифилы для старых браузеров: https://developer.mozilla.org/en-US/..._Objects/Array - Почитав, немного понял, как в следующий раз победить такого сурового дядьку на собеседовании, но это все равно заучивание. Хотелось бы услышать как люди сами пришли к понимаю подобных реализаций и каким путем. Учить функциональное программирование? Анализ функций в математике? Алгоритмы?

В итоге начал копать прям академично и досконально, разбираться как структуры данных строятся внутри памяти, какие алгоритмы бывают (сортировки, архивации, как видео кодируется и прочее, как со звуком работать, анализ сложности алгоритмов, структуры данных, C, C++, математику начал повторять начиная с алгебры, теорией множеств, численное моделирование и прочее... Мозг взрывается, программировать лучше я не стал спустя два месяца глобального погружения, почти сутками изучая фундамент. Единственное, что реально улучшило мышление - это олимпиадные задачи, примеры решения, немного помогла книга Вирта. Но все равно в голове висит вопрос, что имел ввиду мужик под выражением "Учить мат часть javascript". Может книгу драконов почитать, о том как писать свой интерпретатор, Haskell в придачу разобрать. Может есть другой способ? Например взять исходники Javascript и их почитать и разобрать?

Последний раз редактировалось sphere89, 30.03.2014 в 00:41.
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2014, 05:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Матчасть javascript тут не причём, он очевидно имел ввиду просто матчасть программирования. Теоретически это то, что дают в вузах по специальности. Искать соответственно нужно готовые комплексные программы обучения.
Программировать в целом на javascript ты лучше от этого не станешь, только если область какая специфически-научная.
P.S. С arguments ты конечно дал.
P.P.S. Полноценные полифилы я бы тоже с ходу не написал, но на функции делающие то что нужно - сейчас ушло ровно три минуты...
__________________
29375, 35

Последний раз редактировалось Aetae, 30.03.2014 в 05:44.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Переодическое обновление значений для графика, функция для обновления значений yupa87 Общие вопросы Javascript 0 09.07.2009 14:48
Script для автоматизации работы с браузером ksa791 Общие вопросы Javascript 6 02.04.2009 14:30