Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

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?

share|improve this question

marked as duplicate by maple_shaft Mar 22 '13 at 15:29

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

@gnat I did read that post, but I felt that my specific circumstances, having already progressed along a programming path, warranted a separate question. This issue is more about filling in those gaps when you kinda left them behind a couple of years ago, I suppose. Hopefully that's enough to differentiate it! –  lukech Mar 22 '13 at 12:19
per my reading the dup question asker specified it as: "Where/how can I get the knowledge a computer science degree would give me, without getting one?" - I can't see substantial difference against your question "to overcome a missing CS education..." –  gnat Mar 22 '13 at 12:26

2 Answers 2

Start with a language-agnostic "Data Structures & Algorithms" course or book. Most CS degrees have this in the beginning years.

This is just a small portion of what CS is about, but it contains some of the fundamentals that you must know in order to go forward. Naturally, it is best to implement practically what you learn in order to make it "stick", but at some point you have to learn the theory -- you can't just "program" your way blindly towards an understanding of these concepts.

A pretty good online course taught by a leading figure in the algorithms community (Robert Sedgewick) is at Coursera: https://www.coursera.org/course/algs4partI

share|improve this answer
Thankyou, I've actually taken a look at the introductory Computer Science course on Coursera, and found that it was largely the same as other CS courses I'd tried, breaking out Java (or in that case JS) early on and focussing on typing and running code rather than theoretical concepts. I'll definitely give the algorithms course a whirl – would you recommend any good language-agnostic books I could pick up? I'm a textbook kind of person rather than on-screen :) –  lukech Mar 22 '13 at 12:20
@lukech Hmmm, a lot of people will probably recommend to you the "bible" of algorithms, by Cormen/Leiserson/Rivest: mitpress.mit.edu/books/introduction-algorithms I have used this myself, it uses pseudocode to describe algorithms. However, it is a pretty mathematical book, so depends on your background if you will find it useful. A book I have not used, but which I often see recommended, is Skiena's "Algorithm Design Manual": amazon.com/exec/obidos/ASIN/0387948600/ref=ase_thealgorithmrepo –  Cristina Mar 22 '13 at 13:11
+1 for Skiena's book. It's an extremely well thought out and organized book that will help you to pick up Data Structures and Algorithms and give you a good idea of how, when, and why you'd apply them to actually solving practical problems. –  Evicatos Jul 3 '13 at 18:17

To start you could have a look at design patterns, which will help you understand how to use classes properly, and in the process you will inevitably learn how to think about interactions inbetween and be able to discuss, at least on a basic level. For that, you don't need a CS degree, but the interviewers wanted to see if you did more than just complete some tutorials online, and if you are able to think in these patterns.

There are a couple of good books available, for you i would recommend http://www.amazon.de/Head-First-Design-Patterns-Loukides/dp/0596007124/ref=sr_1_2?ie=UTF8&qid=1363949603&sr=8-2 . Its very accessible and will be a good start, but it wont take you too far.

Furthermore, I recommend reading on testing. After all, writing working code is what they expect you to do, and if you understand what the critical issues with coding are, you can show that you care about those and it will be appreciated.

The last thing, in my opinion, that you should do is to attempt to study algorithm design. Its nice to have some idea, I'm not suggesting you should skip it completely, but it should not be the first priority. For that, there is a very good Stanford class on Algorithm Design on iTunes U and (i think) coursera.

share|improve this answer
I'd actually just downloaded that Algorithm Design course, and I'm currently working through their Programming trilogy (Methodologies, Abstractions, Paradigms) and trying to skim over the parts I already know. I've looked over the famous 'Gang of Four' design patterns but with the exception of singletons, which I use often, I'm stumped as to where they'd be applicable in most of the applications I'm designing. Would you have any more advice on how to relate them to my code? –  lukech Mar 22 '13 at 11:01
@lukech - do yourself a favor, stop skimming or "looking over"; study. Based on your post and your comments, you have quite a long way to go and probably have some bad habits to undo. Even if you think you know something, learn it properly. For example, using singletons "often" would immediately bounce you from one of my interviews. –  Telastyn Mar 22 '13 at 13:21
@Telastyn – Could you give me an idea as to why? This is a good example of one of those situations that seems incredibly harsh to a young developer who hasn't had the luxury of the formal education. I don't necessarily need specifics on advantages and disadvantages of singletons, this isn't the place, but the fact that you'd make a snap decision that quickly based on one comment is the kind of interviewer "harshness" that I'm trying to understand and work around. –  lukech Mar 22 '13 at 13:23
@lukech - quick search for singleton anti-pattern should do it. Or y'know... Spending a short amount of time on this site or other forums. That's the thing; it's not about formal education - it's about informal education and keeping up to date on best practices. Using singletons is such a red-flag (to me) that you completely don't get design patterns. If you don't understand something so elementary to modern programming, what else don't you know? –  Telastyn Mar 22 '13 at 13:41
@lukech - Enh, I'm just some guy on the internet so don't take it hard. Hopefully it will help you learn what employers are looking for so you can focus your education. I don't have a formal education myself. The main problem is that most companies don't just need software that works. They need quality software that works 5-10 years from now. Making quality software that stands up against changing requirements is hard. –  Telastyn Mar 22 '13 at 15:49

Not the answer you're looking for? Browse other questions tagged or ask your own question.