Это сложный вопрос. На него может быть несколько ответов. Профессиональный программист должен знать:
1. На хорошем уровне язык, на котором пишет
2. Используемый фреймворк на уровне пользователя (изучить документацию и реально применять), на уровне искодного кода (уметь читать и понимать, как устооен фреймворк) и архитектуры (из каких блоков он состоит)
3. Компьютерные сети - понимать, как работает HTTP, websockets, уметь написать свой HTTP/TCP/UDP-сервер и клиент, в идеале на C и Linux в блокирующем и неблокирующем режимах
Это только небольшая часть знаний, список можно продолжать и продолжать - SQL, оптимизация запросов, понимание рендеринга веб-страниц в браузере, тестирование, отладка, профилирование