Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46

Конструирование программного обеспечения

13.05.2016, 04:53. Показов 3011. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вместе с языком программирования хотел бы узнать как грамотно строить программы.
Есть ли книжки на эту тему,чтобы было как можно подробно описано как писать хороший код и строить ПО.
Думаю немножко поучу С буду писать на нём(на сколько я понял,там программы состоят из функций - что- нибудь на эту тему)
Дальше думаю познакомиться с Java(насколько я понял там ООП - тоже подкиньте что-нибудь на эту тему).
Если не прав поправьте.

P..S. В интернете поискал там пишут про совершенный код, чистый код, вот хотел узнать ваше мнение

Заранее спасибо!)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2016, 04:53
Ответы с готовыми решениями:

Архитектура программного обеспечения
С самого начала прошу прощения за вероятно глупый вопрос. Возможно невероятно глупый. :D Не могу найти какую-нибудь книгу по тому как...

Литература по тестированию программного обеспечения
Здравствуйте, уважаемые форумчане! Не могли бы Вы посоветовать литературу, посвященную тестированию программного обеспечения с точки...

инвестиционный проект программного обеспечения
Всем привет! Где можно найти расписанный инвестиционный проект какого нибудь программного обеспечения или базы данных т.е. сколько денег...

39
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 07:58
Лучший ответ Сообщение было отмечено immortalWarrior как решение

Решение

immortalWarrior, могу порекомендовать ряд книг:
* Стив Макконнелл: Совершенный код
* Мартин Фаулер: Шаблоны корпоративных приложений
* Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования

Есть ещё очень хорошие книги ориентированные на .NET. Не смотря на то, что эти книги для разработчиков .NET идеи в них изложенные универсальны и применимы практически везде:
* Марк Симан: Внедрение зависимостей в .NET
* Эспозито, Сальтарелло: Microsoft .NET. Архитектура корпоративных приложений
* Холл Маклин: Адаптивный код на C#. Проектирование классов и интерфейсов, шаблоны и принципы SOLID

