← All posts tagged programming

folex

Жуйк, вот если тестер решил научиться тестировать "белый ящик", т.е. понимать код программистов на уровне, полезном для тестирования, что ему дать почитать?
Бэкграунд в программировании отсутствует. Образование не техническое.
Языки, которые нужно понимать — Objective C, Java. Однако прежде чем начинать изучать языки, нужно иметь хоть какой-то бэкграунд, иначе все книги будут просто набором букв. Вот хотелось бы именно книг об основах для новичков.

Заранее спасибо.

folex

Жуечка, помнишь как я в бытность свою старше-школьником и младше-студентом просил у тебя книжек?
Вот я уже почти два года как отчислился из всяческих учебных заведений, и пересел на обучение в основном на практике. В стиле прочитал 0.25 — 1.00 книги, и пошел программировать, пока не понадобилось снова лезть в книжку, все, чего нет в книжке — из гугла.
В целом этот метод для меня неплохо работает по сей день — видимо мозги позволяют выезжать на этом пока. Однако меня самого это все не устраивает, и, так как для меня настали более-менее стабильные времена, я хочу возобновить по возможности интенсивное обучение. (Так-то я практически не переставал учиться новому, но все это делал просто ради расширения кругозора и интереса к новому и неизведанному).

TL;DR
Мне нужны книжки по теорминимуму программирования. Отличный перечень тем я нашел тут: sharpc.livejournal.com
Кидать можно любые знакомые вам книжки — я буду просматривать их все, и выбирать нужные.

Любые дополнительные темы, советы, и прочее приветствуются.

Рекомендации нужны. Очень.

folex

Аксиома раз: нет JIT, только AOT. (Платформа виновата)
Аксиома два: нельзя использовать Emit (Джобс пидарас).

Как бы мне в рантайме заинжектить код во все методы? Так, что бы можно было например при вызове любого метода вывести в консоль "Метод METHOD_NAME вызван".

P.S. Ответы, противоречащие первым двум аксиомам так же принимаются.

Заранее спасибо.

P.P.S.
Как это сделать после компиляции я знаю (всякие Mono.Cecil и проч.), проблема в том, что мы не можем пока вклиниться в цикл сборки — Xamarin ХУЕВО генерирует мейк-файлы(не получается через них собирать), а вклиниться в нужный момент сборки в IDE нельзя — там либо prebuild, либо postbuild.

folex

Бывают такие люди, которым не понятно как объяснять вещи, понятные мне и коллегам интуитивно.
Например название методов. Не понимаю, как объяснить, почему метод, который запускает busy-loop по ожиданию некоего значения от другого объекта, и при получении вызывает эвент (название эвента — onGotValue) плохо называть OnGotValue, а лучше назвать как-нибудь вроде StartWaitingForValue.
Человек искренне не понимает, почему одно плохо, а другое — хорошо. Возможно сказывается его низкий уровень знания английского языка, возможно что-то еще.
Отсутствие подобной интуиции у людей ставит меня в тупик.

А что вы делаете в подобных ситуациях?
Как научиться объясняться с такими людьми? Книжки по менеджменту читать (фи)?

folex

Вот у меня есть два списка. Первый и второй. Второй получен некой перестановкой первого. Как мне найти перестановку?

P.S. Вообще задача состоит в том, что бы найти дельту (не знаю как лучше назвать) между двумя отсортированными списками. То есть такую структуру, которая будет описывать, как из первого списка получить второй: что удалить, что обновить, что добавить, и что переставить. И я не могу придумать, как бы искать перестановки.

folex

Вот есть у меня метод, в котором создаются две анонимные функции (лямбда1 и лямбда2). Они затем вызываются независимо друг от друга (даже в разных тредах). лямбда1 — суть чтение с файловой системы, лямбда2 — суть загрузка данных из сети.
Обычно, конечно, лямбда1 вызывается раньше, чем лямбда2. Однако это не всегда так, и нужно как-то гарантировать порядок. Я вижу три варианта:
1. Вызывать лямбда2 непосредственно из лямбда1. Однако это замедлит общее время выполнения лямбд.
2. Поменять сигнатуру лямбд — добавить туда флаг, различающий эти две лямбды, а затем уже откидывать результат вызова не нужной лямбды по этому флагу.
3. Каким-то образом расшарить между этими лямбдами информацию о вызове. Например лямбда2 устанавливает где-нибудь флаг, а лямбда 1, если этот флаг установлен, ничего не делает.

3-й вариант мне наиболее симпатичен, но я не могу придумать, как мне создавать этот хитрый флаг. Очевидный вариант — сделать функцию у класса, в методе которого всё происходит, который устанавливает/возвращает значение этого флага. Однако тут нам мешаеч многопоточность, а значит нужно создавать это хранилище флага вместе с лямбдами. Если метод, в котором всё происходит, вызывается n раз, то создается n лямбд1, n лямбд2 и n флагов. Но КАК это сделать, я не знаю.

Собственно, КАК?

folex

У UI элемента есть метод, принимающий NSDate. Передаю туда валидный NSDate — UI элемент пропадает с экрана, передаю туда никак не связанный с NSDate инстанс DateTime — работает, компилятор не ругается, всё ок, UI элемент видно.
Слов просто нет.

folex

Ну что за тяга ко всему приплетать состояния, блядь? Ну почему не вынести в функцию, принимающую на вход "состояние" и аргументы? Ну ЛУЧШЕ же так выглядит. А то инстанциировать какой-то ебаный не то полноценный объект, не то backing store для функций, и всё это на каждый чих переинициализировать, и постоянно трястись над этим ебаным стейтом. А самое страшное состоит в том, что стейтом являются данные в виде изменяемого списка.

folex

Жуйк, а есть ли такие ООП языки, в которых есть возможность контролировать свойства аггрегированных классов?

Ну например у меня есть классы
class First
{
public Second SecondInstance;
}

class Second
{
public SomeType SecondProperty;
}

Я хотел бы иметь возможность написать в First аксессор для SecondInstance.SecondProperty.

Если такое где-то есть (хотя бы в теории), то как это называется? И да, прозреваю возможность реализации этого в Smalltalk и ObjectiveC (ну и вообще в языках с сообщениями вместо методов)