Тестирование программы - это вторая по важности часть процесса разработки после написания кода. Тесты можно разделить на ручные и автоматические, и вторые представляют для меня наибольший интерес, потому что ручками проверять долго, муторно и неинтересно
Пару недель назад вернулся к активному изучению материалов по автоматическому тестированию. Хотя у меня уже и был опыт написания unit тестов для отдельных частей приложения - этого недостаточно, чтобы покрыть код тестами в достаточной мере, для его безболезненных изменений
Для начала изучения тестирования идеально подходит книга Принципы юнит-тестирования. Настолько идеально, что множество остальных материалов, которые я нашел, в открытую или не очень ссылаются на эту книгу
Далее можно углубляться в тесты под свою технологию. В моем случае - это PHP, и для него наиболее популярный фреймворк для тестов - это PHPUnit. С его помощью можно создавать как простые unit тесты, так и сложные интеграционные
Еще меня интересует тестирование интерфейса в браузере. Для этого есть множество конкурирующих js фреймворков. Меня привлекли jest и cypress и пока не сделал выбор в пользу какого-то одного, потому что при начальном использовании они по сути одинаковы.
После того как написаны первые тесты, важно организовать их автоматический запуск перед внесением изменений в репозиторий с кодом, обычно это делается в CI процессах. Если этого не сделать, то есть вероятность, что тесты случайно или намерено не будут запускаться . А если тест не запускается, то зачем его было вообще писать? На работе автоматизация настроена с помощью GitLab CI, а для собственных я предпочитаю GitHub CI, но в обоих вариантах невозможно внести изменения в код, пока все тесты не пройдены успешно
Пару недель назад вернулся к активному изучению материалов по автоматическому тестированию. Хотя у меня уже и был опыт написания unit тестов для отдельных частей приложения - этого недостаточно, чтобы покрыть код тестами в достаточной мере, для его безболезненных изменений
Для начала изучения тестирования идеально подходит книга Принципы юнит-тестирования. Настолько идеально, что множество остальных материалов, которые я нашел, в открытую или не очень ссылаются на эту книгу
Далее можно углубляться в тесты под свою технологию. В моем случае - это PHP, и для него наиболее популярный фреймворк для тестов - это PHPUnit. С его помощью можно создавать как простые unit тесты, так и сложные интеграционные
Еще меня интересует тестирование интерфейса в браузере. Для этого есть множество конкурирующих js фреймворков. Меня привлекли jest и cypress и пока не сделал выбор в пользу какого-то одного, потому что при начальном использовании они по сути одинаковы.
После того как написаны первые тесты, важно организовать их автоматический запуск перед внесением изменений в репозиторий с кодом, обычно это делается в CI процессах. Если этого не сделать, то есть вероятность, что тесты случайно или намерено не будут запускаться . А если тест не запускается, то зачем его было вообще писать? На работе автоматизация настроена с помощью GitLab CI, а для собственных я предпочитаю GitHub CI, но в обоих вариантах невозможно внести изменения в код, пока все тесты не пройдены успешно
👍3
Devник
На картинке в прошлом посте не просто так можно увидеть лого хабра, именно здесь я планирую выпускать статьи. После прочтения всех правил, которые только нашел, оказалось, что создавать контент не так уж элитарно и доступно каждому Первая отправленная статья…
Сегодня начал вторую попытку публикации поста на хабре. Первая попытка была неудачной больше трех лет назад и я даже не помню, о чем хотел рассказать.
В этот раз подготовил статью о функциях в PHP, так как оказалось, что далеко не все моменты общеизвестны. Описал обычные, анонимные, стрелочные функции и способы работы с ними.
Публикация сейчас лежит в приватной песочнице и ждет обновления статуса от админов хабра. При пришлой попытке, я даже скидывал схему модерации статьи:
- Вообще не будет опубликована
- Будет опубликована анонимно в песочнице
- Будет опубликована в основном хабре, а я получу возможность публиковать дальнейшие статьи без проверки админами.
Мне меня конечно интересует третий вариант. Но если получится хуже, то перенесу статью в свой блог. А сейчас сижу и жду
В этот раз подготовил статью о функциях в PHP, так как оказалось, что далеко не все моменты общеизвестны. Описал обычные, анонимные, стрелочные функции и способы работы с ними.
Публикация сейчас лежит в приватной песочнице и ждет обновления статуса от админов хабра. При пришлой попытке, я даже скидывал схему модерации статьи:
- Вообще не будет опубликована
- Будет опубликована анонимно в песочнице
- Будет опубликована в основном хабре, а я получу возможность публиковать дальнейшие статьи без проверки админами.
Мне меня конечно интересует третий вариант. Но если получится хуже, то перенесу статью в свой блог. А сейчас сижу и жду
👍4
Devник
Кажется началось)
Реально началось)
https://habr.com/ru/articles/831388/
Теперь буду работать над тем, чтобы эта статья не осталась единственной моей на хабре. А формат заметок оставлю для блога
https://habr.com/ru/articles/831388/
Теперь буду работать над тем, чтобы эта статья не осталась единственной моей на хабре. А формат заметок оставлю для блога
Хабр
PHP функции и способы их применения
В PHP становится все больше способов работы с функциями. Хотя ООП и является основной парадигмой для этого языка, процедурный и функциональный подходы тоже имеет право на жизнь в PHP. Давайте...
👍5
Многопоточные вычисления — один из вариантов решения тяжелых задач. Если нет возможности оптимизировать алгоритм, то можно разбить вычисления на несколько потоков и ускориться. Конечно нужен и компьютер, в котором больше, чем одно ядро, но сейчас даже дешевые сервера многоядерные
И у меня на примете есть несколько повторяющихся и долгих задач, которые можно было бы разбить на отдельные процессы и ускорить выполнение в 2-4 раза. Но я же работаю с PHP...
У PHP вроде бы и есть встроенные возможности для работы с отдельными процессами, а вроде они и устарели, а потом опять появились, а потом deprecated статус. А кто-то сделал свою библиотеку для этого, но она работает только с определенными версиями PHP
Так что сейчас закопался в этот материал. Планирую подготовить статью, если кнч наберется интересный материал, который заминусуют на хабре не с первой минуты. Потому что всегда же "можно уйти на Go, Node, Python - зачем тебе пыха?"
И у меня на примете есть несколько повторяющихся и долгих задач, которые можно было бы разбить на отдельные процессы и ускорить выполнение в 2-4 раза. Но я же работаю с PHP...
У PHP вроде бы и есть встроенные возможности для работы с отдельными процессами, а вроде они и устарели, а потом опять появились, а потом deprecated статус. А кто-то сделал свою библиотеку для этого, но она работает только с определенными версиями PHP
Так что сейчас закопался в этот материал. Планирую подготовить статью, если кнч наберется интересный материал, который заминусуют на хабре не с первой минуты. Потому что всегда же "можно уйти на Go, Node, Python - зачем тебе пыха?"
👍3
Слово дня — "Классянка", это перевод английского термина "Classitis". Означает ситуацию, когда в ООП коде используется слишком много мелких классов, которые стоит объединить в более крупные
Она случается либо, когда классы просто используются там, где лучше использовать обычные функции, либо, когда декомпозиция логики заходит слишком далеко и каждая строчка кода выносится в отдельный класс.
Антоним к классянке я не нашел, но это создание огромных классов без всякой декомпозиции, так что для себя буду называть это "Моноклассянкой"
В html верстке классянка тоже встречается при добавлении элементам страницы слишком большого количества классов. Хотя адептов Tailwind хлебом не корми, дай только классов побольше добавить
P.S. На фото видно, как классянку видит ChatGPT 4o
Она случается либо, когда классы просто используются там, где лучше использовать обычные функции, либо, когда декомпозиция логики заходит слишком далеко и каждая строчка кода выносится в отдельный класс.
Антоним к классянке я не нашел, но это создание огромных классов без всякой декомпозиции, так что для себя буду называть это "Моноклассянкой"
В html верстке классянка тоже встречается при добавлении элементам страницы слишком большого количества классов. Хотя адептов Tailwind хлебом не корми, дай только классов побольше добавить
P.S. На фото видно, как классянку видит ChatGPT 4o
👍3
Сразу после новогодних праздников начал работать над инструментами WordPress разработки. WP не подходит для серьезной разработки в чистом виде в отличие от полноценных фреймворков, а только дает набор функций и отпускает в свободное плавание. Идеально для небольших, быстрых проектов, но кошмар для долгой поддержки
Началось все с шаблона для разворачивания WordPress из Composer и Docker. Удивительно, но осенью у меня вполне успешно начало получаться писать Docker образы под проекты, хотя год назад я ненавидел контейнеры всей душой
В итоге получился стартовый проект Bedrock for OnePix, благодаря которому, развернуть WP проект можно на любой машине, где установлен Docker, да еще и парой кнопок. После нескольких лет мучений с локальными серверами это ощущается настоящим чудом
Далее началась переделка стартового шаблона для плагинов и тем под WordPress. В ход пошли инструменты статического анализа кода, плюс принципы SOLID и IoC, крч начал собираться небольшой фреймворк поверх WP. Сейчас в процессе написания документации под альфа версию этого дела
Для полноценной реализации этого фреймворка требуется осознать очень много информации. В основном сейчас копаю ядро WordPress и документацию Laravel, чтобы грамотно в первый перенести наработки второго. Но оно того стоит
Началось все с шаблона для разворачивания WordPress из Composer и Docker. Удивительно, но осенью у меня вполне успешно начало получаться писать Docker образы под проекты, хотя год назад я ненавидел контейнеры всей душой
В итоге получился стартовый проект Bedrock for OnePix, благодаря которому, развернуть WP проект можно на любой машине, где установлен Docker, да еще и парой кнопок. После нескольких лет мучений с локальными серверами это ощущается настоящим чудом
Далее началась переделка стартового шаблона для плагинов и тем под WordPress. В ход пошли инструменты статического анализа кода, плюс принципы SOLID и IoC, крч начал собираться небольшой фреймворк поверх WP. Сейчас в процессе написания документации под альфа версию этого дела
Для полноценной реализации этого фреймворка требуется осознать очень много информации. В основном сейчас копаю ядро WordPress и документацию Laravel, чтобы грамотно в первый перенести наработки второго. Но оно того стоит
👍4
Начал добираться до книг по программированию, которые откладывал на потом с прошлого года. Первая в списке — Программист-фанатик. Хотя, если честно, название из первой редакции нравится больше: «Моя работа досталась индусам (а всё, что получил я, — эта жалкая книжонка)». Не так лаконично, зато сразу понятно, в каком духе написано
Во второй редакции — 53 совета, как стать успешным программным инженером. Какие-то очевидны, какие-то не очень, но я решил не читать всё подряд, а идти по оглавлению и выхватывать те главы, что действительно цепляют
Пока больше всего зацепил совет «выходи за границы своего стека». Вроде банальщина, но сработала: поймал себя на том, что давно не трогал ничего, кроме PHP. И захотелось чего-то нового
Новым стало хорошо забытое старое. Решил вспомнить Haskell. В универе немного писал на нём, и тогда казалось, что это чисто для математики. А сейчас хочется взять что-то полезное для бизнес разработки. Меньше состояния, больше чистоты, меньше if'ов, больше композиции. Попробовать притащить что-то из этого в мой PHP-мир
Не пропадающее желание изучать и экспериментировать радует
Во второй редакции — 53 совета, как стать успешным программным инженером. Какие-то очевидны, какие-то не очень, но я решил не читать всё подряд, а идти по оглавлению и выхватывать те главы, что действительно цепляют
Пока больше всего зацепил совет «выходи за границы своего стека». Вроде банальщина, но сработала: поймал себя на том, что давно не трогал ничего, кроме PHP. И захотелось чего-то нового
Новым стало хорошо забытое старое. Решил вспомнить Haskell. В универе немного писал на нём, и тогда казалось, что это чисто для математики. А сейчас хочется взять что-то полезное для бизнес разработки. Меньше состояния, больше чистоты, меньше if'ов, больше композиции. Попробовать притащить что-то из этого в мой PHP-мир
Не пропадающее желание изучать и экспериментировать радует
👍4
Сейчас читаю Джейсона Шраера. Cначала проглотил «Кровь, пот и пиксели», теперь взялся за «Нажми Reset». Обе книги - интересная прогулка по закулисью игровой индустрии. С выводами, что разработка игр - это смесь искусства, хаоса и постоянной борьбы за выживание.
Особенно цепляет, как в геймдеве наука и искусство переплетены до неразделимости. И как разработчики пытаются не увязнуть в поиске той самой игры - уложиться в дедлайн, не потерять творческое начало и всё это на фоне давления издателей, увольнений и закрывающихся студий.
Но вот что интересно: вдохновиться - да. А пойти в геймдев - пожалуй, нет. Эти истории поднимают дух, но всё же это истории выживших. Иногда - еле выживших. А сколько историй так и не стало книгой, потому что всё закончилось тишиной.
В вебе тоже искусство можно найти. До сих пор тащусь от сайтов из подборок с www.awwwards.com или от www.windows93.net
Особенно цепляет, как в геймдеве наука и искусство переплетены до неразделимости. И как разработчики пытаются не увязнуть в поиске той самой игры - уложиться в дедлайн, не потерять творческое начало и всё это на фоне давления издателей, увольнений и закрывающихся студий.
Но вот что интересно: вдохновиться - да. А пойти в геймдев - пожалуй, нет. Эти истории поднимают дух, но всё же это истории выживших. Иногда - еле выживших. А сколько историй так и не стало книгой, потому что всё закончилось тишиной.
В вебе тоже искусство можно найти. До сих пор тащусь от сайтов из подборок с www.awwwards.com или от www.windows93.net
👍6🔥1
Уже лет десять на каждом углу говорят про машинное обучение, Data Science и искусственный интеллект, а я только сейчас наконец-то решил покопаться в этом изнутри. Начал с ML - как самой узконаправленной дисциплины в во всем DS.
Пока добрался только до научпопа и параллельно вспоминаю алгебру с матаном. Материалов, которые можно посмотреть для общего понимания огромное множество. Точно могу порекомендовать:
- Книга MACHINE LEARNING FOR ABSOLUTE BEGINNERS - название говорит само за себя
- Видео Нейросети. Самое простое и понятное объяснение с нуля с примерами. - первый раз наткнулся на этот канал. Здесь много про python, включая его применение в ML
- Серия видео от 3Blue1Brown DeepLearning - от них в универе часто смотрел видосы по матану, вернулся снова. По ссылке дубляж
Продолжаю выходить за границы своего стека, посмотрим, куда дойду
Пока добрался только до научпопа и параллельно вспоминаю алгебру с матаном. Материалов, которые можно посмотреть для общего понимания огромное множество. Точно могу порекомендовать:
- Книга MACHINE LEARNING FOR ABSOLUTE BEGINNERS - название говорит само за себя
- Видео Нейросети. Самое простое и понятное объяснение с нуля с примерами. - первый раз наткнулся на этот канал. Здесь много про python, включая его применение в ML
- Серия видео от 3Blue1Brown DeepLearning - от них в универе часто смотрел видосы по матану, вернулся снова. По ссылке дубляж
Продолжаю выходить за границы своего стека, посмотрим, куда дойду
👍3😁1
Присмотрелся к курсам по ML/DS на рынке. Остановился на Практикуме от Яндекса. Пока только третья неделя и изучение SQL, расскажу по ЯП попозже, а пока изучаю дополнительные материалы.
Одним из таких материалов-открытий для меня стала книга "Джедайские техники" и это не про махание световым мечом, а про самоорганизацию. Автор изучил множество материалов, связанных с личной и командной эффективностью, и собрал их в серию книг.
Концепция воспитания "внутренней обезьяны" мне прямо запала в душу, поэтому после первой главы взял себе физическое издание в твердом переплете. И спусковые крючки, и вытаскивание гвоздей, и правильная формулировка задач, ну и конечно "Кто не роет, у того нет норки".
Не то чтобы это все было для меня открытием, но книга помогла собрать воедино эти идеи, плюс доказала их эффективность дополнительным списком литературы (94 материала), с которым я уже успел частично ознакомиться.
По итогу могу рекомендовать к прочтению, если есть желание поднять свою эффективность. Поможет ли книга действительно стать эффективнее? Далеко не факт, но кто не роет, у того нет норки :)
Одним из таких материалов-открытий для меня стала книга "Джедайские техники" и это не про махание световым мечом, а про самоорганизацию. Автор изучил множество материалов, связанных с личной и командной эффективностью, и собрал их в серию книг.
Концепция воспитания "внутренней обезьяны" мне прямо запала в душу, поэтому после первой главы взял себе физическое издание в твердом переплете. И спусковые крючки, и вытаскивание гвоздей, и правильная формулировка задач, ну и конечно "Кто не роет, у того нет норки".
Не то чтобы это все было для меня открытием, но книга помогла собрать воедино эти идеи, плюс доказала их эффективность дополнительным списком литературы (94 материала), с которым я уже успел частично ознакомиться.
По итогу могу рекомендовать к прочтению, если есть желание поднять свою эффективность. Поможет ли книга действительно стать эффективнее? Далеко не факт, но кто не роет, у того нет норки :)
👍4