Но, если ты только-только начал учить Си (а не С++), то эти книги тебе читать рановато (любые книги не по языку программирования, разве что кроме Стива Макконнелла). Сначала разберись с языком. Потом начни изучать какой-нибудь язык ориентированный на ООП (С++, Java, C#).
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 08:47  [ТС]
Usaga, спасибо за книги)
а если строить приложения на С?Или он не подходит?
В смысли не с помощью объектов строить программу, а с помощью функций, вроде на С так пишут программы
Об этом есть какие-нибудь книги?
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 08:51
immortalWarrior, Си для драйверов хорош и для реализации разного рода библиотек, где производительность критична (аудио-видео кодеки, системные библиотеки и прочее). В остальных случаях более абстрактные языки подходят намного лучше.
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 08:54  [ТС]
Usaga, ясно, последний вопросик, на сколько я понял через указатели можно получить доступ к железу компьютера?
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 08:58
immortalWarrior, нет. Только к памяти. Доступ к железу только через ядро ОС и драйвера.
1
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 09:00  [ТС]
Usaga, я всё понял, спасибо)
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
13.05.2016, 09:41
Цитата Сообщение от immortalWarrior Посмотреть сообщение
Думаю немножко поучу С буду писать на нём(на сколько я понял,там программы состоят из функций - что- нибудь на эту тему)
Дальше думаю познакомиться с Java(насколько я понял там ООП - тоже подкиньте что-нибудь на эту тему).
Лучше идти в обратную сторону:
1. сначала изучить функциональное программирование (haskell, lisp, f# и т.п.)
2. затем изучить ООП (java, c# и т.п.)
3. затем изучать процедурное программирование (с и т.п.)

Обычно программу на C можно почти один в один перевести на C#, а программу на C# можно почти один в один перевести на F#. Поэтому, если Вы будете изучать в последовательности C -> C# -> F#, Вам придётся каждый раз ломать свои представления о программировании. Иначе Ваши программы на F# будут похожи на портированные с C#, а Ваши программы на C# будут похожи на портированные с C.

p.s.

Добавлено через 2 минуты
Цитата Сообщение от immortalWarrior Посмотреть сообщение
Вместе с языком программирования хотел бы узнать как грамотно строить программы.
Есть ли книжки на эту тему,чтобы было как можно подробно описано как писать хороший код и строить ПО.
Вот, например, из соседней темы:
Цитата Сообщение от Shamil1 Посмотреть сообщение
Питер ван Рой, Сейф Хариди | Концепции, приёмы и модели компьютерного программирования
Харольд Абельсон, Джеральд Джей Сассман | Структура и Интерпретация Компьютерных Программ
Стюарт Рассел, Питер Норвиг | Искусственный интеллект Современный подход
1
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 09:54
Цитата Сообщение от Shamil1 Посмотреть сообщение
1. сначала изучить функциональное программирование (haskell, lisp, f# и т.п.)
Ну это уже отрыв от реальности. Не нужно так жестить, человек с простого хочет начать.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Стюарт Рассел, Питер Норвиг | Искусственный интеллект Современный подход
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 10:04  [ТС]
Shamil1, я просто пока не совсем это все понимаю.
я не понимаю ещё конечно ничего, но в моём представлении хотелось бы научиться программировать на низком уровне, понимать операционные системы, архитектуру компьютера, сети, программировать под всё это.
Скачал книги Танненбаума по архитектуре, сетям, и операционкам,хотя бы для общего развития
Потом один язык ООП в будущем хотел изучить и один скриптовой(Питон например).

Добавлено через 2 минуты
Shamil1, плюс ещё математика нужна на сколько я понял, алгоритмы,кучу всего, в общем я запутался)

Добавлено через 5 минут
Usaga, Shamil1, искусственный интеллект тема для меня всегда была интересная,но думаю хотя бы пока на С не стане нормально писать рановато немного)
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
13.05.2016, 10:08
Цитата Сообщение от Usaga Посмотреть сообщение
Ну это уже отрыв от реальности. Не нужно так жестить, человек с простого хочет начать.
Написать программу на Haskell обычно проще, чем написать программу на C.
Когда Вы пишите на C, нужно, кроме собственно решения задачи, продумывать низкоуровневые детали (как организовать циклы, поддерживать состояние и т.п.). Этому научиться сложнее, чем просто решению задач.
Конечно, через какое-то время основные низкоуровневые детали решаются уже на автомате. Но, как следствие, Вам уже сложно отделить программирование от низкоуровневых деталей (и поэтому сложно переключиться с процедурного на функциональное программирование).

"Стюарт Рассел, Питер Норвиг | Искусственный интеллект Современный подход" - это книга об алгоритмах. Искусственный интеллект - это программа, решающая задачи типа нахождения кратчайшего пути и т.п. (а не искусственный разум и т.п.)
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 10:11  [ТС]
Shamil1, ясно,Haskell потом посмотрю)спасибо)
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
13.05.2016, 10:26
Цитата Сообщение от immortalWarrior Посмотреть сообщение
я просто пока не совсем это все понимаю.
Откройте первую книгу из списка и прочитайте предисловие. Возможно, после этого станет понятней.

Цитата Сообщение от immortalWarrior Посмотреть сообщение
хотелось бы научиться программировать на низком уровне
Низкоуровневое программирование - это очень небольшая и весьма специфичная часть программирования.
Низкоуровневая оптимизация - вообще сплошное шаманство (нужно выучить ряд эмпирических правил, которые постоянно меняются - одни устаревают и перестают работать, но появляются новые).
Если Вас интересует именно это, то, конечно, можно просто начать изучать Ассемблер, Си, Форт.

Добавлено через 7 минут
Цитата Сообщение от immortalWarrior Посмотреть сообщение
ясно,Haskell потом посмотрю)спасибо)
Для примера. Зашёл сейчас в раздел Hakell. Открыл последнее сообщение.
Задача о безопасной расстановке 8 ферзей.
И вот решение:
Haskell
1
2
3
4
queens n = foldM f [] [1..n]
 where
      f qs _ = [q:qs | q <- [1..n] \\ qs, q `notDiag` qs] 
      q `notDiag` qs = and [abs (q - qi) /= i | (qi,i) <- qs `zip` [1..]]
