Что следует знать каждому разработчику


Содержание

20 вещей для развития, которые важно знать каждому

1. Мир хочет, чтобы вы оставались глупыми. Чем вы тупее, тем вам проще продать продукты и услуги, тем проще вами управлять политикам. Размер диагонали телевизора обратно пропорционален коэффициенту интеллекта.

2. Не надо слепо верить в образовательную систему. Учебная программа устарела в первый день вашего обучения. Исключение – фундаментальные программы в точных науках.

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

4. Научитесь общаться с окружающими. Избегать людей, считая их недостойными своего общения, – значит не найти клиентов, друзей или работу в дальнейшем.

5. Быть застенчивым – пустая трата времени. Не давайте эмоциям рулить процессами принятия решений.

6. Если вам что-то не нравится в отношениях с человеком, – в случае вашего разрыва это и будет причиной.

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

8. Найдите людей, которыми можно восхищаться, и старайтесь их превзойти.

9. Со временем люди становятся более консервативными. Если хотите сделать рисковые вещи – делайте пока молодые. Реформаторство – это следствие отсутствия знаний, а не наличия фокуса.

10. Не тратьте деньги на ерунду: скопите их на что-то серьезное. Это также научит вас тратить деньги и в бизнесе: с умом и ради цели.

11. Выбирая между тратой денег на вещи или впечатления, выбирайте впечатления. Радость от впечатлений и воспоминаний выше.

12. После того, как вы научились экономить, научитесь зарабатывать.

13. Научитесь программировать. Не хотите программировать – научитесь что-то делать руками, чтобы можно было производить что-то полезное.

14. Не набирайте лишний вес в молодости. Это сократит вашу активную жизнь на 10-20 лет.

15. Научитесь готовить еду. Лучшее время для обдумывания чего-то – когда вы режете ингредиенты на блюдо.

16. Высыпайтесь ночью. Недостаток сна сильно влияет на качество принятия решений.

17. Записывайте свои дела. Памяти недостаточно, какой бы она ни была.

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

19. Станьте специалистом своего дела перед тем, как менять сферу деятельности. Тут дело и в правиле 10000 часов, и в том, что хороший генералист должен в прошлом быть специалистом.

20. Не старайтесь исправить людей. Ищите тех, кто еще не испорчен.

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

Жми «Нравится» и получай только лучшие посты в Facebook ↓

Что следует знать каждому разработчику

30.08.2020

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

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

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

Как компьютер может взаимодействовать с другими компьютерами? Что такое сетевой протокол? Как устроены наиболее часто используемые протоколы? Чем отличается транспортный протокол от прикладного? Что такое «порты» и какую функцию они выполняют?

Каждый разработчик должен уметь их перечислить даже в ночи: книги Банды Четырех и Мартина Фаулера — настольные руководства, друзья и товарищи. Знание основ проектирования приложений, паттернов и антипаттернов позволяет заложить расширяемые каркас приложения и необходимую гибкость в изменении или добавлении новых функций.

Это обязательный этап, когда из приложения появляется продукт, относительно которого нельзя уверенно сказать, какие элементы работают при каких условиях. Знание способов выявления дефектов, принципов и правил использования юнит-тестирования, интеграционного тестирования позволит писать приложения с необходимым качеством и всегда иметь ответ на вопрос «Готов ли продукт к релизу?»

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

Что следует знать каждому разработчику

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

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

Учитывая эти аспекты, начнем…

Что такое FizzBizz тест

FizzBizz — как правило, небольшой тест, направленный на отсеивание неопытных разработчиков. Я думаю, вы будете удивленны как много javascript разработчиков не умеют писать такие тесты.

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

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

Пример классического FizzBizz теста:

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

Разница между == и ===

Вы, наверняка, знакомы с обоими операторами сравнения. Тем не менее, а знаете ли в чем точно отличаются эти операторы? Ваш Javascript Linter требует от вас применения оператора ===, задумывались почему?

== не сравнивает типы операндов, вместо этого он приводит их к одному типу. Такая операция имеет негативную репутацию.

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

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

Тот же самый пример, но с оператором ===

В ответ мы получаем false , так как операнды разного типа, один из них целочисленного типа, а второй строкового.

Я настоятельно рекомендую вам более подробно ознакомится с операторами сравнения в на сайте разработчиков Mozilla. Там приведены примеры их использования и более подробное описание.

Как выбирать элементы DOM без дополнительных библиотек

Наверняка вы знакомы с тем, как сделать выборку элементов при помощи jQuery, но сможете ли вы сделать тоже самое, но уже без помощи этой библиотеки?

Я имею ввиду не просто выбрать элемент с определенным ID или набором классов, я говорю о выражениях для поиска элементов при помощи jQuery.

Существует несколько нативных методов для поиска элементов в DOM, которые ни чем не уступают jQuery. Мы можем также использовать селекторы вида first-child , last-child и т.д.

Познакомимся с некоторыми из этих методов

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

  • document.getElementById — классический метод для поиска элементов по их ID.
  • document.getElementsByClassName — выборка элементов по значению поля className
  • document.querySelector — отличный метод, который практически полностью заменяет селектор $() от jQuery, но он уже включен в Javascript. Единственное отличие заключается в том, что он возвращает только первый найденный элемент.
  • document.querySelectorAll — аналог предыдущего метода, но возвращает массив найденных элементов.
  • document.getElementsByTagName — этот метод поможет вам выбрать элементы по имени тега. Если вам потребуется найти все div элементы, то вам нужен именно этот метод.

