Software engineers should understand use case analys, user interface design, project management and finance, and many other important subjects "computer science" curricula ignore while beating students over the head with details theory. Understanding issues of scalability is good (though often actual testing is used in the engineering world for practical reasons), but we don't need four years of that while ignoring more important topics.
From the pragmatic point of view, there are two issues at play here. One - how to build decent programs that are maintainable and - two - understanding how such a program actually works. If your skills lack in the former, your code is probably near-to-useless in the long term for anyone. If you lack in the second - THE HARDER PART (pardon my caps) - then you are just partaking in a cargo cult that just happens to work because someone left you the tools that luckily get you the job done. I also think the second skillset requires a lot more effort to acquire than the first.
With your bare hands?!?