Программная инженерия

46
Критика монады IO, рассматриваемой как государственная монада, действующая в мире

IOМонады в Haskell часто объясняется как государственной монады , где государство является мир. Таким образом, значение типа IO amonad рассматривается как нечто подобное worldState -> (a, worldState). Некоторое время назад я прочитал статью (или сообщение в блоге / списке рассылки), в которой...

46
Почему старые языки программирования продолжают пересматриваться?

Этот вопрос не «Почему люди до сих пор используют старые языки программирования?» Я это прекрасно понимаю. Фактически, два языка программирования, которые я знаю лучше всего, это C и Scheme, оба из которых восходят к 70-м годам. Недавно я читал об изменениях в C99 и C11 по сравнению с C89 (который,...

46
Может ли слишком много абстракции быть плохим?

Как программисты, я чувствую, что наша цель - предоставить хорошие абстракции по данной модели предметной области и бизнес-логике. Но где должна остановиться эта абстракция? Как найти компромисс между абстракцией и всеми ее преимуществами (гибкость, простота изменения и т. Д.) И простотой понимания...

46
Почему анемичная модель предметной области считается плохой в C # / OOP, но очень важной в F # / FP?

В сообщении в блоге на F # для развлечения и выгоды говорится: В функциональном дизайне очень важно отделить поведение от данных. Типы данных просты и «тупы». И затем отдельно у вас есть ряд функций, которые действуют на эти типы данных. Это полная противоположность объектно-ориентированному...

46
Как REST API должен обрабатывать PUT-запросы к частично модифицируемым ресурсам?

Предположим, что REST API в ответ на HTTP- GETзапрос возвращает некоторые дополнительные данные в подобъекте owner: { id: 'xyz', ... some other data ... owner: { name: 'Jo Bloggs', role: 'Programmer' } } Понятно, что мы не хотим, чтобы кто-то мог PUTвернуться { id: 'xyz', ... some other data ......

46
Хорошая или плохая практика маскировать коллекции Java значимыми именами классов?

В последнее время у меня была привычка «маскировать» коллекции Java с понятными для человека именами классов. Несколько простых примеров: // Facade class that makes code more readable and understandable. public class WidgetCache extends Map<String, Widget> { } Или же: // If you saw a...

46
Есть ли что-то новаторское в NoSQL? [закрыто]

Я очень солидный парень по реляционной базе данных и понимаю, вплоть до 3-й нормальной формы, ценю корни алгебраической теории множеств в SQL и, вероятно, могу реляционизировать разбитое сердце (или нет). Я не разобрался со структурой реляционных баз данных для вечеров свиданий с женой, но я думал...

46
Как измерить потенциальную ценность рефакторинга

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

46
Лучше проверить `c> = '0'` или` c> = 48`?

После обсуждения с некоторыми моими коллегами у меня возник «философский» вопрос о том, как относиться к типу данных char в Java, следуя рекомендациям. Предположим, что простой сценарий (очевидно, это всего лишь очень простой пример, чтобы придать практический смысл моему вопросу), где, учитывая в...

46
Почему цепные сеттеры нетрадиционны?

Реализация цепочки на bean-компонентах очень удобна: нет необходимости перегружать конструкторы, мега-конструкторы, фабрики и обеспечивает повышенную читаемость. Я не могу думать о минусах, если только вы не хотите, чтобы ваш объект был неизменным , и в этом случае у него все равно не было бы...

46
Почему стек вызовов имеет статический максимальный размер?

Работая с несколькими языками программирования, я всегда задавался вопросом, почему стек потоков имеет предопределенный максимальный размер, а не расширяется автоматически по мере необходимости.  Для сравнения, некоторые очень распространенные высокоуровневые структуры (списки, карты и т. Д.),...

46
Что случилось с ограничениями базы данных?

Когда я рассматриваю модели баз данных для RDBMS, я обычно удивляюсь, обнаружив, что ограничения практически отсутствуют (кроме PK / FK). Например, процент часто хранится в столбце типа int(хотя это tinyintбыло бы более уместно), и нет CHECKограничения для ограничения значения до диапазона 0..100....

46
Почему мы все еще наращиваем стек назад?

При компиляции кода C и просмотре сборки, все это имеет стек, растущий в обратном направлении, вот так: _main: pushq %rbp movl $5, -4(%rbp) popq %rbp ret -4(%rbp)- означает ли это, что базовый указатель или указатель стека фактически перемещаются вниз по адресам памяти, а не идут вверх? Почему это?...

46
Значение асинхронного против синхронного [закрыто]

Что означает слова асинхронные и синхронные в информатике? Если вы гуглите значение слов, вы получите следующее: Асинхронный: не существует или не происходит одновременно . Синхронный: существующий или встречающийся одновременно . Но похоже, что они используются для передачи противоположного...

45
Каковы аргументы против или для размещения логики приложения на уровне базы данных? [закрыто]

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

45
Есть ли каноническая книга по Agile?

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

45
Быть либеральным в том, что вы принимаете ... или нет?

[Отказ от ответственности: этот вопрос субъективен, но я бы предпочел получать ответы, подкрепленные фактами и / или размышлениями] Я думаю, что все знают о принципе робастности , обычно описываемом законом Постеля: Будьте консервативны в том, что вы посылаете; быть либеральным в том, что вы...