Если попробовать то же самое записать через циклы, то голову сломаешь над тем, как организовать циклы и как сохранять/восстанавливать предыдущее состояние. Обязательно где-нибудь ошибёшься, и нужно будет отлаживать, искать ошибку. Ну и програма займёт не три строки, гораздо больше.
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
13.05.2016, 10:38  [ТС]
Shamil1, не понимаю в плане вообще computer science
ну да, сначала скорее всего C попробую, потом что-нибудь высокоуровневое(java например), Haskell тоже посмотрю)Вообщем буду просвещаться)
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 10:52
Shamil1, я думаю, что пока человек не поработает с Си, он не поймёт крутости примера, что ты показал. Не налегай

Не по теме:

Кстати, доводилось ли тебе самому что-нибудь полезное делать на Haskell?

0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
13.05.2016, 10:56
Цитата Сообщение от Usaga Посмотреть сообщение
я думаю, что пока человек не поработает с Си, он не поймёт крутости примера, что ты показал.
тому, кто уже успел поработать с Си, сложнее разобраться с Хаскелем

Цитата Сообщение от Usaga Посмотреть сообщение
Кстати, доводилось ли тебе самому что-нибудь полезное делать на Haskell?
если "полезное" означает "оплачиваемое", то нет
но я активно использую приёмы ФП в программах на C#
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,260
13.05.2016, 11:05
Цитата Сообщение от Shamil1 Посмотреть сообщение
но я активно использую приёмы ФП в программах на C#
На словах пример привести можешь? Кроме LINQ - это и так понятно, что функциональщина чистая. Это не провокация, мне правда интересно.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
13.05.2016, 16:00
Цитата Сообщение от Usaga Посмотреть сообщение
Кроме LINQ - это и так понятно, что функциональщина чистая.
Что Вы подразумеваете под LINQ?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
16.05.2016, 19:53
Цитата Сообщение от Shamil1 Посмотреть сообщение
тому, кто уже успел поработать с Си, сложнее разобраться с Хаскелем
не сложнее, чем тому,
кто уже поработал с хаскелем,
разобраться с си.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
16.05.2016, 23:11
Цитата Сообщение от hoggy Посмотреть сообщение
не сложнее, чем тому,
кто уже поработал с хаскелем,
разобраться с си.
Упрощённый пример:
В языке А есть for, break, continue, if, goto и так далее. В языке Б есть только if и goto.
Если вы сначала выучили язык А и привыкли писать в стиле А (без goto), то при переходе на язык Б вы просто выучите, как записать цикл, используя if и goto.
Если вы сначала выучили язык Б и привыкли использовать goto, то при переходе на язык А вы будете продолжать использовать goto, так как он это позволяет. Вам потребуется изменить свои представления от том, как пишутся программы, чтобы отказаться от использования goto.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.05.2016, 23:11
Помогаю со студенческими работами здесь

Разработка, внедрение и адаптация программного обеспечения отраслевой направленности
Решите пожалуйста тест,очень надо!!!! 1.Суть структурного подхода состоит: а) в декомпозиции системы на ряд модулей, процедур, функций...

Защита программного обеспечения
Приветствую всех. Понадобилось на работе разработать защиту для ПО, которая бы обеспечивала сочетание 1 лицензия - 1 компьютер. Как...

Проанализировать, что привело к возникновению программного обеспечения, в частности операционных систем
нужно написать немало. Хотя бы на лист обычный в клеточку.В голову вообще ничего не приходит,а если приходят ,то типичный фразу про...

Тестирование программного обеспечения
Народ, помогите если знаете. Дали такое задание: Протестируйте программное обеспечение на неверный ввод исходных данных. Если знает кто,...

Учет программного обеспечения
Привет всем, проблема вот в чем. Имеется база по учету программного обеспечения, в ней присутствуют таблицы: ПО, пользователи и лицензии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru