Разработка
Rapprogtrain
1711

Как не быть посредственным разработчиком

Дисклеймер: я не лучший разработчик, но я понимаю различия, что выделяет некоторых разработчиков на фоне остальных.

В закладки

Пишите больше кода

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

Пишите проверки для кода

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

Давайте посмотрим на пример ниже:

function postData(data) { boolean valid = true; // проверим, если данные определены if (data === undefined) { valid = false; } // проверим, если email хорошо сформирован if (!regex(data['email']) { valid = false; } // проверим, если пароль имеет не меньше 8 символов. if (data['password'].length < 8) { valid = false; }if (valid) { http .post(`example.com/user/create`, data) .then((response) => { //добавляем в лист this.users.append(response.userid); }) .catch((error) => { // показываем ошибки. }); } else { showValidationError(); } }

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

function postData(data) { return http .post(`example.com/user/create`, data); }function validate(data) { // проверим, если данные определены if (data === undefined) { return false; }// проверим, если email хорошо сформирован if (!regex(data['email']) { return false; }// проверим, если пароль имеет не меньше 8 символов. if (data['password'].length >= 8) { return false; } return true; }function appendUsers(userId) { this.users.append(response.userid); }function main() { if (validate(data)) { postData(data) .then(data => appendToList(data.userId)) .catch(error => handleError(error)) } else { showValidationError(); } }

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

Будьте честным

Будьте честны в том, что вы знаете полностью, а что нет. Делая вид, что вы знаете все о API-интерфейсах, вы никогда не сможете развиваться, и в результате вы можете опозорится в дискуссии, если вы скажете что-то глупое из-за недостатка знаний о теме API.

Участвуйте в open-source проектах

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

Будьте готовы помочь

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

Выберите персональный проект

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

Понизь свое эго

Не позволяйте своему эго и названию работы встать на пути вашего обучения / совершенствования. Думайте о том кем вы становитесь, а не кто вы.Архитектор в организации xyz может быть разработчиком программного обеспечения и в какой-то другой организации.Будьте всегда открыты для новых и разных способов сделать то в чем вы хороши. Вы можете потерять более эффективный алгоритм или лучший дизайн для функции.

Поймите «почему»

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

var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } })

Выше приведен первый пример кода, который вы встретите в документации на сайте vue.js. Даже когда я смотрю на этот очень простой пример, я пытаюсь объяснить следующие вещи в моей голове:

Для чего новое ключевое слово для создания компонента? Почему у них нет фабричного шаблона для создания объектов?

Похоже, свойство el принимает идентификатор элемента и почему оно использует #? Означает ли это, что я могу добавить другие селекторы элементов, такие как атрибут и класс?

Данные выглядят как очень общее имя свойства объекта vue, что он пытается представить?

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

Не ленись

Лень может встать на вашем пути, чтобы продемонстрировать свои навыки или вещи, которые вам небезразличны, например, если вы считаете, что рефакторинг улучшит производительность, тогда сделайте это, добавьте комментарии, чтобы сэкономить время других разработчиков, документируйте новый API, который вы создали. Время, которое вы потратили на добавление это в ваш код, равно времени, сэкономленному для другого разработчика, который пытается разобраться в том, что вы написали.

Решайте задачи по программированию

Решение задачи по программированию. Они заставят вас думать о вещах, которые мы считаем разумеющимся в нашей рутине. Я говорю о пространственно-временной сложности нашего кода. Некоторые люди утверждают, что решать задачи непрактично, поскольку большинство вещей абстрагировано, и вы просто будете использовать API.Но я не согласен! Это не только поможет вам критически взглянуть на код, но также даст вам уверенность в том, что вы сможете найти лучший код по производительству, и еще одним преимуществом является то, что вы всегда будете готовы к этому собеседованиюНекоторые сайты для решения задач — этоLeetCode, HackerRank и Project Euler.

Поощряйте хорошие вещи

Если вам понравился коммит вашего коллеги, не стесняйтесь оставлять сообщение и цените или одобряйте тот ответ, который помог вам в stackoverflow или похлопайте за статью на medium, которая дала вам бесплатную мудрость или звезду того интересного проекта, который вы проверили на github. Поощрение других помогает извлечь из них лучшее, а в конечном итоге и вас.

Не прячься за слоем

Вы обнаружили проблему с API, которую, на ваш взгляд, вы используете, но не можете ее исправить, потому что вы являетесь «фронтенд разработчиком». Это плохое отношение, по моему мнению. Основные принципы программирования, такие как DRY, использование абстракций, если вы видите несколько вариантов использования для ваших классов, перехват исключений для всех путей управления потоком и т. д., применимы практически к каждому слою стека. Если вы будите помнить об основных принципах, это может помочь вам решить проблемы, которые, по вашему мнению, не могут быть затронуты, потому что вы не работаете над этой частью кодовой базы.

Заключение. Как я уже говорил выше, чтение этого руководства поможет вам осознать те, вещи которыми вы еще не занимались, но для того, чтобы сделать это, вам придется приложить усилия и дисциплину

Вууух, вроде перевел.

Если вам понравилась эта статьи (а я надеюсь, так как я много убил времени на перевод) лайкните ее, прокомментируйте, а также зайдите на мой сайт с другими новостями по программированию и оцените их. Например из последних — это "Как сделать калькулятор на javascript", "Советы о том, как стать лучшим программистом" и другие.

Я буду очень признателен вам за это и благодарен!)

Статья была переведена отсюда - How not to be a mediocre developer!

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Rapprogtrain", "author_type": "self", "tags": ["app"], "comments": 7, "likes": 8, "favorites": 18, "is_advertisement": false, "subsite_label": "dev", "id": 81697, "is_wide": true, "is_ugc": true, "date": "Tue, 03 Sep 2019 22:17:43 +0300", "is_special": false }
0
{ "id": 81697, "author_id": 353515, "diff_limit": 1000, "urls": {"diff":"\/comments\/81697\/get","add":"\/comments\/81697\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/81697"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819, "last_count_and_date": null }
7 комментариев
Популярные
По порядку
Написать комментарий...
0

Слишком много букв, а я из поколения Твиттер. Можно в 5 предложениях?

Ответить
3

Пишите больше кода
Пишите проверки для кода
Будьте честным
Участвуйте в open-source проектах
Будьте готовы помочь
Выберите персональный проект
Понизь свое эго
Поймите «почему»
Не ленись
Решайте задачи по программированию
Поощряйте хорошие вещи
Не прячься за слоем

Да здесь не 5 предложений)))

Ответить
1

Но в твит помещается:)

Ответить
0

спасибо)!

Ответить
0

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

Ответить
0

эхххх, моя главная проблема((

Ответить
0

Пишите больше кода

В принципе, остальное — это тот или иной пересказ этого же тезиса.

Но есть нюанс, который остальные части раскрывают: если писать каждый день хелловорлд, то лучше не будешь, так что надо не тупо больше строчек писать (если бы это было так, то зачем нам все эти языки высокого уровня?), а писать то или с использованием того, в чём плохо разбираешься!

(кстати, всё, что тут написано, применимо вообще к любой специальности, так что Америку эта статья не открывает)

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ] { "page_type": "default" }