By "infrastructure" it's not just code (CI, tools, etc) but personnel, how they come up with projects, etc. New grads or still-undergrads may have a lot of programming experience but none on working as part of a team.
By "infrastructure" it's not just code (CI, tools, etc) but personnel, how they come up with projects, etc. New grads or still-undergrads may have a lot of programming experience but none on working as part of a team.
The success of internships is largely preordained by the quality of the mentor. Specifically: careful project selection, good advising particularly in the first few weeks, and political/social capital to translate internships into offers (both at the company and elsewhere). Interns can screw things up, and in rare cases heroically rescue an internship, but the liklihood of a good outcome for the average intern is often preordained.
So the real advice is to find an excellent mentor. But that's really hard because you rarely know who the mentor is when applying. In lieu of better information, FAANGs and Better-than-FAANG (eg Jane Street) are a good proxy because they disproportionately pull individual contributors with significant experience mentoring juniors: PhDs, people who TA'd during undergraduate, etc.
Fully agreed, the code part of the job is really only 20%. The rest is learning to do so in a team and business environment, which is actually much harder than programming.
I learned this in a startup however and would definitely recommend it to others. You learn less "the correct approach", but more or less get shoved into doing bigger things earlier since all the big guns are focused on some ungodly hard problem. So all the medium-hard problems get shoved to the juniors and interns. It's not the healthiest environment sure (I was doing 40hr/wks as part-time frequently), but if you can survive in it for a while you gain tenacity and a lot of skills that are hard to normally deepen until later.