Это будет моя самая короткая статья.

Когда-то я был молод и зелен и решал проблемы именно так, как их решают джуны. Алгоритм такой:

  1. Узнать о проблеме

  2. Локализовать проблему

  3. Загуглить проблему и решение

  4. Пофиксить проблему

Например: эксель-файл содержит ошибку, и поэтому не может быть обработан. Я открывал файл, редактировал проблемную строчку, закрывал файл. Проблема решена.

Или другой пример: не отработал скрипт из-за ошибки в коде. Чиню ошибку, скрипт начинает работать.

Прошло 10 лет... Алгоритм претерпел изменения:

  1. Узнать о проблеме

  2. Локализовать проблему

  3. Загуглить проблему и посмотреть много решений

  4. Понять, почему это произошло

  5. Понять, что нужно сделать, чтобы это не произошло снова

  6. Понять, что ещё затронуто проблемой

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

  8. Пофиксить проблему

  9. В зависимости от количества необходимых усилий, пофиксить всё сопутствующее

  10. Рассказать пацанам в слаке про свой фейл (== поделиться опытом)

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

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

К чему всё это

Пожалуйста, не решайте конкретную проблему. Это никогда не работает. Оно сломается снова.

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

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

Пейлоад тот же, что и в прошлой статье:

{
	"type": "persona",
	"attrs": {
		"inserted": false
	},
	"content": [
		{
			"type": "persona_image",
			"attrs": {
				"src": "javascript:\"></a>
                <div/onmouseover=alert('xss')>
                    <div/style=\"position:fixed;bottom:0;width:100%;height:100vh;background-image:url('https://c.tenor.com/GjsMO1r7HGMAAAAC/hyenas-lion-king.gif');background-position:center;background-repeat:no-repeat;background-size:cover;\">
                         &nbsp;
                    </div>
                </div>
                <!--<a",
				"class": "image image-persona"
			}
		},
		{
			"type": "persona_heading",
			"content": [
				{
					"type": "text",
					"text": "<-- Нажимайте сюда"
				}
			]
		},
		{
			"type": "paragraph",
			"attrs": {
				"align": null,
				"simple": false,
				"persona": false
			}
		}
	]
}

UPD. Разрабы Хабра после выхода статьи быстро пофиксили баг. По их словам, вопрос с валидацией в работе. Я не предупреждал о статье, но меня не забанили и отнеслись ко всему позитивно - за это респект.


Заходите в мою телегу: Блог погромиста. Это просто ссылка, не XSS :)

Комментарии (22)


  1. KlimenkoIv
    24.03.2022 09:30
    +1

    Полностью поддерживаю.

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


  1. Aleksandr-JS-Developer
    24.03.2022 11:56
    -8

    Алгоритм претерпел изменения:

    Это ещё не синьор.
    У синьора вот так:

    1. Узнать о проблеме

    2. Локализовать проблему

    3. Загуглить проблему и решение

    4. Пофиксить проблему


    1. MaxAkaAltmer
      24.03.2022 15:31

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


      1. 411
        24.03.2022 17:51
        +6

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


        1. Aleksandr-JS-Developer
          24.03.2022 22:29

          Сеньор, который не пользуется опытом других

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


      1. Aleksandr-JS-Developer
        24.03.2022 22:25
        +4

        если решения в гугле нет

        Если решения в гугле нет - это триггер, что с вероятностью 99.9999% ты прямо сейчас творишь какую-то дичь и нужно внимательно пересмотреть подход.

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


        1. lair
          26.03.2022 05:35
          +1

          Но в ситуациях, когда нужно разбирательство, синьор не тратит своё время на это, а делегирует мидлу или даже джуну.

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


      1. Shadasviar
        25.03.2022 06:50
        +7

        У настоящего сеньора проблемы решаются сами при самом его присутствии.


    1. vitiok78
      26.03.2022 11:53

      1. Загуглить проблему и решение (при необходимости)


    1. kesn Автор
      26.03.2022 12:09
      +4

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

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


  1. ws233
    24.03.2022 12:51
    +1

    Надо всегда исправлять не последствия, а причину баги ^.^


    1. rumactep
      25.03.2022 10:40
      +2

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


  1. Gedeonych
    24.03.2022 13:33
    +5

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


    1. iggr63
      25.03.2022 01:46

      Совершенно согласен. Лечение симптомов вместо вместо выявления причин их появления классический пример нарушения причинно-следственных связей.


  1. iboltaev
    24.03.2022 14:50
    +8

    Чем хороший программист отличается от плохого

    а как же классика: у хорошего программиста меч зеленый, а у плохого - красный?


  1. ldss
    24.03.2022 20:23
    +16

    two weeks of coding might save you two hours of thinking


  1. UnclShura
    24.03.2022 20:36

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


  1. Crystal_HMR
    25.03.2022 02:02
    +5

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


  1. zhainar
    25.03.2022 06:41

    Анализ начинается еще на уровне постановки задачи


  1. arelive
    25.03.2022 19:42
    +5

    Только вот не всегда такой подход позволен. Рынок айти перегрет, из за высокой конкуренции всё больше решает время, а не качество работы. В каждой компании, где я работал, кроме последней, код на 110% состоял из легаси, к которому нужно было прикручивать новый функционал. Для этого функционала по всем правилам хорошего кода нужно было рефакторить монолиты нулевых, потому что иначе кроме как на костыли новый код не подвесить. То же с багами, корни которых шли откуда то, где только бог помнит как работает приложение. Я часто пытался вместо костылей досконально разобраться в причинах, плюс, видно было, что те, кто работал до меня, тоже пытались. Почему же мы нам всем пришлось бросить и пофиксить баги без разбора причин? График. Не уложишься в него - уложатся конкуренты. Программирование перестало быть искусством, оно стало бизнесом. В моих петах и на текущей работе в стартапе код гораздо чище и понятнее, чем в компаниях гигантах. И это печально :с


  1. Maccimo
    26.03.2022 16:13
    +1

    У хорошего программиста третьим пунктом будет «написать unit-тест».


  1. zifreesoft
    26.03.2022 22:05
    +1

    Словоблудие. Статья об очевидных вещах.