views:

343

answers:

7

What are the most valuable parts of Computer Science studies for Cocoa developers?

Another way I might word this question is:

If I’m not going to go to school for Computer Science but want to be a developer working primarily with Cocoa, what are the things I should make sure I learn that I otherwise might miss by being self-taught, and be worse off for it.

Update: Replaced the term "professional Cocoa developer" with "developer primarily working with Cocoa", in hopes that the intent of my question is somehow clearer.

To be clear, I've been working with Cocoa for two years and am comfortable with Objective-C and the Cocoa frameworks, as well as Cocoa design patterns and the developer toolset, and thus am for the most part fluent with the Mac and iPhone platforms. But I have wondered whether I'm missing important CS or SE elements due to being self taught/no formal training, and not coming from other languages or platforms.

This question is for Cocoa developers.

+4  A: 

There are many, but things that come to mind imediatly

-Design Patterns (the Cocoa framework relies on many Design Patterns, if you follow them it will make your life very easy, most obvious example is MVC)

-Algorithms and Data structures(this applies to any framework really)

-Memory Management (No garbage collection on the iphone!)

hhafez
Arguably, only Algorithms and Data structures is a CS topic -- the rest are software engineering/general programming.
Pod
I agree on Design Patterns, You could say that is more Software Engineering. But memory management, not being CS? Have to disagree there sorry :) I was more answering the question of what are the things I'd learn in a CS degree that I'll need to be a good Cocoa developer. Not everything you learn in CS degree is CS. You learn ethics, mathematics, etc ... I'd assume you would also learn about OO Design, Design Patterns etc ...
hhafez
Another take on this might be: what topics are programming-language-independent? Those are the ones I've seen emphasized at the university level. Design patterns, algorithms, and data structures are the most important ones that I remember, along with a good helping of math. Memory management was touched on, but that tends to be a language- or platform-specific topic, so it wasn't emphasized.
Brad Larson
+3  A: 

I would question whether there's really such a thing as a "professional Cocoa developer" (from a philosophical standpoint), or if you would want to be one. There's "professional developer", who may work with Cocoa primarily. A professional developer is language-agnostic and as such has a solid career ahead of him/her. A language- or platform-specific hacker has very limited usefulness.

The question to ask is do you want to be a developer or not? If there aren't any good Cocoa jobs available at the moment, or Cocoa is replaced by something newer and better and very different, a professional developer changes gears and follows. Are you OK with that?

If so, a computer science degree definitely cannot hurt. If not, you should probably not put all your eggs in the Cocoa basket and pursue a non-CS degree.

Rex M
For me question seems like another Apple ad. :)
Arnis L.
Thanks for the response! Definitely insightful, in and of itself, but I find that it is just nitpicking semantics, as the intent of my question is clear, and you do not even attempt to answer it, but only to invalidate it by questioning the specific terminology used. I have found that the term "professional Cocoa developer" is valid amongst professional Cocoa developers.
Joe Ricioppo
A: 

What are the most valuable parts of Computer Science studies for Cocoa developers?

Learn that it's important to understand the differences between languages, not learning a particular language.

a paid nerd
A: 

Are you writing numerical method solvers with a Cocoa frontend? You'll want to take numerical methods. Writing a 3-D plugin with a Cocoa UI? Better learn about Catmull-Rom splines.

Chris Simmons
+1  A: 

"Professional" is a relative term.. but anyways, this is what i had to go through so that i could easily learn a new language anytime i want and also master it:

  • started by learning a simple console language (pascal or c++, but i consider pascal being simpler than c/c++), then learned another language just to see if i can do it (c++)
  • i learned a lot of algorithms and data structures, until i was able to recreate them and even create my own
  • i moved to a visual approach on programming with Visual Basic 6 (another simple one to start with), and tried to copy lots of apps just to see if i can do it
  • i learned about Object-Oriented Programming and finished by mastering it
  • from this step on, learning a new language was like a hobby, like playing!
  • then i wanted to learn some different topics, like design patterns, multithreading, and so on..
  • moved from windows to mac, and started learning objective-c: because i already knew lots of languages, it took me 5 days to learn objective-c, and yes, i took breaks like any human being :P
  • after i learned obj-c, i now had to learn cocoa... this one took me a lot of time to learn, and i still don't know it all.. but i do know most of it :D
Woofy
Thanks, that's definitely helpful. It seems the term "professional" is ambiguous with relation to programming, but not so in other fields where there is a clear divide between making money and not making money. What do you mean when you say that professional is a relative term?
Joe Ricioppo
glad to be helpful. well, in my opinion there is no pro developer, there's just experienced developers and beginners. when you say "professional", most of us think about a guy that gets a lot of money and knows it all.. it ain't like that. no one can know it all. anyways, professional can also mean a guy who works for a software company that develops good solutions.. but when i said that it is a relative thing, i ment that everyone has a different understanding of this term.
Woofy
+1  A: 

In addition to what's been pointed out already, I highly recommend reading "The Pragmatic Programmer". It contains a wealth of information on how to write software, how to manage projects, and how to develop your career, advice that goes well beyond the documentation you look at every day in Xcode. Some of the topics they cover are ones that you might have been exposed to during a standard computer science degree.

Brad Larson
A: 

A good understanding of computer graphics is required if you want to make some good looking animations :)

not really on the iphone, you can do some pretty fancy stuff by just using the built in UIViewController
hhafez