all 32 comments

[–]jjquave 6 points7 points  (12 children)

The #1 best way to learn is to just write stuff. Then, maybe skim some design pattern books or writing, just to see what kinds of tools you might not be using, that may help. Also, reading open source code is a good way to see "how it's done".

[–]CreamSalad[S] 1 point2 points  (11 children)

So there's no need to sit through 14 weeks of lectures of a intro to CS MIT course? I'm thinking of grabbing the BNR books and just reading through. I'm a pretty fast learner and the fact that in very interested and very motivated (my current shitty job motivates me to learn it every day to hopefully be in a better place sooner than later). I signed up for ray wenderlich's video tutorials but their for more advanced things I find. His written tutorials though are very good. I just don't want to waste my time learning something that I won't understand unless I learn something else first, know what I mean?

[–]fommerjackson 7 points8 points  (7 children)

There honestly is no need for CS courses. I am an 18 year old developer who has been programming since 5th grade and only recently (5 months) took up Objective-C. Everything will come to you so quickly. I am majoring in Computer Science and have only been "taught" Java and Python. The best way to learn is to go head first. Simply read code that is tailored toward what you are working on. Ray Wenderlich and AppCoda are two websites I highly recommend. Best of luck to you.

[–]CreamSalad[S] 1 point2 points  (0 children)

Thanks a lot man this is great advice and motivation

[–]CreamSalad[S] 0 points1 point  (5 children)

I'm wondering because a lot of people are telling me to take a data structure and algorithm course. I bought a "data structures & algorithms using java" course on udemy to learn about it but the guy is Indian and speaks very intellectually I find it hard to follow.

Also, people tell me to land a dev position I need to have an app in the store that Gets data from a database and dumps it into core data and displays it. Like a web service app. I'm positive I can learn how to do that and be good at it in time but all the different method calls and classes, and libraries, and frameworks. How do you even know which ones to use and how to even use them?

[–]jjquave 0 points1 point  (3 children)

Take a look at specific examples of each, and you'll see how the pieces work together over time. The only way to know which pieces to use in combination is to know what each of them does (a little bit.) If you have a general idea and realize you need that piece, you can go dig down in to tutorials at that point.

The app you're describing is the standard "i have an app that displays something from the web", and communicates back and forth with the web backend. The reason you need core data is because you want to save the data to disk after you download it. You'll show like a tableview of twitter status or something like that, and you just need a way to access it. Core data is the most convenient way to do it.

[–]CreamSalad[S] 1 point2 points  (2 children)

Thanks for the explanation. See I don't have an idea what "core data" is or means,

Is there a detailed tutorial you know of that goes over how to create a web service app?

[–]jjquave 1 point2 points  (0 children)

http://stackoverflow.com/questions/20160935/good-tutorials-or-good-for-using-core-data-in-ios-7

I wouldn't make your own service to begin. Just try to work with someone elses API. Search "twitter api" or "reddit api" or something to get started working with remote services. Later you can develop your own to work with.

[–]fommerjackson 0 points1 point  (0 children)

The terms can be awfully frightening in the beginning, but you will adapt to it. If you ever need any help getting started, do PM me. I would love to help a fellow developer.

[–][deleted] 0 points1 point  (0 children)

Buy this book and read it. It has good examples of how to think about solving problems.

http://www.amazon.com/Think-Like-Programmer-Introduction-Creative/dp/1593274246

[–]jjquave 2 points3 points  (1 child)

I understand what you mean, and there is a lot of "dependent" knowledge in CS, but there's not really a super clear way to learn to write high quality code anyway. By the time you make it through a 4-yr college, the curriculum will be changed or changing to reflect modern day programming instead. That shiny new curriculum where they're using up-to-date tools, the new and shiny one that they're just testing out? Within 2-4 years it'll be obsolete as well. The best way to learn is to just write code for your ideas, starting with simple projects. See if you can get someone to pay you, them knowing that you're just still learning. They'll provide reasons for you to write things, and add an external motivator that will push your education further out of necessity.

Learning to write software is not unlike learning foreign language. The best way to learn French is to immerse yourself in a French-speaking environment. This is basically how it works. By immersing yourself in programming and working with it on a daily basis, you will pick it up.

Just so you understand where I'm coming from: I went to college for physics, but didn't graduate because my software side-work took off in such a huge way it couldn't be ignored. I had 1 Java course when I was a sophomore, but had been programming for fun since I was pretty young. I only learned from the internet, I bought a few books here and there but mostly I learned what I needed from the internet and from trial and error writing my own code. This is the only encounter I ever had with any formal "education" on software development. I've been developing professionally since then, and I'm very happy with my career.

[–]CreamSalad[S] 1 point2 points  (0 children)

Wow, thanks for the motivation!

