Это, конечно, слабость, но сильная любовь к программированию, компьютерным системам и алгоритмам обжигает меня и порой заставляет саморазрушаться и делать глупости.
Никогда нельзя забывать, что лень — двигатель прогресса и умение лениться и не писать ненужный код — важный и ценный навык современного разработчика.
Вопрос «как достичь высокого уровня профессионального мастерства и что для этого нужно» мучил меня последние 20 лет. Помимо чтения и перечитывания правильных книг, изучения исходников правильных программ и периодического погружения в информатику, мне приходилось постоянно общаться с разными коллегами из разных подобластей разработки.
С «чисто» «мозговыми» разработчиками довольно быстро наскучило, потому что.
часто оказывалось, что движение к цели (проекту, техническому заданию) — это какой-то побочный эффект, а главное, что это процесс и вам нужно как чинуши, религиозные сектанты и эксперты по ошибкам русского языка изучать тонкости работы интерпретатора-компилятора и чем больше вы будете знать каждую фигню, рожденную хаосом, тем лучше.
Меня не покидало ощущение, что нейроны мозга вросли друг в друга, перепутались и засохли, создавая пульсирующий звон презрения к красоте и простоте.
С «чисто» «мозговыми» менеджерами тоже было не очень весело.
Да-да, конечно, в данном случае главной целью было завершить проект в срок, но эмоции и психозы, возникающие в момент технических и аналитических трудностей и преодоления рисков с желанием найти виноватых в ошибках и подсознательный шантаж, с целью взять на себя ответственность за поставленные сверху сроки и откровенное игнорирование технического совершенства - привели к мысли, что настоящие менеджеры все-таки должны быть столь же профессионально развиты, как и разработчики, которые зачастую решают сложные головоломные задачи, отлаживая код по ночам и на выходных.
Но от менеджера, конечно, требуется гораздо больше человеческих качеств: смелости, ясности, уверенности и умения мотивировать.
Но, к счастью, такие «чистые» случаи довольно редки, и в условиях потока проектов и сроков через достаточно короткое время в командах остаются настоящие бойцы – и именно в общении с ними и в активной проектной работе.
что правильные ответы на вопросы постепенно стали формировать вопросы в начале поста.
И как полезно потратить некоторое время на поддержку кода.
особенно своего собственного! Когда широко открытыми глазами видишь, как горе из головы («зачем делать просто, если можно сложноЭ») и попытки разработчика (возможно, тебя) услышать только себя и самоутвердиться - рождают кровоточащих монстров в поддержке и развитии, которых уже нельзя расстреливать и кормить - опасно для жизни.
Итак, вот ответы на вопросы, которые у меня сформировались и я готов ими поделиться.
Вопрос: какие языки программирования мне следует выучить в первую очередь? Вопрос устарел! :) Если у вас нет цели получить удовольствие от процесса и получить деньги за строки кода и троллить реальность, запутывая других в глубинах собственных знаний ошибок компилятора/интерпретатора, т.е.
если вы не Чудак (замените лишнее письмо) - тогда вам больше не нужно садиться и изучать языки.
Сейчас существует плеяда языков, которые можно выучить всего за несколько дней и которые позволяют быстро и качественно решать бизнес-задачи.
Для Интернета несомненным лидером является PHP; для машинного обучения/глубокого обучения здесь отлично себя показывает лаконичный Python; а для backend-сервисов можно начать с быстрого решения проблемы с использованием того же PHP/Python/Ruby/Go/Node.js, а закончить (по опыту, «доводить» приходится в 0,1% случаев ) в более громоздких и низкоуровневых языках: Java/C#/C++.
Вопрос: какие алгоритмы стоит изучить в первую очередь? Хотите верьте, хотите нет, но алгоритмы компьютерных наук часто противоречат интуиции и разрушают разум, и сколько бы вы их ни изучали и не запоминали, вы забудете их после хорошего отпуска, если только вы не гений на пути к Нобелевской премии.
Максимум, что вам нужно знать для начала, это то, что, помимо функции сортировки, встроенные в язык , есть еще, как ее зовут. пузырьковая сортировка - но об этом нужно сразу забыть, потому что.
есть более эффективные методы сортировки, описанные в книгах, которые можно прочитать на пенсии (честно говоря, читал не раз Седжвик ), но гораздо полезнее знать, как называется функция сортировки библиотек в языке, и использовать ее.
Чтобы хорошо управлять автомобилем и радоваться жизни, не обязательно знать принципы работы двигателя внутреннего сгорания! Вам не нужно знать тонкости работы виртуальных деструкторов, чтобы эффективно использовать СУБД с HTML-лицом и быстро решать бизнес-задачи в короткие сроки.
Мы должны одинаково подходить к поиску и деревьям, теории графов и обработке строк.
Скорее всего, все это уже реализовано в языке программирования оптимальным образом.
И если вы до сих пор не знаете, что регулярные выражения — это верхушка айсберга теории конечных автоматов, забудьте об этом, расслабьтесь и научитесь лучше использовать регулярные выражения.
И если нагрузочное тестирование WDRUXXXX после 10 лет успешной работы веб-проекта выявит неэффективность алгоритма - то прочтите его и заодно поймете основы теории сложности вычислений .
Гораздо интереснее, если говорить из Науки, покопаться в математической статистике, терверах, линейках, чтобы понять, о чем они сейчас говорят в контексте глубокое обучение .
Поверьте, это гораздо интереснее, чем бесконечно ковыряться внутри машины Тьюринга.
Вопрос: стоит ли углубляться в реляционную алгебру и СУБД? Обязательно и как можно скорее.
Но прежде всего стоит ощутить на себе простую и красивую философию реляционной алгебры и сразу просмотреть, чего не делать .
Скорее всего, вы будете использовать СУБД для хранения и агрегирования данных, и тогда вам будет гораздо проще разбираться в различных современных, а иногда и очень полезных подСУБД , которые намного проще и примитивнее классики как по возможностям, так и по архитектуре.
Вопрос: стоит ли копаться в unix и операционной системе? Если вы просто напишите 50 строк javascript, то Ктулху, скорее всего, этого не заметит. Но если вы путаете фундаментальные сетевые протоколы, как иногда путают IP с TCP, последуют неприятности.
Я думаю, пришло время учиться архитектура операционной системы , bash, системные вызовы и сетевые протоколы и стандарты Стоит потратить максимум доступного времени и вы не пожалеете.
Язык «С» также следует освоить, чтобы иметь представление о том, что происходит под капотом.
Дело в том, что современные, особенно веб-проекты, требуют очень тесного взаимодействия и понимания тонкостей операционной системы, умения отслеживать и понимать процессы, потоки, системные вызовы, детально знать TCP/http – это позволит вашему проекту быстро взлететь и работать правильно и долго.
Поэтому вкладывайте как можно больше времени в изучение unix — поверьте, это окупится сторицей и бородатые ребята, которые с широко закрытыми глазами настраивают nginx/apache/mysql, перестанут над вами смеяться.
Не нужно быть геологом, чтобы покорять вершины! Не нужно запоминать сортировку Shell для сортировки данных формы :) Вопрос: Зачем писать модульные и интеграционные тесты для кода?
Вас обманули.
Раньше, в эпоху народных приемов развития, граничащих с садомазохизмом, когда языки полный дыр а программы создавались годами - надо было охватить все, что можно и нельзя охватить автоматизированными тестами с примесью шизофрении.
В наше время это очень дорого, программы, а тем более веб-проекты, создаются на порядки быстрее, требования постоянно меняются – и единственный способ, чтобы проект работал корректно и долго – это «написать его правильно сразу и без ошибки» (С):-) Я не шучу.
Вот как они обычно это делают:
- Тщательно подумайте, прежде чем писать код;
- Пишут аккуратно, понятно, по модульному принципу;
- Пишут на одном из лаконичных динамических языков с встроенными в синтаксис коллекциями и выразительными конструкциями (желательно функциональными), так что 99,99% потока выполнения программы можно визуально отследить (php, python, Ruby, Scala).
Однако иногда в больших и сложных проектах функциональные тесты очень помогают. В Битрикс24 , автоматизированные изнутри исключительно с помощью bash/php, таких тестов у нас несколько сотен и они оправдывают затраченное на них время.
Вопрос: стоит ли писать ТЗ и детальное проектирование? Это философский вопрос :) В веб-проектах обычно так пишут, но требования часто начинают меняться сразу, поэтому совет простой: пусть менеджеры пишут ТЗ и сами читают, а разработчикам следует выделить 2-3 дня на пытки с энтузиазмом специалистов в предметной области со стороны Заказчика.
Проектирование в веб-разработке с желанием залезть в голову Клиента и при этом увидеть дальнейшее развитие системы – ключевой момент, влияющий на успех.
Вопрос: если изучать языки имеет смысл только создателям компиляторов, то что им следует изучать с пристрастием? Изучите стандартные языковые библиотеки и возможности веб-технологий (например WebRTC).
В PHP можно найти просто море коннекторов к стандартным и очень мощным операционным библиотекам; в Python в качестве бонуса есть библиотеки для работы с тензоры и фреймворки глубокого обучения, в Java это библиотека коллекций и фреймворк-исполнитель и т. д. Также потратьте время на обучение.
В Java есть целая библиотека подобных вещей — Spring/EE. PHP имеет ряд интересных и популярных веб-фреймворков.
Python выпустил несколько отличных фреймворков для машинного обучения и т. д. Вопрос: увлечение программированием — добро или зло? Конечно это зло! :) Вам нужно научиться увлекаться эффективным и лаконичным решением задач, используя те инструменты, которые сейчас доступны в изобилии.
Если проблему можно решить в bash, напишите в bash; если есть возможность зайти в СУБД с PHP - бери и пользуйся.
Если есть готовые фреймворки для создания сайта с админкой, берите их и не мучайтесь садомазохизмом.
Даже написанный вами код вы забудете через 2-3 месяца, и как бы вы ни старались его хорошо запомнить, ваш мозг будет сопротивляться и вы будете страдать.
Поэтому самый простой способ получить удовольствие от разработки — использовать готовые и протестированные библиотеки и решать с их помощью задачи с МИНИМАЛЬНЫМ объемом вашего кода, отшлифованного по всем стандартам.
Важно понимать, что научиться программировать можно быстро, но четко, лаконично и красиво выражать свои мысли в коде, следуя принципу «работа любит дураков» очень сложно и именно этому вам следует учиться большую часть времени.
Гораздо полезнее изучить готовые библиотеки от корки до корки и построить свои проекты на основе готовой алгоритмической алгебры, чем писать «все с нуля».
И современная тенденция создания сжатых и лаконичных языков со встроенными в синтаксис коллекциями для выражения собственных мыслей (php, python, kotlin, scala), зачастую в функциональном стиле, подавляющим когнитивный шум от сверхмощных конструкций - меня убеждает об этом тем более! Мир движется к упрощению, ясности и красоте.
Компиляторы победили ассемблер.
Лаконичные функциональные языки с множеством библиотек побеждают низкоуровневый садомазохизм в работе с памятью и «мозговым ООП».
Коллеги, надеюсь, мне удалось ответить на часть вопросов, которые мучают каждого из нас, и советы будут полезны не только начинающим веб-разработчикам, но и более опытным и специалистам, ищущим пути самореализации.
Всем удачи и хорошего настроения! Теги: #разработка #веб-разработка #разработка сайтов #программирование
-
Стокс, Джордж Габриэл
19 Oct, 24