Неустаревающие знания в IT
Публичный постПо следам дискуссии в Вастрик.Вайтборд возник вопрос что вы такого выучили за последние 10-15 лет, что вам пригодилось не раз и чем вы пользуетесь до сих пор? Неважно на каком языке, на каком фреймворке. Просто хочется нащупать то самое вечное, неизменно сияющее знание. Которое раз и навсегда.
Поделитесь также болью. Что вы такого крутого учили в расчете что это на века, а оно оказалось совсем ненужным и бесполезным.
Пригодилось:
SQL - Стандарт постоянно меняется, новые фишки растут в базе как грибы. Но SQL везде, он по-прежнему нужен, люди по-прежнему не хотят учить какой-то новый другой модный подход (Привет, MongoDB). Хаки и трюки, конечно, меняются - 7-8 лет назад можно было выучить хинты в Оракле и получать в некоторых компаниях свои 300 кк/наносек, сейчас такое уже не прокатит.
Азы чтения sql-планов. Базы данных все сложнее и сложнее, но если вы хоть раз оптимизировали запрос и оптимизировали его, этот скилл никогда не уйдет. Да, конечно, придется пробежаться по мануалу, почитать что там в 12 версии Postgres или что у вас там. По-прежнему многие перформанс-проблемы упираются в ту же злополучную базу данных.
Базовые регулярных выражений. Читать регулярные выражения, я так и не научился, но кое-как научился писать. По возможности стараюсь никогда их не писать в коде, но часто приходится выгрузить какие-нибудь данные и быстренько пробежаться регуляркой - ничего лучше не знаю.
Книга "Java concurrency in Practice" - она по-прежнему хороша и актуальна, описывающая concurrency-модель в Java. Примеры с сервлетами из 2006 года сейчас кажутся смешными, но основные примитивы, теория и проблемы, там есть. Эта книга выдержала тест временем. Аналогов за 15 лет не написали.
Не пригодилось:
GOF-Паттерны - большинство паттернов возникло из проблем строго-ООП языков. Языки изменились, функции теперь летают туда-сюда и с ними сменились и паттерны. Только новые паттерным никто в явном виде в одной книге не описал (зато есть 100500 статей паттерны в языке N). Сейчас код пишут по-другому, книга совершенно бесполезная. Нет, ну где-то там в недрах Spring'а есть все эти паттерны, но пишешь в конце-концов на Spring'е, и все равно надо идти в свой фреймворк и смотреть как типовые задачи решаются на нем.
Книга "Рефакторинг" Фаулера - опять же набор рефакторингов включили в IDE, и где-то интуитивно понимаешь как рефакторинг делать. И 90% рефакторингов - это метод правильно назвать. Большую часть своей карьеры я пишу код "рест - stateless бизнес логика - база" или там "взяли из кафки сообщение - сервис - сервис - положили в базу сообщения - отправили в кафку ответ", это сильно облегчает проблему рефакторинга.
SOLID - сами по себе принципы адекватны и разумны, но это часто в свое время спрашивали на интервью, но я лично ни разу не писал код, задумываясь о том "сколько же responsiblity у класса", как-то может это и ловишь но интуитивно ("что-то дохрена этот класс делает, надо разбить" или наоборот). Также ни разу не приходилось осознанно использовать Liskov Substitution Principle, хотя интуитивно опять же скорее всего сталкивался с его нарушениями "какой-то этот наследник кривой и совсем неправильно себя ведет". Делать из этих принципов культ мне кажется, было совершенно излишне.
Я бы еще сюда сразу сраного Кнута добавил с его "Искусством программирования" (Да и "конкретная математика" тоже на любителя). Книга-боль, книга-гной. 6(!) битов в байте в его маня-контупере, упоротый ассемблер, странный матан, короче вообще читать никому не стоит имхо. Особенно в в2к20.
Базовое знание по сетям. Модель OSI, топологии сетей, TCP и UDP, чтение вывода ping & tracert. Прошёл этом сам и предлагаю проходить другим в курсе Cisco CCNA.
Для администрирования Unix/Linux
Пригодилось :
-понимание того, как работает загрузка компьютера (особенно в свете UEFI)
Не особо пригодилось (или вышло из моды)
Английский.
Если нужно указать один навык, то это определённо и стопроцентно английский язык. Не устаревает никогда, развивать можно и нужно постоянно. Это ключ ко всему остальному.
Странно, постоянно SOLID юзаю.
Single responsibility — чтобы спагетти не писать
Open\closed — чтобы делать инкапсулированные решения без кишок наружу
Liskov — тут сложнее, глубже 2 уровней наследования не заходил очень давно
Interface Segregration — опять же, чтобы не было одного гигантского модуля, который делает все-все-все
Dependency Inversion — а без этого то же API невозможно протестить (если провайдер не подменять на фейковый, то придется на лайв сервер кидать запросы, что долго)
Топикстартер, это как раз-таки неустаревающий принцип разработки.
А вот и нет. Мне недавно потребовалось написать ORM и да представьте себе я надергал паттернов оттуда.
Не устаревает алгоритмическая база. А так же парадигмы программирования. Сейчас вот история делает спираль и мы опять начинаем писать в функциональном стиле. Если до этого писали потому что так получалось жрет меньше ресурсов, то сейчас потому что это внезапно имеет меньше проблем при параллельных вычислениях.
Ванильный JS.
Вроде и ушла из вебни сто лет назад, но обнаружила, что во многих BI-инструментах встроен его интерпретатор, часто сильно урезанный, но им бывает гораздо удобнее пользоваться, чем некоторым нативным функционалом.
Неустаревающие знания это софтскиллы.
Технологии меняются, люди нет.
Умение договариваться, эмпатия, понимание как принимаются решения и почему будут актуальны всегда.
Я буду здесь немного мимо кассы, но, кажется, это хорошее место, чтобы попросить помощи. Будет Вастрик.Стековерфлоу на минималках.
Я захотел научиться в баш. Мне кажется, обзавестись базовыми знаниями в обращении с командной строкой совершенно не лишне, тем более, что через неё можно в одну строчку делать простейшие вещи, для которых не нужно знать и уметь практически ничего (youtube-dl тому отличный пример).
Нашёл классный курс от MIT и пока что мне идёт очень тяжело, но от этого ещё интереснее. Тут есть кто-то, к кому можно было бы обратиться со стыдными вопросами, которые всегда стеснялся спросить? «Почему так?», «Почему вот так работает, а если сделать иначе — не работает?», вот в таком ключе.
Чтобы вы понимали уровень: вчера у меня ушло 3 часа, чтобы создать две функции. Функция
Х
показывает мне current directory и сохраняет этот путь, функцияY
cd-шит меня в путь из функции Х где бы я её не запустил.Мне сложна, нипанятна, но жутко интересно. Кого-то можно раз в никогда позадрачивать вопросами, если гугл не помогает или я даже не понимаю, как свою проблему гуглить?
То, что выучилось и никак не может устареть: