К тому, что написано в комментарии, еще можно добавить:
SQL JOIN это декартово произведение, и его размер растет довольно быстро. Начиная с некоторого уровня вложенности в GraphQL, размер Result Set из базы может очень сильно удивить
из той же проблемы есть ряд приседаний связанных с тем, как делать пагинацию. Особенно для вложенных данных.
а еще иногда бывает, что сильно не все данные есть в реляционной базе
В общем на первый взгляд DataLoader выглядит некоторым безумием, а на второй, в парадигме работы с данными GraphQL - весьма практичная штука.
Потыкать всякие OCaml-и с Лиспами, да всякие Zig-и на первом курсе - очень правильное дело. Но я таки оставлю полтора непрошенных совета:
хорошо бы найти какую-то современную джаву (Golang, Python, что там сейчас самое модное и не планирует умирать?), и разобраться с ней на должном уровне. Потому что рано или поздно захочется чтобы за программирование еще и платили. И вот нельзя исключить момента, что за OCaml где-то платят младшекурснику, но это очень много звезд должно сойтись.
я бы очень сильно рекомендовал поискать настоящую работу. Может даже на четверть ставки. Язык программирования в работе разработчика необходимая, но не достаточная штука. Есть взаимодействие с коллегами/начальниками/кастомерами, есть предметная область (по сравнению с некоторыми все эти брейнфаки, уайтспейсы и перл-уанлайнеры - образец читаемости, простоты и понятности), есть богатая россыпь тулинга от гитов с линтерами до кубернетисов с терраформами, и еще много всякого
это не значит, что то, что описано в статье - не важно. Важно. Но вот эти штуки выше они все это дело укладывают в достаточно реалистичную канву и кое как структурируют это дело
ну и пока молодой без кредитов, ипотек, машин квартир - меняй работу почаще. Увидишь побольше
Golang весьма толковый инструмент: приятная модель concurrency (возможно одна из лучших, доступных искоробки), компилируется быстро, опять же бинарник один, тулинг достаточно приятный, неплохой набор батареек в комплекте.
Но качественно спроектированный язык программирования? Тут переменные объявляй так, здесь по-другому, тут new, там make. Вот так встроенным функциям делать можно, а программистам - нет. Интерполяция строк в 2024? Вот вам Sprintf. Generics вот завезли спустя 14 лет. Ну спасибо, ну праздник.
Не поймите меня неправильно, у этой ограниченности есть свои преимущества. Golang - хороший инструмент. Всякие терраформы с кубернетисами это только подтверждают. Но как язык - он все что угодно, но не хорошо спроектированный ортогональный язык.
С lerna все хитро: изначальный продукт немного умер. Потом разработку lerna перехватили ребята, которые делают nx. И теперь lerna внутри - это nx.
Я в этой связи перевез достаточно большой проект с lerna на nx. Нравится. Там очень много свистелок, которые не особо нужны, но ядро работает прекрасно и делает все, что необходимо.
Если не нравится nx, есть turborepo. Он местами даже поинтереснее будет. Но частично написан на Rust. Для pet-проекта это не беда. Для большого проекта - это значит что чтобы заглянуть в него, надо понимать неплохо Rust.
Кабачок иногда сложно купить зимой, а вот свежие огурцы чаще всего всегда есть в наличии. Их только почистить надо от шкурки - и прям хорошо получается Ну это тем, кому лук не заходит
Obsidian, в режиме текстового файлика, без плагинов для всякого модного
Лет за 10 попробовал все популярные решения до которых дотянулся: Wunderlist, Trello, Any.Do, Todoist, TickTick, просто почту, Evernote, OneDrive, липкие стикеры, Moleskin, бумагу А4 и А3, Monday, Apple Reminders и даже Jira.
В итоге отпустило, когда пришло понимание, что ключ не в том, как оно организованно и в какой цвет покрашено, а в том, чтобы выработать привычку смотреть туда хотя бы пару раз в день.
А важные навыки - это какие? Коммуникационные - сомнений нет. Какие-нибудь там кванты с радиофизикой, да хардкорная мат.статистика - крайне сомнительно.
ChatGPT для не-программирования пользовался давно и обширно, а вот непосредственно с написанием кода очень долго рефлексировал, не понимая, куда же это в моей системе категорий относится. В итоге пришел к следующему:
это еще чуть более умный code completion tool: в Borland Turbo C код комплишн вообще отсутствовал, в NetBeans/Eclipse уже было неплохо, в IJ IDEA со товарищи стало хорошо. Теперь вот стало еще умнее.
это неплохой апргейд Rubber Duck debugging. Резиновая утка была неплоха - слушала внимательно. Теперь еще и отвечает, и даже довольно часто в тему.
и в том же духе - с этой штукой иногда неплохо бывает обсудить свои мысли касательно архитектуры/реализации. Вопрос, как известно, уже содержит половину ответ, а уж сформулированный и записанный вопрос - тем более. Да и ответы часто как минимум не сильно мимо.
всякое рутинное неплохо автоматизируется. Написать болванку документации - уже неплохо.
Вот имхо, плохая идея в хоть сколько-нибудь отдаленной перспективе для всех:
Rust-программистам быстро станет скучно разбираться в очередных тонкостях ES202x и обновлениях TS
JS/TS - программистам писать новые и редактировать существующие правила станет сложно. Чтобы это сделать нужно неплохо изучить сильно другой язык программирования (и Rust это не поганая джава, там думать надо по-другому)
когда оно начнет крашится по причине некачественного плагина, или опции --timing как в комментарии выше, то будь оно написано на JS/TS еще есть шанс подебажить самому, тулинг-то в основном тот же. Найти человека, который на постоянной основе знает JS/TS и очень большой молодец в Rust.. ну не знаю, а зачем он на JS/TS тогда пишет?
В общем имхо, писать основной тулинг (а линтер в 2023 году, как ни крути - основной тулинг) на языке, отличном от языка, для которого этот линтер пишется - со всех сторон странная затея. Тут конечно надо не на Rust/Go/С++ (спаси и сохрани) все переписывать, а искать варианты того, что нужно протолкнуть в node, чтобы хотя бы свой тулинг работал пошустрее.
Так а по другому не получится, если действительно очень хочется опираться на интерфейсы - никаких интерфейсов в рантайме нету. А для того, чтобы TypeGuards завелись для интерфейсов - эти самые интерфейсы нужно в рантайме как-то различать. И различать их путём перебора всех возможных наследников - ну такая себе идея.
Там выше заметили, что вообще вопрос неправильный и спрашивать надо не так :). Ну, вопрос такой, какой есть. И Type Labeling вполне себе стандартный подход для решения этой проблемы в TS. Да, типы придётся потэгать ручками. Но, компилятор любезно даст по рукам, если забыть это сделать, а на этом все проблемы и заканчиваются
Ну, на Вопрос 2 есть сильно более лучший ответ. Есть более правильные, надёжные и масштабируемые способы решить эту проблему даже в масштабах технического интервью.
Branded/Tagged types
// Tagged types directly
interface IEvent {}
interface ISimpleEvent extends IEvent {
__tag: 'ISimpleEvent';
}
interface IComplexEvent extends IEvent {
__tag: 'IComplexEvent';
}
class T implements ISimpleEvent {
__tag: 'ISimpleEvent' = 'ISimpleEvent';
}
class D implements IComplexEvent {
__tag: 'IComplexEvent' = 'IComplexEvent';
}
function isComplexEvent(smth: any): smth is IComplexEvent {
return smth?.__tag === 'IComplexEvent';
}
function processEvent(event: IEvent) {
if(isComplexEvent(event)) {
console.log('ComplexEvent');
} else {
console.log('SimpleEvent');
}
}
// Or Branded type helper
type Branded<A, B> = A & { __brand: B };
type IEvent2 = Branded<{}, 'IEevent2'>;
type ISimpleEvent2 = Branded<{/*...*/}, 'ISimpleEvent2'>;
type IComplexEvent2 = Branded<{/*...*/}, 'IComplexEvent2'>;
// ... and so on
На всякий случай добавлю, что Evernote Legacy по прежнему умеет выделять все заметки и экспортировать их в один enex файл со всеми тэгами и вложениям. Ровно как и импортировать обратно. Новый клиент ограничивает этот процесс 50 заметками за раз. В качестве бэкапа - то что нужно.
Ну и на самый крайний случай формат enex хоть и засилие xml, но в целом более-менее парсится.
Понятно, что на вкус и цвет, но и музыку в эти плейлисты «консьерж» подбирает как консьерж, только немного глухой, бухой и напрочь отсутствующим чувством прекрасного.
Имхо, конечно, но подборки у гугла прямо не фонтан. А вот как фонотека, да за 159 рублей в месяц — отлично.
del
Я мимо проходил, но кажется это фракталы.
А по фракталам есть вузовские учебники. Как минимум нам откуда-то курс по ним читали
Зато есть другие увлекательные проблемы :)
К тому, что написано в комментарии, еще можно добавить:
SQL JOIN это декартово произведение, и его размер растет довольно быстро. Начиная с некоторого уровня вложенности в GraphQL, размер Result Set из базы может очень сильно удивить
из той же проблемы есть ряд приседаний связанных с тем, как делать пагинацию. Особенно для вложенных данных.
а еще иногда бывает, что сильно не все данные есть в реляционной базе
В общем на первый взгляд DataLoader выглядит некоторым безумием, а на второй, в парадигме работы с данными GraphQL - весьма практичная штука.
Потыкать всякие OCaml-и с Лиспами, да всякие Zig-и на первом курсе - очень правильное дело.
Но я таки оставлю полтора непрошенных совета:
хорошо бы найти какую-то современную джаву (Golang, Python, что там сейчас самое модное и не планирует умирать?), и разобраться с ней на должном уровне. Потому что рано или поздно захочется чтобы за программирование еще и платили. И вот нельзя исключить момента, что за OCaml где-то платят младшекурснику, но это очень много звезд должно сойтись.
я бы очень сильно рекомендовал поискать настоящую работу. Может даже на четверть ставки. Язык программирования в работе разработчика необходимая, но не достаточная штука. Есть взаимодействие с коллегами/начальниками/кастомерами, есть предметная область (по сравнению с некоторыми все эти брейнфаки, уайтспейсы и перл-уанлайнеры - образец читаемости, простоты и понятности), есть богатая россыпь тулинга от гитов с линтерами до кубернетисов с терраформами, и еще много всякого
это не значит, что то, что описано в статье - не важно. Важно. Но вот эти штуки выше они все это дело укладывают в достаточно реалистичную канву и кое как структурируют это дело
ну и пока молодой без кредитов, ипотек, машин квартир - меняй работу почаще. Увидишь побольше
Golang весьма толковый инструмент: приятная модель concurrency (возможно одна из лучших, доступных искоробки), компилируется быстро, опять же бинарник один, тулинг достаточно приятный, неплохой набор батареек в комплекте.
Но качественно спроектированный язык программирования? Тут переменные объявляй так, здесь по-другому, тут new, там make. Вот так встроенным функциям делать можно, а программистам - нет. Интерполяция строк в 2024? Вот вам Sprintf. Generics вот завезли спустя 14 лет. Ну спасибо, ну праздник.
Не поймите меня неправильно, у этой ограниченности есть свои преимущества. Golang - хороший инструмент. Всякие терраформы с кубернетисами это только подтверждают.
Но как язык - он все что угодно, но не хорошо спроектированный ортогональный язык.
С lerna все хитро: изначальный продукт немного умер. Потом разработку lerna перехватили ребята, которые делают nx. И теперь lerna внутри - это nx.
Я в этой связи перевез достаточно большой проект с lerna на nx. Нравится. Там очень много свистелок, которые не особо нужны, но ядро работает прекрасно и делает все, что необходимо.
Если не нравится nx, есть turborepo. Он местами даже поинтереснее будет. Но частично написан на Rust. Для pet-проекта это не беда. Для большого проекта - это значит что чтобы заглянуть в него, надо понимать неплохо Rust.
Чем-то HOCON напоминает
Кабачок иногда сложно купить зимой, а вот свежие огурцы чаще всего всегда есть в наличии. Их только почистить надо от шкурки - и прям хорошо получается
Ну это тем, кому лук не заходит
Obsidian, в режиме текстового файлика, без плагинов для всякого модного
Лет за 10 попробовал все популярные решения до которых дотянулся: Wunderlist, Trello, Any.Do, Todoist, TickTick, просто почту, Evernote, OneDrive, липкие стикеры, Moleskin, бумагу А4 и А3, Monday, Apple Reminders и даже Jira.
В итоге отпустило, когда пришло понимание, что ключ не в том, как оно организованно и в какой цвет покрашено, а в том, чтобы выработать привычку смотреть туда хотя бы пару раз в день.
Как тут два лайка поставить?)
А важные навыки - это какие?
Коммуникационные - сомнений нет.
Какие-нибудь там кванты с радиофизикой, да хардкорная мат.статистика - крайне сомнительно.
Статья - огонь.
Есть вопрос: идея архитектуры иксов в общих чертах понятна. А чем принципиально Wayland со товарищи отличается?
ChatGPT для не-программирования пользовался давно и обширно, а вот непосредственно с написанием кода очень долго рефлексировал, не понимая, куда же это в моей системе категорий относится. В итоге пришел к следующему:
это еще чуть более умный code completion tool: в Borland Turbo C код комплишн вообще отсутствовал, в NetBeans/Eclipse уже было неплохо, в IJ IDEA со товарищи стало хорошо. Теперь вот стало еще умнее.
это неплохой апргейд Rubber Duck debugging. Резиновая утка была неплоха - слушала внимательно. Теперь еще и отвечает, и даже довольно часто в тему.
и в том же духе - с этой штукой иногда неплохо бывает обсудить свои мысли касательно архитектуры/реализации. Вопрос, как известно, уже содержит половину ответ, а уж сформулированный и записанный вопрос - тем более. Да и ответы часто как минимум не сильно мимо.
всякое рутинное неплохо автоматизируется. Написать болванку документации - уже неплохо.
Вот имхо, плохая идея в хоть сколько-нибудь отдаленной перспективе для всех:
Rust-программистам быстро станет скучно разбираться в очередных тонкостях ES202x и обновлениях TS
JS/TS - программистам писать новые и редактировать существующие правила станет сложно. Чтобы это сделать нужно неплохо изучить сильно другой язык программирования (и Rust это не поганая джава, там думать надо по-другому)
когда оно начнет крашится по причине некачественного плагина, или опции
--timing
как в комментарии выше, то будь оно написано на JS/TS еще есть шанс подебажить самому, тулинг-то в основном тот же. Найти человека, который на постоянной основе знает JS/TS и очень большой молодец в Rust.. ну не знаю, а зачем он на JS/TS тогда пишет?В общем имхо, писать основной тулинг (а линтер в 2023 году, как ни крути - основной тулинг) на языке, отличном от языка, для которого этот линтер пишется - со всех сторон странная затея. Тут конечно надо не на Rust/Go/С++ (спаси и сохрани) все переписывать, а искать варианты того, что нужно протолкнуть в node, чтобы хотя бы свой тулинг работал пошустрее.
Так а по другому не получится, если действительно очень хочется опираться на интерфейсы - никаких интерфейсов в рантайме нету. А для того, чтобы TypeGuards завелись для интерфейсов - эти самые интерфейсы нужно в рантайме как-то различать. И различать их путём перебора всех возможных наследников - ну такая себе идея.
Там выше заметили, что вообще вопрос неправильный и спрашивать надо не так :). Ну, вопрос такой, какой есть. И Type Labeling вполне себе стандартный подход для решения этой проблемы в TS. Да, типы придётся потэгать ручками. Но, компилятор любезно даст по рукам, если забыть это сделать, а на этом все проблемы и заканчиваются
Ну, на Вопрос 2 есть сильно более лучший ответ. Есть более правильные, надёжные и масштабируемые способы решить эту проблему даже в масштабах технического интервью.
Branded/Tagged types
На всякий случай добавлю, что Evernote Legacy по прежнему умеет выделять все заметки и экспортировать их в один enex файл со всеми тэгами и вложениям. Ровно как и импортировать обратно. Новый клиент ограничивает этот процесс 50 заметками за раз. В качестве бэкапа - то что нужно.
Ну и на самый крайний случай формат enex хоть и засилие xml, но в целом более-менее парсится.
Ух ты, комментарий, который я написал в 2016 заапрувили в 2021. Уже даже Google Play Music не существует :D
Имхо, конечно, но подборки у гугла прямо не фонтан. А вот как фонотека, да за 159 рублей в месяц — отлично.
Вот мобильное приложение бы ещё толковое, поиск по PDF, да страницы из веба сохранять - совсем хорошо было бы.