Текущий архив: 2006.12.17;
Скачать: CL | DM;
ВнизМетодики разработки в условиях нехватки ресурсов. Найти похожие ветки
← →
Sergey Masloff (2006-11-11 13:27) [0]Интересно есть ли сабж. Хочу попробовать. Все больше убеждаюсь что нормальных разработчиков фиг найдешь - и бюджет не резиновый и нет их столько. Попробовать перейти на работу примерно по такой схеме - есть микрогруппа (2-3 человека) ведущих. Они определяют архитектуру, пишут ядро системы и сервисные функции. Под ними работают кодеры. Программировать им уметь не надо - только кодить. Причем все что они накодили они отдают на причесывание и проверку прежде чем это включается в проект.
Причем постараться чтобы они вообще использовали наборы базовых блоков чтобы никакой отсебятины вообще не было принципиально. Только по шаблонам.
Интересно на практике практиковал кто такое? Какие соотношения? Код скольких кодеров реально можно контролировать одному если заниматься в основном только этим? Вообще получается по такой схеме?
Просто по другим никак по деньгам не выходит в бюджет вписаться
← →
Александр Иванов © (2006-11-11 14:37) [1]Гораздо больший эффект получили при работе парами. За одним компом два полноценных программсита. Гораздо меньше ошибок, так как второй чаще видит их сразу. Но это зависит от размера проекта. В таком режиме нельзя работать долго.
Насчет кодеров - на прошлой работе соотношение было примерно 1 разработчик высоквалифицированный к четырем даже не кодерам, а менее квалифицированным. Результат удовлетворительным назвать сложно. Код перед внесением проверяется, но один человек работу 4 исправить не успевает и не все баги замечает. Так как если спецов заставить исправлять кривой код то им только этим и придется заниматься.
← →
Ketmar © (2006-11-11 14:51) [2]>[1] Александр Иванов(c) 11-Nov-2006, 14:37
>За одним компом два полноценных программсита.
через некоторое время оба превращаются в неполноценных и очень нервных.
%-)
← →
isasa © (2006-11-11 14:55) [3]За одним компом два полноценных программсита.
:)
А если девять? Да за один месяц то, на что обычно уходит девять?
← →
Александр Иванов © (2006-11-11 14:56) [4]> [2] Ketmar © (11.11.06 14:51)
Нет, но выматывает это сильно. Устают гораздо сильнее.
← →
Sergey Masloff (2006-11-11 14:56) [5]Александр Иванов © (11.11.06 14:37) [1]
>исправлять кривой код то им только этим и придется заниматься
Это и предполагается. Плюс минимум самодеятельности чтобы степень кривизны не могла быть запредельной
Ketmar © (11.11.06 14:51) [2]
>через некоторое время оба превращаются в неполноценных и очень >нервных.
Боюсь что так
← →
Александр Иванов © (2006-11-11 15:05) [6]> [5] Sergey Masloff (11.11.06 14:56)
В том проекте о котором речь - править не успевают. И соотношение как я и писал 1 к 4. Сейчас даже не берут народ, хотят имеющихся подучить. Иначе будет хаос.
← →
Sergey Masloff (2006-11-11 15:25) [7]Александр Иванов © (11.11.06 15:05) [6]
Печально. Так мне 10 хороших нужно. Это нереально :(
← →
DiamondShark © (2006-11-11 15:32) [8]
> Программировать им уметь не надо - только кодить
Хоть режте, никогда не понимал, что означает "кодить, не умея программировать"? Это с русского на паскаль переводить?
Может, я действительно чего-то недопонимаю в научной организации труда, но похоже, дрянь-идейка.
← →
Sergey Masloff (2006-11-11 15:50) [9]DiamondShark © (11.11.06 15:32) [8]
Ну я думал что-то вроде накидывания компонентов и задания их свойств ;-) Идея из то же серии. Наверное и правда не получится
← →
Александр Иванов © (2006-11-11 15:54) [10]> [7] Sergey Masloff (11.11.06 15:25)
На удаленную работу народ берите. Экономия будет. Правда с большим проектом будут сложности.
← →
Sergey Masloff (2006-11-11 16:01) [11]Александр Иванов © (11.11.06 15:54) [10]
Нет это обходится дороже. Этот этап пройденый.
Проект большой. По самым скромным прикидкам 130 (мифических) человеко-лет. В смысле столько УЖЕ. Надо углублять и расширять. Ядро писалось нормально, полностью устраивает. Но окружение на данный момент имеет тенденцию к переходу в состояние хаоса из-за нехватки грамотных разработчиков. Я пока прощупываю направления в которых можно попробовать двинуться.
← →
Mozart © (2006-11-11 16:17) [12]Все больше убеждаюсь что нормальных разработчиков фиг найдешь
платить надо больше
и бюджет не резиновый
вот в этом и проблема
и нет их столько
не правда - есть, только и бюджет не резиновый - мешает
← →
PEAKTOP © (2006-11-11 16:22) [13]Sergey Masloff наверное имел в виду работу на другом "слое" (уровне) внедряемого ПО.
Насколько я внедряю нечто подобное, то я работаю исходя из следующих условий:
1) "слой ядра", т.е. уровень разработки системных функций ядра ПО (*.exe), поддержки встроенного в систему языка программирования, системы отчетов (переделываемых "на лету"), дизайнера визуальных объектов. Этим занимаюсь единолично, потому как - давно и просто много уже есть сделанного. Сейчас, конечно, написать подобное снова с нуля и в одиночку постеснялся бы ;))
2) "слой конфигурации", т.е. слой разработки непосредственно прикладной задачи на встроенном в систему языке. Таких у меня пять человек, два работают вообще удаленно. Они же снабжают меня баголистом ядра, а я в свою очередь пытаюсь из этого сделать багофикс :))
3) Специфика внедряемых прикладных задач такова, что это средние и крупные предприятия, плюс - территориально удаленные. Поэтому, мы подготовливаем у заказчика местного админа-внедренца, который потом и "подправляет" отчеты, дорабатывает мелочи, если что-то в задаче поменяется с момента внедрения.
Нсколько это рентабельно ?
1) За само ядро (*.ехе-файл) мы не берем ничего, - оно бесплатно.
2) Берем за конфигурацию (кучу текстовых файлов, модулей на встроенном языке).
3) За поддержку, если например через год поменялась немного бизнес-модель заказчика, то переделываем систему.
4) За подготовку-обучение местного админа.
5) 100% местных админов после уволнения от заказчика давали нам прибыль в виде подготовки заказчику нового админа.
6) 40% местных админов после уволнения от заказчика давали нам прибыль в виде "подгонки" нам нового своего работодателя как клиента (иногда давал "откат", иногда человеку просто хотелось нормально работать или, по крайней мере, в знакомой среде).
6) 10-15% местных админов после уволнения пи...ли конфигурацию, приносили на новое место работы или продавали конкуренту заказчика. 20-25% этих "новых пользователей" обращались потом к нам за сопровождением.
Данные за 4 года, объектов ~120-130.
← →
PEAKTOP © (2006-11-11 16:39) [14]Да, самое главное забыл сказать.
Я занимаюсь только технической частью разработки. А продажами занимается мой партнер, не имеющий не малейшего представления в программировании. И именно этим я могу объяснить успех работы, потому как разработкой должен заниматься программист, а продажи - даже и не пытаться лезть. Иначе - проект обречен на провал (испытал на собственной шкуре).
← →
Marser © (2006-11-11 16:47) [15]
> Причем постараться чтобы они вообще использовали наборы
> базовых блоков чтобы никакой отсебятины вообще не было принципиально.
> Только по шаблонам.
Я бы на такую работу согласился только под угрозой голода...
С другой стороны, не пустил бы абы кого реализовывать собственные архитектурные идеи.
← →
Sergey Masloff (2006-11-11 17:13) [16]Я не занимаюсь продажами. И вообще продажи не интересуют. Я не один. Писать свой вариант 1С не надо - у нас предметная область позволяет написать.
Система давно работает но мне нужно удерживать ее управляемой при росте и я прорабатываю пути решения.
Хотя идея интересная насчет частично закрыть пользовательский интерфейс какой-то рисовалкой...
← →
Petr V. Abramov © (2006-11-11 17:19) [17]> Sergey Masloff (11.11.06 14:56) [5]
> Плюс минимум самодеятельности чтобы степень кривизны не могла быть запредельной
имхо, единственый вариант. правда, требует некоторых начальных капзатрат, т.к. популярные среды разработки позволяют работать в таком режиме только после хорошей перезаточки.
Помнишь, виски пили на Димровке и я тебя про библиотеку базовых форм выспрашивал?
← →
Nic © (2006-11-11 17:20) [18]У меня задача ещё интереснее. Временных ресурсов очень мало, а идей и наработок уже очень много + очень много текущих задач и процессов, которые надо доводить до ума выводить к релизам. Денежные ресурсы есть, но опираются они только на стипендию, 2 работы и подработки, поэтому не хочется н/з трогать.
← →
Petr V. Abramov © (2006-11-11 17:21) [19]>>Petr V. Abramov © (11.11.06 17:19) [17]
> на Димровке
на Дмитровке имелось ввиду
← →
Sergey Masloff (2006-11-11 17:21) [20]Petr V. Abramov © (11.11.06 17:19) [17]
Помню. Я и задумался.
Правда, это видимо уже будет на дотнете. Раз пошел такой оффтоп то меня на ноги уже подняли вроди врачи убийцы можно как-нибудь в ближайшее время того... еще по вискарику.
← →
Petr V. Abramov © (2006-11-11 17:22) [21]> Правда, это видимо уже будет на дотнете
а пофиг
> ближайшее время того...
давно пора :)
← →
Sergey Masloff (2006-11-11 17:29) [22]Marser © (11.11.06 16:47) [15]
>Я бы на такую работу согласился только под угрозой голода...
>С другой стороны, не пустил бы абы кого реализовывать собственные >архитектурные идеи.
А и не надо. Это могут быть условно говоря студенты. Нужен человеку опыт сам бог велел покодить чуток. Заодно и посмотреть как это все делается. А через годик и на другую работу можно уходить. Естественно в другую контору.
← →
Nic © (2006-11-11 17:30) [23]Nic © (11.11.06 17:20) [18]
Вот сводки событий:
0) В первую очередь учёба!
1) Наконец дописал авторизацию к электронной библеотеке кафедры -- можно выкладывать на сервер. Слава Богу, хоть одну задачу скину с плеч.
2) Движется разработка рпаспознавалки бланков деканату.
3) Пишется быстрыми темпами проект для фирмы, в которую я устроился. Пока всё нормально.
4) Открываю сайт (как долго шаманил с дизайном, плохо у меня это получается), где уже выложил дему мультимедийной оболочки. Надо с софткеем договор заключать поскорее.
5) Уже несколько месяцев пишу органайзер. Что-то вяло идёт. Написал структуру проекта, по которой буду строить проект, чтобы не уходить в "лес" всяких ненужных фишек и фенечек.
6) Планирую написать новый граф. движок для целой цепочки запланированных проектов, но надо сначала то, что писал выше (0-5) довести до ума.
← →
Nic © (2006-11-11 17:34) [24]Nic © (11.11.06 17:30) [23]
Все проекты кроме (3) ведутся с бюджетом 0 р. и не более 12 часов в неделю. Вот это ограниченные ресурсы!
← →
Petr V. Abramov © (2006-11-11 18:39) [25]> Sergey Masloff
ты, кстати, не ковырял МС-В-Студию на пример ToolsAPI аля как в Дельфи?
← →
Sergey Masloff (2006-11-11 18:47) [26]Petr V. Abramov © (11.11.06 18:39) [25]
Нет. Я что-то вообще задолбался с ней за сегодня... сейчас переставлять буду
← →
Petr V. Abramov © (2006-11-11 18:51) [27]> Sergey Masloff (11.11.06 18:47) [26]
сегодня вообще работать грех :)
а вообще если ToolsAPI нет или оно фиговое - расстанься с мечтой о возможности неглючного результата от студентов...
← →
Piter © (2006-11-11 20:32) [28]Sergey Masloff (11.11.06 13:27)
Просто по другим никак по деньгам не выходит в бюджет вписаться
Значит, надо расширять бюджет :)
Реалии таковы, что уже начинающие идут на $1000.
Те, у кого за плечами парочка хороших завершенных проектов могут претендовать на $1500...
Уже появилось немало вакансий на $3000-$5000. Единично встречаются вакансии на $10.000 (было такое).
Это уже все архитекторы естественно.
← →
Sergey Masloff (2006-11-11 20:36) [29]Piter © (11.11.06 20:32) [28]
>Значит, надо расширять бюджет :)
>Реалии таковы, что уже начинающие идут на $1000.
Бессмысленно. Тем более писать они лучше не стали. Посмотрим как дальше будет. У меня есть знакомая контора они просто московский штат программистов разогнали. Открыли представительство в Рязани, набрали отличных ребят по 650 в месяц и очень довольны.
← →
Piter © (2006-11-11 21:35) [30]Sergey Masloff (11.11.06 20:36) [29]
Тем более писать они лучше не стали
Начинающие конечно не стали. Но если вы ищите спецов в Москве, поднимайте планку на "от $2000".
Или действительно, вариант с филиалами, там таких понтов нету, да и энтузиазма больше.
← →
Sergey Masloff (2006-11-11 22:05) [31]Piter © (11.11.06 21:35) [30]
Нет 2000 это бред. Если программистам будут платить "от 2000" я первый из конторы свалю. Потому что это - маразм. Тех кто такие деньги стоит в Москве единицы и они уже работают. Остальные... посмотрим что будет лет через пять. Так ли будут гнуться пальцы или может поостынут работодатели наконец.
← →
Eraser © (2006-11-11 22:21) [32]> [31] Sergey Masloff (11.11.06 22:05)
imho, лучше один спец за 2000, чем 2 за 1000.
← →
Sergey Masloff (2006-11-11 22:30) [33]Eraser © (11.11.06 22:21) [32]
>imho, лучше один спец за 2000, чем 2 за 1000.
Еще раз ;-) Несколько - УЖЕ есть. 40 человек таких держать - бессмысленно. Идея создать компактное ядро вокруг которого студенты за 400 у.е будут рисовать рюшечки а 2-3 программиста-архитектора будут бить линейкой по рукам если не по инструкции.
← →
Petr V. Abramov © (2006-11-11 23:08) [34]> Sergey Masloff (11.11.06 22:30) [33]
в идеале надо рассчитывать на лень, т.е. по инструкции должно быть проще.
P.S. off
почту читаешь истринскую?
← →
Юрий Зотов © (2006-11-11 23:17) [35]> Sergey Masloff (11.11.06 22:30) [33]
Сергей, тебе нужен один-два тулзовика. То есть, люди, которые реально способны за разумное время написать внутренние тулзы (и, если потребуется, то соответственно и доработать ядро системы). Чтобы потом чуть ли не любой студент-кодер, используя эти тулзы (в том числе, и встроенные прямо в IDE), мог легко плодить прикладные разделы с минимальной вероятностью ошибок. По крайней мере, исключая ошибки грубые. А сам ты останешься главным архитектором и главным консультантом. Потому что рабочих вопросов к тебе у этих тулзовиков будет много (и даже очень много) - пока не въедут в идеологию ядра.
ИМХО, если говорить о "разработке в условиях нехватки ресурсов"... а еще если имеется в виду разработка приличная (а не поделка-однодневка), а еще если продукт крупный, а еще если он должен быть реально (а не на словах) поддерживаемым и реально (а не на словах) расширяемым и т.п. - то именно такой путь и есть чуть ли не единственный. Практика (по крайней мере, моя ) - тому подтверждение.
PS
Эх, Сергей, ну где ж ты был всего несколько месяцев назад?...
:-(
← →
Petr V. Abramov © (2006-11-11 23:24) [36]> Юрий Зотов © (11.11.06 23:17) [35]
> Сергей, тебе нужен один-два тулзовика.
ты забыл добавить, что нужны они ему на 2-3-4 месяца. А через это время уж основной ворох работы был бы сделан, а уж Маслов С.С.-то с текущими мелочами справился бы, и дельнейшее содержание тулзовиков было бы растратой.
В том-то тулзовиков и беда...
← →
Sergey Masloff (2006-11-11 23:46) [37]Petr V. Abramov © (11.11.06 23:24) [36]
Ну а почему беда? Проектов много... Вообще я вот думаю почему в конторах-интеграторах таких людей не держать? Да платить им надо нормально но ведь у интеграторов фронт-то большой?
Я понимаю что у теперешних интеграторов 95% энтереса это впарить (в хорошем смысле) железо и стандартный софт а прикладной когда там до него дойдет...
← →
Sergey Masloff (2006-11-11 23:54) [38]Юрий Зотов © (11.11.06 23:17) [35]
Ну у меня что-то такое вертится в голове но смутно. Собственно у нас есть кое-что в этом плане, то есть были базовые классы сделаны и небольшая библиотека на мой взгляд довольно удачных компонент. Но как-то не закрыто это единой ширмой было и как бы получалась необязательность использования этого, да и с документацией не очень то есть приходилось код смотреть постоянно а не все могли... вобщем проблемы есть хотя и не катастрофа.
← →
Petr V. Abramov © (2006-11-11 23:55) [39]> Sergey Masloff (11.11.06 23:46) [37]
> Вообще я вот думаю почему в конторах-интеграторах таких людей не держать?
ну ты ж сам себе ответил
> Я понимаю что у теперешних интеграторов 95% энтереса это впарить (в хорошем смысле)
к тому же по традициям там бюджет ПРОЕКТА, в котором капзатрат не будет предусмотрено по определению.
← →
Petr V. Abramov © (2006-11-12 00:06) [40]просто там люди до сих пор живут в 90-х, когда можно было прогрммера с опытом по цене грузчика нанять. Это лучшие годы их руководства :)
Хотя есть и трезвеющие потихоньку люди
← →
Piter © (2006-11-12 00:11) [41]Sergey Masloff (11.11.06 22:05) [31]
Тех кто такие деньги стоит в Москве единицы и они уже работают
ты не прав, Сергей. Единицы - это те, кто достоин $4000 - $5000. И таких вакансий УЖЕ не мало.
Sergey Masloff (11.11.06 22:30) [33]
Идея создать компактное ядро вокруг которого студенты за 400 у.е будут рисовать рюшечки
не смеши людей. За $400 никто не пойдет, только если люди, которые ВООБЩЕ НИЧЕГО НЕ ПОНИМАЮТ. Вам выйдет это все дороже в результате.
Я получаю $400, бываю на работе пару раз в неделю.
О чем ты? Рынок за последний год СИЛЬНО изменился...
Судя по всему, в вашей фирме это еще не поняли. Ну тут два варианта: или таки поймут, или дождутся, когда рынок рухнет (если он рухнет). А пока спрос превышает предложение.
← →
Piter © (2006-11-12 00:14) [42]ну конечно есть еще третий вариант, но для фирмы он плохой. Это когда все программеры просто разбегутся, включая архитекторов. Это когда уже в других фирмах зарплаты будут в разы больше.
← →
Dok_3D © (2006-11-12 00:22) [43]2 Sergey Masloff (11.11.06 13:27)
Значит, о методике в условиях нехватки ресурсов, говоришь ...
Хочешь поговорить об этом ? :)
Сразу скажу, то, что ты написал, - это полнейшая чушь. Дороже выйдет.
1. "Кодеры, которые не умеют программировать" - этого не бывает. Если и бывает, то сие явление кратковременное, потому что человеку свойственно обучатся.
2. "они отдают на причесывание и проверку прежде чем это включается в проект" - это вообще нонсенс. Отдавать на причесывание ведущим высокопроизводительным девелоперам чужой код - это ОЧЕНЬ дорогое удовольствие. Очевидно, что они быстрее напишут его сами. Причем, качественнее.
Понимаешь, "кодеры", о которых ты говоришь, со временем становятся все лучше и лучше, особенно, когда рядом есть опытные коллеги. НО! На ввод в строй новых сотрудников требуются ресурсы опытных коллег, это факт. Иногда значительные, это тоже дорого. Ты к этому готов?
И последнее. Самым правильным решением в условиях настоящей нехватки ресурсов - это сокращение работ по менее приоритетному функционалу.
И распоследнее. Возможно, лучше подождать, пока продуктивный программист станет доступным, чем ждать пока первый доступный программист станет продуктивным.
Это я о кадровой политике.
← →
Petr V. Abramov © (2006-11-12 00:29) [44]> $400 никто не пойдет,
это понятно
только если люди, которые ВООБЩЕ НИЧЕГО НЕ ПОНИМАЮТ.
речь идет о:
1. ~15-20 т.р
2. большого понимания по большому счету не требуется. требуется аккуратность. при этом будут требования "владение дизайнером форм Delphi (VS Studio) в совершенстве, не путаться в синтаксисе языка, справка, что не дебил". А дальше чел либо в кадровом резерве на архитектора, либо через полгода овладевает программированием и уходит на другую зп с хорошими рекомендациями, либо (ну его проблемы) сидит всю жизнь на этой работе (работодатель рад :)
а в идеале этих же на аутсорс по 100 баксов :)
← →
Petr V. Abramov © (2006-11-12 00:30) [45]> На ввод в строй новых сотрудников требуются ресурсы опытных коллег, это факт.
более того, проблема, более того, решаемая отлаженным курсом молодого бойца
← →
Eraser © (2006-11-12 00:32) [46]Каким требованиям должен соответствовать работник, который получает (или расчитывает получать) $1000 ?
← →
Sergey Masloff (2006-11-12 00:32) [47]Dok_3D © (12.11.06 00:22) [43]
Могу поспорить
>1. "Кодеры, которые не умеют программировать" - этого не бывает. Если и >бывает, то сие явление кратковременное, потому что человеку свойственно >обучатся.
Да я это и написал. Будет школа кадров поработал полгодика - и вперед к новым достижениям на новом месте. Как раз я и хочу попробовать наладить систему когда на включение в работу такого человека уходило бы дня три.
>2. "они отдают на причесывание и проверку прежде чем это включается в >проект" - это вообще нонсенс. Отдавать на причесывание ведущим >высокопроизводительным девелоперам чужой код
Что значит высокопроизводительным? Быстро код набивающим? Я спокойно уже несколько лет проверяю код как минимум двоих человек. Это занимает у меня 10% времени максимум. А что я быстрее напишу - это распространенное заблуждение. Все равно рутины много и интегрально не так быстро получается. Так что я быстрее напишу (а чаще не напишу а расскажу как написать) какой-то затруднительный кусочек и все. С этим-то проблем нет говорю ж - уже годами так работаю.
> На ввод в строй новых сотрудников требуются ресурсы опытных коллег, это> факт. Иногда значительные, это тоже дорого. Ты к этому готов?
Знаю факт. Не готов. Вот и хочется дело закрыть фреймворком и нормальной документацией. Чтобы мое участие свелось к обзорной лекции и паре консультаций по ходу дела.
> это сокращение работ по менее приоритетному функционалу
Такого нет. Я его просто не начинаю делать ;-)
>Это я о кадровой политике.
А вот это определяем не ты и не я ;-)))
← →
Dok_3D © (2006-11-12 01:08) [48]2 Sergey Masloff (12.11.06 00:32) [47]
Ты использовал термин - причесывание. Может, все же речь идет об инспекции кода? Это разные вещи. Первый подразумевает разработку. Второй - только указание на ошибок приемов кодирования, нарушение методик и различного рода нотаций для последующего исправления автором.
Первый - заведомо более ресурсоемкий в сумме. Второй - нет.
Так о чем речь?
как раз я и хочу попробовать наладить систему когда на включение в работу такого человека уходило бы дня три.
Вот и хочется дело закрыть фреймворком и нормальной документацией. Чтобы мое участие свелось к обзорной лекции и паре консультаций по ходу дела.
Не знаю, на мой взгляд - нереально. Хотя зависит от проекта. Нужно на месте смотреть.
← →
Petr V. Abramov © (2006-11-12 01:10) [49]> Первый - заведомо более ресурсоемкий в сумме. Второй - нет.
времени - столько же. поверьте на слово. пока человек осознает, что он не прав, можно 10 раз самому написать
← →
Dok_3D © (2006-11-12 01:11) [50]2 Sergey Masloff (12.11.06 00:32) [47]
>Это я о кадровой политике.
А вот это определяем не ты и не я ;-)))
Менеджер проекта должен уметь влиять на кадровую политику. Это одна из сфер его полномочий при разработке проекта.
← →
Dok_3D © (2006-11-12 01:15) [51]2 Petr V. Abramov © (12.11.06 01:10) [49]
Петр, ты не понял. После инспекции кода человеку не нужно осознавать - ему нужно исправить код по перечьню замечаний. Инспекцию кода должны проводить опытные кодеры.
← →
Petr V. Abramov © (2006-11-12 01:23) [52]> После инспекции кода человеку не нужно осознавать
теоретически - да. если смириться с громким шепотом "начальник - мудак" :)
← →
Piter © (2006-11-12 02:08) [53]Eraser © (12.11.06 0:32) [46]
Каким требованиям должен соответствовать работник, который получает (или расчитывает получать) $1000 ?
башка на плечах должна быть. Знать, в чем здесь косяк:procedure TForm1.On_blabla(bla: bla);
begin
Form1.Caption := "test";
end
знать, что такое CTRL+SHIFT+C :)
Да вообще ничего такого. Просто нормально уметь программировать. Знать среду, методы отладки, watch list, брекпоины, понимать структуру VCL, понимать почему у многих компонент есть свойство типа TStrings, хотя реально экземпляр этого класса никогда не создают. Уметь вызывать WinApi-функции (да и вообще, функции из внешних DLL). Понимать, что делает:var
s: string;
begin
P := PChar(s);
а что делает:var
p: pchar;
begin
s := p;
Знать, что написать вместо:Labell.Enabled := false;
Laber2.Enabled := false;
Laber3.Enabled := false;
Laber4.Enabled := false;
Laber5.Enabled := false;
Плюс знание БД, хотя бы сносное знание чистого SQL.
Если еще и английский неплохо - вообще щоколад.
В общем, я так думаю ничего особенного. Просто умение создавать полезные программные продукты.
← →
Petr V. Abramov © (2006-11-12 02:18) [54]> Уметь вызывать WinApi-функции
во-во, с этого момента про 1000 и разговаривать
> Если еще и английский неплохо
если его чел не может читать документацию - 0$ плюс его доплата за обучение англ. техническому. Ибо его незнание говорит о НЕЖЕЛАНИИ что-то понимать. А такие не нужны даже батонокидателями
← →
Ketmar © (2006-11-12 02:25) [55]>[54] Petr V. Abramov(c) 12-Nov-2006, 02:18
>> Уметь вызывать WinApi-функции
> во-во, с этого момента про 1000 и разговаривать
"дипломированый чернокнижник вызовет любую winapi-функцию. владеет умением строить защитные пентаграммы" (ц) Нота
← →
Eraser © (2006-11-12 03:08) [56]> [53] Piter © (12.11.06 02:08)
ну что ж.. хорошо если так ) летом скорее всего предстоит поиск работы в столице )
← →
Германн © (2006-11-12 03:18) [57]
> Ketmar © (12.11.06 02:25) [55]
>
> >[54] Petr V. Abramov(c) 12-Nov-2006, 02:18
> >> Уметь вызывать WinApi-функции
> > во-во, с этого момента про 1000 и разговаривать
> "дипломированый чернокнижник вызовет любую winapi-функцию.
> владеет умением строить защитные пентаграммы" (ц) Нота
Я бы тебя принял на работу, если б я был ДИРЕКТОРОМ!
← →
Ketmar © (2006-11-12 03:24) [58]>[57] Германн(c) 12-Nov-2006, 03:18
>Я бы тебя принял на работу, если б я был ДИРЕКТОРОМ!
можешь не принимать. достаточно просто платить 1000 буказоидов.
%-)
← →
Германн © (2006-11-12 03:34) [59]
> Ketmar © (12.11.06 03:24) [58]
>
> >[57] Германн(c) 12-Nov-2006, 03:18
> >Я бы тебя принял на работу, если б я был ДИРЕКТОРОМ!
> можешь не принимать. достаточно просто платить 1000 буказоидов.
>
> %-)
>
Согласен. С сегодняшнего дня будешь получать 10000 фигазоидов! Но только учти - по серой схеме! :-)
← →
Ketmar © (2006-11-12 03:38) [60]серая не катит. нужна subsilver.
← →
Германн © (2006-11-12 03:49) [61]
> Ketmar © (12.11.06 03:38) [60]
>
> серая не катит. нужна subsilver.
>
Тогда останемся друзьями. Ты мне ничем, а я тебе никогда! :-)
← →
Piter © (2006-11-12 13:02) [62]Petr V. Abramov © (12.11.06 2:18) [54]
если его чел не может читать документацию - 0$ плюс его доплата за обучение англ. техническому
ну кое-как понимать MSDN - надо, конечно. Но это частично входит в понятие уметь вызывать WinApi :)
А я говорил "Если еще и английский неплохо" - это значит уметь говорить, а если еще и писать грамотно - вообще здорово, во многих фирмах сильно ценится.
← →
Sergey Masloff (2006-11-12 13:09) [63]Piter © (12.11.06 13:02) [62]
>во многих фирмах сильно ценится.
Ага. У меня дама одна знакомая есть когда устраивалась на работу так на английский напирали она в принципе очень даже неплохо владеет и то нелегко было. Ну проработала там года два с половиной потом ушла. Я в разговоре обмолвился - говорю ну как английский-то пригодился? Она ответила что за все время работы не произнесла и не написала ни одной фразы на английском ;-)
← →
Ketmar © (2006-11-12 13:10) [64]>[63] Sergey Masloff 12-Nov-2006, 13:09
>говорю ну как английский-то пригодился?
что-то напомнило: "знаю английский в объёме кобола" (ц)...
← →
Piter © (2006-11-12 13:37) [65]Sergey Masloff (12.11.06 13:09) [63]
возможно. А разве про это речь?
Факт в том, что за доп. знание английского фирмы платят доп. деньги (неплохие). А нужна ли эта доп. оплата или фирма фигней страдает - это проблемы фирмы, верно? :)
← →
Sergey Masloff (2006-11-12 13:42) [66]Piter © (12.11.06 13:37) [65]
Да не про это просто вспомнилось к слову.
← →
Piter © (2006-11-12 13:56) [67]Да и вообще английский рулит. Я вот хочу как-нибудь по Европе попутешествовать, нужно английский учить :(
← →
Petr V. Abramov © (2006-11-12 14:05) [68]> Piter © (12.11.06 13:56) [67]
возьми симпатичную переводчицу :)
← →
Ketmar © (2006-11-12 14:16) [69]>[68] Petr V. Abramov(c) 12-Nov-2006, 14:05
>возьми симпатичную переводчицу :)
и нафига тогда та европа?
← →
kaif © (2006-11-12 15:03) [70]А как устроен сам бизнес?
Дело в том, что на мой взгляд схема "заказчик-подрядчик" в производстве рискованных продуктов (а программа - именно такой продукт) не может быть экономически эффективна. А вот схема "заказчик-посредник-подрядчик" интереснее. В рискованном бизнесе для заказчика всегда проще иметь дело с некоторой компанией, которая сама непосредственным производством не занимается (назовем ее посредником). Тогда непосредственные производители узко специализируются на производствах какого-то типа, а "посредник" принимает решение о том, кому лучше направить очередной заказ, исходя из своего опыта, а иногда и интуиции. Некоторые заказы вообще таковы, что от них следует отказаться.
Поясню экономическую сторону.
Любое производство само по себе - бизнес почти убыточный. По сравнению с торговлей, например.
Связано это с тем, что в производстве задействовано всегда относительно много людей и дорогих технологий.
И производство неубыточно только в том случае, если оно оптимально загружено. То есть занимается именно тем, что умеет делать лучше и дешевле других и имеет постоянно заказы.
ИМХО, разделение на "торговые компании", непосредственно отвечающие перед заказчиком (зачастую плохо представляющим, что ему нужно) за конечный результат и "производственные компании", непосредственно осуществляющие проекты и отвечающие за результат перед "торговой компанией", способствует большей специализации и более эффективной загрузке производств.
С производства снимется такая головная боль, как необходимость искать выгодного именно для себя заказчика. Да к тому же в условиях, когда трудно отказаться от конкретного заказа, если производство простаивает, а других заказов на горизонте - не видно. И приходится браться за то, в чем даже и не специалист.
Не могу сказать, что в программировании у меня есть готовые примеры таких способов делать бизнес, но в ряде других отраслей (в полиграфии, например, или в рекламе) я замечаю, что дела поставлены именно так и все стороны выигрывают.
Наценки "посреднических компаний" составляют от 20 до 40% стоимости заказа, и это позволяет им работать более гибко, обеспечивая заказчика продуктом даже в условиях практически провальных ситуаций (а такие в рискованном бизнесе возникают почти в половине случаев) - всегда оказывается, что "заказчик хотел не совсем это", что требуются дополнительные затраты и т.д. Производственники (сами по себе) обычно более узко смотрят на вещи "нам сказали так - мы так сделали - идите нафик", что отпугивает заказчиков.
Производственники редко готовы брать на себя издержки, если получился не совсем очевидный брак или брак, в котором они "не виноваты". Зато при очевидном браке - обычно переделывают, что говорит об определенной специфике их отношения к происходящему. Производственник всегда хочет четко сформулированное задание, так как он узкий специалист. Но он добростовестный узкий специалист, т.е. если выяснится, что его люди допустили непбрежность, то он готов будет нести издержки и переделать. Однако ему нет дела до "философии".
Если бы я организовывал софтверный бизнес, я бы подыскал себе ряд компаний, специализирующихся на каких-то вещах (различного типа склады, финансовый учет, системы управления производством, обработка изображений и сигналов, веб-дизайн, распределенные базы данных и т.п.) и наладил бы с ними взаимодействие таким образом, чтобы знать, как разместить каждый очередной заказ, возможно даже разбивая его на подзадачи, так, чтобы каждый мог заниматься тем, в чем он наилучший мастер на мой взгляд, а я мог гарантировать заказчикам сроки и бюджеты.
Даже если одно из таких "производств" принадлежало бы мне лично (например финансовые программы для малого бизнеса), то я не стал бы рассматривать его в отрыве от всех других альтернативных вариантов размещения.
Возможно "конкурирующиее производство" какую-то конкретную задачу решит лучше (быстрее и дешевле), чем мое. А мое "производство" в это время будет решать другую задачу, на которой оно специализируется и которую хуже решил бы мой конкурент.
Вообще этот рынок относится к числу "рынков туфты". Наподобие рынка медицинских услуг. Ну не может потребитель точно решить, что именно ему нужно. Он лишь приблизительно знает, что у него болит. И ему нужен врач. Врач, который полностью осмотрит его, возможно, проведет ряд исследований в независимых лабораториях, и в конце концов направит пациента к конкретным специалистам.
Разумеется все написанное - ИМХО.
Но я полагаю, что если начинается сетование на работников, то это означает, что с самим бизнесом что-то не так.
В экономике не бывает "вообще невыгодных" работников или "вообще невыгодных" работодателей.
Бывают неэффективные подходы к делу.
Так же, как и в программировании - неэффективный код, а не "неэффективные команды". И начинается все обычно с неэффективной архитектуры. Зачастую эффективный код не настолько важен, насколько важен правильный выбор архитектуры всей системы. В бизнесе - все точно так же.
← →
Piter © (2006-11-12 18:01) [71]Petr V. Abramov © (12.11.06 14:05) [68]
возьми симпатичную переводчицу :)
это, конечно, враиант. Но хочется и самому понимать :)
А то знаешь, когда находишься в толпе, где говорят на непонятном тебе языке - чувствуешь себя дебилом.
← →
Petr V. Abramov © (2006-11-12 18:28) [72]> А то знаешь, когда находишься в толпе, где говорят на непонятном тебе языке
тогда английского мало будет. придется учить все, включая албанский :)
← →
Petr V. Abramov © (2006-11-12 18:28) [73]> Piter © (12.11.06 18:01) [71]
может, сей важный вопрос в отдельную ветку? :)
← →
Piter © (2006-11-12 18:31) [74]Petr V. Abramov © (12.11.06 18:28) [72]
тогда английского мало будет. придется учить все, включая албанский :)
как говорят знакомые, у которых в загранке 150 печатей - английского вполне достаточно.
Petr V. Abramov © (12.11.06 18:28) [73]
может, сей важный вопрос в отдельную ветку? :)
да а смысл? Ты не продолжай тему и все :)
← →
Petr V. Abramov © (2006-11-13 00:36) [75]> у которых в загранке 150 печатей - английского вполне достаточно.
чтоб спросить дорогу в аэропорт. а чтоб понять, что кругом говорят - не верю. Либо знакомые 150 раз ездили на англоязычные переговоры
> да а смысл? Ты не продолжай тему и все :)
тогда ветка тонет :)
← →
Piter © (2006-11-13 01:12) [76]Petr V. Abramov © (13.11.06 0:36) [75]
ну а зачем тебе знать, что именно вокруг говорят?
Я имел в виду, когда говорят как бы тебе, а ты не понимаешь. А если ты мимоходом шел и услышал незнакомое слово - да и фиг с ним.
И никакие не переговоры, просто они часто выбираются в Европу (4-5 раз в год) на всякие спортивные состязания.
Если уметь - вполне достаточно $300-$400 чтобы 2 недели кататься по европе.
← →
Petr V. Abramov © (2006-11-13 01:38) [77]> Я имел в виду, когда говорят как бы тебе, а ты не понимаешь.
а вот тут и переводчица самое оно. переводит: "этот пэр обозвал Вас козлом, потому его грязная нога была там, куда Вы наступили"
> на всякие спортивные состязания.
ну там понятно, трех слов хватит. "лыжи" и мата :)
← →
Piter © (2006-11-13 04:19) [78]Petr V. Abramov © (13.11.06 1:38) [77]
спортивный матч это считай повод. Там еще культурная программа на неделю, две :)
← →
Sergey Masloff (2006-11-21 20:43) [79]Вобщем возвращаясь к теме. Ничего не получается, на контроль уходит действительно намного больше времени. Сегодня над одним модулем сидел с полдевятого утра до семи вечера. Пока процентов на 40 переработал. Год назад составил список типичных примеров явно плохого кода (которые я при подготовке к переходу на D7 вычистил) и разослал всем разработчикам. Потом я от дельфийских проектов далек был некоторое время сейчас опять вернулся - ну все по старому. Неинициированные локальные переменные, неправильное применение try...finally и try...except ну и все-все-все. Ну и для кого писал - х.з.
← →
Piter © (2006-11-21 21:14) [80]Sergey Masloff (21.11.06 20:43) [79]
Неинициированные локальные переменные
так ведь об этом комилятор предупреждает?!
Sergey Masloff (21.11.06 20:43) [79]
неправильное применение try...finally и try...except
можно пример?
← →
Sergey Masloff (2006-11-21 21:25) [81]Piter © (21.11.06 21:14) [80]
>так ведь об этом комилятор предупреждает?!
А фигли, разработчики-то все опытные знают где галку поставить чтобы не предупреждал ;-)
>можно пример?
Из головы выдумывать неохота а на память... не тем голова сейчас занята
как вопиющее - пустой блок except, в finally освобождают то что не создавали да много чего
← →
Rouse_ © (2006-11-21 21:32) [82]
> Они определяют архитектуру, пишут ядро системы и сервисные
> функции. Под ними работают кодеры. Программировать им уметь
> не надо - только кодить. Причем все что они накодили они
> отдают на причесывание и проверку прежде чем это включается
> в проект.
Получиться тихий ужас... Сужу по опыту работы за последние 6 лет в трех организациях, включая текущую. Переписка кода практически 100 процентная от объема кода шкодеров. Если уж они так необходимы, то место их в третьестепенных задачах на неделю разработки. Так сказать для разработки третьестепенных вспомогательных утилит. А как пообучаться - тогда можно и посложнее давать. Кстати Зотычь правильно говорит про тулзовиков, чтоб клетку ограничить им - самое оно будет :)
← →
Petr V. Abramov © (2006-11-21 23:04) [83]Sergey Masloff (21.11.06 20:43) [79]
> Год назад составил список типичных примеров явно плохого кода
оно хорошо при наличии списка явно хорошего.
← →
Piter © (2006-11-21 23:13) [84]Sergey Masloff (21.11.06 21:25) [81]
как вопиющее - пустой блок except
а что здесь вопиющего? У меня такое бывает. Вот возьму пример из головы:function ConvertStrToIntSpec(const s: string; var i: integer): boolean;
begin
Result := false;
try
i := StrToInt(s);
if i < 0 then
exit;
Result := True;
except
end;
end;
Sergey Masloff (21.11.06 21:25) [81]
в finally освобождают то что не создавали
это странно...
← →
Anatoly Podgoretsky © (2006-11-21 23:33) [85]> Piter (21.11.2006 23:13:24) [84]
Код неправильный
Почему бы не написать нормальноfunction ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;begin try I := StrToInt(S); Result := I >= 0; except Result := False; end;end;
← →
Anatoly Podgoretsky © (2006-11-21 23:36) [86]> Anatoly Podgoretsky (21.11.2006 23:33:25) [85]
function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin
try
I := StrToInt(S);
Result := I >= 0;
except
Result := False;
end;
end;
← →
Sergey Masloff (2006-11-21 23:38) [87]Piter © (21.11.06 23:13) [84]
>Вот возьму пример из головы:
1) Это просто ты не знаешь про TryStrToInt()
2) TryStrToInt внутри организован тоже не через исключения. И на то есть причины
Вообще это дурной тон исключения так использовать (мнение не мое а классиков). Они не для того сделаны.
← →
Anatoly Podgoretsky © (2006-11-22 00:02) [88]> Sergey Masloff (21.11.2006 23:38:27) [87]
А вот пример с ним, совсем коротко получается
function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin
if not TryStrToInt(S, I) then I := 0;
Result := I >= 0;
end;
← →
Piter © (2006-11-22 01:18) [89]Sergey Masloff (21.11.06 23:38) [87]
Это просто ты не знаешь про TryStrToInt()
ну почему сразу не знаю. Я ведь привел тестовый пример.
Бывают функции типа приведенной, но проверок там больше намного. И нафига в случае каждой неудачной проверки писать: Result := false, если можно сразу задать Result := false, и только после прохождения всех проверок написать: Result := true?
Тогда в except просто нечено писать, результат уже задан False, поэтому оно пустое. По-моему, вполне нормальная ситуация.
Просто пример лень придумывать, но я думаю понятно о чем речь.
Anatoly Podgoretsky © (22.11.06 0:02) [88]
А вот пример с ним, совсем коротко получается
function ConvertStrToIntSpec(const s: string; var I: Integer): Boolean;
begin
if not TryStrToInt(S, I) then I := 0;
Result := I >= 0;
end;
данный пример явно не реализовывает в точности действия приведенной функции. Он вообще некорректен, например при передаче "aaa" - оно вернет True!
← →
Джо © (2006-11-22 01:19) [90]> [84] Piter © (21.11.06 23:13)
> Sergey Masloff (21.11.06 21:25) [81]
> в finally освобождают то что не создавали
>
> это странно...
Неужели не встречал такого бреда, как:try
Obj := TSomeObj.Create;
finally
Obj.Free
end;
?
← →
Piter © (2006-11-22 01:27) [91]Хотя ладно, постараюсь привести пример:
function TestConvert(const s: string; var i: Integer): boolean;
begin
Result := false;
try
i := StrToInt(s);
if i>0 then
begin
inc(FEnterCount, 1);
if Assigned (GlobarRec) then
begin
Inc(GlobalRecord.Count, i);
Result := true;
end;
end;
except
end;
end;
Пожалуйста, перепишите функцию, чтобы в except нужно было что-то писать?
← →
Piter © (2006-11-22 01:28) [92]Джо © (22.11.06 1:19) [90]
Неужели не встречал такого бреда, как:
try
Obj := TSomeObj.Create;
finally
Obj.Free
end;
?
да я встречал еще и не такой бред :)
Странно то, что такие программисты работают и получают, как я понимаю в фирме Сергея, неплохие деньги...
← →
Piter © (2006-11-22 01:34) [93]Sergey Masloff (21.11.06 23:38) [87]
у меня возникла такая просьба... Я абсолютно не настаиваю, понимаю, что люди занятые... Но можно я сброшу исходник, а ты оценишь? Мне очень интересно, у тебя все таки есть опыт приема людей, руководишь, видишь как другие пишут, умеешь оценить код. Просто хочется понять насколько я хорошо пишу по отношению к другим коллегам по цеху, в частности которые работают у вас.
← →
Юрий Зотов © (2006-11-22 01:35) [94]А зачем здесь вообще except?
if TryStrToInt(s, i) and (i > 0) then
begin
Inc(FEnterCount, 1);
Result := Assigned(GlobarRec);
if Result then
Inc(GlobalRecord.Count, i);
end
else
Result := False;
← →
Piter © (2006-11-22 01:44) [95]ЛадноЮ побадаюсь с мастерами :)
function Test(const s: string): boolean;
var
Task: TTask;
begin
Result := false;
try
Task := TTask.Create(cFormateDisk, s);
if TaskManager.AddTask(Task) then
begin
inc(FEnterCount, 1);
if Assigned (GlobarRec) then
begin
Inc(GlobalRecord.Count, i);
Result := true;
end;
end;
except
end;
end;
← →
Piter © (2006-11-22 01:47) [96]сори, лучше так оформить:
function Test(const s: string): boolean;
var
Task: TTask;
begin
Result := false;
try
Task := TTask.Create(cFormateDisk, s);
if TaskManager.AddTask(Task) then
begin
inc(FEnterCount, 1);
if Assigned (GlobarRec) then
begin
Inc(GlobalRecord.Count, i);
Result := true;
end;
end;
except
end;
end;
← →
Джо © (2006-11-22 01:47) [97]Не знаю, а меня всегда, как говорится (возможно, на юге России это слово тоже используют) "сипает" при виде пустого except...end иначе как в сопровождении комментария с внушительными причинами, по которым сия конструкция была употреблена :)
← →
Eraser © (2006-11-22 01:48) [98]> [95] Piter © (22.11.06 01:44)
использование глобальных переменных не приветствуется :)
← →
Eraser © (2006-11-22 01:50) [99]> [97] Джо © (22.11.06 01:47)
> (возможно, на юге России это слово тоже используют) "сипает"
впервые слышу.. хотя живу не на самом уж юге, но почти )
← →
Юрий Зотов © (2006-11-22 01:54) [100]try
if TaskManager.AddTask(TTask.Create(cFormateDisk, s)) then
begin
Inc(FEnterCount, 1);
Result := Assigned (GlobarRec)
if Result then
Inc(GlobalRecord.Count, i)
end
except
Result := False
end;
← →
Джо © (2006-11-22 01:59) [101]> [99] Eraser © (22.11.06 01:50)
> > [97] Джо © (22.11.06 01:47)
>
>
> > (возможно, на юге России это слово тоже используют) "сипает"
>
> впервые слышу.. хотя живу не на самом уж юге, но почти )
Ну, возможно, исключительно малоросское слово. Или там кубанское впридачу. Впрочем, Даль его знает. Уверяет, что слово польск. или чешского происхождения. Обогощайте свой словарь, великороссы! ;)
Я употребил в значении "меня передергивает". Ударение в слове "сипать" — на первом слоге.
← →
Piter © (2006-11-22 02:02) [102]ой ну ладно, представим так:
function TCore.Format(const s: string; const NumOperator: integer): boolean;
var
Task: TTask;
begin
Result := false;
try
Task := TTask.Create(cFormateDisk, s);
if Self.TaskManager.AddTask(Task) then
begin
inc(FEnterCount, 1);
if FAddHistoryFlag then
begin
Self.History.Add(cFormatDisk, s, NumOperator);
Result := true;
end;
end;
except
end;
end;
← →
Piter © (2006-11-22 02:10) [103]Юрий Зотов © (22.11.06 1:54) [100]
так, вершина моего творения :)function TCore.Format(const s: string; const NumOperator: integer): integer;
var
Task: TTask;
begin
Result := -1;
try
Task := TTask.Create(cFormateDisk, s);
if Self.TaskManager.AddTask(Task) then
begin
inc(FEnterCount, 1);
if FAddHistoryFlag then
Result := Self.History.Add(cFormatDisk, s, NumOperator);
end;
except
end;
end;
← →
Eraser © (2006-11-22 02:15) [104]> [103] Piter © (22.11.06 02:10)
локальная переменная Task ведь явно лишняя, это еще в [100] ЮЗ заметил )
← →
SlymRO (2006-11-22 04:20) [105]Eraser © (22.11.06 2:15) [104]
локальная переменная Task ведь явно лишняя, это еще в [100] ЮЗ заметил )
а если в AddTask EOutOfMemory или еще какайнить ботва: TTask.Create потерян :( а его не мешалобы Free
← →
Anatoly Podgoretsky © (2006-11-22 09:35) [106]> Piter (22.11.2006 01:18:29) [89]
Ты программисти али кто?
Простейшие коды читать не умеешь, ну тогда запусти Дельфи и не пори чепуху.
← →
Anatoly Podgoretsky © (2006-11-22 09:38) [107]> Piter (22.11.2006 01:27:31) [91]
Какая проблема
// Result := false;
try
...
except
Result := false;
end;
Учись программировать, годы тебе на пользу не пошли.
← →
Anatoly Podgoretsky © (2006-11-22 09:39) [108]> Piter (22.11.2006 01:28:32) [92]
> Странно то, что такие программисты работают
А ты чем дельги зарабатываешь?
Только не говори, что программированием, поскольку странно и не логично.
← →
Anatoly Podgoretsky © (2006-11-22 09:40) [109]> Piter (22.11.2006 01:44:35) [95]
А чего бодаться?
Безграмотный код и утечки и AV
← →
Anatoly Podgoretsky © (2006-11-22 09:43) [110]> Piter (22.11.2006 02:02:42) [102]
Таже проблема, утечка и AV
Как программировал пару лет назад так ничему и не научился.
← →
SlymRO (2006-11-22 10:22) [111]Удалено модератором
← →
Anatoly Podgoretsky © (2006-11-22 10:31) [112]> SlymRO (22.11.2006 10:22:51) [111]
Хочешь помериться у кого длиннее?
Да ради бога, только зачем мне в твои игры играть.
← →
Александр Иванов © (2006-11-22 10:31) [113]> [111] SlymRO (22.11.06 10:22)
Уже ничем не поможешь. Те же утечки.
← →
Anatoly Podgoretsky © (2006-11-22 10:34) [114]> SlymRO (22.11.2006 10:22:51) [111]
> Помог бы чем,
А где просьба о помощи?
А приведеный код за помощь не считается?
А на слабо у нас не проходит, с этим пожалуйста в песочницу.
← →
Anatoly Podgoretsky © (2006-11-22 10:37) [115]> Александр Иванов (22.11.2006 10:31:53) [113]
> Уже ничем не поможешь. Те же утечки.
Ну не понимает
← →
SlymRO (2006-11-22 10:52) [116]Александр Иванов © (22.11.06 10:31) [113]
Те же утечки
Тыкни пальцем где? Все что локально создал при Excep уничтожил - все что происходит с Task после успешного Self.TaskManager.AddTask(Task) мне не интересно: теперь TaskManager за него в ответе, а это уже другая история.
← →
SlymRO (2006-11-22 11:07) [117]Удалено модератором
← →
Anatoly Podgoretsky © (2006-11-22 11:11) [118]
> SlymRO (22.11.06 04:20) [105]
>AddTask EOutOfMemory или еще какайнить ботва: TTask.Create потерян :( а его не мешалобы Free
← →
Anatoly Podgoretsky © (2006-11-22 11:18) [119]Удалено модератором
Примечание: Выражения выбираем
← →
Anatoly Podgoretsky © (2006-11-22 11:20) [120]> SlymRO (22.11.06 10:52) [116]
Где Free за который ты ратуешь?except
result:=false;
end;
← →
SlymRO (2006-11-22 11:43) [121]Плохо смотришь.
const str="Task := TTask.Create(cFormateDisk, s);
"
try
if not Self.TaskManager.AddTask(Task) then
raise Exception.Create("Can""t AddTask");
except
Task.Free;
raise;
end;
while not See(str) do Read(Post([111]))
Так не кошерно?
← →
SlymRO (2006-11-22 11:45) [122]Чета пост почикался... продолжение
while not See(str) do Read(Post([111]));
← →
Anatoly Podgoretsky © (2006-11-22 11:46) [123]> SlymRO (22.11.2006 11:43:01) [121]
Это ты обрезал свой код, там дальше еще есть места где может возникнуть ошибка.
Но это не важно, не про это речь, не про решение его проблем, а про "Методики разработки в условиях нехватки ресурсов."
Ты то не вываливал свой код как эталон, более того ты привел его как опозит вываленому.
← →
SlymRO (2006-11-22 11:58) [124]Anatoly Podgoretsky © (22.11.06 11:46) [123]
там дальше еще есть места где может возникнуть ошибка
не думаю что в оставшемся коде [111]inc(FEnterCount, 1);
if FAddHistoryFlag then
Self.History.Add(cFormatDisk, s, NumOperator);
Result := true;
имеется утечка если толко не в Self.History.Add, но это выходит за рамки рассмотрения проблемы
← →
вразлет © (2006-11-22 11:59) [125][33] Sergey Masloff (11.11.06 22:30)
Еще раз ;-) Несколько - УЖЕ есть. 40 человек таких держать - бессмысленно. Идея создать компактное ядро вокруг которого студенты за 400 у.е будут рисовать рюшечки.
Может проще взять на стройке бригаду таджиков?
← →
SlymRO (2006-11-22 12:09) [126]вразлет © (22.11.06 11:59) [125]
Ненадо... у такжиков тоже свои программеры имеются... думаю найдется и такой который и тебя в DeathMatch перекодит
← →
Anatoly Podgoretsky © (2006-11-22 12:29) [127]> SlymRO (22.11.2006 11:58:04) [124]
Именно, что за рамки, поэтому не буду говорить, где может возникнуть ошибка.
В тоже время я не знаю, что такое TaskManager.AddTask и как оно реализовано, без этого вообще трудно конкретно говорить.
Есть не существенные замечания по структуре, не понятно зачем там в двух местах фигурирует Self - конечно не ошибка, но не красиво.
А не по теме, лишь потому что, вываленый код представлен как эталон в необходимости пустого except end и невозможности иначе, как и предыдущий код с TryStrToInt - что и было развеяно участиками обсуждения, я тоже поучаствовал и это тот случай когда надо было привести конкретный код, подверждающий мысль. Если бы на этом было закончено, так нет же вместо одного кривого кода приводится как эталон другой не менее кривой.
Но хоть на этот раз признал свои знания, вот цитата
> так, вершина моего творения :)
ключевое слово "моего"
← →
Anatoly Podgoretsky © (2006-11-22 12:30) [128]> вразлет (22.11.2006 11:59:05) [125]
И паспорта отобрать :-)
Минимизация Текущих издержек, за счет переноса их в будущее.
← →
Курдль © (2006-11-22 12:31) [129]
> Sergey Masloff (11.11.06 13:27)
Все, что вам нужно - реорганизация команды.
Архитектор, технические лидеры направлений и главное - опытный, пусть даже и дорогостоящий ПМ, желательно имеющий опыт работы в похожих проектах с похожими потребностями. Опытные ПМ-ы умеют очень эффективно балансировать на отношении мотивация/производительность.
При правильном подходе ничей код проверять не надо будет. Линейкой по рукам бить - тоже. Для этого нужно соблюсти два правила:
1. Жесткая формализация ТЗ.
2. Тотальное тестирование.
Ошибки должны выявляться не исследованием чужого кода, а тестированием. Поэтому придется некоторых опытных сотрудников направить на организацию такового.
← →
Anatoly Podgoretsky © (2006-11-22 12:31) [130]> SlymRO (22.11.2006 12:09:06) [126]
А есть такая нация, где их нет?
← →
Jeer © (2006-11-22 13:05) [131]
> Anatoly Podgoretsky © (22.11.06 12:31) [130]
Пигмеи африканския.
Они до клавы со стула не дотягиваются.
← →
Piter © (2006-11-22 14:21) [132]Eraser © (22.11.06 2:15) [104]
локальная переменная Task ведь явно лишняя, это еще в [100] ЮЗ заметил )
это не суть важно, здест разговор кажется не об этом? Я после create могу вызвать там какой-нибудь метод и тогда переменная будет не лишняя.
Anatoly Podgoretsky © (22.11.06 9:35) [106]
Простейшие коды читать не умеешь, ну тогда запусти Дельфи и не пори чепуху
а вы вообще не программист, тогда и не лезьте на программисткий форум.
Anatoly Podgoretsky © (22.11.06 9:38) [107]
Какая проблема
// Result := false;
try
...
except
Result := false;
end;
проблема такая, что вы нихрена не поняли. ПЕРЕПИШИТЕ мой код из [103].
Ваши отмазы почему вы не захотите переписать код - меня не интересуют. Если не можете - то и все прозрачно с вами.
Anatoly Podgoretsky © (22.11.06 9:40) [109]
Безграмотный код и утечки и AV
если вы отвечаете за слова - то расскажите в чем код беграмотный, где там утечки и тем более AV.
← →
Игорь Шевченко © (2006-11-22 14:23) [133]Piter © (22.11.06 14:21) [132]
Тебе напомнить про первый пункт правил, так, чтобы почувствовал ?
← →
Romkin © (2006-11-22 14:25) [134]Курдль © (22.11.06 12:31) [129] Исследование кода позволяет выявить будущие, еще не возникшие ошибки :) Глядишь, и тестировать меньше придется
← →
Piter © (2006-11-22 14:28) [135]Игорь Шевченко © (22.11.06 14:23) [133]
Тебе напомнить про первый пункт правил, так, чтобы почувствовал ?
а перед этим навести порядок в своих рядах слабо?
Вам не кажется, что оскорбления от модераторов недопустимы?
← →
Иксик © (2006-11-22 14:29) [136]
> Курдль © (22.11.06 12:31) [129]
Я согласен с Курдль.
← →
Anatoly Podgoretsky © (2006-11-22 14:32) [137]> Piter (22.11.2006 14:21:12) [132]
> а вы вообще не программист, тогда и не лезьте на программисткий форум.
Форум открытый, вход всем разрешет, тебе тоже!
← →
Anatoly Podgoretsky © (2006-11-22 14:33) [138]> Piter (22.11.2006 14:21:12) [132]
> то расскажите в чем код беграмотный,
Я это пытался делать для тебя все эти годы, но мне уже надоела, поскольку толку нет.
← →
Piter © (2006-11-22 14:55) [139]Anatoly Podgoretsky © (22.11.06 14:32) [137]
Форум открытый, вход всем разрешет, тебе тоже!
ну так и писать я могу свои любые мысли, так что не надо учить чего мне открывать.
Anatoly Podgoretsky © (22.11.06 14:33) [138]
Я это пытался делать для тебя все эти годы, но мне уже надоела, поскольку толку нет
как я говорил, меня отговорки не интересуют. Если не можете переписать код в [103] - так и говорим, разговор заканчиваем, ноу праблем.
Если таки попытаетесь переписать, поймете о чем я говорил.
Я даже на последок объясню, в чем фишка. В том, что заранее задается Result := -1; - поэтому задавать это в Except смысла НЕТУ.
Если не задавать заранее Result := -1 - то тогда вам после каждой проверки в else придется задавать. Можно даже схематически привести код, так даже наверное лучше:
Result := -1;
try
if ... then ...
begin
....
if ... then
begin
...
if ... then
begin
...
Result := ... ;
end;
end;
end;
except
end;
А вы мне его предлагаете заменить на:try
if ... then ...
begin
....
if ... then
begin
...
if ... then
begin
...
Result := ... ;
end
else
Result := -1;
end
else
Result := - 1;
end
else
Result := -1;
except
Result := - 1;
end;
и чем оно лучше? Имхо, первый вариант нагляднее и там нету ничего в except, потому что уже по дефолту задано.
← →
Anatoly Podgoretsky © (2006-11-22 15:05) [140]> Piter (22.11.2006 14:28:15) [135]
Где ты увидел оскорбление, это же простая констатация фактов, за прошедшии годы изменений не видно. И где ты увидел модератора, например если ты про меня, то подпись будет APP
Тебе тоже дано дать профессиональную оценку моих профессиональных данных, вместо того, чтобы запрещать кому либо посещать форум и писать сообщения, тем более не имея для этого ни прав ни возможностей.
Тебе не нравятся сообщения, так не читай, в клиенте поставь игнор, делов то.
← →
Anatoly Podgoretsky © (2006-11-22 15:07) [141]> Piter (22.11.2006 14:55:19) [139]
> как я говорил, меня отговорки не интересуют. Если не можете переписать код в [103] - так и говорим, разговор заканчиваем, ноу праблем.
На слабо не возьмешь, не в песочнице, а кода тебе много привели, на пару лет хватит.
← →
Piter © (2006-11-22 15:23) [142]ну что я могу сказать: взрослый ребенок.
Засим диалог прекращаем в силе его бессмысленности.
Подождем более авторитетных товарищей, может ЮЗ заглянет...
← →
Anatoly Podgoretsky © (2006-11-22 15:29) [143]> Piter (22.11.2006 15:23:22) [142]
Так я смысла не вижу уже давно, тебя все равно ни какой код никогда не устраивал.
← →
ferr © (2006-11-22 15:33) [144]интересная тема, объясните пожалуйста мне лучше :)
1) почему бы не записатьfunction TCore.Format(const s: string; const NumOperator: integer): integer;
var
Task: TTask;
begin
try
Task := TTask.Create(cFormateDisk, s);
if Self.TaskManager.AddTask(Task) then
begin
inc(FEnterCount, 1);
if FAddHistoryFlag then
Result := Self.History.Add(cFormatDisk, s, NumOperator);
end;
except
Result := -1;
end;
end;
так, по-моему, эстетичнее.
2) А разьве правильно обрабатывать все исключения, мне кажется стоит ловить ожидаемые?
P.S. Заведомо интересно чужое мнение. :))
← →
Piter © (2006-11-22 15:38) [145]ferr © (22.11.06 15:33) [144]
1) почему бы не записать
а что у тебя вернет функция, если например условие:
ferr © (22.11.06 15:33) [144]
if Self.TaskManager.AddTask(Task) then
не выполнится? Функция вернет НЕОПРЕДЕЛЕННЫЙ результат. Тебе даже delphi об этом напишет.
← →
Anatoly Podgoretsky © (2006-11-22 15:39) [146]> ferr (22.11.2006 15:33:24) [144]
Ну объясняли же, например в случае ошибки здесь, получим -1 хотя все остальное выполнено нормальною
inc(FEnterCount, 1);
except
Result := -1;
end;
А вот в случае ошибки здесь, имеем утечку памяти
if Self.TaskManager.AddTask(Task) then
← →
ferr © (2006-11-22 15:39) [147]сорри, не заметил, спасибо :)
← →
Anatoly Podgoretsky © (2006-11-22 15:40) [148]> ferr (22.11.2006 15:33:24) [144]
Вот это пропустил
Result := Self.History.Add(cFormatDisk, s, NumOperator);
Это запись в журнал, безобидная для всей остальной работы, получим точно также -1 единицу, а всего то не записали в журнал.
← →
Piter © (2006-11-22 15:41) [149]Чтобы этого не произошло, у тебя для этого условия должно быть:
else
Result := - 1;
И на условие: "if FAddHistoryFlag then" тоже должно быть:else
Result := - 1;
И вообще, на все условия, и чем их больше, тем больше у тебя будет:else
Result := - 1;
Не проще ли сразу задать Result := -1 и уже установить его в нужном месте, если туда выполнение вообще доберется?
А в этом случае писать в except result := -1 уже ненужный повтор.
← →
SlymRO (2006-11-23 04:41) [150]Удалено модератором
← →
SlymRO (2006-11-23 04:43) [151]Изменение:
Код должен быть переписан:function MyDoWork(params):integer;
begin
try
DoWork(result);
except
result:=-1;
end;
end;
← →
Gero © (2006-11-23 04:47) [152]> [132] Piter © (22.11.06 14:21)
> а вы вообще не программист, тогда и не лезьте на программисткий
> форум.
> Ваши отмазы почему вы не захотите переписать код - меня
> не интересуют.
> если вы отвечаете за слова
Только лопаткой кидаться не надо!
← →
SlymRO (2006-11-23 05:07) [153]Удалено модератором
← →
KSergey © (2006-11-23 06:05) [154]> SlymRO (23.11.06 04:41) [150]
По-моему, основная проблема в исходном коде - это сама идея подмены ошибочной ситуации с исключением возвратом кода ошибки (даже не кода, а просто признака ошибки).
Пусть уж лучше ф-ция возвращает некий результат в случае успеха и кидает исключение при ошибках - тогда и обрабатывать это все централизованно проще, и заморочек с "гашением" exception не будет.
Хотя это и весьма слабо связано с исходной темой ветки :)
← →
SlymRO (2006-11-23 06:54) [155]KSergey © (23.11.06 6:05) [154]
А как ты думаешь WinAPI работает? Правильно: true/false, INVALID_HANDLE_VALUE/VALID_HANDLE_VALUE - и никаких эксепшинов!
Сам девелопер решает: RaiseLastOSError, чтоб спустить обработку ловушке или обработать самому if then без ненужных юзеру красных Warningов.
← →
KSergey © (2006-11-23 06:59) [156]> SlymRO (23.11.06 06:54) [155]
> А как ты думаешь WinAPI работает? Правильно: true/false,
Оно так работает лишь для совместимости с различными средами, т.к. стандартизованного механизма работы с исключениями - нет.
А вот, например, в .NET системный ф-ции не стесняются кидать исключения - и лишь потому, что есть стандартизованный механизм работы с исключениями на этой платформе. Так мне думается...
← →
SlymRO (2006-11-23 07:02) [157]KSergey © (23.11.06 6:05) [154]
обрабатывать это все централизованно проще
Не обрабатывать, а утилизировать и корректно? без halt() завершить приложение.
Обработка должна быть в коде в месте знающем о причине, обстоятельствах, месте исключения и готовым к коректному его гашению.
Можно вообще без try код писать. он будет работать в идеальных условиях. при малейшем отклонении от идеальных, ОС выкинет вашу программу к едренефене, а может и сама себе сепуку сделает.
← →
SlymRO (2006-11-23 07:07) [158]KSergey © (23.11.06 6:59) [156]
стандартизованного механизма работы с исключениями
Опять насмешили... WinAPI не стандарт?
KSergey © (23.11.06 6:59) [156]
.NET системный ф-ции не стесняются кидать исключения
Дельфи приложение ничего не знает об исключении возникшем в COM объекте написанном на .NET, кроме самого факта исключения и то только при ситуации когда иключение не обработано внутри объекта.
← →
KSergey © (2006-11-23 07:28) [159]> SlymRO (23.11.06 07:02) [157]
> обрабатывать это все централизованно проще
> Не обрабатывать, а утилизировать и корректно? без halt()
> завершить приложение.
> Обработка должна быть в коде в месте знающем о причине,
> обстоятельствах, месте исключения и готовым к коректному
> его гашению.
Я, признаться, не очень понимаю предмета спора (если спор вообще есть).
Если при возникновении ошибки (исключения) для приложения допустимо завершиться - тогда можно вообще не заморачиваться обработкой ошибок и исключей. Однако, в норимальных коммерческих, а тем более серверных приложениях - это недопустимо.
По поводу места обработки - опять же зависит от ситуации. Но в любом случае важно то, что исключения можно обработать в одном месте (пример - Application.Run() из VCL). Да, не очень информативно (т.к. детали контекста, возможно, потеряны, хотя никто не мешает сделать исключения весьма детальными). А вот обработать коды ошибок всех ф-ций в одном месте - действительно нельзя.
> SlymRO (23.11.06 07:02) [157]
> обстоятельствах, месте исключения и готовым к коректному
> его гашению.
Я бы заменил на "корректная обработка" :)
> SlymRO (23.11.06 07:07) [158]
> KSergey © (23.11.06 6:59) [156]
> стандартизованного механизма работы с исключениями
> Опять насмешили... WinAPI не стандарт?
WinAPI предоставляет средства для работы с исключениями? Может я чего не знаю?
> Дельфи приложение ничего не знает об исключении возникшем
> в COM объекте написанном на .NET, кроме самого факта исключения
Вранье. В COM - нет исключений. Поверьте уж. Только коды ошибок.
← →
Alex_p (2006-11-23 07:34) [160]Жалко что тему начатую Sergey Masloff испортили
← →
SlymRO (2006-11-23 08:00) [161]KSergey © (23.11.06 7:28) [159]
Вранье. В COM - нет исключений. Поверьте уж. Только коды ошибок.
Вранье. E_FAIL - тоже исключительная ситуация только отформатированая под COM. Среда выполнения .Net сама конвертнет напогашенное исключение, в понятное COM менеджеру, и COM "вызывателю" сообщение-код. На COM уровне все что не S_OK - подобно Exception"у.
← →
SlymRO (2006-11-23 08:08) [162]Удалено модератором
← →
KSergey © (2006-11-23 08:14) [163]Не разеляю ржачного настроения по данному вопросу, но дальше эту тему развивать не буду. Неочем.
А вот изначальная тема действительно весьма интересна (ведь ресурсов всехда не хватает. по определению), хотя и хороших постов по ней - крайне мало. Может кто-то еще выскажется.
← →
SlymRO (2006-11-23 08:25) [164]KSergey © (23.11.06 8:14) [163]
хороших постов по ней - крайне мало
Согласен. И книг по теме мало. Я сейчас читаю книгу "Путь камикадзе" - про обреченные софтовые проекты и управление в них.
← →
SlymRO (2006-11-23 08:39) [165]Удалено модератором
← →
Anatoly Podgoretsky © (2006-11-23 09:18) [166]> SlymRO (23.11.2006 04:41:30) [150]
> 3. Не стоит оставлять пустой except (НО ТОЛЬКО ПРИ ОСТРОЙ НЕОБХОДИМОСТИ, КОТОРУЮ НУЖНО ИСКОРЕНЯТЬ В ЗАЧАТКЕ).
Это никогда не нужно делать, поскольку всегда можно написать
except
on E:Exception do begin
ErrorMsg := E.Message;
// Log(ErrorMsg);
Exit;
end;
end;
Что позволит поставить точку останова и проанализировать в отладчике. И ловить не надо, просто поставить точку и ждать.
← →
Piter © (2006-11-23 17:54) [167]SlymRO (23.11.06 4:41) [150]
Не стоит терять ссылку на созданный объект, без 100% гарантии что другой объект контейнер взял над ним Ownership - TaskManager.AddTask(TTask.Create(cFormateDisk, s))
в целом да. Но пример показывал не те аспекты, к которым вы придираетесь. Пример показывал прототип ситуации, когда except пустой. В частности, ситуация, когда в except должен быть задан код ошибки, который уже задан по дефолту, надо его просто оставить.
Что касается терять ссылку - то это может быть вполне самодостаточный класс, например потомок от TThread, который полностью себя сам уничтожит в конце работы.
Хотя идеологически верней контролировать, конечно.
Соответственно, пункт 2 тоже не совсем в кассу.
SlymRO (23.11.06 4:41) [150]
Result := -1; в начале процедуры, может не гарантировать сохранение результата после Исключения!
ну ты просто бредишь. И твои примеры полностью идентичны по функционалу, ничего переписывать не надо.
Result - это просто ПЕРЕМЕННАЯ. Ты хочешь сказать, что в таком коде:a := 5;
try
TSomeObject.create(...);
except
end;
ShowMessage(IntToStr(i));
переменная "a" может изменить свое значение с пятерки?
← →
Piter © (2006-11-23 18:02) [168]Удалено модератором
Примечание: Выражения выбираем
← →
Romkin © (2006-11-23 18:28) [169]SlymRO (23.11.06 08:00) [161]
> Вранье. В COM - нет исключений. Поверьте уж. Только коды
> ошибок.
Как объяснить наличие IErrorInfo? Там есть исключения. Механизм передачи информации в данном случае не имеет значения. Более того, в .NET COM генерирует именно исключения.
← →
Kerk © (2006-11-23 19:02) [170][159] KSergey © (23.11.06 07:28)
> WinAPI предоставляет средства для работы с исключениями?
> Может я чего не знаю?
SEH
← →
SlymRO (2006-11-24 07:48) [171]Piter © (23.11.06 17:54) [167]
Result - это просто ПЕРЕМЕННАЯ. Ты хочешь сказать, что в таком коде:
a := 5;
try
TSomeObject.create(...);
except
end;
ShowMessage(IntToStr(i));
переменная "a" может изменить свое значение с пятерки?
Влегкую... Переменная это память, а память можно write: Стоит в TSomeObject.create(...) некорректно поработать с памятью/стеком или регистрами, и вуаля - в "a" мусор...program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var a:integer;
type
TSomeObject=class
public
constructor Create;
end;
constructor TSomeObject.Create;
var p:pinteger;
begin
p:=pointer($40300C);
p^:=25;
abort;
inherited;
end;
begin
a:=5;
try
TSomeObject.create();
except
end;
writeln(IntToStr(a));
readln;
end.
← →
Piter © (2006-11-24 18:52) [172]SlymRO (24.11.06 7:48) [171]
p:=pointer($40300C);
ты рассчитываешь на то, что переменная a с каждым запуском программы будет расположена по одному адресу. Вообще не факт.
SlymRO (24.11.06 7:48) [171]
Влегкую... Переменная это память, а память можно write: Стоит в TSomeObject.create(...) некорректно поработать с памятью
нет, ну понятно, что целенаправленно можно и значения КОНСТАНТ изменять. Но что теперь, говорить о том, что константы - на самом деле не константы? :)))
Страницы: 1 2 3 4 5 вся ветка
Текущий архив: 2006.12.17;
Скачать: CL | DM;
Память: 1 MB
Время: 0.042 c