Хочу также отметить, что методы querySelector и querySelectorAll можно использовать не только на всем документе, но и на отдельных элементов, то есть выборку вы можете делать в пределах одного родительского элемента.

В документации от mozilla вы найдете полное описание этих методов.

Поднятие объявлений переменных и функций

Javascript интересен тем, как он обрабатывает объявленные переменные и функции, все они автоматически поднимаются вверх области видимости. Таким образом, вы можете обратиться к ним до их объявления в области видимости (например, функции в javascript имеет собственную область видимости).

Поэтому для удобства чтения кода возьмите себе за правило ВСЕГДА объявляйте переменные в начале области видимости. Если же вы укажите ‘use strict’ в верху скрипта или функции, то при обращении к необъявленной переменной вы получите ошибку.

Большинство инструментов для проверки стиля кода, как Jshint, укажут вам на ошибку если вы не использовали ‘use strict’ , исходя из этого, если вы стараетесь писать хороший код, то вам в любом случае не получится использовать переменные до их объявления. Как всегда, при возникновении вопросов, обращайтесь к документации от mozilla, там вы всегда найдете полное и исчерпывающее описание вашей проблемы.

Использование инструментов разработчика в браузере

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

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

Научившись применять инструменты разработчика в таких браузерах как Chrome, Firefox и в последних версиях Internet Explorer, вы сможете отладить работу вашего скрипта, измерить его быстродействие и найти места, где стоит улучшить алгоритм работы.

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

Команды консоли

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

Наверняка, вы уже знакомы с такими командами как console.log и console.error , но этим функционал консоли не ограничивается.

Хочу сразу отметить, что не все перечисленные команды будут работать во всех браузерах. Я постараюсь упоминать только те, которые работают в современных браузерах. Тем не менее, в качестве совета, скажу, что прежде чем применять их, постарайтесь проверить самостоятельно их работоспособность, чтобы за зря не нагромождать код.

  • console.log — используется для ведения журнала событий. Поддерживает форматирование.
  • console.error — для журналирования ошибок в коде. Я использую эту команду при возникновении ошибок в AJAX запросах и в других потенциально опасных участках кода. Метод похож на предыдущий, но он выводит список вызовов стека.
  • console.dir(object) — выводит форматированное содержание объекта. Как приавло, этот метод очень полезен при отладке кода.
  • console.group(title) — позволяет создать группу сообщений в журнале с названием title. Таким образом вы можете группировать сообщения, например, по тому участку кода, где они генерируются.
  • console.groupCollpased — аналог предыдущей команды за одним исключением. А именно, она выводит сообщения в свернутом виде.
  • console.groupEnd — заканчивает ранее созданную группу.
  • console.time(label) — позволяет отслеживать скорость работы участка в миллисекундах. Метод полезен при отлавливании потенциально сложных участков кода.
  • console.timeEnd(label) — аналог метода groupEnd, но работает он в отношении console.time().
  • copy(string) — в консоли Chrome и Firefox существует метод, позволяющий вам копировать содержимое string в буфер обмена. Очень полезный метод, попробуйте его применить.

Что именно содержится в this

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

В традиционных языках программирования, this содержит ссылку на текущий объект класса. Но так как javascript далек от традиций, то в нем эта переменная ссылается на объект родитель метода.

Самой простой способ понять this , это принимать его за владельца или родителя метода. this всегда ссылается на родителя (parent), за исключением случаев, когда вы исползуете методы call , apply или bind .

В следующем примере this ссылается на объект window :

Наверняка у вас возник вопрос, как же this может быть равно window , если обращаемся к нему в пределах метода? Если вы знаете ответ на этот вопрос, то отлично, в противном случае читайте дальше и я постараюсь объяснить.

При объявлении функции таким образом, она привязывается к глобальному объекту window . Помните, мы же сказали, что this ссылается на родителя метода?

Изменение значения this на полностью новый объект (не window):

Сторонники чистоты кода наверняка в шоке от такого примера. Мы просто ходим по верхушке айсберга с такими примерами. Как видите сами, значение this уже не равно window .

Цукерберг рекомендует:  Легко ли сегодня найти работу джуниору

Почему так произошло?

Самое простое объяснение — во втором примере мы использовали ключевое слова new , этим самым мы создали новую область видимости и новый объект.

В следующем примере мы создадим фиктивный API для выгрузки данных из библиотеки от сервера. Мы создадим объект API с некоторыми методами.

При использовании слова new , контекст скрипта переходит от контекста window к API .

Как видите значение this полностью задается способом вызова метода. Так как функция вызывается в пределах объекта API , её родителя, то значение this ссылается на объект API.

Помните, значение this изменяется. Оно изменяется в зависимости от способа вызова, но если вы используете метод bind , то значение this остается неизменным.

Более подробно с ключевым словом this в javascript вы можете познакомится в статье Quirksmode и документации от Mozilla.

Как мы уже указали ранее user strict используется для применения более строгой версии языка javascript. Эту директиву следуют применять во всех скриптах.

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

В документации от mozilla существует целая статья на эту тему, я настоятельно рекомендую вам познакомиться с ней.

Разные виды циклов

Вы будете удивлены, но я встречал огромное количество разработчиков, которые не знали как правильно использовать цикл for и абсолютно не слышали о других типов циклов. А уметь применять цикл на массиве или объекте — очень важный навык для разработчика. Не существует четкой инструкции когда и какой применять тип цикла, но следует ориентироваться в этом вопросе. Наверняка вы знакомы с for и while, но как насчет других?

Список циклов в javascript:

Цикл for

Абсолютно обязательный цикл, который необходимо знать и понимать. ОН выполняет свое тело при выполнении условия 2.

Условие 1 — выполняется один раз перед началом серии циклов. В большинстве случаев вы будете инициализировать здесь счетчик цикла. Этот пункт можно пропустить, если вы произвели инициализацию ранее.

Условие 2 — это условие применяется для определения продолжать цикл или нет. Вы, наверняка, будете здесь сравнивать ваш счетчик с размером массива. Если значение сравнения true, то цикл продолжается. Если вы прерываете цикл внутри при помощи break, то это условие можно пропустить.

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

Цикл for. in

Следующий по важности тип цикла. С его помощью вы сможете пройти по всем полям класса.

Цикл for. of

Довольно новый тип цикла, был добавлен в ES6. В силу своей новизны поддерживается не всеми браузерами. Но при использовании определенных технологий, его вполне можно применять уже сегодня.

Этот цикл полная противоположность for. in , он перебирает значения полей и работает только с типами данных, которые поддерживают итерации, к которым Object не относится.

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

Цикл forEach

Очередной тип цикла, который в своей глубине ничем не отличается от ранее перечисленных типов циклов.

Он работает только с массивами, не объектами. Он выгоден тем, что вам не приходится создавать дополнительные переменные, которые в итоге только загрязняют ваш код.\

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

Иногда вам нужно просто пройти по всем элементам массива и, возможно, внести в них некоторые изменения. Его поведение похоже на jQuery.each.

Один недостаток такого типа циклов — его нельзя прервать. Если вам требуется создать цикл по правилам ES5, то воспользуйтесь методом Array.every , познакомиться с которым вы можете в документации mozilla.

Цикл while

Цикл while аналогичен for , но он принимает только один параметр — само условие, по которому цикл определяет продолжать итерации или прекратить их.

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

По опыту скажу, что наиболее быстрый вариант цикла while , это цикл с уменьшением счетчика, вы уменьшаете его на единицу пока не дойдете до нуля (что также оспоримо).

Цикл do. while


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

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

На этом разница не заканчивается. Цикл while обрабатывает условие до выполнения итерации, а do. while после.

Как всегда в документации от mozilla вы найдете подробное описание такого вида циклов.

Базовые методы и задачи

В javascript существуют базовые методы, о которых следует знать. В отношении работы с массивами и строками, javascript предлагает большой набор встроенных методов. Мы коснемся только массивов и строк, объекты оставим на потом.

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

Работа со строками

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

  • String.replace(regexp | что заменить, на что заменить, callback) — позволяет заменить часть строки, допускается применение регулярных выражений.
  • String.concat(сторока 1, строка 2. ) — соединение нескольких строк в одну.
  • String.indexOf(value) — метод позволяет найти порядковый номер символа искомой части строки, -1 — если строка не найдена
  • String.slice(startIndex, endIndex) — возвращает участок строки от startIndex до endIndex
  • String.split(разделитель, лимит) — разбивает строку на массив по символу разделителя, максимальной длиной лимит.
  • String.subsctr(startIndex, length) — возвращает часть строки начиная с startIndex длиной length.
  • String.toLowerCase — переводит все символы строки в нижний регистр
  • String.toUpperCase — перевод все символы строки в верхний регистр
  • String.trim — удаляет пробелы из начала и конца строки

Работа с массивами

Вам очень часто придется встречаться с массивами. Они отлично зарекомендовали себя как способ хранения данных. Эти методы точно стоит знать любому разработчику javascript, не следует искать их в google.

  • Array.pop -возвращает последний элемент и удаляет его из массива.
  • Array.shift — возвращает первый элемент и удаляет его из массива.
  • Array.push(val1, val2) — добавляет одно или несколько значений в конец массива. Возвращает новую длину массива.
  • Array.reverse — зеркально изменяет порядок элементов массива.
  • Array.sort([функцияСравнения]) — позволяет сортировать массив при помощи собственной функции.
  • Array.join(separator) — Возвращает строку, состоящую из элементов массива, разделенный символом separator (по-умолчанию — запятая).
  • Array.indexOf(value) — возвращает индекс элемента в массиве, -1 если элемент не найден.

Это не полный список методов для работы с массивами. С другими вы можете ознакомится в документации от mozilla. Начиная с ES6 были добавлены очень интересные методы.

Разница между call и apply

Эти два метода разработчики путают довольно часто. Зачастую можно обойтись и без них, но они помогают вызывать методы и изменять значение this в ходе исполнения.

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

При помощи метода apply вы можете передать аргументы в виде массива и изменить значение this .

Если вам нужно просто передать массив в качестве аргументов методу, то начиная с ES6 добавлен расширенный (spread) оператор. Он не позволяет изменять значение this . Познакомиться с ним вы сможете, как всегда в официальной документации от mozilla.

Знакомство с библиотеками и фреймворками

На сегодня самыми заметными представителями javascript фреймворками являются AngularJS, React.js и Ember. Конечно существует еще целый ряд других.

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