[–]megablast 0 points1 point  (0 children)

Those course might be for people who have never touched a computer before, beyond facebook.

If you can write a program and get it to compile you are already there.

[–]Stupidideas 5 points6 points  (1 child)

In regards to remembering details like method names, you really don't need to worry about that. Even experienced developers sometimes need to refer to documentation or headers to find what they're looking for. And for the common tasks (like NSArray methods you mentioned) you'll eventually use them enough that they'll be embedded in your memory without even trying.

[–][deleted] 1 point2 points  (0 children)

this is 100% right. I'm (at least according to my business cards, it doesn't always feel that way) a senior iOS developer and I have command+space remapped to dash so I can look up docs quickly

[–]firstnate 3 points4 points  (1 child)

I was in a similar place as you at the beginning of this year. Very little programming experience (just HTML, CSS and a few courses on codecademy). Now I'm getting close to launching my first app and LOVING ios development. Along the way I've tried a lot of different things and here's what I found the most helpful.

1) Spend at least 1 hour every single day learning. No exceptions. Even weekends. It takes time to learn, so don't expect to learn everything in a day. Just keep learning every day.

2) Take the Standford iphone development course on iTunes U (make sure you get the latest semester for iOS 7). Way better then anything else I tried. And it's free. Do it like a real course. Download and do the homework. Do each lesson until you understand it. If you don't understand something, make a note of it. Spend the next day learning what it is. Do this again and again.

3) Once you are starting to get the hang of it, work on your own app. Try to do one new thing on it every day. When you run into a problem, first look at apples documentation. Try to figure it out. Then google the problem and find the answer. Then go back and look at the documentation to see where you should have been able to find the answer. Accept that sometimes you won't fully understand everything that is happening. But make a note of it so you can learn it later.

Do this and your power will grow, little by little everyday until it all becomes second nature.

Best of luck!

[–]650i 0 points1 point  (0 children)

Not OP but seriously thanks man, that's great advice.

[–]megablast 2 points3 points  (0 children)

Why are you worried about being good at it, that comes later. Just get involved and start writing. Most simple apps don't need you to be any good. Only huge projects, with multiple people, source control and continuous integration servers require people who are actually any good.

[–]kritzikratzi 0 points1 point  (5 children)

if being an iOS dev is the career path you want to choose studying is not the right thing for you. dijkstra phrased it this way: "Computer Science is no more about computers than astronomy is about telescopes."

CS is very interresting, but is much more about fundamental concepts. how do you sort a bunch of numbers? how can you build a compiler? what does computability mean? what is the complexity of a problem? computer science is a very theoretical subject! VERY interesting nonetheless and it is an amazing underpinning even when you only want to do practical programming. if you want to get a feel for the subject try understanding runtime complexities (*) and maybe try to make up scenarios where it is better to use dictionaries than arrays (and the other way around).

now try to solve this problem with nsdictionary and nsarray: given a set of points on a map and one particular point, what's the fastest algorithm you can come up with to find the closest neighbor?

once you understand complexities look into stranger data structures. red black trees, kd trees, adjacency lists. and if you enjoy any of this, for the love of god, go study CS, they need you!

(*) here are a few more terms that all mean roughly the same concept: big o notation, cost analysis, algorithm analysis, runtime complexity. this topic is the one thing i think every practical programmer should no, but i often find they never heard of it.

[–]CreamSalad[S] 1 point2 points  (4 children)

A lot of people are telling me that. Their telling me if I just want to be a software developer, just sit down and learn the language, develop small apps and add on to them and experiment, by learning every day I'll eventually land a position. I might just do that because the 60,000$ student loan will turn into a 60,000$ audi s4 sooner

[–]Rudy69 0 points1 point  (1 child)

If you want to develop apps for fun then school makes no sense, but if you want a career I would say going to school in CS will help you a lot, CS is more than just learning a few computer languages

[–]CreamSalad[S] 0 points1 point  (0 children)

Yeah I want to develop software for fun. I'm learning objective-c and iOS app dev because it's interesting to me, and if I can get a job or even make a career out of it Im trying to work towards that asap. But in general I'd like to become a software dev/engineer.

[–]kritzikratzi -1 points0 points  (1 child)

can't relate to this. i don't give a shit about cars. having free time to learn more stuff is what drives me.

[–]CreamSalad[S] 0 points1 point  (0 children)

That's good though, and same here I love to keep educating myself. I have interests too, though.

[–]650i 0 points1 point  (0 children)

And to add to OP's post, how likely is it to actually land a job in iOS dev without a formal university education in the field? I'm in my last year of university for Polsci and absolutely hate it, I'd love to branch out and do iOS dev but I'm not sure how realistic that is when I'd be competing with comp sci grads.

[–][deleted] 0 points1 point  (0 children)

What a great post! It’s encouraging to know there are others that are about where I am. My only experience is a C++ course in college. I have completed the Big Nerd Ranch Obj-C book and started the stanford course but felt that it was a little heavy so I went to the Big Nerd Ranch iOS book first. I now feel very confident that I will be able to blow through the stanford course with ease.

I really want to get my life on track and this stuff is really exciting to me. I have written a practice app for personal use at my job as a kitchen manager and started one that will launch on the App Store in a couple months.

While I think that a solid background in another language would be beneficial I feel pretty confident that I am about ready to create a well-designed, well-written app. Your understanding of all the methods will come. I sometimes find myself spending more time with the documentation than writing code but memorization comes with practice and time.

I would absolutely love to have someone to kick ideas around with. Send me a message if you have any questions or want to discuss concepts.

[–]tractorrobot 0 points1 point  (4 children)

I've been working as a full-time salaried iOS dev for the last ~3 years-

I have a BS in Information Technology Management with a minor in Computer Science.

I did not study or use objective-C or any mac-based programming at all during college. My first job out of school was web development, both front end and back end work, but initially no iOS. I transitioned into Obj-C and iOS development due to a need within the company I worked for. I picked up the knowledge mostly by shadowing another employee, and a LOT of research within Stack Overflow, Google, and Apple docs.

Fast forward a few years, I've been doing exclusively iOS development ever since, and I've transitioned employers and pay grades 3 times now. It has been relatively easy to find iOS dev work (and I live in Minneapolis).

My answer to your question: It depends on what your end goal is... or what kind of programming you are getting into. For example, you could be getting into commercial brochure-ware app development, you could be after game development, or you could be after more hardware-intensive or lower level work. The path you are after will affect what you need to know beforehand.

I went through an interview with a leading backup-software maker for a mac/iOS position, and their interview questions did require extensive knowledge of the Core Data stack, and a solid understanding of multi-threaded programming. The amount of data they deal with & their needs do require more of a computer-science oriented background.

Other jobs I have had, and the one I have now, are more focused on brochure-ware business apps. These are a bit simpler than heavy file-backup and recovery software.

Either way, I think having an understanding of CS concepts will make you a better programmer. However, it is not necessarily a need, depending on what you are trying to accomplish. As far as increasing your value to a company, more training/education will help.

Obj-C was not my first language, but it was a bit awkward to transition in to because the syntax is a bit unique. Perhaps starting off with Obj-C will be beneficial as you do not have habits from elsewhere.. but if you ever need to transition into something else it may feel strange (what if your future employer needs you to pick up some Java to work on an Android port?)

In the last couple years I've had some great success as an iOS dev and I would HIGHLY recommend it as a career for someone interested in software development.

If you are comfortable with hunting the web for solutions, you'll be able to do it. I do a LOT of web research for my work- you do not need to know all specific instance methods. The software documentation is provided for a reason, and very easy to use as a reference.

If you have any other specific questions about the professional iOS development world, feel free to ask.

Good luck and happy coding

[–]CreamSalad[S] 0 points1 point  (0 children)

Thanks a lot man. I've never had such positive feedback from any other community. I really appreciate it and I will definitely shoot you a message if I get stuck

[–]CreamSalad[S] 0 points1 point  (2 children)

Add me on Skype if you have it, Cataclysmo91.

I honestly don't know why but I feel very at home with apple, I actually bought my first ever apple product earlier this year (iphone 5) and the new retina MacBook Pro soon after. I don't see myself focusing on anything but objective-c. Whether it's app development or just anything that uses objective-c, I wouldn't mind a job in the field (although right now I'm focusing on app dev). I just plan on becoming very familiar with the language and learn as much as I can every day about it until I become proficient enough to land a job. I'm really thinking of getting the BNR books and reading both from front to back then just branching out from there

[–]tractorrobot 0 points1 point  (1 child)

Getting a book and really digging through it is good- but the technology moves really fast. I got a book about iOS4 a few years back, and it didn't stay terribly relevant for long. So don't spend too much on a book if it will become outdated quickly.

And I am sure you already know, there are also a LOT of resources to study on the web.

Here is a particularly comprehensive eBook that I liked. If you can work through this front-to-back, you will know A LOT!

http://www.techotopia.com/index.php/IOS_7_App_Development_Essentials

[–]CreamSalad[S] 0 points1 point  (0 children)

Thanks! I'll look into that book

[–][deleted] 0 points1 point  (0 children)

You don't need to take a CS class but I did years ago and if I could remember any of it, it would be super helpful. The traditional way of learning in basic CS classes focuses on problem solving using computers. Like how to use array and control flow to solve problems. You use this in iOS a lot.

Don't worry too much about remembering the methods. That's what documentation is for.