Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

yonyz

macrumors member
Original poster
Jul 29, 2012
33
0
Hi,

I've never done any programming before and would like to give ios programming a try.

I checked what the popular books on amazon are and the most popular one about ios 7 seems to be aimed at people with some prior programming experience, which I don't have.

I'd appreciate recommendation on a book for an absolute beginner such as me. If Objective-C is not a good programming language to begin with, I'd like to know which one is (if it exists).

Thank you.
 
Could you be more specific as to what you'd like to make? People trying to learn programming without a goal for what they'd like to actually make tend to give up quickly compared to those with a goal.

If you'd like to make a game, I'd suggest learning Unity. Personally, I learned it by using this free series of video tutorials, but I feel that they're a bit dated now: http://www.walkerboystudio.com/html/unity_training___free__.html

If you'd like to make an iOS App, you should probably start smaller and learn C first. Obj-C is an extension of C, so everything you learn while you're learning C will still apply in Obj-C. Other people have said they find this book to be too terse, but I personally like the free e-book Learn C The Hard Way: http://c.learncodethehardway.org/book/

One more thing... I personally suggest you avoid spending any money on learning materials. I find that what is available online for free tends to be more up to date and just better over all.
 
Since this has come up several times in the last few months, I’m just going to report something I wrote for the same type of question:

DT said:
In my mind (and I wouldn’t suggest I’m a educator of any sorts, just been developing for 20+ years), there’s three basic competencies: general fundamentals (that aren’t language specific), a/the language, and finally the SDK/API/framework.

Once you understand some basics of structures, flow, OOP, MVC concepts, etc., that’s easily applied to the language and becomes a matter of understanding syntax.

Then being conversant (so-to-speak) in a language allows you to extend that into the environment specific context, whether it’s a web framework like ASP.NET, Django or Rails, or a device SDK for a mobile platform like iOS.

The more languages you understand, the more you know what you _need_ to know. Super simple example: if I need a string value, I know some general things about how they’re handled, the likely methods and properties that should be available (so I know I need-to-know how to concat, return a substring, get the length, whatever ...).

I think sometimes, people get overwhelmed with Obj-C because they tend to encounter it in the vastness of Xcode where they’re not only dealing with the language (and basic concepts of programming and design), but the IDE UI, the SDK, tons of configuration, build options, etc.

Sometimes I think the best thing to do first, is to experiment a little with a language that can be run outside of all that noise, like Javascript in a browser, or Ruby, Perl, Python from the command line, or even a simple web stack like MAMP so you can get a little exposure to a language as well as a backend piece like the database (so many iOS apps, ours included, have a bunch of different moving parts: the iOS app, web services, DB, things like S3 for file storage, performance components like load balancing, caching [though some of the latter is more infrastructure/architecture and not a NTK to get started])

Good luck!


Bottom line: I wouldn’t suggest a non-developer to wade into Xcode/Obj-C/Cocoa - there’s dozens of different concepts to get your head around and in a big IDE like Xcode, you’ll just get lost.
 
Ok, so C is a good start? And what about C++ and C#? How do they differ?
 
The best description I've heard is ...
C is like having a logo kit with billions of 1 and 2 dot flat pieces and any colour you want. You could make anything with that but it's not going to be easy.

If you take the Logo analogy further Obj-C, C++, C# would be like City, Space and Pirate Lego. With lots molded pieces and larger chunks that let you get to a design faster. They are all object-oriented and based from C but different styles of Object-oriented.
 
Ok, so C is a good start? And what about C++ and C#? How do they differ?

C is a language created in 1969 that is still used today and that most other languages in use today derive from, some more completely than others.

SmallTalk is a language that was created between 1971 and 1980. Nearly nobody uses it today but it introduced the concept of "Object Oriented Programming". Most modern languages have since adopted that concept.

C++ (1981) and Obj-C (1983) are both derivatives of C that added Object Oriented Programming in different ways.

C# (2000) was a derivative of C++ and Java, created by Microsoft for usage only with Microsoft's platforms. In an update (C# 2.0, in 2004) it borrowed some functional programming features from other languages, like Lisp and Python.

C is a good start. Then move to Obj-C. You could learn C++ after that - it is supported by iOS but not commonly used. C# is a total waste of time to learn, in my opinion. It borrows a lot from better languages than itself without adding anything really new, and it can't be used on anything other than Windows and Windows phones. And Windows can run programs written in so many better languages, including Java and Python, so why bother with C#? (That's all my opinion. I've read a lot about C# but have never actually taken the time to learn it or write code in it. I prefer doing any Windows programming in languages that run on other platforms as well, like Java or Python).
 
Could you be more specific as to what you'd like to make? People trying to learn programming without a goal for what they'd like to actually make tend to give up quickly compared to those with a goal.

This is absolutely true in my experience. In my opinion, it's better not to treat it like learning a human language where you start from the most basic building blocks and work your way up. With human languages, you can learn useful phrases in the first lesson. With programming languages, you need to learn so much before you can write a useful program that this doesn't really work.

I tried learning Python, C, and some other languages that way multiple times and gave up. Sure, I learned a little, but not enough to do anything. What taught me the most was when I had to write a program to solve a problem that nobody seems to have software for. I learned how to write the program I needed, and in doing so learned a lot more about the language.

I'd say to imagine a program you want to write, make sure it's an achievable goal, and learn what you need to know to accomplish it.
 
As a programmer, I don't think that you have to go all the way back to C just to learn other flavors. However, I will say that you should learn the concepts of the language you are working with. I am a C# developer and could probably start to dig into Objective C pretty easily once I learn some of the concepts.

The books that I do recommend though, are usually scholastic based. The reason for this, is that it will cover basics and hopefully keep you from making common mistakes. One of the books that I learned on is Computing with C# (Art Gittleman). Books like this will teach you from the ground up so that you understand the fundamental concepts. There are others out there, so take a look around and see what you can find.
 
I'd say to imagine a program you want to write, make sure it's an achievable goal, and learn what you need to know to accomplish it.

I would say this is true, and how I kind of originally approached it. But once it starts to sink in and you get those "ah-ha!" moments it gets easier.

Programming for me was 1/2 learning the code, and 1/2 how to use it. I have all the tools (code) in my garage to take apart my car engine and put it together, I just didn't know how to even start to take apart my engine and rebuild it (the problem to solve).

Years later I gave up trying to master programming, you can't, you just get better and better the more you do it. Code is always evolving.
 
Learning C would help (as one example) to understand data types, however, when you get into ObjectiveC, things can change.

Example: When you use numbers (int,short,long,...) in C you are using a data type, however, when you get to ObjectiveC, there is a class (NSNumber) which is different from C types.

Point: It's important to understand data types, but you may end up only using NSNumber class and may never use short/long/etc... Or it may only be used in loop control (For loop).

I would learn a basic understanding of C or just programming in general, but at some point, it's very likely you'll need to understand the ObjectiveC language and how iOS/ObjC uses types/looping/etc...
 
I'm of the growing opinion that an Arduino starter kit is the best way to start for an absolute non-programmer. Make an LED blink or a robot spin one wheel or tell you if a plant needs watering. No fancy UX Frameworks in the way. C-like syntax which provides a decent progression path to Objective C.

I saw tons of kids (both boys and girls) getting their parents to buy them an Arduino (or similar) kit at the last Maker Faire. (Lots of adult technical types were buying them as well.) Lots of books aimed at people with zero technical background.

If you can't complete a project designed for 12 year old kids, that's a really fast way to determine that programming isn't for you.
 
I'm of the growing opinion that an Arduino starter kit is the best way to start for an absolute non-programmer. Make an LED blink or a robot spin one wheel or tell you if a plant needs watering. No fancy UX Frameworks in the way. C-like syntax which provides a decent progression path to Objective C.

I saw tons of kids (both boys and girls) getting their parents to buy them an Arduino (or similar) kit at the last Maker Faire. (Lots of adult technical types were buying them as well.) Lots of books aimed at people with zero technical background.

If you can't complete a project designed for 12 year old kids, that's a really fast way to determine that programming isn't for you.

Make sure to just get an ordinary Arduino Uno unless you want to develop a lot of wiring skills... I made the mistake of getting an Arduino Mega and I had to modify a lot of shields I had to make them work with the Mega's different pin layout.
 
Try Treehouse (teamtreehouse.com) for video lessons. They are great. I don't think you need to necessarily start with C or C++ before diving into Objective-C, but experience with programming structures in general will assist greatly. It would help, but don't let it stop you!
 
I appreciate all the helpful replies! A few days ago a I bought the Kindle version of "Learn Python the Hard Way", and so far so good. Playing with Arduino definitely sounds like fun, so I'll do that after finishing with this book.

Thanks again! :)
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.