1. смотря что будете программировать) если мобильные приложения - Swift и Kotlin, если стандартный бэкенд - Java+Spring, если фронт - JavaScript + React, если какое-то спец. ПО для вычислений -  Fortran, и.т.д)2. знание математики не помешает точно)3. вы сначала выучитесь, а уж потом о работе задумывайтесь)) трудности стандартные, как и везде - бывает неадекватное начальство, не подходящий график работы и т.д.из специфики - знание английского обязательно: вся профильная литература и форумы на нем