PhD research teaches you to work on hard problems independently. Software engineering builds production coding skills. Competitive programming develops algorithmic thinking under pressure.
Each background has gaps. Academics need production experience. Engineers need mathematical depth. Identify your gaps early and fill them systematically.