Неустаревающие знания в 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, хотя интуитивно опять же скорее всего сталкивался с его нарушениями "какой-то этот наследник кривой и совсем неправильно себя ведет". Делать из этих принципов культ мне кажется, было совершенно излишне.
Английский.
Если нужно указать один навык, то это определённо и стопроцентно английский язык. Не устаревает никогда, развивать можно и нужно постоянно. Это ключ ко всему остальному.
Базовое знание по сетям. Модель OSI, топологии сетей, TCP и UDP, чтение вывода ping & tracert. Прошёл этом сам и предлагаю проходить другим в курсе Cisco CCNA.
Неустаревающие знания это софтскиллы.
Технологии меняются, люди нет.
Умение договариваться, эмпатия, понимание как принимаются решения и почему будут актуальны всегда.
Для администрирования Unix/Linux
Пригодилось :
-понимание того, как работает загрузка компьютера (особенно в свете UEFI)
Не особо пригодилось (или вышло из моды)
Странно, постоянно SOLID юзаю.
Single responsibility — чтобы спагетти не писать
Open\closed — чтобы делать инкапсулированные решения без кишок наружу
Liskov — тут сложнее, глубже 2 уровней наследования не заходил очень давно
Interface Segregration — опять же, чтобы не было одного гигантского модуля, который делает все-все-все
Dependency Inversion — а без этого то же API невозможно протестить (если провайдер не подменять на фейковый, то придется на лайв сервер кидать запросы, что долго)
Топикстартер, это как раз-таки неустаревающий принцип разработки.
То, что выучилось и никак не может устареть:
Я бы еще сюда сразу сраного Кнута добавил с его "Искусством программирования" (Да и "конкретная математика" тоже на любителя). Книга-боль, книга-гной. 6(!) битов в байте в его маня-контупере, упоротый ассемблер, странный матан, короче вообще читать никому не стоит имхо. Особенно в в2к20.
Ванильный JS.
Вроде и ушла из вебни сто лет назад, но обнаружила, что во многих BI-инструментах встроен его интерпретатор, часто сильно урезанный, но им бывает гораздо удобнее пользоваться, чем некоторым нативным функционалом.
А вот и нет. Мне недавно потребовалось написать ORM и да представьте себе я надергал паттернов оттуда.
Не устаревает алгоритмическая база. А так же парадигмы программирования. Сейчас вот история делает спираль и мы опять начинаем писать в функциональном стиле. Если до этого писали потому что так получалось жрет меньше ресурсов, то сейчас потому что это внезапно имеет меньше проблем при параллельных вычислениях.
Я буду здесь немного мимо кассы, но, кажется, это хорошее место, чтобы попросить помощи. Будет Вастрик.Стековерфлоу на минималках.
Я захотел научиться в баш. Мне кажется, обзавестись базовыми знаниями в обращении с командной строкой совершенно не лишне, тем более, что через неё можно в одну строчку делать простейшие вещи, для которых не нужно знать и уметь практически ничего (youtube-dl тому отличный пример).
Нашёл классный курс от MIT и пока что мне идёт очень тяжело, но от этого ещё интереснее. Тут есть кто-то, к кому можно было бы обратиться со стыдными вопросами, которые всегда стеснялся спросить? «Почему так?», «Почему вот так работает, а если сделать иначе — не работает?», вот в таком ключе.
Чтобы вы понимали уровень: вчера у меня ушло 3 часа, чтобы создать две функции. Функция
Х
показывает мне current directory и сохраняет этот путь, функцияY
cd-шит меня в путь из функции Х где бы я её не запустил.Мне сложна, нипанятна, но жутко интересно. Кого-то можно раз в никогда позадрачивать вопросами, если гугл не помогает или я даже не понимаю, как свою проблему гуглить?