This question already has an answer here:
I'll start with a brief background: my degree is in Recording Arts, so mainly audio engineering and stuff relating to the music industry, with some synthesis and stuff which was my link into coding (via an environment called PureData).
I've been working for an iOS developer for the last three years handling audio stuff (mainly musical), and having minimal coding work to do (things like localization, etc.) I've written some basic iOS projects myself which are increasing in complexity slowly, and am pretty comfortable with with the basic concepts of iOS development (MVC, delegation, KVC, etc.)
I've been attending interviews just to test the water to see where I'd fit in with some junior iOS developer jobs that could really challenge me and help me grow as a developer, and I'm being hit really hard by interviewers who expect me to have a CS degree and really in-depth knowledge of basic CS concepts. This may be a statement born out of frustration, but they don't seem to want to touch any potential employee who didn't get a Computer Science degree, or has a thorough knowledge of it.
As examples, one that hit me hard in an interview yesterday was something theoretical about behaviours belonging to classes and being accessible to a non-inherited class.. I had no idea, really. I can go in and code classes with inheritance, but discussing them on an abstract level with a sheet of blank paper in front of me is very daunting. Another example was discussing "data structures" - as far as I'm aware those are just variable types, and arrays/dictionaries, etc., but the guy acted like I knew 5% of the story there and seemed surprised. I've since looked up these things and learned a little more, but I think this is a band-aid on the problem.
It's pretty demoralising to feel like I'm progressing as a developer but also feel like I'm still nowhere towards a proper career as a software developer, and I realise this post may well be closed (though I genuinely do think this is the best place for it and hope others can offer advice), but I'm trying to establish exactly how I can learn those core CS concepts without needing to reiterate the basic coding constructs I'm already very familiar with.
I've tried watching along with various iTunes U courses, some of the MIT stuff online, etc., and they all jump straight into Java in lesson 1, 2, or 3 and begin talking about if statements, variables, etc., then move up in complexity while remaining almost exclusively with the code itself. Perhaps I'm making too big of a distinction between programming and CS, but I'm in a boat where I'm boring easily of hearing what an "if" statement or a "for" loop does over and over, and want to understand the underlying concepts that the interviews I've dealt with all expect me to know like the back of my hand.
I'm hoping some folks here will have some advice on patching up those CS-shaped holes in my knowledge so that I can properly begin my career as a software developer, rather than simply getting better and better with iOS development and leaving a gaping hole where my actual education should have been.
EDIT: I want to try to make this into a more specific question which can be answered as opposed to discussed, as per the rules, so:
Is it possible to overcome a missing CS education by just pushing forward with programming and learning concepts as you come across them?