Важная информация
Показано с 1 по 10 из 10

Тема: Главный вопрос программирования, рефакторинга и всего такого

  1. #1 Главный вопрос программирования, рефакторинга и всего такого 
    Разбирающийся
    Регистрация
    09.04.2014
    Сообщений
    86
    Сказал(а) спасибо
    0
    Поблагодарили 15 раз(а) в 11 сообщениях
    Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - технический директор компании "СиПроВер", разрабатывающей статический анализатор кода PVS-Studio. За свою практику он насмотрелся на огромное количество способов отстрелить себе ногу; ему явно есть, о чем поведать читателю. Каждая рекомендация сопровождается практическим примером, что подтверждает актуальность поднятого вопроса. Советы ориентированы на C/C++ программистов, но часто они универсальны и будут интересны разработчикам, использующим и другие языки.

    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Вообще их сайт - вива64 я читал еще до того, как начали активно продвигать PVS-Studio и там были шикарные статьи (может быть и сейчас есть, но когда последний раз хотел там что-то почитать - видел только PVS-Studio). У Карпова смотрел приличные доклады на C++ Russia, причем в этом году он зашел в них с более необычной стороны - вместо рассказа про ошибки, которые находит их анализатор рассказал про сложности с которыми они столкнулись и для меня внезапными стали всякие выкрутасы компилятора gcc.
    Статью по диагонали посмотрел, нормально так, но ИМХО в основном очевидные вещи или то, что хорошо прописано у Маерса и/или Фаулера и/или Боба Мартина. В такой форме, как в статье такие советы не воспринимаются, ну это ИМХО.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Дочитал где-то до 16-го, да автор молоток... Но его советы - это его опыт, каждый программер
    опирается на вещи, которые ему больше понятны. Приведу в пример того же бисквита, он
    тот ещё макаронник, пишет на GW-BASIC код с GOTO\GOSUB, допустить там ошибку - во-первых
    раз плюнуть, а во-вторых это просто перманентное "угандошивание" программы, разгрести
    её потом ни один программер не сможет. Говорить бисквиту пиши без GOTO\GOSUB - бесполезно,
    во-первых потому что менять шило на мыло человек не будет, а во-вторых его проги работают.
    Так и получается, одни программисты сидят и пишут какие плохие другие программисты, что
    используют\не используют что-то, а другие просто развивают свои скилы не глядя по сторонам.
    Существует, безусловно, здравый смысл, но отступление от него имеет место быть.
    У каждого программера свои навыки. Нет, никоим образом не защищаю авторов этих прог, в
    которых есть ошибки, скорее даже наоборот, если ошибка имеет место быть - и программа хоть
    раз повела себя не так, как ожидалось, лучше узнать почему это произошло и виновата ли в этом
    программа. И если виновата - надо править, желательно сразу, а не когда пользователь начнёт
    материться. Сам придерживаюсь стратегии: "исключай те места, алгоритмы и возможности,
    которые могут содержать ошибку, формализуй ВСЕ варианты, не должно быть ни одного места,
    где программа может позволить вести себя непредсказуемо, тестируй до потери пульса,
    проверяй функциональными блоками, собирай из проверенных блоков, контролируй ситуацию
    полностью, строго следуй документации". Также одно из правил тестирования: "вводи любую
    нелепую и шокирующую брехню, то, что пользователь может ввести случайно, специально или
    по незнанию, подумай, какое поведение программа может не обработать корректно, полностью
    тестируй всё после каждого изменения, т.к. каскадно одна ошибка может породить другую, отсюда
    вытекает ещё одно - ошибка может крыться не в том месте, где её ищут, нужно смотреть в корень,
    откуда она образовалась".
    Последний раз редактировалось >Quiet Snow<; 16.04.2016 в 20:55.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  4. 2 пользователя(ей) сказали cпасибо:

    nik_1 (01.09.2016), rrrFer (17.04.2016)

  5. #4  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Хотя код красиво оформлен и легко читается, это не помогло программистам заметить и устранить ошибку. На таком коде человеку сложно сосредоточиться. Он видит однотипные блоки и просматривает их невнимательно.
    Откуда ж анализатору знать, ошибка это или нет? Может так и задумано? Не пытайтесь лезть в замысел и не считайте программу умнее программиста. Если же это ошибка, то она находится в несколько раз быстрее, чем надо времени на то, чтоб прочитать сообщение. И в десятки быстрее, чем чтоб понять, что имеется ввиду не
    C++ Code:
    1. char a[7]={'0', '1', '2', '3', '4', '1', '6'};
    , а
    C++ Code:
    1. if (a[0] != b[0])
    2.     return (int) a[0] - (int) b[0];
    3.   if (a[1] != b[1])
    4.     return (int) a[1] - (int) b[1];
    5.   if (a[2] != b[2])
    6.     return (int) a[2] - (int) b[2];
    7.   if (a[3] != b[3])
    8.     return (int) a[3] - (int) b[3];
    9.   if (a[4] != b[4])
    10.     return (int) a[4] - (int) b[4];
    11.   if (a[5] != b[5])
    12.     return (int) a[1] - (int) b[5];     <<<<====
    13.   if (a[6] != b[6])
    14.     return (int) a[6] - (int) b[6];
    15.   return (int) a[7] - (int) b[7];
    . Я вообще смог понять, о чём речь, только вручную найдя эту "ошибку" в коде и даже после этого потратил на то, чтоб понять, что же анализатор хотел сказать, раз в 50 больше времени, чем на ручной поиск "ошибки". А если такой подсказки нет? Не факт, что сообщение вообще будет когда нибудь понято тем, кто не смог вручную найти "ошибку" в коде.

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    "вводи любую
    нелепую и шокирующую брехню, то, что пользователь может ввести случайно, специально или
    по незнанию, подумай, какое поведение программа может не обработать корректно, полностью
    тестируй всё после каждого изменения, т.к. каскадно одна ошибка может породить другую, отсюда
    вытекает ещё одно - ошибка может крыться не в том месте, где её ищут, нужно смотреть в корень,
    откуда она образовалась".
    Ни один программист не способен предсказать весь пользовательский бред. Что нибудь обязательно пропустите.
    Последний раз редактировалось >Quiet Snow<; 31.08.2016 в 21:10. Причина: Объединение сообщений, флейм отредактирован
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  6. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от Сионист Посмотреть сообщение
    Ни один программист не способен предсказать весь пользовательский бред.
    Предсказывать и не надо, надо тестить и анализировать. Опытный программер как правило уже знает
    что куда и соотв. не пропускает косяки.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  7. #6  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    код с GOTO\GOSUB
    - это круто! GOTO - позволяет сильно уменьшить код ( избавиться от ветвистых if - else ). порой if and else сильно запутывают код и выход на прямую из этого клубка только goto.

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Ни один программист не способен предсказать весь пользовательский бред.
    Только если он сам не является пользователем.
    Последний раз редактировалось nik_1; 03.09.2016 в 20:41.
    Ответить с цитированием  
     

  8. Пользователь сказал cпасибо:

    >Quiet Snow< (01.09.2016)

  9. #7  
    Профи Аватар для Сионист
    Регистрация
    21.01.2016
    Адрес
    Галактика Млечный Путь
    Сообщений
    509
    Сказал(а) спасибо
    11
    Поблагодарили 21 раз(а) в 20 сообщениях
    Цитата Сообщение от nik_1 Посмотреть сообщение
    Только если он сам не является пользователем.
    Он является другим пользователем. Пользователем, который не бредит.

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Предсказывать и не надо, надо тестить и анализировать.
    Что же Вы введёте при тесте идиотоустойчивости, если даже предсказать бред не смогли?
    Последний раз редактировалось >Quiet Snow<; 03.09.2016 в 20:16. Причина: Объединение сообщений
    Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на си.
    Ответить с цитированием  
     

  10. #8  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от Сионист Посмотреть сообщение
    если даже предсказать бред не смогли?
    Вынужден повториться:

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Предсказывать и не надо, надо тестить и анализировать
    Впрочем, если не умеем ни того, ни другого, то да - тогда выхода нет, только гадать.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  11. Пользователь сказал cпасибо:

    nik_1 (03.09.2016)

  12. #9  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    283
    Сказал(а) спасибо
    160
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Впрочем, если не умеем ни того, ни другого, то да - тогда выхода нет, только гадать.
    гадаем на единичках и ноликах. снимаем сглаз по монитору.
    Ответить с цитированием  
     

  13. Пользователь сказал cпасибо:

    >Quiet Snow< (03.09.2016)

  14. #10  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    гадаем на единичках и ноликах. снимаем сглаз по монитору.
    хехе, да да вот оно:

    Прикол
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 05.01.2016, 15:31
  2. Что вам больше всего не хватало в приставках 90-х?
    от Konstantin Shcherba в разделе Приставочные игры
    Ответов: 1
    Последнее сообщение: 12.12.2013, 17:13
  3. Ответов: 0
    Последнее сообщение: 07.11.2013, 18:26
  4. Знатоки программирования.
    от m.Krylov в разделе C/C++
    Ответов: 2
    Последнее сообщение: 26.09.2012, 14:37
  5. Среда программирования PascalABC.Net
    от Doomer_ в разделе Pascal ABC
    Ответов: 8
    Последнее сообщение: 11.12.2011, 11:54
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •