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

Go-Jek - первая компания Unicorn в Индонезии. Она предоставляет все услуги, которые только можно придумать, от билетов в кино, поездки на такси, поездки на скутерах до перевозки грузов через одно приложение. Они выросли в 900 раз за последние 18 месяцев. Рост феноменальный.

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

Тренер учебного лагеря Сиду также является техническим директором Go-Jek. Он исключительный, блестяще говорит и очень четко понимает, о чем говорит.

Итак, что я узнал за последние два дня? Много.

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

Коммуникация

Много говорилось о том, как работают аргументы и как люди становятся жертвами логических заблуждений, таких как Argumentum ad populum, и как Reductio ad absurdum часто можно использовать для поиска неверных аргументов.

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

Пара других указателей

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

Кодирование

За последние 2 дня много было сказано о том, что университетское образование просто упускает из виду, и многие из этих вещей трудно найти, если вы учитесь программировать самостоятельно.

Ранее в этом году я познакомился с книгой Clean Code: A Handbook of Agile Software Craftsmanship от Mihaly Zagon в ходе обратной связи после интервью. Во время учебного лагеря нас учат, как следить за каждым словом и многим другим.

Этикетки, не подлежащие обсуждению

Нам дан список не подлежащих обсуждению этикетов, которые нельзя игнорировать. Если проигнорировать, любой код (весь каталог), который был написан до этого момента, будет удален. Резюмируя их:

  • Последовательный отступ
  • Пробелов, без табуляции. Да, мы можем бороться за это. Причина в том, что разные IDE по-разному определяют вкладки. Достигните консенсуса в своей группе.
  • Новые строки в конце файла. Git может раздражать.
  • Соблюдайте соглашения об именах
  • Соблюдайте условные обозначения структур проекта
  • Нет неиспользованного кода, включающего комментарии
  • Обновления кода, ошибки в комментариях
  • Код - единственный источник истины. Зачем создавать двусмысленность?
  • Комментарии означают, что ваш код недостаточно выразителен
  • Комментарии - это оправдание плохого кода
  • Среда выполнения и среда IDE должны быть согласованы
  • Используйте .gitignore
  • Убедитесь, что всегда существует README.md, который помогает запускать и запускать новых разработчиков.

Ветвление - это плохо

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

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

Экспресс-намерение

Я не могу этого достаточно подчеркнуть. Ваш код и ваш журнал git должны выражать намерение. Если это не так, то вы не гордитесь своей работой. Если вы не гордитесь своей работой, тогда зачем вообще работать? Код должен читаться как стихи, стихотворения, которые каждый понимает автоматически и которые красивы. Этого можно добиться разными способами, некоторые из них - выразительные имена функций, функции вместо длинных условий if и без магических чисел. Вы должны сделать свой код максимально выразительным.

ЯГНИ

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

Скажите, не спрашивайте

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

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

То же самое и с программированием. Никаких светских разговоров.

Наследование - это вообще плохая идея

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

Особенно множественное наследование. Представьте, что вы каталогизируете животных и создаете новое животное, которое унаследовало что-то от кошек и что-то от собак. Имеет ли это смысл? Тем не менее, мы делаем это, когда наследуем от нескольких источников.

Никакого программирования случайно

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

Один класс так же плох, как никакой класс

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

Программирование - это абстракция

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

Резюмируйте следующим образом:

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

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

Тесты - это спецификации

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

Всегда следуйте TDD. С завтрашнего дня невыполнение TDD приведет к удалению нашего кода.

Как в TDD?

  • Напишите тестовый код для отказа [КРАСНЫЙ]
  • Напишите код, который проходит тестовый код, но не более [ЗЕЛЕНЫЙ]
  • Зафиксировать и нажать
  • Рефакторинг, но никаких спецификаций рефакторинга. Выполнить тесты.
  • Совершить

Это все, что я мог вспомнить, наверное, завтра заметки получше.

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

Все счастливы, когда проходят тесты

Первоначально размещено здесь.