All streams
Search
Write a publication
Pull to refresh
61
22
Стас Выщепан @gandjustas

Умею оптимизировать программы

Send message
Угу, покажите в Java эквивалентный код из моего примера.
var tree = { child:[
    {data:1},
    { child:[
        {data:2},
        {data:3}  
    ]}
]};


В типизированном языке требуется определение типов деревьев. В некоторых языках это требует еще знания классов и наследования.
Зачем все эти тонкости знать? Код писать можно и без них.

Чтобы учиться программировать не надо изучать все тонкости. Более того, некоторые вещи лучше даже не знать на начальном этапе.
for(var i=0; i<x.length; i++) {
    if(x[i].y) {
        console.log(x[i].y); // OK
    }
}

Какое отношение все это имеет к начальному обучению программированию?
Записывать сразу в денормализованном виде — плохая идея, структура становится негибкой, новые функции становится сложно прикручивать.
Если нужны сложные джоины, то лучше выбирать взрослые БД, а не MySQL. В oracle и mssql джоины умеют очень хорошо оптимизировать джоины…

Ну и как обычно нужен кеш для «тяжелых» запросов.
Во-во. Код вилидный, а в рамках строго типизированного языка не решается. И вывод типов не поможет.
В том-то и прикол что это рабочий код, и реально два объекта в массиве имеют разную структуру.

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

Поэтому и предлагаю учить на динамически типизированном языке, чтобы не забивать голову студентам лишними для начального обучения сведениями.
А какой смысл сравнивать analytic engine и rdbms? Это очень частая практика что сами данных хранятся в mysq;l\postgtres\oracle\mssql, а пережевываются и считаются агрегаты в cognos\ssas\hadoop\pentaho.
Это делалось еще 20 лет назад, до изобретения термина NoSQL.

Но это касается только аналитики по всему объему данных, а мелкие агрегаты можно и в materialized view хранить.
Дык это только твое желание. JS вернет NaN (не-число) в случае неверной операции. Это ведь не undefined behavior.

Да, такое поведение неудобно, заставляет проверять что значение не NaN, или писать тесты, или проверять аргументы, или ревьювить код.

Тем не менее избежать таких ошибок легко. Я вот сколько писал JS ни разу на это не наталкивался.
На JS:
var x = [{x: 1, y:2}, {x:3, z:4}];
for(var i=0; i<x.length; i++) {
    console.log(x[i].x);
}


Код валидный. Теперь попробуй портировать его на язык с выводом типов. Какой тип будет у x?
Полный вывод типов часто спотыкается, особенно на структурах.
Я же говорю — «строгость» не боле чем твои ожидания.

Я 7 лет уже пишу на C# и 3 года на JS и в обоих можно написать 1+«2». В C++ при желании также можно переопределить оператор + для строк и чисел, чтобы можно было так писать.

Кстати правило приведения к строке довольно простое чтобы из-за него так париться.

Не используйте слова «строгая» в отношении к типизации. Типизация бывает статическая — при компиляции и динамическая — во время выполнения программы. У Лиспа (в частности Scheme) типизация динамическая. Учитывая что там только списки (нет массивов и объектов), то reasoning на основе типов делать еще сложнее, чем в JS.

«Строгость» типизации определяется только вашими ожиданиями от системы типов.

Но все это для начального обучения лишнее.

Information

Rating
333-rd
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Architect, Delivery Manager
Lead
C#
.NET Core
Entity Framework
ASP.Net
Database
High-loaded systems
Designing application architecture
Git
PostgreSQL
Docker