fullstack-development / developers-roadmap

How to learn front-end or back-end development
1.19k stars 264 forks source link

[jun3/Haskell] Переместить вопрос из тайпклассов на мидла #311

Open kelizarov opened 3 years ago

kelizarov commented 3 years ago

Предлагаю переместить вопрос: How the problem of orphans and overlapping is solved in other languages or by different overloading implementation techniques? на мидла-1.

Мне кажется вопрос слишком обширной для джуна, ибо предполагает какое-то знакомство с другими языками программирования, которые имеют систему подобную тайп-классом.

antonkalinin-ml commented 3 years ago

Вынос на мидла проблему не решит - оттого, что ты стал мидлом, у тебя в голове не появится знание другого языка :). Ну разве что Scheme, так как он есть в программе мидла, но в Scheme вроде бы нет перегрузки и орфанов. Мне показалось, этот вопрос необязательный, о личном опыте сотрудника, мол, а с каким решением проблемы оверлаппинга инстансов ты сталкивался в других языках. Ответ на него зависит от того, какие языки знает сотрудник. Если он знает только язык X, то он и ответит только про X, но не ответит про какой-то другой язык Y, который не знает и в котором другое решение проблемы оверлаппинга. Если он ни один язык не знает, кроме хаскеля, или знает только языки, в которых нет перегрузки - ну и что, это тоже ответ. Не неправильный.

antonkalinin-ml commented 3 years ago

Можно его переформулировать, чтобы подчеркнуть необязательность. Мол, знаешь - расскажи, а не знаешь, ничего страшного.

kelizarov commented 3 years ago

Тогда думаю мне кажется его вообще можно было выпилить. Я так подумал спрашивать о том как в других языках это устроено, при этом не давая контекста про какие языки идет речь и не давая ресурсы на это очень странный подход.

Плюс мне кажется ответ на вопрос не сильно приближает к понимаю как устроена работа тайп-классов на самом хаскеле, и вопрос выглядит как из разряда "а вы знали, что ...?"

antonkalinin-ml commented 3 years ago

Да зачем сразу выпиливать? :) Этот вопрос ни к чему не обязывает. Хочешь - отвечай, не хочешь - не надо. Если из вопроса это неясно, можно переформулировать. Он небесполезный, при наличии опыта в других языках он интересен тем, что можно сравнить их с хаскелем. А там есть что сравнивать - тайпклассы это не совсем Java-интерфейсы, есть и общее, и различное.

Мне вообще нравится идея необязательных вопросов. Это позволяет специализироваться на интересном тебе, докинуть в карту развития больше потенциально интересных тем, а не заставлять всех учить гору информации в обязаловку, которая, может быть, не понадобится. Правда, это вроде бы актуально больше для мидла.

olgaklimenko commented 3 years ago

По тому что выше обсуждали:

Вообще сейчас всё что есть в карте обязывает это сдавать, может не сильно подробно, но все равно при подготовке нужно обратиться к ресурсам и изучить их (или подумать и попробовать примеры самому, если вопрос на подумать). Если оставляем, надо пометить вопрос как необязательный.

Моё предложение:

А вообще на 3м джуне есть ресурс https://dev.to/jvanbruegge/what-the-heck-is-polymorphism-nmh где описаны разные виды полиморфизма в хаскеле и других языках, он как раз предложен для изучения на этот вопрос (спойлер: прямого ответа на вопрос там нет). Там описаны разные виды полиморфизма, но на момент изучения в нашей карте упоминалось только 2 вида: параметрический и ad-hoc. Я предлагаю вынести этот ресурс на мидла, когда уже проще будет понять остальные виды полиморфизма (Kind, Higher-rank polymorphism и другие), и подвести итог, добавив вопросы на сравнение, что из этого есть не только в хаскеле и как оно сделано. И сюда же поставить вопрос про оверлаппинг и орфаны, который уже будет легко обдумать.