CoderA
Местный
Самое фундаментальное из того что я встречал - SICP (http://mitpress.mit.edu/sicp/)
русский перевод
http://newstar.rinet.ru/~goga/sicp/sicp.pdf
Самое фундаментальное из того что я встречал - SICP (http://mitpress.mit.edu/sicp/)
парни, спасибо!!!
В общем случае не ясно, что подразумевается под попсовыми книжками. Но начинать с попсы плохо. Она как-правило дает поверхностные знания.Может быть стоит начинать с более попсовых книжек?
Это не попса. В принципе, там дается курс дискретной оптимизации, но как-то очень зубодробительно и длинно. Мой препод по дискретке уложил примерно тот же материал в объем методички, просто и понятно.Что-нибудь типа "Алгоритмы оптимизации на сетях и графах" автор Эдвард Майника.
Вот это интересно. Прямо таки группа проектирования?Потом (в 17,5 :huh: ) начал работать в институте и всё это на практике постиг - у нас в отделе была отдельная группа проектирования, я был в группе программистов.
Да, отдельная группа в отделе, в которой (в этой группе) больше 10 чел. работало.Вот это интересно. Прямо таки группа проектирования?
Я в институте попал с совхоз где каждый сам за себя выполнял план. Давали 3-4 задачи на грудь из разряда что сдать надо вчера, а ТЗ никто не видел, и вперед с песнями.
Про своих бывших начальников я в основном могу сказать что они были удивительно странными людьми (для их должностей и научных степеней). А повезло мне с моим непосредственным руководителем - женщиной, у которой удивительное чутье к качественному коду. Чутье - потому что в то время читать о качестве было нечего. Удивительное - потому как до сих пор я редко встречаю людей, настолько трепетно и ответственно относящихся к своему коду.Отдел в Управлении (где экономику и зарплату всему институту считают) - там мне посчастливилось работать.
Начальники были удивительными но странными людьми (для моих 17,5 лет).
Я не говорил про излишний перфекционизм. Однако, если качеству кода не уделять внимания, то проект скорее всего рухнет, невзирая на качество проектирования. Особенно это касается длительных проектов, которые развиваются во время эксплуатации, а не написаны и сданы под ключ.Согласен, "чутье к коду" - это непонятная штука.
Человек бросает взгляд на листинг программы, блок-схему, структуру данных в проекте и сразу говорит - что это ерунда.
Кодировщика который трепетно "вылизывает" каждую строчку я бы не назвал трепетными - это скорее перфекционизм, зачастую никому совершенно не нужный.
Проектирование, кодирование, оптимизация, тестирование - нормальные этапы написания ПО, причём это не однозначно последовательные этапы - реверс и циклы тут изначально задуманы :huh: если софт хорошим должен получиться на выходе.
Забавно, но давайте задумаемся как и когда появилось само понятие "качество кода" ?Я не говорил про излишний перфекционизм. Однако, если качеству кода не уделять внимания, то проект скорее всего рухнет, невзирая на качество проектирования. Особенно это касается длительных проектов, которые развиваются во время эксплуатации, а не написаны и сданы под ключ.
Давайте!Забавно, но давайте задумаемся как и когда появилось само понятие "качество кода" ?
Почему вдруг эта проблема возникла ?
Если задуматьтя и серьёзно подойти к этому вопросу, то ответ будет довольно не популярный.
:huh:
Объективного идеала нет, т.к. у всех своя точка зрения и она еще и меняется со временем. Но даже у ассемблерного кода есть цена изменения и поддержки, которая будет варьироваться в зависимости от усилий автора по приведению кода в порядок.Это верно, но я о другом.
Я о эфимерном понятии - идеальный код.
Когда вы пишете на asm - код может быть некачественным? НЕТ - он может быть не эффективным, о его качестве судить может только спец по данному и конкретному процессору, но это никому совершенно не нужно.
Чем ниже уровень абстракции, тем больше придется код дублировать, тем сложнее его будет поддерживать. Повышение уровня абстракции - единственный способ борьбы со сложностью. Голова у человека устроена так, что она не может удерживать во внимании много деталей.Когда вы пишите на языке высокого уровня - чем выше уровень абстракции, тем выше вероятность что вы пишете отвратительный код.
Проектирование не избавит от необходимости модифицировать и поддерживать написанный код. Требования меняются, и даже самый грамотный и детальный проект перестанет их удовлетворять к тому моменту когда заказчик увидит код в работе и уточнит либо изменит ТЗ. Это не говоря уж об изменениях связанными с багами и оптимизацией (да и цены сейчас другие. Кодеры от килобакса стоят в РФ).К чему всё это я - конечно не к тому, что нужно запретить языки высокого уровня.
Я всё веду к проектированию и постановке - именно это является главным процессом в нынешнем программировании.
Кодировщиков "на $100-200 в месяц" на любой язык сейчас пруд-пруди, в очереди стоят, а постановщиков и проектировщиков нет - такие люди на вес золота.
В общем случае не ясно, что подразумевается под попсовыми книжками.
То есть, да, сети и графы знать желательно, но начинать с них не стоит. Конкретно эту книгу я бы не стал советовать.
Забавно, но давайте задумаемся как и когда появилось само понятие "качество кода" ?
Почему вдруг эта "проблема" возникла ?
Если задуматьтя и серьёзно подойти к этому вопросу, то ответ будет довольно не популярный.
У меня предвзятое отношение к этой серии.For Dummies
Книга как раз очень серьезная, и ее нельзя относить к серии For Dummies. Глубина материала значительно превышает уровень, необходимый для решения повседневных задач в неспецифических областях программирования. У меня за плечами 4-х семестровый курс дискретной оптимизации, и несколько спецкурсов типа NP-полных задач, матройдов и графов. Случаев применения этих знаний в моей практике - по пальцам одной руки. Да и то, все сводится к тому что все забывается кроме того, что искать для решения конкретной задачи. И этого мне пока достаточно.Я не говорю, что данная книга должна быть первой, обязательной или единственной. Просто привел пример стиля изложения материала, когда повествование отталкивается от реальных задач. Типа: "Вот задача из реального мира ... вот алгоритм, с помощью которого она решается ... этот алгоритм реализуется так-то ... суть алгоритма и его реализация основаны на таком-то математическом аппарате"
Вот это как раз подход For Dummies. Паттерны - это типичные решения, обладающие своими показаниями и противопоказаниями. Паттерны позволяют добиваться каких-то целей, но как-правило неминуема расплата. Нельзя делать так как написано в паттернах просто потому что там так написано. Нужно каждый раз включать голову, взвешивать что приобретешь, чего лишишься.Паттерны и антипаттерны, вроде бы, сформулированы достаточно давно. Хочешь, чтобы код жил долго, а его рефакторинг был легким,делай так и не делай по-другому.
Вот это как раз подход For Dummies. Паттерны - это типичные решения, обладающие своими показаниями и противопоказаниями. Паттерны позволяют добиваться каких-то целей, но как-правило неминуема расплата. Нельзя делать так как написано в паттернах просто потому что там так написано. Нужно каждый раз включать голову, взвешивать что приобретешь, чего лишишься.
Самое интересное то, что люди, изучающие паттерны, как правило не знают что проблемы, решаемые паттернами в ООП, в соседней парадигме (ФП) не стоят внимания, т.к. решаются с помощью инструментов, предоставляемых функциональными языками из коробки. Т.е. паттерны - это костыли, позволяющие кое-как решать некоторые стандартные задачи из функционального мира. Да, знать их для программирования в ООП необходимо, но это не фундаментальные знания, т.к. описывают местячковые решения конкретных иснтрументов (статически типизированных ООП языков). Шаг в сторону (например динамическая типизация, аспектно-ориентированное программирование) и эти проблемы решаются опять-таки по-другому.