169 похожих чатов

Какой объём написанного кода за смену считается нормальным? я, в

силу возраста, не работаю ещё, но работаю над pet-проектами

47 ответов

47 просмотров

главное не объём, а качество. Ты-ж не индус, которому платят за количество строк, ей богу 😁

Roberto's-Ширгозиев Автор вопроса
UtoECat
главное не объём, а качество. Ты-ж не индус, котор...

у меня просто за 7 часов выходит ±200 строк (отношение кода к тестам 4:5 примерно). это нормально, или мало?

Roberto's-Ширгозиев Автор вопроса
UtoECat
давно код пишешь? И как часто?

три года, стартовал с питонов. за первый год написал игру "города", 7к строк и 2к захардкоженных названий городов. потом вебразработка, цсс и гипертекст. рест апи, базы данных, скуэль. постгрес, майскуэль и скулайт (постгрес лучший). параллельно изучал линукс. сейчас у меня сборка на арче (arch btw). bash знаю неплохо, мне хватает (плохо знаю всякие там программы, которые не входят в bash, но используются (awk-grep-rev-прочее) как-то писал плагин на vimscript. вимскрипт - днище. вспоминать про него больно. тогда первый раз услышал про луа. записал себе в планы далее, разработка ботов для discord и telegram. скучно. решил изучить bf, за 4 дня сделал проект на 2к строк (бойлерплейт, вестимо). никак не дойдут руки написать к нему обёртку на баше. далее, прочитал гайд по луа и пришёл сюда (месяц назад). сделал свой модуль, если кратко - завозит всякие функции для работы со строками (типо сплит и пр.) из питона, и функции для покраски вывода stdin с помощью ascii-sequences. он мне нужен, т.к. я буду свой говнокод 1-2 лет переписывать на луа. я тогда сделал много консольных игр первые два года ходил в яндекс лицей. второй год отстой, а за первый нехило знакомишься с алгоритмами. как закончил лицей, регулярно решаю задачи на codewars, чтобы в форме оставаться (если время есть. у нас в школе бальная система, учиться сложно. я на медаль иду). 5 kui в планах: иду в ассемблер, потом си, потом плюсы. хочу попробовать писать малварь, а для этого нужен ассемблер. а плюсы в университете нужны будут

Roberto's Ширгозиев
три года, стартовал с питонов. за первый год напис...

> завозит всякие функции для работы со строками (типо сплит и пр.) из питона не думаю, что это хорошая практика. Тебе стоит привыкнуть к стандартным либам и функциям сперва (в этом есть плюс, хотя-бы потому, что luajit лучше будет оптимизироать библиотечные, нежели самописные функции, да и вообще меньше оверхеда) > иду в ассемблер, потом си, потом плюсы уверен, что тебе это надо?

Roberto's Ширгозиев
я в 10й класс иду. нет

а ну , начнешь работать вопрос закроется сам собой

Roberto's-Ширгозиев Автор вопроса
UtoECat
> завозит всякие функции для работы со строками (т...

в моём городе нет вакансий на питоне, а на плюсах есть. не уверен. но я точно не буду учить js и не стану фронтендером. это не моё

Roberto's-Ширгозиев Автор вопроса
UtoECat
> завозит всякие функции для работы со строками (т...

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

странно, обычно наоборот. Может плохо искал? 😁 да и ты, как программист, не сильно ограничен выбором места работы, можно и по удалёнке, скорее всего, если поискать.

Roberto's-Ширгозиев Автор вопроса
UtoECat
странно, обычно наоборот. Может плохо искал? 😁 да ...

* я искал вакансии без опыта, и полная занятость (без удалёнки) кмк, если первое место работы, то не удалённо

Roberto's-Ширгозиев Автор вопроса
UtoECat
напомни что делает split

function mfr.split(str, separator) assert(type(str) == "string", "str argument is string") separator = separator or " " assert(type(separator) == "string", "separator argument must be string") local result, buffer, inside_separator, sep_len = {}, "", 0, separator:len() for i = 1, #str do if inside_separator == 0 then if str:sub(i, i + sep_len - 1) ~= separator then buffer = buffer .. str:sub(i, i) else table.insert(result, buffer) inside_separator, buffer = sep_len - 1, "" end else inside_separator = inside_separator - 1 end end if buffer ~= "" then table.insert(result, buffer) end return result end

Roberto's-Ширгозиев Автор вопроса
UtoECat
напомни что делает split

берёт строку и разделитель. возвращает массив строк: оригинальная строка, распиленная по разделителям

UtoECat
screenshot

если нужно, тут тоже можно сделать добавление в таблицу, её возвращать... Но, имхо, проще написать цикл с gsub. Главное не переусложнять вещи 😁 легче будет и интерпретатору, и тебе

Roberto's-Ширгозиев Автор вопроса
UtoECat
screenshot

да, так намного лучше...

Roberto's Ширгозиев
да, так намного лучше...

в reference manual есть хорошая дока по шаблонам. Надо немного потренироваться, и они станут твоим незаменимым инструментом для решения задлач со строками 😁

Roberto's-Ширгозиев Автор вопроса
UtoECat
если нужно, тут тоже можно сделать добавление в та...

function mfr.belongs(element, sequence) assert(type(sequence) == "table", "sequence is table") for i = 1, #sequence do if element == sequence[i] then return true end end return false end для такого есть что-то в стдлибе?

Roberto's Ширгозиев
function mfr.belongs(element, sequence) ...

увы нет, но на это есть причина. первая - для отсортированных/не отсортированных и ещё кучи разных массивов есть разные более быстрые способы поиска. Покрыть много ситуаций - сложно. вторая - если значения уникальны, делай обратную таблицу, куда пиши [значение]=индекс. Для поиска просто индексируй эту обратную таблицу, так получишь индекс. Это достаточно быстрый способ что-то найти, если этого чего-то много. Размен памяти на производительность, своего рода 😁 Для небольших-же массивов, хватит и функции, приведённой тобой

Roberto's Ширгозиев
function mfr.belongs(element, sequence) ...

ну и в assert поправь сообщение на NOT A table 😁

Roberto's-Ширгозиев Автор вопроса
UtoECat
ну и в assert поправь сообщение на NOT A table 😁

так и задумано: вместо "параметр н должен быть у" "параметр н - это у". да, задумка не очень. у меня 20 с лишним ассртов на типы в 1 файле, и везде такой шаблон 😔 я наверное конструктор сделаю для assert messages, чтобы более информативно было

Roberto's-Ширгозиев Автор вопроса
UtoECat
ну и в assert поправь сообщение на NOT A table 😁

можно спросить кое-что? у меня есть длинная строка кода (больше 80-100 символов). чтобы сделать её короче, я строкой выше объявляю переменную, где храню все параметры для функции, которую вызываю ниже. и вызываю функцию с 1 параметром. читаемость заметно лучше, но есть лишняя переменная. заметил, что так никто не делает. я же всегда стараюсь, чтобы длинна строки не была больше 80 символов (у меня хард врап в виме стоит, и в вскоде похожая штука) правильно ли? или не стоит заморачиваться над оформлением так, как это требуют в питоне?

Roberto's Ширгозиев
так и задумано: вместо "параметр н должен быть у" ...

только учти, что этот конструктор будет вызываться даже, если assert не сработает. а вообще, ассерты нужны не сильно часто. Сам код выдаст ошибку, если что-то будет не так. Менее понятную, но всё-же. Их хорошо на стадии отладки использовать, а потом понемногу убирать (особенно, если этот код вызывается достаточно часто)

Roberto's Ширгозиев
можно спросить кое-что? у меня есть длинная строк...

покажи-ка кодом, а то я что-то не понимаю немного

Roberto's-Ширгозиев Автор вопроса
UtoECat
только учти, что этот конструктор будет вызываться...

я библиотеку делал, там желательно нормальные ошибки показывать. подход "лишний раз проверь", а не pcall и пр.

Roberto's-Ширгозиев Автор вопроса
UtoECat
покажи-ка кодом, а то я что-то не понимаю немного

https://pastebin.com/n4Cm656z например, я тут tabulation в отдельную переменную вынес, и использовал её только в 1 месте

Roberto's-Ширгозиев Автор вопроса
Roberto's Ширгозиев
https://pastebin.com/n4Cm656z например, я тут tab...

эта функция из таблицы делает удобочитаемую строку

Roberto's Ширгозиев
https://pastebin.com/n4Cm656z например, я тут tab...

ааа... То, что кешируешь string.rep() - правильно. это всё ещё си функция, и лишние затраты на её вызов и повторное создание такой-же строки - не очень, хоть и не критично.

Roberto's Ширгозиев
можно спросить кое-что? у меня есть длинная строк...

если локальная переменная - норм. пока это помогает читабельности - тем более. ванильная луашка в оптимизацию всего этого во время компиляции в байткод - не оч. luajit получше, можно меньше заморачиваться, но всё равно.

Roberto's-Ширгозиев Автор вопроса
UtoECat
если локальная переменная - норм. пока это помога...

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

UtoECat
если локальная переменная - норм. пока это помога...

про оптимизацию я имею в виду кеширование результата предыдущих вычислений, если что. Пока это в одном стейтменте, ака 20 + 10 / 3 или "abab".."zazaza" - оптимизирует

Roberto's Ширгозиев
понял, спасибо вам. потрогую как нибудь luajit. он...

немного влияет, он добавляет некоторые фишки из lua 5.2 и 5.3, но не все, на уровне сохранения обратной совместимости с 5.1

Roberto's-Ширгозиев Автор вопроса
UtoECat
немного влияет, он добавляет некоторые фишки из lu...

у меня 546 луа, луажит добавит что-то, что раньше из языка убрали?

Roberto's Ширгозиев
у меня 546 луа, луажит добавит что-то, что раньше ...

нет. Он поддерживает всё, что было в lua 5.1, добавляет некоторые фишки из новых луашек, но не все. например, в luajit до сих пор только getenv() setenv(), так как это функции из 5.1. Ни о каких local _ENV и речи быть не может

Roberto's-Ширгозиев Автор вопроса
UtoECat
немного влияет, он добавляет некоторые фишки из lu...

слышал про nelua. он в некоторых тестах быстрее си - вот тут писали https://t.me/ProLua/103259

Roberto's Ширгозиев
слышал про nelua. он в некоторых тестах быстрее си...

ну... nelua довольно сильно от ванильной луашки отличается вроде как. Я им никогда не пользовался, luajit, ванильная луашка и luau - максимум 😁 к слову о luau - она бысрее ванильной луашки, там быстрее создание и сборка объектов (только на этом она обгоняет luajit), там есть дополнительные жёсткие оптимизации во время компиляции и выполенния без jit и с сохранением практически полной кроссплатформенности (будет работать везде, куда можно скомпилироввать C++17), но она СОВЕРШЕННО не совместима со всеми луашными либами (как и nelua, как я думаю), и это её главный недостаток. ну и для того, чтобы обеспечить работу оптимизации на этапе компиляции байткода, надо гарантировать неизменяемость _G, что ломает очень много кода, его надо переделывать

Roberto's-Ширгозиев Автор вопроса
UtoECat
ну... nelua довольно сильно от ванильной луашки от...

можно спросить, а вы по профессии на чём пишете?

Roberto's Ширгозиев
можно спросить, а вы по профессии на чём пишете?

та я по профессии вообще не программист 😁 так сишку/плюсы и луашку использую в основном.

Roberto's-Ширгозиев Автор вопроса
UtoECat
та я по профессии вообще не программист 😁 так сиш...

си сложный? я как-то пробовал его поучить. взял кёрнигхан / ричи, потом сказали - нехорошее чтиво. пробовал по видеоурокам, сломался на указателях. вернее, пытаюсь своё написать, он ошибками плюётся, гуглю - надо указатель передавать в аргументе... почему, индиец же просто переменную передавал? потом в bf уже допёрло, что это за указатели (весь bf это один большой указатель, который ползает по памяти 🙂)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта