Очень прошу помочь мне научится "нормально" программировать. Я пока студентка и нас учат только языкам программирования, но никогого стиля
Я тут только закончила сайт для сестры и это было УЖАСНО! Некоторые классы переписывала по 10 раз, базу данных периодически меняла. Сайт готов и работает, НО я бы его с удовольствием переписала заново ибо все там смотрится криво (в плане архитектуры).
Счас вот решила изучить Object C и обычно я для этого придумываю проект на котором изучаю. На этот раз я хочу все сделать по правилам, как это делают в компаниях. Но я еще никогда не работала поэтому хз как все делать и очень бы хотелось чтобы в процессе мне указывали на ошибки и направляли.
Счас я пока продумываю над базой данных и буду рисовать ER диаграмму. Ее кстати рисуют? Потом подумываю о том чтобы сделать uml, наверное достаточно просто диаграмму классов сделать? Что еще гадо сделать, до того как начать проектировать?
О самом проекте. Все просто и тривиальное — создам электронную кулинарную книгу.
1) хранить и редактировать свои рецепты. Тут наверное еще хорошо бы сделать поддержку разных стилей для рецептов?
2) поиск рецептов по набору продуктов в холодильнике ну и проч. поиск и фильтры
3) вкладка полезных советов
4) составлять меню на неделю
5) ммм, может еще сделать возможность расшарить свой рецепт, но это наверное в плагины (см ниже). Но экспорт в различные виды документов точно надо сделать (начну с pdf, doc, txt, png)
6) закладка "Избранное"
7) можно конечно еще добавить подсчет калорий.
8) может еще что подскажите ? Я как-то не пользовалась ни разу такими программами (только качнула парочку чтоб знать что самой делать), поэтому не знаю что еще может быть полезно.
Думаю сделать пару плагинов к ней:
1) это для того чтобы хоть как-то мою книгу связать с приложением для айфона (ага, его тож буду делать). В айфоне будет приложение grocery list. Т.е. в электронной кулинарной книге мы можем создать меню на неделю и через этот плагин кинуть на айфон список продуктов.
2) Пока не знаю вообще это реализуемо или нет, но можно как-то загружать с жж рецепты которые указал пользователь. А также загружать свои из приложения в свой жж... (это я мечтаю, да?)
3) это хранить/загружать/качать фотки с фликера (зачем это... скорее всего чтобы извратится и попробовать побольше изучить в программировании).
Проект для айфона:
1) список продуктов
2) список своих магазинов
3) потом еще что придумаю, а может и нет. Мне пока важен сам Object C и сама возможность программировать под мас и айфон.
Для чего я все так подробно описала? Для того чтобы когда я сюда выложу диограмму классов, вы мне сказали что я упустила и вообще покритековали.
Я уже начал узнавать Доктора даже в женском обличье. Всё-таки, как ни крути, а когда мужик пишет от имени бабы, это заметно. Ну а неповторимый стиль Доктора окончательно срывает с него покровы анонимности.
Здравствуйте, sunshine, Вы писали:
S>Здравствуйте, Magnona, Вы писали:
S>Я уже начал узнавать Доктора даже в женском обличье. Всё-таки, как ни крути, а когда мужик пишет от имени бабы, это заметно. Ну а неповторимый стиль Доктора окончательно срывает с него покровы анонимности.
Здравствуйте, antigravity, Вы писали:
A>Бородатые девки. Скучно.
Ну ппц. Я то боялась что меня игнорить будут и я буду сама с собой тут разговаривать, а тут на тебе. Я некий Доктор, да еще и с бородой... Может по делу чтонибуть?
Здравствуйте, sunshine, Вы писали:
S>Здравствуйте, Magnona, Вы писали:
S>Всё-таки, как ни крути, а когда мужик пишет от имени бабы, это заметно.
А что вы хотите? В каком стиле должна писать девушка?
"АААА помогите, я тут придумала мега пупер штучку и хочу чтоб это работало и было красиво... И еще чтобы все было курсивом и в розовых тонах? )))"
Такие девушки обычно и не знают таких слов как программирование.
А я реально ишу помощи ибо преподы мне уже не раз делали замечания что у меня очень кривая архетектура. Так что надо это исправлять както а то на работу не возьмут
Здравствуйте, Magnona, Вы писали:
M>помочь мне научится "нормально" программировать... но никогого стиля
M>Счас я пока продумываю над базой данных ...
M>когда я сюда выложу диограмму классов, вы мне сказали что я упустила и вообще покритековали.
Милое создание, начните с учебника Русского Языка, дабы научиться грамотно оформлять свои мысли. Это поможет в общении с людьми и в обмене информацией.
А когда освоите этот этап, можно будет попробовать и программирование.
Здравствуйте, Magnona, Вы писали:
M>Я тут только закончила сайт для сестры и это было УЖАСНО! Некоторые классы переписывала по 10 раз,
Программирую лет 20 и до сих пор некоторые классы переписываю по 10 раз. Считаю нормой ситуацию, когда рефакторинг занимает до 30% времени. Взялся вот изучать скалу, ФП — вообще как дитё малое, первый проект был настолько кривой, что исцелению не подлежал, второй уже куда ни шло. В общем, не расстраивайся. Опыт и стиль только с собственными шишками приходит.
Это угадайка? Что такое DishTypes? Зачем ProductCategory связан с ProductsRecipe? У меня в книге есть что-то типа "Суп с клецками: ... , а как приготовить клецки см. рецепт N xxx "Клецки для супов"..." что делать будете?
Есть подозрение что это у вас курсовая работа. Наверное лучше и честнее попросить присутствующих проконсультировать вас. Возможно не безвозмездно проконсультировать.
Здравствуйте, Magnona, Вы писали:
M>Очень прошу помочь мне научится "нормально" программировать. Я пока студентка и нас учат только языкам программирования, M>Помогите мне пожалуйста.
а будут ли сиськи?
Если вы все же не троль, и действительно желаете изучить программирование, то уведомляю, что все что вы здесь написали — бред. Учите язык сначала по книгам.
Ну переписывать несколько раз — это нормально. Требования меняются, меняется понимание задачи, становятся видны некоторые возможности. Этого бояться не нужно. А дальше по тексту .
Здравствуйте, Magnona, Вы писали:
M>На этот раз я хочу все сделать по правилам, как это делают в компаниях. Счас я пока продумываю над базой данных и буду рисовать ER диаграмму. Ее кстати рисуют? Потом подумываю о том чтобы сделать uml, наверное достаточно просто диаграмму классов сделать?
Рисуют иногда, когда нужна. С классами то же самое.
M>Что еще гадо сделать, до того как начать проектировать?
Начать с самого начала . Конкретно для данного проекта важна постановка задачи. Именно постановка задачи может потом другим членам команды (или себе же, но гораздо позже) понять, почему какие-то решения были приняты в коде. Ни одна диаграмма на этот вопрос не ответит. Скорее всего, этот этап покажется неинтересным и длинным, но именно он важен! А уж архитектура и прочее — на первых порах достаточно просто вытекают из постановки.
Итак, первый вопрос. Кто будет пользоваться системой? Ответ на этот вопрос даст несколько очень полезных умолчаний для понимания кода. Например, ряд сценариев использования вполне логично будет вытекать из этого описания. Ну а последствия выбора здесь — система для домашнего использования и система для ресторана, вероятно, будут очень сильно отличаться между собой.
Второй вопрос. Какие именно задачи будет решать пользователь? Попытка уже была сделана, кое-где удалась, кое-где — нет. Это я прокомментирую. Здесь можно рисовать use-case diagram, можно не рисовать (описать словами). Можно в деталях сценария рисовать диаграммы последовательности. Особое внимание следует обратить на то, чтобы описывалась решаемая задача, а не способ ее решения в приложении. Не всегда пользователь говорит, что ему нужно. Он может давать готовое решение (и далеко не всегда самое лучшее).
M>О самом проекте. Все просто и тривиальное — создам электронную кулинарную книгу. M>1) хранить и редактировать свои рецепты. Тут наверное еще хорошо бы сделать поддержку разных стилей для рецептов?
Первая половина — понятна. Сценарии использования — более менее те же, что и у обычной кулинарной книги. Но проработать все же хотелось бы. Потому что классификация в кулинарных книгах бывает разная. Чтобы выбрать правильную, нужно понять, в каких случаях пользователь туда полезет. Возможные классификации: по типу продукта (мясо/рыба/прочее), по типу "применения" (праздничные рецепты, повседневная пища). Может, еще какие-то, я дальше не анализировал. Описание пользователя системы очень поможет в ответе на этот вопрос. M>2) поиск рецептов по набору продуктов в холодильнике ну и проч. поиск и фильтры
О! "Поиск рецептов по набору" — это не задача. Это способ решения! Исходная задача — "Есть хочу! Что-бы съесть?". Я буду немного опечален, если на эту задачу программа мне радостно сообщит, что я могу приготовить майонез и вишневый сорбет. От большого количества первого можно получить проблемы с пищеварением. А пока приготовится второе, можно умереть от голода . Кстати, этот сценарий в предложенной ER вообще никак не может быть обработан.
"И проч. поиск и фильтры" стоит проработать подробнее. Вероятно, не все фильтры будут учтены (что-то захочется потом доделать). Возможно — не все фильтры стоит делать в первой версии (до первого релиза). Но понять нужны пользователей — поможет. Проверить возможность реализации сценариев — тоже. M>3) вкладка полезных советов
Тоже способ решения какой-то задачи. Не понятно, правда, какой. Если будет описано, в каких случаях хочется обратиться к советам, будет получено много интересной и новой информации. Например, советы могут быть контекстные (о том, как подготавливать рыбу для блюд из рыбы и т.п.). M>4) составлять меню на неделю
Более-менее понятно, как планируется использовать. Но все же конкретизировать стоит, что именно планируется поддерживать сразу, что — потом, а что — не планируется. Да, фраза "этого мы не будем делать" — это полезная фраза на данном этапе. Позволяет в некоторых случаях упрощать реализацию. По пункту возможны варианты — просто распечатать и смотреть, искать продукты для закупок на опредленные дни и т.п. M>5) ммм, может еще сделать возможность расшарить свой рецепт, но это наверное в плагины (см ниже). Но экспорт в различные виды документов точно надо сделать (начну с pdf, doc, txt, png)
Опять способ решения задачи . Исходных задач — две. Первая — обмен рецептами с другими людьми. Вторая — использование рецепта без доступа к программе. Вторая задача в простейшем случае не требует доступа ни в PDF, ни в Doc. Это будет простая печать. Либо экспорт в txt с печатью. Экспорт в PDF нужно делать только тогда, когда он понадобится. M>6) закладка "Избранное"
А вот как будет использоваться эта закладка, я вообще не представляю. M>7) можно конечно еще добавить подсчет калорий.
И как это будет испольозваться — тоже (хотя нет, некоторые идеи есть, но все же). M>8) может еще что подскажите ? Я как-то не пользовалась ни разу такими программами (только качнула парочку чтоб знать что самой делать), поэтому не знаю что еще может быть полезно.
Ну из "больших" приложений — количество получаемых порций. Для "домашнего" использования это тоже может быть использовано. А может быть — нет. Зависит от задачи, решаемой в первом пункте.
M>Думаю сделать пару плагинов к ней: M>1) это для того чтобы хоть как-то мою книгу связать с приложением для айфона (ага, его тож буду делать). В айфоне будет приложение grocery list. Т.е. в электронной кулинарной книге мы можем создать меню на неделю и через этот плагин кинуть на айфон список продуктов.
О! Советую обратить внимание на этот пункт. Это полноценный сценарий использования Составляется меню на неделю, затем составляется список покупок (вероятно, с разбиением по дням или как-то еще). Вот весь сценарий целиком — очень полезная вещь. M>2) Пока не знаю вообще это реализуемо или нет, но можно как-то загружать с жж рецепты которые указал пользователь. А также загружать свои из приложения в свой жж... (это я мечтаю, да?)
Еще один сценарий! Обмен рецептами через ЖЖ. Реализуемость оценивается чуть позже, после сбора начальных требований. Может быть и можно. M>3) это хранить/загружать/качать фотки с фликера (зачем это... скорее всего чтобы извратится и попробовать побольше изучить в программировании).
Ну фотки добавлять в рецпеты — вполне нормальная идея. Это могут быть готовые блюда, могут быть — процесс приготовления в картинках. Используются в соответствующих сценариях — обмен рецептами, сохранение рецептов. Важна постановка задачи. Реализация — дело десятое. Поверьте, в ней нет ничего интересного. Еще одно API в предусмотренной точке расширения, не более того. Да, точку расширения нужно предусмотреть, но для этого достаточно сценария.
M>Проект для айфона:
Это нужно в очередь поставить, хотя описать можно.
Еще можно собрать нефункциональные требования. Вроде "приложение должно быстро работать", "иметь кучу красивых рюшечек" и прочих.
M>Для чего я все так подробно описала? Для того чтобы когда я сюда выложу диограмму классов, вы мне сказали что я упустила и вообще покритековали.
Рано диаграмму классов. Сначала — сценарии использования. То, что я написал выше. Затем — наброски функциональности приложения. Т.е. те самые списки рецептов, вкладки и т.п. На этом же этапе проверяется, что функциональность достаточна для сценариев использования. Далее — прототипирования. Не обязательно подробно, можно на листочке. Здесь проверяется, что все задачи все еще решаемы, подбираются удобные способы решения исходных задач. Прототип важен, так как именно удобством использования будет определяться успешность (в самом широком смысле) программы. Вот теперь можно нарисовать диаграмму. Это будет диаграмма сущностей. Т.е. с какими сущностями оперирует пользователь (не то, как они реализованы в коде/базе), как эти сущности связаны. Я это в виде диаграммы классов обычно рисую, но это может не иметь никакого отображения на классы в коде. Можно активно использовать прототип, разными цветами раскрашивая в нем разные сущности и атрибуты разных сущностей. И вот только теперь можно приступать к архитектуре . Можно нарисовать отображение предметной области на классы базы. Можно не рисовать (оно достаточно простое получается). Можно нарисовать разбиение системы на компоненты, но не факт, что будет нужно. Ну а потом таки реализация. С оставлением достаточной расширяемости там, где это возможно. Написание хорошего кода — отдельная долгая история с кучей ревью и т.п.
Да, важное замечание. Где-то во время построения списка функций приложения проверяется возможность реализации этих функций. На уровне не реализуемо вообще/реализуемо очень сложно/реализуемо/не известно. Первый вариант приводит к исключению поддерживаемых сценариев/требований. Остальные могут влиять на очередность включения требований в релиз.
M>Помогите мне пожалуйста.
Выше написал, что нужно делать сначала. Вперед! Нужны сценарии использования и/или задачи, решаемые пользователем. Затем — функциональность, с помощью которой будут решаться задачи. И список того, с помощью какой функциональности и как решается каждая исходная задача. Можно прототипы набросать (на листочке). Этого вам на пару дней точно хватит. А дальше посмотрим, что нужно делать.
Если что — все вышеописанное — часть нормального процесса разработки. Если их пропускать, обычно получается фигня. Даже для "маленьких" проектов все вышеописанные этапы должны быть. Они могут быть неформальными, в голове единственного разработчика и пользователя, но все равно они есть. И вся куча проверок/перепроверок с выполнением требований — необходимая рутина. Особенно для начальных этапов — ошибки на них дороже всего исправлять.
P.S. To all others. Автор, может, и тролль. Но модельный пример хорош. И начинающиеся проблемы с потенциальной неудовлетворенностью заказчика (когда его желаемые действия будут выполняться очень неудобно) — тоже. Вдруг кому пригодится этот текст о важности правильного выполнения начальных этапов разработки ПО.
Спасибо большое
Пойду все переписывать на этот раз буду все детально описывать прежде чем чтот начинать делать.
Надеюсь только что я это не брошу и не побегу кодировать, находу придумывая задачи и меняя их по 10 раз
PS и это не курсовая, как ктото тут писал, 1го сентября их обычно никто не дает
Здравствуйте, 11molniev, Вы писали:
1>Здравствуйте, Magnona,
1>Если вы все же не троль, и действительно желаете изучить программирование, то уведомляю, что все что вы здесь написали — бред. Учите язык сначала по книгам.
Пару книг по Object C я уже прочла, летом. Но одно дело, когда я читаю книжку и параллельно поделываю маленький примерчики из книги, другое дело целосный проект (в который я, между прочим, пыталась запихать побольше "фич" как раз таки, для того чтобы охватить как можно больше прочтенного материала)
Здравствуйте, ASta, Вы писали:
AS>Здравствуйте, Magnona, Вы писали:
M>>ER диаграмма M>>http://files.rsdn.ru/97610/Entity%20Relationship%20Diagram1.jpg
AS>Это угадайка? Что такое DishTypes? Зачем ProductCategory связан с ProductsRecipe? У меня в книге есть что-то типа "Суп с клецками: ... , а как приготовить клецки см. рецепт N xxx "Клецки для супов"..." что делать будете?
AS>Есть подозрение что это у вас курсовая работа. Наверное лучше и честнее попросить присутствующих проконсультировать вас. Возможно не безвозмездно проконсультировать.
Согласна с тем что тут бред
Я хотела была написать каментарии, но было уже поздно и просто удалила сообщение, ркшив потом все оформить. Только оно почему-то не удалилось, а появиласт пометка в виде "бомбачки"
Re: Проект с 0 до ...
От:
Аноним
Дата:
08.09.11 06:24
Оценка:
Здравствуйте, Magnona, Вы писали:
А как вы хотели? Не имея опыта или хотя бы серьезной теоретической подготовки (на уровне MIT или Стенфорда), вот так взять и написать идеально с первого раза?
Если вы только учитесь, переписывать все по 10 раз не только нормально, но правильно и полезно. Если у вас есть трудолюбие — это прекрасно. Переписывайте, пока не достигнете идеала.
Но, конечно, в переписывании неплохо бы применять теоретические навыки, нужно использовать известные критерии оптимальности кода и при построении архитектуры руководствоваться известными принципами и техниками.
Здравствуйте, Аноним, Вы писали:
А>А как вы хотели? Не имея опыта или хотя бы серьезной теоретической подготовки (на уровне MIT или Стенфорда), вот так взять и написать идеально с первого раза?
Про серьёзную теоретическую подготовку сразу вспоминается 7 level OSI model...
Здравствуйте, Magnona, Вы писали:
M>Здравствуйте, maxkar, Вы писали: ....
M>Спасибо большое M>Пойду все переписывать на этот раз буду все детально описывать прежде чем чтот начинать делать. M>Надеюсь только что я это не брошу и не побегу кодировать, находу придумывая задачи и меняя их по 10 раз
M>PS и это не курсовая, как ктото тут писал, 1го сентября их обычно никто не дает
Писал я. Цитата: "Есть подозрение что это у вас курсовая работа."
Согласен что 1-го сентября, курсовые _обычно_ не дают, но Ваше сообщение датировано 08 сентября.
Но хрен с ним с 1 сентября, я согласен, вы действительно девушка: летом вы читали книжки по Object C и сейчас собираетесь написать сайт с БД для хранения рецептов с какими-то плагинами, просто в целях изучения программирования.
Здравствуйте, maxkar, Вы писали:
M>P.S. To all others. Автор, может, и тролль. Но модельный пример хорош. И начинающиеся проблемы с потенциальной неудовлетворенностью заказчика (когда его желаемые действия будут выполняться очень неудобно) — тоже. Вдруг кому пригодится этот текст о важности правильного выполнения начальных этапов разработки ПО.
Я бы предложил архитектуру ПО отобразить в виде диаграммы Archimate.