Полезные советы по программированию в с
Ровно 15 лет назад, в этот самый день, своими дрожащими коленками я переступил порог офиса небольшого провинциального интернет-провайдера. Моя первая настоящая работа в качестве программиста. Знаний почти нет. Тонкий испуганный голосок откуда-то из желудка советует развернуться и убежать подальше, пока окончательно не опозорился. Глубокий вдох-выдох, и вот генеральный директор уже ведет меня в небольшую комнатку-подвальчик, показывает на полуразобранный компьютер, видавший лучшие времена: «Это твое рабочее место. Устраивайся». Так началась моя карьера.
Но перенесемся в настоящее. Сейчас я пишу эти строки, сидя в удобном офисе престижного БЦ в центре Москвы. За плечами работа с крупными международными брендами и разработка сложных fintech приложений. Сотни книг прочитано и десятки статей написано. Мания величия давно вылечена. Менеджерские позиции опробованы и отвергнуты. Душевное равновесие найдено. Любовь к профессии сохранена. Однако это не статья из серии “Какой я молодец. Делай, как я и тоже будешь молодцом”. Эта статья о том, какие ошибки я совершал и что можно было сделать лучше. Эта статья — ретроспектива моей карьеры.
Меняйте компанию, если нет развития
Время от времени я застревал в компаниях, которые явно перерос по уровню. Вроде и деньги платят хорошие, и все тут знакомо и удобно. Приходишь утром, выбираешь привычный режим на кофемашине. Обмениваешься шутками с Катей из бухгалтерии. Садишься в свое кресло, которое давно приняло очертания твоего мягкого места. Открываешь ноут и погружаешься в ежедневную рутину из типичных хорошо знакомых тебе задач. Внимание! Это ловушка!
Работа не должна становиться рутиной. Должны быть вызовы. Не каждый день, может даже не каждый месяц, но если вам слишком легко — пора уходить. Не нужно бояться трудностей. Если на собеседовании вам показалось, что тут ребята решают слишком сложные задачи, и вы точно лажанетесь в первый же день — этот оффер для вас. Ищите максимально сложные задачи, только так вы сможете совершенствоваться, а не деградировать на кухне любимой компании по 4 часа в день
Будьте программистом, а не кодером
Написать код != решить проблему. Код — это только один из инструментов для решения проблем. Ох, как же долог был путь до осознания этого простого утверждения. Как же много времени было потрачено впустую. Нас, программистов, со страшной силой притягивает код. Видя очередную задачу в Джире, мы пробегаем ее глазами по диагонали и скорее-скорее писать код! Как только код написан — мы теряем интерес к задаче и берем новую.
К сожалению, нам очень редко ставят прозрачные и понятные задачи. Перед тем, как открыть IDE, я должен быть на 100% уверен, что понимаю проблему, которую собираюсь решать. Хорошим маркером тут является декомпозиция. Если я могу расписать решение по шагам и знаю, к какому результату приведет каждый шаг — только тогда я открываю редактор и пишу код.
Помните: ваша ценность как программиста не в элегантном коде с экзотическими паттернами от “Банды четырех“. Ни одна компания еще не добивалась успеха благодаря красоте кода (во всяком случае я таких примеров не припомню). Всегда держите в уме конечный результат.
Не бойтесь экспериментировать
Каждый раз, начиная новый пет-проект, я либо начинал его на хорошо знакомых технологиях, либо переходил на них после нескольких недель. Ведь так гораздо быстрее. Какой смысл мучиться с Кафкой, если есть любимый Кролик? Зачем укладывать структуру данных в документы, если она сама легко укладывается в реляционную модель? Каждый раз мысль о том, что нужно побыстрее выйти в прод, мешала мне развиваться. В итоге большая часть моих проектов лежит мертвым грузом на гитхабе, не принеся мне не только мировой известности, но даже новых знаний. Пытаясь угнаться за сроками, которые я сам себе ставил, я просто терял время.
Экспериментируйте. Спешить некуда. Развивайте кругозор. Если вы эксперт в какой-то технологии — используйте эти знания на работе, но вне работы пользуйтесь инструментами, с которыми вы не знакомы. Это сложно психологически, ведь вы будете понимать, что используя хорошо знакомый язык программирования, уже пожинали бы плоды славы от вашего проекта на Мальдивах. А приходится разбираться, почему преобразование чара в инт отдает код символа, а не цифру.
Запускайте пет-проекты
Я давно понял: чтобы быть успешным программистом, мало быть хорошим программистом. Нужно понимать разработку продукта гораздо шире своей специализации. Но как этого добиться? Я могу прочитать сотни книг по маркетингу и они будут бесполезны, если я не применяю эти знания на практике. Я могу подписаться на телеграм каналы лучших продуктологов страны, но что с того, если у меня нет продукта, на котором можно экспериментировать?
С тех пор, как я запустил свой первый пет-проект, мне стало гораздо проще находить общий язык с фронтами, qa, продактами, маркетологами и любыми другими членами команды. Ведь я стал понимать их работу намного лучше. Современное программирование — очень командное, и опыт работы над собственным проектом помогает мне находить точки соприкосновения с другими членами команды.
Учитесь декомпозировать
У меня всегда были проблемы с внимательностью. Я допускал в коде очень глупые ошибки. Не потому что я что-то не понимал или не знал как сделать. Просто я был невнимателен. Боролся с этой проблемой разными скучными способами (например, следил за минутной стрелкой), но ничего не помогало. Естественно, после каждой такой ошибки моя самооценка резко падала. О каком развитии может идти речь, если самооценка на нуле?
Решение пришло в виде декомпозиции. Меньше задача = меньше кода = меньше вероятность допустить ошибку. Я часто слышу фразу «эту задачу нельзя декомпозировать», но лично я считаю, что любую задачу можно декомпозировать до бесконечности. Если у вас не получается, скорее всего, вы просто не до конца понимаете задачу.
Изучайте инструменты
Долгое время я пользовался IDE как обычным редактором кода с удобной навигацией. А еще у меня был начальник, который программировал исключительно в mcedit и часто театрально вопрошал: «Кто ты без своего IDE?». Или у меня 24/7 был открыт терминал, но я совсем не умел с ним работать. Я долго жил без статических анализаторов и стайл-фиксеров. Игнорировал горячие клавиши. И не видел в этом никакой проблемы.
Сейчас я подписан на все официальные youtube-каналы своих инструментов. Удивительно, сколько полезного можно из них узнать. Я внимательно смотрю за процессом работы своих коллег и часто перенимаю то, что показалось мне интересным. Также некоторые инструменты показывают нам всплывающие окошки, где рассказывают, как можно улучшить процесс взаимодействия. Не стоит этим пренебрегать.
Участвуйте в opensource
Opensource — это больно. Каждый ваш PR будет рассмотрен под микроскопом. Каждая переменная, каждый символ. Каждый тест будет подвергнут сомнению. И это не ваш тимлид, который: «а, ну ладно, давай так смержим». С этими людьми не договоришься, на них не пожалуешься, их не задавишь авторитетом. И они вам даже не платят. Примерно на двадцать пятом комментарии очень хочется послать все нафиг.
Терпите! Opensource — это отличная возможность прокачать свой скилл, работая с лучшими программистами мира (хотя тут зависит от проекта). Начните с малого. Выберите какой-нибудь несложный инструмент или библиотеку. Зайдите в раздел issues и посмотрите, что можно пофиксить. Надо сказать, что обычно на гитхабе полностью отсутствует токсичность. Если ваш ПР разнесут в клочья, то сделают это очень конструктивно. Во всяком случае, по моему опыту.
Верьте в себя
Время от времени у меня возникали ситуации, когда хотелось все бросить и пойти работать на стройку. Таскать кирпичи. Этой ситуацией могла быть задача, которая никак не заканчивалась. У которой ежедневно менялись требования. Или технология, которую я не хотел изучать. Или интеграция стороннего сервиса, у которого полностью отсутствовала документация. Или просто функциональность, для понимания которой требовалось образование финансиста, а все продуктологи говорят исключительно на английском. Я психовал, прокрастинировал, увольнялся и срывал злость на котейке.
Есть один прием, который сейчас сильно помогает мне с такими задачами. Просто я всегда помню, что в итоге я справлюсь. Всегда справлялся. И всегда буду. Нужно просто сесть, поизучать, подумать, разложить по полочкам, задать правильные вопросы правильным людям. Главное, верить в себя и оставаться спокойным. Вообще, пожалуй, это самый главный совет, которым я и закончу статью. Keep calm and believe in yourself. Вы справитесь.
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
Многие выбирают C++ в силу его возможностей (технических и карьерных), наличия большого количества учебного материала, востребованности. Чтобы как можно раньше выбраться из категории новичков в C++, нужно наработать базу знаний и опыта, а поможет в этом наш материал.
Умение профессионально пользоваться операционной системой − важнейший навык. Как минимум, нужно уметь пользоваться командной строкой. Ещё лучше, если вы освоите Linux, потому что его проще настроить под свои задачи.
Немаловажна и работа с системами контроля версий. Большая часть программистов предпочитает использовать git, но есть и неплохие альтернативы. При трудоустройстве работодатели часто просят соискателей проинспектировать код. Это базовое задание, поэтому, если с ним возникнут затруднения, ваши шансы получить место серьёзно снизятся.
Нельзя сказать, что “обуздать” C++ программисту легче, чем прочие ЯП. В процессе освоения языка вы изучите основы объектно-ориентированного программирования, узнаете больше о структурах данных и работе алгоритмов изнутри и снаружи.
Освоили эти темы? Двигайтесь дальше:
- Разберитесь с тем, что такое стековые переменные, и как объекты могут быть размещены в куче. Выясните, что происходит при вызове функции new, и в каких случаях переменные исчезают из области видимости.
- Узнайте, как на самом деле отличается обращение по ссылке от использования указателей. Поймите, как переменные проходят через функции, и чем отличается передача всей структуры от передачи указателя на структуру через функцию.
- Узнайте, как массивы аллоцируются с помощью new и delete, и как создать массив, который можно безопасно возвращать из функции
Если с этим покончено, то вот ещё несколько полезных разделов:
- Виртуальные методы
- Виртуальные деструкторы
- Перегрузка оператора
- Как работают шаблоны (функции, классы и создание экземпляров)
- Правильный синтаксис
- Стандартная библиотека и Boost (попрактикуйтесь в обеих)
Ещё будет неплохо, если вы уделите время изучению исходного кода крупных профессиональных проектов. Это в некоторой степени бесплатное обучение у мастеров.
Отличия C и C++
C предназначен для системного программирования, а язык C++ более универсален: он задумывался как улучшенная версия языка C. К самым базовым отличиям C++ относятся:
- Наличие классов и объектов в C++
- Наследование классов
- В C++ появились операции new и delete, inline-функции
Рассказываем о том, какими средами разработки стоит пользоваться C++ программисту, а также чем они отличаются.
Visual Studio
Это самая популярная среда разработки, во многом благодаря своей доступности и наличию большого набора инструментов и возможностей. Например, она позволяет легко разрабатывать консольные и графические приложения, поддерживает Windows Forms, Windows Mobile, .NET Framework, Xbox, Windows Phone, .NET Compact Framework и Silverlight.
Есть и недостатки: например, не получится запустить проект на macOS или Linux. Это можно решить с помощью кросс-платформенного Microsoft Visual Studio Code (подробнее о нём расскажем ниже). Но и у последнего есть минусы: так, для поддержки фреймворка .NET, потребуются сторонние средства компиляции.
Vim
По сути, это просто редактор кода без графического интерфейса, и многие программисты считают его отсталым. Другие же, наоборот, говорят, что он не содержит ничего лишнего. Но начать пользоваться им сразу всё равно не получится, функций слишком много, поэтому сначала советуем разобраться с ними.
К плюсам относят поддержку макросов, автодополнение, режим сравнения файлов.
Qt Creator
Ещё одна кросс-платформенная IDE. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса с QtWidgets QML. Среди преимуществ: наличие интеллектуальной системы подсказок, возможность компиляции и кросс-компиляции проекта для различных систем, встроенный ассистент и специальный дизайнер.
Visual Studio Code
Ещё один редактор кода с поддержкой большинства популярных языков. Базируется на проектах с открытым исходным кодом, поддерживает интеграцию с системами контроля версий, имеет встроенный отладчик и возможность подключения сторонних дополнений. Доступен бесплатно.
CLion
CLion − умная IDE, предназначенная для разработки на С и С++ на платформах Linux, Windows и macOS. Включает в себя поддержку системы сборки кросс-платформенных проектов CMake, Gradle C++ и compilation database, возможность быстрого анализа кода, разнообразные рефакторинги и унифицированный интерфейс для работы с популярными системами контроля версий.
Ряду приложений требуется GUI. Для его создания нужно использовать графические библиотеки. Рассмотрим их подробнее.
Cairo
Cairo − библиотека для работы с векторными изображениями. В Mozilla, например, его используют в браузерном движке. Ещё им пользуются такие проекты, как MorphOS, AmigaOS, InkScape, Synfig, Graphite. Отсутствие русского языка не должно стать проблемой для C++ программиста.
Juce
Кросс-платформенный проект, предназначенный для создания приложений и плагинов на C++.
В интернете есть множество инструкций по данной библиотеке, но почти всё на английском. Можно прочитать книгу «Разработка кроссплатформенных приложений с использованием Juce», в которой объясняются основные принципы технологии.
SFML
SFML − одна из наиболее удобных и быстрых GUI-библиотек для 2D-графики. Среди плюсов − низкие требования к уровню владения языком программирования.
Библиотека часто используется стартапами и начинающими программистами, потому что не требует написания большого объёма кода. Простейшее приложение, вроде «Hello, World!», можно написать через минуты после запуска, а уже через неделю − сделать что-нибудь стоящее. Ещё одним крутым преимуществом является поддержка популярных платформ, в том числе Android.
Cocos2D-X
Библиотека предназначена для упрощения разработки мобильных игр. Пользователи отмечают её доступность, простоту использования и наличие специального конструктора на основе Cocos Creator. Кстати, с использованием этой библиотеки была разработана игра Badland.
Если в игру планируется добавление большого количество анимации и графики, то лучше использовать Unity, который позволяет интегрировать файлы из таких программ, как Photoshop, Maya или Blender.
GTK+
Пожалуй, одна из самых известных графических библиотек. Изначально она задумывалась как компонент GIMP, но уже через несколько лет после выпуска первой версии, нашла применение в сотнях других приложений.
Теперь она представляет собой полноценный графический фреймворк. Хотя некоторые утверждают, что программы, созданные на Linux с использованием этого инструмента, выглядят лучше, чем на других платформах.
Poco
Коллекция open-source библиотек, созданных с целью упрощения разработки сетевых кросс-платформенных приложений на C++. Программистам, использующим этот фреймворк, нравится, что он помогает избежать самостоятельной реализации типовых задач, уменьшая тем самым количество потенциальных ошибок.
Asio C++
Это кросс-платформенная C++ библиотека для сетевого и низкоуровневого программирования, предоставляющая асинхронную модель с использованием современного подхода C++.
Silicon
Фреймворк, созданный для работы с высокопроизводительными приложениями и облегчения взаимодействия с веб API без ущерба для производительности программ.
WebSocket++
Создан с целью обеспечить более лёгкую работу с вебсокетами. Не предназначен для использования, как полноценное веб-приложение.
Относительно C++ сложно дать какие-то универсальные рекомендации: язык может использоваться для совершенно разных целей. Junior C++ программисту придётся первое время плотно взаимодействовать с кураторами, чтобы понять специфику продукта, компании. И даже опытным программистам на C++ требуется время, чтобы привыкнуть к задачам, которые ставятся в конкретных организациях.
Кроме того, C++ не имеет обширного набора стандартных библиотек, поэтому многие разрабатывают собственные, а значит, на их изучение потребуется дополнительное время.
Важно помнить, что организации нанимают не просто человека, который умеет пользоваться технологией, но ещё и готов развиваться самостоятельно. Например, в корпорациях уделяют всё меньше внимания знанию особенностей языка, библиотек и наборов инструментов, потому что там ожидают гибкость и способность быстро изучить что-то новое, когда это потребуется.
Тогда получается, что изучив основы и научившись писать работоспособные программы, стоит сразу идти в бой − подавайте заявки на стажировки, соглашайтесь на проектную работу, чтобы набрать как можно больше опыта.
Кто-то скажет, что сажать деревья сейчас глупая затея, потому что они вырастут только лет через 20. В программировании это работает примерно так же: вы изучаете технологии сейчас, применяете их долгое время, а профессионалом станете спустя продолжительное время работы.
Начинающему C++ программисту, который хочет достичь успеха, нужно понимать, что технология не является чем-то, что может быть освоено за неделю. Но чтобы начать разбирать его основные компоненты, не требуется практически ничего, кроме желания.
А как вы осваиваете С++? Делитесь в комментариях.
Понравилась статья о том, что нужно знать начинающему C++ программисту? Другие материалы по теме:
- Основы C++ для начинающих программистов: вводный видеокурс
- Составляем план обучения и выбираем книги C++ для чайников
- 15 популярных вопросов с IT-собеседований по языку C++
Источники: Советы начинающему C++ программисту on Dice.com
Предисловие
Хорошо, когда работаешь с человеком, который отлично знает толк в своём деле. А что, если случается работать с коллегой, опыт которого не столь большой. Особенно это касается профессионально-личностных качеств. Невольно приходится подсказывать, местами помагать ему, а где-то даже откровенно учить. Все мы когда-то начинали. Все эти действия требуют немалых усилий, которые можно было бы применить по прямому назначению — в разработке проекта, но без подготовки новых специалистов будет тяжелее.
Так вот, чтобы минимизировать эти затраты, давайте «создадим» хорошего, а возможно и идеального начинающего программиста, с высоким потенциалом и светлыми горизонтами.
Предлагаемые здесь десять советов не претендуют на оригинальность и, в основном, базируются на моем небольшом пятилетнем опыте разработок. Итак, начнем.
1. Будьте самостоятельными
Если у вас есть какой-то вопрос, и вы не знаете как с ним поступить, то вначале постарайтесь исследовать его самостоятельно. Не ждите постоянной помощи от коллег — у них и без вас работы хватает. Используйте всю мощь поисковых систем, специализированных ресурсов (например, stackoverflow), профессиональных блогов, форумов разработчиков, и конечно же хабра. Большинство типичных «граблей» можно обойти различными эффективными вариантами, а для решения базовых задач есть дюжины готовых решений. Просто пойдите и возьмите.
2. Умейте спрашивать
Если самостоятельные поиски ответа на вопрос не дали результатов и вы долгое время топчетесь на месте, то не бойтесь спросить помощи у более опытных коллег.
Перед тем, как задать свой вопрос, не спешите, постарайтесь его максимально четко сформулировать. Возможно, что ответ на вопрос уже кроется в самом вопросе.
Если нужно показать какой-либо алгоритм или схему и указать на «тёмные», проблемные или слабые места, то для изображения старайтесь пользоваться специальными инструментами (например, UML), это позволит эффективно продемонстрировать предмет вопроса, а также даст вам прибавку к навыку проектирования.
3. Постоянно развивайтесь
Все мы являемся свидетелями сногсшибательных темпов развития технологий. Особенно это касается нашей сферы деятельности. Помните, что многое, что преподавали вам в ВУЗе, к сожалению может очень быстро устареть, стать не актуальным. К счастью, это пока не касается фундаментальных технических наук. Будьте готовы к тому, что вам постоянно придется постигать что-то новое, разбираться в свежих инновационных технологиях и исследовать новые тенденции всё время, которое вы будете выступать в роли разработчика программного обеспечения. К тому же подрастающее поколение не дремлет и создает конкуренцию. Важно понимать и то, что для эффективного и быстро освоения технологии, нужно постоянно тренировать сам навык обучения и не давать ему атрофироваться.
4. Не бойтесь учиться оценивать
Вспоминая себя, вначале у меня была своеобразная боязнь оценки поставленной задачи. И я с переменным успехом то промахивался, то попадал. Могу вас сразу успокоить, эта задача является настолько не простой, что для её решения существует множество комплексных методик, разрабатываемых не одним поколением специалистов, и это не только в айти. Мне кажется, что я вас изрядно напугал. Ну да ничего, поймаете пару ударов граблями, угостите пивом более опытных коллег, чтобы разузнать их ноу-хау, и у вас будет базовый навык эстимации задач. Со временем, приобретая опыт по решению различных задач, картина будет весьма ясной, например, вы без труда поймете, что на реализацию фичи «свистелка-пыхтелка на jQuery» понадобится 6 часов плюс 2 часа на риски. Так что это дело наживное.
5. Не забывайте о всей картине системы
Разрабатывая очередной класс, реализуя паттерн или же исправляя хитрый баг, не забывайте о всей картине создаваемого ПО. Иногда случается так, что в результате чрезмерно-увлечённой работы над каким-то участком кода сужается видимость проекта, что приводит к потенциальным конфликтам в коде, нелепым ошибкам и провоцирует появление узких мест в системе.
Старайтесь тренировать общее видение картины через распечатанные на бумаге диаграммы классов (либо ключевые её части), схемы алгоритмов, комплексные структуры данных и прочие важные компоненты. Это поможет в случае замешательства быстро освежить общее представление и вернутся в здравый ритм.
6. В меру используйте готовые решения
Наверное, нигде больше, чем в айти, не изобретается такое огромное количество велосипедов. В этом есть как свои плюсы, так и откровенные минусы. Важно понимать, что если есть достаточное количество времени, задача не сложная и вы хорошо представляете, что нужно делать, то можно написать свою реализацию, которая гармонично впишется в общий стиль проекта. Это как минимум даст вам понимание процессов изнутри, и конечно же практический опыт. Однако, если времени в обрез, либо задача успешно решается комплексным инструментарием, например, популярным фреймворком, задействованным на проекте либо каким-то компонентом из библиотеки, то эффективнее использовать готовое решение. Учтите, что возможны ситуации, когда в дальнейем может потребоваться оптимизация или расширение выбранного вами решения.
7. Цените свой труд
Не подходите к задаче, как одолжению, иначе от вас будет только вред. Цените то, что вы творите, ведь вы именно творите и создаете. Не пожалейте пары минут на оформление кода, согласно общепринятым стандартам в компании или команде. Вычистите свой результат, будьте педантичны, воспитайте в себе эту привычку, если её еще нет. К примеру, если у вас «съехал» элемент интерфейса на несколько пикселей вправо, то не пожалейте времени поправить его, вернув на место. Обязательно проверяйте и запускайте результат своей деятельности, не перекладывайте всё на плечи без того загруженных инженеров по контролю качества. В итоге вас обязательно заметят и оценят по достоинству, и все, потому что вы цените то, что создаете.
8. Не будьте ленивыми
Комменты на хабре, просмотр роликов на ютубе и прочие скайпы во время простоев на работе — это не плохо, но гораздо лучше заниматься чем-то полезным как для себя, так и для коллег. Прочитали об интересной технологии, которую потенциально можно применить на проекте? Попробуйте её в деле — нагрузите тестами в песочнице, сравните полученные результаты с уже используемыми сходными технологиями, или же напишите «hello world» в виде движка для блога либо другой тривиальной (но не слишком) задачи. Также хорошо в свободное время можно создать что-то своё: будь то простенький greasemonkey-скрипт для любимого веб-ресурса, или же давно не дающая покоя оригинальная мысль для стартапа. В любом случае огромным плюсом после всего этого будет поддержание рабочего тонуса и, как следствие, хорошие результаты в решении новых задач.
9. Умейте правильно излагать свои мысли
Старайтесь кратко и четко излагать свои мысли. Не зря говорят, что краткость — сестра таланта. Если вам приходится не просто и словесная «вода» льется без остановки, то тренируйтесь «на кошках»: запишите мысль на бумаге, постарайтесь вдумчиво выделить базовый тезис и, через постепенное вычеркивание «лишних» и «приукрашающих» слов и фраз, очищайте его. Отнеситесь к этому, как к игре — с азартом, энтузиазмом и интересом. В роли второй «кошки» выступает, как ни странно, твиттер, с его ограничениями на сообщения.
10. Не ограничивайтесь своей ролью
Вначале вы будете заниматься выполнением поставленных задач. И иногда вам будет казаться, что менеджер не прав, клиенты тупые, а тимлид тиран и узурпатор. Часто это всего лишь иллюзия, которая может изрядно подпортить отношения в коллективе и даже подмочить вашу репутацию. Чтобы понять движущие их мотивы, постарайтесь поставить себя на место того или иного человека, подумайте, как бы вы поступили на их месте, имея ряд ограничений и обязанностей. Чаще всего человека можно понять, в противном случае вам просто не повезло, и тогда уже приложите усилия для продуктивной коммуникации. То же самое применимо, когда вы вырастите и смените роль разработчика на ту, которая была ранее непонятна. В этом случае просто вспомните себя, и старайтесь не давить на без того замученного программиста.
Послесловие
Для кого-то это само собой разумеющееся, и, возможно, на меня повесят погоны всем известного капитана. Но, как показывает практика, к сожалению не все это понимают и, в последствии, набивают глупые шишки как себе, так и коллегам. А ведь этого можно было избежать.
В комментариях горячо приветствуются другие полезные и конструктивные советы. Уверен, что будет интересно все, как на базе своего опыта, так и советы, полученные в наставление от более опытных и мудрых коллег.