LINUX.ORG.RU

Программирование на С


21

16

Здравствуйте мои дорогие любители погромирования. Прочитал K&R «Язык программирования Си». Теперь нужна книга, которая расскажет как правильно писать код на С, общепринятые приёмы и стандартные алгоритмы решения типичных задач. Цель: пишу быдлокод для МК и хочу повысить свой скилл.

Перемещено mono из talks

Прочитал K&R «Язык программирования Си».

Молодец, хорошее начало.

Теперь нужна книга, которая расскажет как правильно писать код на С

Не встречал такой. Но через пару лет практического кодинга рекомендую тебе прочитать Стандарт.

общепринятые приёмы

Типовые приемы можно почерпнуть из кода ядра linux, например.

стандартные алгоритмы решения типичных задач

Вот тебе алгоритм: по каждой конкретной задаче гуглишь что пишут на stackoverflow, пристально читаешь маны, избегаешь велосипедов.

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от Manhunt

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

ramon13666 ★★★ ()

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

prischeyadro ★★★☆☆ ()

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

Deleted ()
Ответ на: комментарий от ramon13666

Общая картина заключается в том, что серебряной пули не существует. Нет какого-то универсального рецепта «как сделать всё офигенно».

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)
Ответ на: комментарий от prischeyadro

Интересует больше не матан, а скорее как правильно проектировать приложение, избегая узких мест и потенциальных глупых ошибок (возникающих по незнанию).

ramon13666 ★★★ ()

По идее — вот.

Там даже в конце что-то вроде разбора косяков K&R имеется. Но это ворк ин прогресс, хотя основная часть уже написана.

dnoskov ()
Ответ на: комментарий от cvs-255

Составляешь алгоритм решения задачи на бумажке.

Обычно так и делаю, только не на бумажке. Логику работы продумываю, разбиваю задачу на части и потом по частям пишу. Проблемы обычно возникают, когда надо связать эти куски между собой.

ramon13666 ★★★ ()
Ответ на: комментарий от dnoskov

Пробежался по главам.

Functions in C are actually just pointers to a spot in the program where some code exists. Just like you've been creating pointers to structs, strings, and arrays, you can point a pointer at a function too. The main use for this is to pass «callbacks» to other functions, or to simulate classes and objects. In this exercise we'll do some callbacks, and in the next one we'll make a simple object system.

О да! Ушёл читать. )

prischeyadro ★★★☆☆ ()

Если пишешь для МК, то многие производители микроконтроллеров выкладывают на своих сайтах application notes для реализации всяческих алгоритмов и демонстрирования best practices. Думаю, стоило бы посмотреть в этом направлении, поскольку Си под МК требует несколько иных подходов, чем для разработки системного ПО.

Corey ()
Ответ на: комментарий от nanoolinux

«как сделать всё офигенно»

Использовать язык под задачу?

Потратить пол-года на изучение специализированного языка вместо того, чтобы за пару дней накатать хорошо работающее решение на том языке, которым уже владеешь? Что же, в ряде случаев такой подход вполне уместен, но вот на роль «серебряной пули» он явно не тянет.

Manhunt ★★★★★ ()
Ответ на: комментарий от Corey

Если сравнивать avr-gcc и рекомендации STM, то имеются некоторые различия и это поначалу сбивает с толку. Но проблема не столько в том, что установка битов происходит различными способами, а общие подходы проектирования с учётом возможности дальнейшей расширяемости (уже пару раз пришлось переписывать код, хотя алгоритм остался прежним, лишь добавили новую функциональность).

ramon13666 ★★★ ()
Ответ на: комментарий от ramon13666

Вот избегать велосипедов с треугольными колёсами и есть моя цель.

Цель благородная, но нереализуемая, как и любая благородная цель.

Deleted ()
Ответ на: комментарий от Manhunt

Потратить пол-года на изучение специализированного языка вместо того, чтобы за пару дней накатать уныло-падающее пердяще-тормозящее говно на том языке, которым уже владеешь? Что же, в ряде случаев такой подход вполне востребован, из-за чего почти всё современное по - полный отстой.

//фксдъ

nanoolinux ★★★★ ()
Ответ на: комментарий от ramon13666

Когда продумываешь, сразу продумай, какие интерфейсы ввода и вывода будут у каждой части.

cvs-255 ★★★★★ ()
Ответ на: комментарий от ramon13666

как правильно проектировать приложение, избегая узких мест и потенциальных глупых ошибок (возникающих по незнанию)

Только «опыт, сын ошибок трудных». Пиши/читай код

Gvidon ★★★★ ()
Ответ на: комментарий от ramon13666

общие подходы проектирования с учётом возможности дальнейшей расширяемости

1. Пиши программы в терминах, естественных для предметной области. Избегай синтетических конструкций и синтетических «оптимизаций».
2. Нагугли и яростно дрочи на low coupling + high cohesion.
3. Если есть зайчатки ООП, то SOLID во все поля.

Manhunt ★★★★★ ()
Ответ на: комментарий от nanoolinux

Потратить пол-года на изучение специализированного языка вместо того, чтобы за пару дней накатать уныло-падающее пердяще-тормозящее говно на том языке, которым уже владеешь?

Вполне вероятно, что специализированный язык будет тормозить и пердеть гораздо сильнее, чем hand-made код на Си-шечке. Ну и если твоя поделка уныло падает, то это говорит о том. что языком ты не владеешь.

Manhunt ★★★★★ ()
Ответ на: комментарий от dnoskov

For Windows users I'll show you how to get a basic Ubuntu Linux system up and running in a virtual machine so that you can still do all of my exercises, but avoid all the painful Windows installation problems.

Порвало.

reserved ()
Ответ на: комментарий от Manhunt

А. Шень. Программирование: теоремы и задачи.

Два чая этому господину, ТС-у тоже рекомендую.

lodin ★★★★ ()

Вот ещё хорошая книга: Ален И. Голуб «Правила программирования на C и C++» (она же Enough rope to shoot yourself in the foot)

lodin ★★★★ ()
Ответ на: комментарий от Manhunt

Да, ты прав. Но всё же, если тебе например надо слать кучу данных по сети в разном формате, то гораздо хуже свелосипедить самописный маршалинг структур, чем взять ту же йаву, в которой каждый объект serializable. Ничто конечно не мешает взять protobuf или кобру, но я бы выбрал йаву.

Да, я тут слышал одним ухом, что решения на с и спп в этих ваших европах запрещены в авиации и медицине. Мопед не мой если что.

nanoolinux ★★★★ ()

Возможно вам вообще стоить начать с чего-нибудь вроде Вирта, «Алгоритмы и структуры данных.» ?

qrck ★★ ()

Блин. А ты с девкой ляжешь в постель тоже только после того как десять книг прочитаешь? Открывай редактор и начинай писать! Только когда возникнут вопросы, тогда ищи ответы. Не ищи вопросы!
Встречал я таких вот теоретиков, которые начитались шаблонов и суют их куда не попадя. Ни одна книга не заменит тебе мозг.

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

Встречал я таких вот практиков, у которых в коде пузырёвка сортирком, куча копипаста и одна задача решается тремя разными способами из двух возможных. И вопросов не возникает, а чё, работает же!

lodin ★★★★ ()
Ответ на: комментарий от Kroz

Не говоря о том, что чтение того же Шеня без открытого редактора с текстом, таки да, пустая трата времени.

lodin ★★★★ ()

Ищи примеры под себя, собирай и в процессе учись. Тебе же практические навыки нужны, как я понял, их вполне резонно получать на практике.

aiqu6Ait ★★★ ()
Ответ на: комментарий от lodin

Встречал я таких вот практиков, у которых в коде пузырёвка сортирком, куча копипаста и одна задача решается тремя разными способами из двух возможных. И вопросов не возникает, а чё, работает же!

Вот тебе не подумать: http://bash.im/quote/420672

Kroz ★★★★★ ()
Ответ на: комментарий от ramon13666

Ога, буду трахать девку за ухом. А чё, мне ж приятно.

Тока, если я правильно понял, то человек уже может отличить int от char. Так что ухо уже не при чем. А пока будет изучать всю доступную камасутру - состарится. И даже за ухо не сможет.

Kroz ★★★★★ ()

Если для МК, то и нужно что-нибудь про МК читать. Там совершенно другой подход: экономичный. Поэтому K&R как нельзя кстати! А современный быдлокод рассчитан на скорость написания, а не на качество. Для МК не годится. Естественно, надо забыть про всякие printf'ы и прочую мерзость.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от ramon13666

У STM не зря не любят SPL: сам натыкался на грабли несколько раз + корректировал SPL (писали ее, похоже, «индусы», т.к. это жуткий быдлокод, рассчитанный лишь на решение «стандартных» в их понимании задач).

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от nanoolinux

C — единственный универсальный язык, на котором можно написать все, что угодно, не запихивая себе в одно место зонд или не выдумывая неюзабельное тормозяще-глючное Г.

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.