Node.js

Вне сомнений Node.js занимает твердые позиции. Практически любой фронт-енд инструмент построен на node.js и использует npm (менеджер пакетов node), если с ним незнакомы, то настоятельно советую исправить это упущение. Так как node.js использует javascript, то изучить его не представляет особых трудностей для тех, кто уже знаком с этим языком. У вас больше времени уйдет на настройку пакетов node, чем на написание самого кода.

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

Существует fork node.js под названием IO.js, на сегодняшний день они практически аналоги, да и в конце концов вы просто пишите на Javascript за исключением небольших отличий.

Тестирование

Когда-то мы совсем не тестировали javascript код, так как не считали это необходимым. Но скрипты становятся всё больше и больше благодаря AngularJS и Node.js.

Javascript развивается, а объемы скриптов увеличиваются и тестирование становится жизненно необходимым. Если вы не тестируете свой код, то вы поступаете неправильно. Мой любимый тестировщик — Karma. Существуют и другие, но именно этот зарекомендовал себя лучше всех при работе с AngularJS. А если он подходит для AngularJS, то он подходит и мне.

Инструменты

Быть javascript разработчиком в 2015 году означает не только отличное знание языка, но и большого числа инструментов для работы с ним.

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

Вот набор инструментов, о которых стоит помнить: Gulp, Webpack и BabelJS. Существует намного больше инструментов, но такие инструменты как Gulp и Grunt значительно помогают вам в разработке и управлении javascript приложениями.

Прошли те дни, когда вы просто скачивали javascript файл и добавляли его на свою страницу. Теперь мы используем менеджеры пакетов NPM или Bower.

Мы объединяем и минимизируем скрипты, тестируем их, что помогает организовать структуру проекта.

Инструменты javascript идут рука об руку при разработке изоморфного Javascript (код, используемый как на стороне клиента, так и сервера). ECMAScript 6, он же ES6, он ESNext

Браузерам предстоит еще реализовать большую часть функционала ECMAScript 6. Но уже сегодня вы можете использовать новинки от ES6 при помощи компиляторов javascript. Познакомьтесь с новыми API и методами: строки, массивы и другие метода как WeakMaps, Символы и Классы. Следует всегда быть в курсе грядущих изменений.

Заключение

Я могу еще о многом рассказать. Судя по размерам этой статьи можно представить себе сколько всего надо знать javascript разработчику. Мы только коснулись верхушки айсберга. Не думайте, что эту статью стоит воспринимать в качестве руководства для разработчика. Это всего лишь мое личное видение проблемы.

Что должен знать и уметь хороший программист?

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

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

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

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

  • Стремление быть лучше, знать больше – саморазвитие.

Без постоянного саморазвития не стать хорошим программистом. IT-сфера развивается неустанно: появляются новые языки, фреймворки и другие инструменты. Регулярное обновление своих знаний, сомнения в том, что вы знаете «как правильно» приведут вас к успеху в карьере и сделают настоящим профессионалом.

  • Любовь к программированию

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

Так, в общих чертах мы понимаем, кто такой «хороший программист». Давайте теперь разберемся, что нужно знать программисту.

Какие знания нужны программисту?

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

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

  • Алгоритмы и структуры данных.

В программировании все основывается на алгоритмах и структурах данных. Если вы можете разложить большую задачу по полочкам, то вы легко найдете решение любой проблемы в устройстве этих полочек. На самом деле программист каждый день использует знания алгоритмов, даже не замечая этого. Какие бы задачи ни решал разработчик, он всегда использует структуры данных. И чтобы иметь хотя бы поверхностное представление о том, что такое структуры данных и как они работают нужно также понимать, что такое алгоритмы. Если вы не знаете ни того, ни другого – как вы можете быть уверены в том, что принимаете правильное решение в использовании определенного алгоритма?

Мы рассказали об основных вещах, которые должен знать программист. Надеемся, что вы любите писать код и потратите много времени на то, чтобы стать хорошим программистом. Если вам нужна помощь в обучении, ждем вас в Тренинг-центре ISsoft.

15 языков, которые нужно знать каждому программисту

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

Тед Ньювард, директор и ответственный за взаимодействие с разработчиками в компании Smartsheet

