There is a chicken and egg problem here, also.<p>Many labs don&#x27;t have any really competent software people in place, which means they don&#x27;t have effective mentoring and training of new people as they join, which means they don&#x27;t have a solid mechanism for generating competence in this area (unlike the focus area of their research).<p>A lot of research code is writing in fits and starts by a revolving door of post docs and graduate students, who don&#x27;t understand software development, supervised by people who also don&#x27;t understand software development.  The results are really hit and miss, dependent mostly on individuals desire to learn these things outside of their area, or on the luck of hiring the right student or post doc who already happens to know quite a bit (but this probably isn&#x27;t why you hired them).  Some labs know they have this problem but have a structural issue with funding - they can&#x27;t possibly come up with a competitive salary.  Others don&#x27;t even realize it&#x27;s a problem.<p>You end up with a lot of people coming out of these labs with deep domain knowledge but only rudimentary software engineering skill.  From an industry point of view it becomes hard to hire many of them because they will need the same amount of supervision and mentoring as an entry level programmer for the first year or two, but if you&#x27;re running an R&amp;D group you often don&#x27;t have enough mentors to go around... so there is a shortage of people with 3-5 years of industry experience and an oversupply of those with 0.