Хмм. Ну официально я не работал, но некоторые выводы и рекомендации я сделал за все время.
Софтскиллы:
1. Умение правильно поставить и загуглить вопрос. Все меняется и появляется новое, которое на лету придется изучать и применять. И лучше научиться гуглить сразу на английском. (И знание английского хотя бы на уровне чтения доков нужно )
2. Не позволять себе стрессовать (понимаю, это сложно. Но ничто не стоит твоего сломанного здоровья)
3. Декомпозировать алгоритмы и задачи на более мелкие. Если задача кажется сложной - декомпозируй на более простые части, и так до самых простых вещей.
4. Делай осознанные названия переменных. И не ленить делать комментарии. Это поможет, когда вернешься к коду позже.
5. Уметь составлять алгоритмы на абстрактных блок схемах. Не бежать сразу писать код, а подумать что ты хочешь от функции.
6. По возможности следовать идеологии TDD. Если язык и прочее позволяют. Сначала пишем тесты, потом на его основе код. Это помогает понять, что ты вообще хочешь от функции.
7. Хотя бы в теории знать весь основной функционал твоего яп. Типы данных, мапы, структуры,интерфейсы, асинхронщина,if else/case switch,тернарные операторы. Я начал изучать golang сразу на практике, и не изучал теорию. Из за этого городил сложные конструкции, которые можно было упростить встроенными операторами. Если ты знаешь хорошо один язык, то следующий яп будет легче выучить. И чем больше знаешь, тем легче будет понимать принципы работы других яп.
8. Знать принципы ООП
9. изучить алгоритмы, хотя бы призрачно понимать про O большое и расчет сложности алгоритмов(советую почитать "Грокаем Алгоритмы" Бхаргава. Топ книга). Будет плюсом знать какие вообще существуют алгоритмы. Например, при поиске слова в тексте, алгоритм КМП эффективнее и быстрее находит, чем если тупо напролом перебирать все символы и сравнивать. + не плохо было бы Поверхностно понимать что происходит с данными на уровне железа. Чтобы потом бездумно не копировать огромный массив по тысяче раз, или не вызывать тяжелую функцию для простой вещи.
10. Планирование задач. Совместно с декомпозицией очень помогает. Например, у меня есть приложение, где я могу создать список дел с чекбоксами. И когда выполнил задачу - ставлю галочку. Так я оцениваю прогресс.
11. Уметь отдыхать от работы и не сидеть до поздна. Иначе начнешь выгорать, уставать и продуктивность будет падать. К этому не плохо бы добавить физическую активность днем и прогулки на свежем воздухе.
12. Уметь общаться с людьми, добиваться от них нужную тебе информацию, и убедиться что человек понял, если ты ему что то сообщаешь.
Хардскиллы:
1. Git
2. Linux (используется на серверах, докерах и где только можно)
3. Docker (не критично важно знать, но контейнеры много где используются, и умение управлять ими, или засовывать свой код в контейнер будет плюсом)
4. настроить свою IDE и знать ее возможности. Сниппеты, подсказки, автодополнения облегчают и ускоряют разработку. А всякие тулзы для создания проекта типа react-create-app вообще могут подготовить проект и создать все что надо. А условная кнопочка f5 сама запустит проект. А например, гошная тулза в vscode прямо в ide показывала все зону покрытия кода тестами. Подсвечивала все красным и зеленым. Очень удобно.
5. Освоить debugger твоего яп. Классная штука, если разобраться в ней. Вроде в dart ее юзал, чтоб баг найти. Или в шарпе. Не помню.
По специфике языка не скажу. Тут наверное лучше загуглить что то типа "вопросы для собеседования языкНейм". И посмотреть на что ты в принципе можешь ответить, а что лучше бы подучить.
Интересно было бы узнать опыт Джавы.