Мой список включает следующие языки:

  1. C++. Именно на этом языке написаны многие из ниже указанных платформ (JVM, CLR, Node и другие). Кроме того, с его помощью вам будет проще понять, как вручную выполнять оптимизацию памяти.
  2. C# или Java. Нет, вам не нужно знать сразу оба. Изучение одного из этих объектно-ориентированных языков очень похоже на изучение другого.
  3. HTML. Я не считаю его одним из языков программирования, но другие придерживаются именно этого мнения, поэтому…
  4. CSS. Крайне необходим для любых видов веб-разработки.
  5. JavaScript. Его более современный и приятный вариант, а не та дрянь, которой мы пользовались 20 лет назад. Заметьте: сам язык не сильно изменился с того времени и вплоть до нынешнего момента. Мы, а именно, программисты, которые его используют, вот кто действительно поменялся.
  6. SQL. Понадобится для работы с реляционными базами данных.
  7. Lisp. Да, Lisp. Или, если быть более точным, “одно из воплощений этого языка”. Подойдет Clojure, Lisp, Scheme, Nu или что-то наподобие того. Вы должны знать, что представляет собой гомоиконный язык, а также понимать, как при использовании правильных инструментов исчезают границы между кодом и данными.
  8. Smalltalk. Ага. В любой основе графического интерфейса, построенного на базе собственных аппаратных средств (Windows, macOS, OS/2, X/Windows, Android, iOS и прочие), используются те же самые базовые принципы, что были сформулированы и воплощены в Smalltalk еще в 60-ые годы.
  9. Ruby или Python. Вам необходимо знать хотя бы один динамический язык программирования. Сюда же подходит Javascript, но только если вы сначала изучите сам язык, безо всяких DOM-моделей, которые могут значительно исказить начальную картинку (React, Angular, VueJS – во всех них содержатся эти самые “DOM-модели”, о которых и ведется речь.) Кстати, как только вы разберетесь с Lisp, вам станет намного проще понимать JavaScript.
  10. AspectJ. Знакомство с аспектно-ориентированным программированием полностью изменит ваш взгляд на объекты, и это прекрасно.
  11. Haskell, ML, Ocaml или Miranda. Потратьте некоторое время на функциональные языки, в которых отсутствуют объекты.
  12. Bash, или zsh, или другой сценарий командной оболочки. Потому что далеко не каждая проблема или задача в программировании должна решаться с помощью полноценного приложения.
  13. F#, Scala, Clojure или любой другой объектный/функциональный гибридный язык программирования. Потому что как только вы разберетесь с азами и усвоите базовый набор, к которому относятся первые 11 языков программирования из этого списка, вы будете готовы к чему-то, что будет совсем непросто изучить.
  14. Swift и/или Kotlin. Оба относятся к разновидностям объектно-ориентированных языков и обладают некоторыми встроенными функциональными особенностями. Изучив их, вы будете готовы к работе над мобильными приложениями.
  15. x86 или ARM-ассемблер. Умение читать на языке ассемблера позволит вам отлаживать код без использования исходного кода.
Цукерберг рекомендует:  Вакансии Агентство 7G

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

И нет, вам не нужно знать их все, чтобы стать достаточно компетентным программистом. Если вы хотите стать просто хорошим разработчиком, вам нужно знать один из основных языков (HTML/CSS/Javascript) + язык для бэкенд-программирования (чаще всего, это C#, Java, Python, Ruby или NodeJS-Javascript) + SQL, если вы используете систему управления реляционными базами данных (RDBMS). Этого будет вполне достаточно.

Однако изучение всех остальных языков – это именно то, что позволит вам перейти от «рядового» к «ведущему» программисту, а после достигнуть максимального уровня знаний и умений.

Нишан Панта, специалист по компьютерной инженерии, разработчик на языке Python

Я придерживаюсь так называемого языкового агностицизма, поэтому если бы кто-то под страхом смертной казни заставил меня составить подобный список, то он бы выглядел следующим образом:

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

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

3. C++. Также для выполнения несложных задач. Подходит для использования объектно-ориентированных парадигм. Кроме того, может использоваться для ряда других задач.

4. Bash. На первый взгляд работа с ним может вызвать недоумение и даже некоторые трудности. Однако как только вы его освоите, любые процессы автоматизации вы будете проводить с его помощью.

5. Scala. Используется в качестве гибрида функционального и императивного языка программирования. С его помощью можно сотворить удивительные вещи.

6. Javascript. Самый мощный язык для веб-разработки. Лично мне нравится «чистый» JS (стоит учитывать, что веб-разработка – это точно не мое).

7. Java. Для выполнения задач в объектно-ориентированном программировании. И для использования Spring framework.

8. Haskell. Каждый программист должен знать парадигмы функционального программирования.

9. PHP. Если вам нужно выполнить что-то, связанное с веб-разработкой. На мой взгляд, этот язык точно не является символом удобства и простоты.

10. R. Для статистического анализа. Лично я даже не пробовал с ним работать, так как мне более чем неплохо с самим Python.

11. HTML. Как я уже говорил, обычно я не занимаюсь веб-разработкой. Однако иногда на работе от меня требуется показать то, что было выполнено в бэкенде. В таком случае знание HTML является необходимостью.

12. Markdown. Один из наиболее часто используемых языков разметки. Как правило, я его использую для каких-то пометок, написания файла README и многого другого.

13. VimL / vimscript. Раньше с помощью VimL я писал скрипты для создания пользовательских плагинов и конфигураций для vim. Это один из тех скриптовых языков, работать с которыми осмеливаются далеко не многие.

14. CSS. Использование CSS время от времени совсем не повредит вашему HTML.

15. Matlab/Octave. С его помощью я раньше выполнял сложные вычисления. Однако теперь я все это делаю на Python благодаря NumPy.

Хотите стать разработчиком? Вот на что следует обратить внимание

Frontend-разработчик Винь Ле рассказал, что нужно делать, чтобы стать программистом, и перечислил несколько ресурсов, которые могут в этом помочь.

Я начал обучаться frontend-разработке еще в школе. На своем пути я постоянно сомневался в себе и сталкивался с препятствиями; тем не менее, это было весело и интересно. Никогда не думал, что процесс обучения может быть таким захватывающим.

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

Не относитесь к кодингу как к хобби

Если вы считаете, что нужно сохранять серьезность во время обучения кодингу, вы на 100% правы.

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

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

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

Определитесь, на каких технологиях следует фокусироваться

Как только вы начнете воспринимать кодинг всерьез, честно ответьте на вопрос: «Каким разработчиком я хочу стать?».

Определите, что интересует вас больше всего. Хотите ли вы разрабатывать пользовательские интерфейсы? Если да, значит вы должны фокусироваться на frontend-технологиях. Или же вы хотите узнать, как работает серверная часть? Тогда концентрируйтесь на backend-технологиях.

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

Начните с простого

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

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

Ресурсы для обучения

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

Начните с онлайн-курсов

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

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

Как выбрать правильный ресурс для обучения

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

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

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

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

Я категоризировал источники, которые мне когда-то помогли:

Видео

  • LearnCode.academy – туториалы
  • Traversy Media – туториалы
  • Academind – туториалы

  • The New Boston – туториалы
  • LearnWebCode – туториалы
  • Rally Coding – туториалы
  • LevalUpTuts – туториалы
  • DevTips – туториалы
  • Coding Tech – туториалы
  • freeCodeCamp – туториалы
  • Coding Tech – выступления на технической конференции

Платные онлайн-курсы

  • Udemy – подписка на курс
  • TreeHouse – месячная подписка

Книги

Знакомство с языками программирования

  • Марейн Хавербек «Выразительный JavaScript»
  • Кайл Симпсон «Вы не знаете JS: Асинхронность и Производительность» (англ. – You Don’t Know JS: Async & Performance)

Технологии и дизайн

  • Джин Ким, Кевин Бер, Джордж Спаффорд «Проект “Феникс”» (англ. The Phoenix Project)
  • Стив Круг «Не заставляйте меня думать»
  • Дональд Норман «Дизайн привычных вещей»

Окружите себя технологиями

Окружив себя технологиями, вы будете «обучаться, отдыхая».

Представьте, что.

Вы просыпаетесь рано утром и начинаете день с продолжения онлайн-туториала. Спустя час глубокой концентрации вы решаете передохнуть. Сериал на Netflix? Нет. Вместо этого вы открываете YouTube и смотрите тридцатиминутное выступление на Coding Tech.

Видео набрало более сотни тысяч просмотров. Спикер говорил о будущем CSS, связанном с Grid Layout. Интересно! «Посмотрю, как это работает», – думаете вы.

Вы гуглите CSS Grid и находите статью на Medium. Там вы узнаете несколько ключевых моментов и уже не можете дождаться, чтобы открыть VSCode и применить знания на практике. Здорово!

Во время обеденного перерыва вы включаете подкаст freeCodeCamp о том, как разработчик-самоучка нашел первую работу. Затем вы открываете туториал на Udemy по React. Внезапно вы сталкиваетесь с проблемой, и секция «Вопросы и ответы» не помогает.

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

Вам на ум приходит идея: «Может, мне стоит начать писать о том, чему я научился? Открываете Google Документы и с волнением печатаете: “Хотите ли вы стать разработчиком?”»

Практикуйтесь, практикуйтесь, практикуйтесь

Теперь, когда вы понимаете, с чего следует начать, самое время приступить к действиям. Чтобы стать хорошим специалистом, нужно время. Чтобы стать отличным специалистом, нужно много работать. Если вы хотите стать опытным разработчиком, вы должны практиковаться годами. Как?

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

Если вы устали, сделайте перерыв, зайдите на форумы и платформы, где разработчики делятся своими знаниями. Окружите себя технологиями.

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

Материалы по теме:

«Я ненавижу программирование – и после этой статьи вы тоже возненавидите»

Сам себе программист: подборка бесплатных ресурсов для новичков

Что нужно сделать, чтобы мыслить, как программист: руководство по решению проблем

Как я бросил работу графическим дизайнером и стал frontend-разработчиком за пять месяцев

Нашли опечатку? Выделите текст и нажмите Ctrl + Enter

Что должен знать и уметь программист на самом старте карьеры?

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

Если совсем коротко, суть вопроса, это только три строки ниже:

С чего начать изучение программирования, чтоб хоть какие-то деньги на этом зарабатывать, но как можно быстрее? Какие минимальные навыки я должен освоить для старта? Желательно минуя освоение монохромного осциллографа и перфокарты!

Живу в Москве. Ах да, знания и навыки в этой сфере практически отсутствуют, максимум, отличаю пылесос от холодильника и розетку от замочной скважины. Ну, помню с детства какие-то операторы «if then else», но даже не помню, что именно за язык изучал. Помню только, что была патологическая любовь к софту! Мечтал изучать программирование, а так как направить меня было некому, предал свою мечту и пошёл по гуманитарному пути, 5 лет в ВУЗе, 4 года работы, можно сказать, что потратил их впустую, т.е. знаний и навыков в программировании не получал!

Недавно опомнился и, сжав свои яйца в кулак (фигурально конечно xD), уволился, а так как хочу от работы удовольствие получать, решил освоить программирование, альтернативы для меня не существует!

Целый день изучал в Google, с чего стоит начать, вижу море информации, просто тону в ней! При этом, все корабли сожжены, ситуация такова, что долго учиться, сидя без работы не смогу.

Не вижу смысла тратить время ещё и на изобретение велосипеда, наверняка есть люди, прошедшие тот же путь. Меня не нужно отговаривать и объяснять, что мне это не нужно, не нужно мне кидать сотни ссылок на разные ресурсы, я их уже все нашёл, а ответы именно на мои вопросы я буду очень долго искать, если они там есть вообще!

Просто нет разбирающихся в этом знакомых, а вопросов много, времени мало, нужны советы! С чего начать? Какие языки достаточно просты и востребованы именно на ранних этапах освоения? Интересует, проще говоря, какие скилы прокачать, чтобы устроиться хоть на самое дно программирования? Где самый быстрый порог входа, чем для этого я обязан владеть?

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

Прошу 2-3 дня не топить в минусах, а комментарии для этих целей оставляю ниже.

Кот, что бы хоть как-то разрядить атмосферу.

[Перевод] Что каждому разработчику следует знать с самого начала

Как разработчик, вы услышите много сумасшедших, невероятных теорий о значении «строк кода». Не верьте ни одной. Строки кода — нелепая метрика. В очень редких случаях она что-то говорит, обычно — ничего. Использование строк кода для принятия решений похоже на оценку качества книги по количеству страниц.

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

  • Код должен быть последовательным
  • Код должен быть информативным
  • Код должен быть хорошо документирован
  • Код должен использовать стабильные современные функции
  • Код не должен быть излишне сложным
  • Код не должен быть неэффективным (не пишите намеренно медленный код)

Если уменьшение количества строк кода противоречит любой из этих метрик, это становится проблемой. На практике оно почти всегда будет мешать и, следовательно, почти всегда является проблемой. Но вот в чём дело, если вы стремитесь соответствовать вышеуказанным критериям, то у вашего кода будет идеальное количество строк — и не нужно их подсчитывать.
Читать дальше →

Цукерберг рекомендует:  Основы сетей передачи данных. Модель OSI и стек протоколов TCPIP. Основы Ethernet

OtherMedia

Информация должна принадлежать людям

Что каждому разработчику следует знать с самого начала

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

  • Код должен быть последовательным
  • Код должен быть информативным
  • Код должен быть хорошо документирован
  • Код должен использовать стабильные современные функции
  • Код не должен быть излишне сложным
  • Код не должен быть неэффективным (не пишите намеренно медленный код)

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

Языки не обязательно «хорошие» или «плохие»

Я вижу, что люди говорят такие вещи всё время:

  • C лучше X из-за производительности
  • Python лучше X из-за лаконичности
  • Haskell лучше X из-за инопланетян

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

Не поймите меня неправильно, между языками определённо есть различия. Просто практически не существует «негодных» языков (хотя есть много устаревших/мёртвых). У каждого языка свой уникальный набор компромиссов. В этом отношении они похожи на набор инструментов. Отвёртка может сделать то, что не может молоток, но кто-нибудь скажет, что отвёртка лучше молотка?

(Очевидно же, что молоток лучше)

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

Вот по порядку основные аспекты, которые, по-моему мнению, должны влиять на выбор языка (без конкретных метрик):

  • Плотность доступных онлайн-ресурсов (плотность StackOverflow)
  • Скорость развития
  • Предрасположенность к ошибкам
  • Качество и охват пакетной экосистемы (да, npm, речь о качестве)
  • Производительность (больше точек)
  • Возможность трудоустройства (извини, COBOL)

Некоторые важные факторы вне вашего влияния. Если вы работаете в области науки о данных, то реально нужно использовать Python, R или Scala (возможно, Java). Если это хобби-проект, используйте то, что вам нравится. У меня есть только одно неоспоримое правило. Я отказываюсь использовать языки, если большинство возможных проблем с этим языком не решены уже на StackOverflow. Дело не в том, что я не могу их решить, просто это не стоит времени.

Читать чужой код тяжело

Читать чужой код трудно. Роберт К. Мартин говорит об этом в «Чистом коде»: «На самом деле соотношение времени на чтение и написание кода, значительно превышает 10 к 1. Мы постоянно читаем старый код, когда стараемся написать новый. …[Поэтому] то, что упрощает его чтение, упрощает и его написание».

Долгое время я полагал, что просто слаб в чтении чужого кода. Со временем я понял, что с этой проблемой ежедневно сталкивается почти каждый программист. Чтение чужого кода напоминает чтение текста на иностранном языке. Даже если вас устраивает выбор языка программирования автора кода, вам всё равно придётся приспосабливаться к различным стилям и вариантам архитектуры. Это также предполагает, что автор написал последовательный и надёжный код, что может быть правдой или нет. Это действительно трудно. Есть несколько вещей, которые мне ОЧЕНЬ помогли.

Ревью чужого кода значительно улучшит ваши навыки. За последние два года я сделал довольно много ревью для пул-реквестов на Github. С каждым новым я чувствую себя немного более уверенно в чтении чужого кода. Пул-реквесты GitHub особенно полезны по следующим причинам:

  • Здесь ревью можно проводить в любое время, достаточно найти проект с открытым исходным кодом, в который вы хотите внести свой вклад.
  • Чтение в ограниченном контексте (отдельная функция или баг).
  • Требуется внимание к деталям, что заставит вас оценить каждую строчку.

Второй приём, который поможет читать чужой код, немного более уникален. Это придуманная мной техника, и она действительно уменьшила количество времени, которое мне требуется, чтобы чувствовать себя комфортно в чужой кодовой базе. Посмотрев на стиль кода, который я хочу прочитать, я сначала открываю vi и начинаю писать код в таком же стиле. Когда вы пишете код в новом стиле, это также улучшает ваши навыки его чтения. Стиль станет менее чужеродным, когда вы сами испытали его. Даже если я просто смотрю случайный проект на Github, я по-быстрому применяю этот приём. Попробуйте сами.

Вы никогда не напишете «идеальный» код

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

Это то, о чём я раньше очень беспокоился. Как только я присоединился к команде, быстро стало понятно, что никто не пишет «идеальный» код. Но код, входящий в систему, почти всегда был «идеальным». Каким образом? Ответ: код-ревью.

Я работаю с командой действительно блестящих инженеров. Это одни из самых компетентных, уверенных в себе программистов, которых можно купить за деньги. У каждого члена нашей команды (включая меня) начнётся настоящая паническая атака, если кто-то когда-либо предложит закоммитить код без ревью. Даже если вы думаете, что вы следующий Билл Гейтс, вы обязательно будете делать ошибки. Я даже не говорю о логических ошибках, я говорю о опечатках, пропущенных символах. То, что ваш мозг просто не замечает. То, для чего нужен ещё одна пара глаз.

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

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

Работа программиста не означает 8 часов программирования в день

Это очень распространённый вопрос, но люди никогда не дают чёткого ответа. Сколько средний разработчик или «отличный» разработчик тратит на написание кода каждый день?

Очень немногие кодируют более четырёх часов в день

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

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

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

  • Исследования, как связанные с работой, так и не связанные
  • Обсуждение вашей работы с коллегами
  • Помощь коллегам, у которых возникли проблемы с собственной работой
  • Планирование будущей работы
  • Проверку кода
  • Встречи

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

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

Почему, несмотря на доступность знаний, мы не становимся умнее

Ребята, мы вкладываем душу в AdMe.ru. Cпасибо за то,
что открываете эту красоту. Спасибо за вдохновение и мурашки.
Присоединяйтесь к нам в Facebook и ВКонтакте

Согласно результатам исследования, проведенного американской компанией Dell EMC, объем мировой информации увеличивается более чем в 2 раза каждые 2 года и уже измеряется зеттабайтами. Только представьте себе: 1 зеттабайт получится, если все жители США будут печатать по 2 твита в минуту 30 тыс. лет без передышки. Казалось бы, оперируя такими объемами знаний, при этом легкодоступных благодаря интернету, люди должны были давно стать гениями. Однако ситуация складывается едва ли не с точностью до наоборот. И в этой статье мы расскажем почему.

AdMe.ru собрал несколько научных фактов, объясняющих, при каких условиях информация работает на повышение интеллекта, а при каких просто захламляет сознание.

Темпы роста объема информации в мире согласно докладу IDC’s Digital Universe
Study, сделанному по заказу EMC в 2011 году.

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

Согласно опросам, лишь 13 % пользователей применяют цифровые технологии и доступ к ресурсам для самообразования, а работодатели по всему миру бьют тревогу из-за синдрома выгорания и низкой эффективности своих суперпрофессиональных с точки зрения цифровой грамотности сотрудников.

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

Почему же эта информационная перегрузка мешает нам стать умнее? Вот основные причины.

1. Поток разнородной информации рассеивает внимание и не дает сосредоточиться на главном

Это доказал эксперимент «Инфомания», который несколько лет назад провел среди офисных сотрудников английский психолог Гленн Уилсон. Часть из них занималась своими прямыми обязанностями, а часть постоянно прерывалась на СМС, звонки и проверку почты. В конце дня анализ IQ показал, что у испытуемых из 2-й группы он был снижен на 10 пунктов.

И действительно, в наши дни проверка электронной почты стала синонимом работы. Согласно докладу «Социальная экономика» Глобального института McKinsey за июль 2012 года, средний работник тратит на управление электронной почтой 28 % своего рабочего дня. Времени на обучение, получение новых знаний и обретение новых навыков попросту не остается.

2. Доступность информации избавляет от необходимости ее запоминать

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

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

3. Обилие информации оказывает негативное влияние не только на память, но и на весь мыслительный процесс в целом

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

Американский писатель, ученый-публицист и бывший редактор Harvard Business Review Николас Карр поддерживает идею о негативном эффекте цифрового гипертекста, считая, что он приводит к фрагментации знаний. При поиске информации в интернете контекст этой информации часто игнорируется. «Мы не видим даже деревьев, мы видим ветки и листья», — пишет Карр.

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

4. Однообразие подачи и потребления информации снижает эффективность ее восприятия

Все мы еще со школьной скамьи помним, что существует 3 канала восприятия информации: аудиальный (слух), визуальный (зрение) и кинестетический (тактильные ощущения). И любая информация лучше всего запоминается, если использовать все 3 канала: услышать, прочитать и записать.

При получении информации из интернета, как правило, задействован только визуальный канал, в меньшей степени — аудиальный, а кинетический и вовсе не используется.

Так, доцент Университета Индианы Карин Харман Джеймс доказала, что студенты лучше запоминают информацию, которую переписали, чем ту, которую напечатали на клавиатуре, что уж говорить об информации, которую просто прочли и тем более просканировали взглядом?

5. Недоверие к данным снижает мотивацию к их удержанию в памяти

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

6. Новые технологии вызывают социальную изоляцию и препятствуют обмену опытом

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

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

7. Бесконечный серфинг в море информации не оставляет времени на другие аспекты развития

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

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

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

А как вы относитесь к такому объему информации вокруг? Вам она больше помогает или мешает?

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих