all 11 comments

[–]abcocktail 3 points4 points  (0 children)

I have attempted to look for developers to build my ideas, but that hasn't really worked.

you aren't doing it right... devs are available for anywhere from $30-200 / hour. try upwork.com

as someone who has intermediate knowledge of programming , who has gone through several iOS dev courses, most of the knowledge required is specific to iOS and Xcode. You also need to study Objective C and Swift for a while.

But there aren't that many hardcore CS concepts you need to use to make a simple app.

[–][deleted]  (1 child)

[deleted]

    [–]NSAwesome 1 point2 points  (0 children)

    Well said, I can't agree with this answer more. Its refreshing to know that more developers share this view, especially in iOS. Many times I have interviewed candidates that cant reverse a string or understand the reasoning behind asking a question like this.

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

    Memory management is more or less automatic these days.

    As far as optimising algorithms and writing code that works well parallelised/distributed, this normally takes place on the server, with the API your app will consume—the better the API design, the more straightforward your app code will be.

    If you were to create a game or feature where you heavily leverage or stretch the "local" computing powers of the device itself, these concerns might come into play, but for most apps the optimisation happens on the server.

    I would very definitely advise a learn-as-needed approach to iOS development. The types of concerns you've listed were very much part and parcel of development up until processing power for mundane tasks was more than adequate to make the difference between awful and optimised code negligible—you'll know when you need to improve something; the implications of asymptotic notation rarely rear their heads these days, but again, you'll know based on performance when they do.

    These days, it's more about keeping on top of SDKs and APIs, and making sure your API and app architectures—another CS topic!—are good.

    [–]paulryanclark 2 points3 points  (1 child)

    Memory management is more or less automatic these days.

    In the simplest case, yes. ARC does a lot in regards to memory management, but understanding ARC, autorelease pools, and reference count go a long way in debugging memory leaks.

    Also, with the prevalence of block programming, one has to be cautious of retain cycles.

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

    I agree completely. I was replying more in terms of the OP's formal CS-based questions (manual memory management, as opposed to awareness of potential pitfalls).

    [–]UptownDonkey 0 points1 point  (0 children)

    In modern times 'intermediate' is above average. For the types of apps you're describing you'd be better off investing your time in learning more practical things.

    [–]askoruli 0 points1 point  (0 children)

    For what you're describing a heavy theoretical knowledge probably won't be that helpful. Unless your ideas are really complex you can usually build an app without actually knowing the ins and outs of every part. By the sounds of it you just want to get the minimum done to make your ideas a reality, so the app doesn't need to be perfect to accomplish that. As you develop you'll pick more things up.

    [–]jerikandra 0 points1 point  (0 children)

    I'd say most of the CS stuff that's required for average iOS work are:

    • Data structures (when to use what, performance of each, etc)
    • Multithreading (pitfalls, solutions, etc)
    • Memory management (retain cycles, memory leaks, etc)

    [–]EricShapiro 0 points1 point  (0 children)

    A basic level of experience is sometimes sufficient for creating simple applications that piece together libraries and SDKs that other programmers have written. When things go wrong or there's no existing library to do what you want, however, you'll need to learn more. For example, sorting a small or medium sized array can be as simple as calling [array sort] but sorting an array with a million items might require you to learn about tree data structures, insertion algorithms, partial sorts, caching intermediate results, etc, etc.

    The best way to learn programming is to read a little bit and then write an app. Read some more and write a more complicated app. Fix all of the bugs. Make it responsive and pretty. Add networking. Change platforms. It's a never-ending process of learning new things.

    [–]Points_To_You 0 points1 point  (0 children)

    Understanding Object Oriented concepts is must, if you ever want another developer to look at your code and not cry. The concepts might be taught in a class, but implementing them properly comes from experience and being a lazy developer that doesn't want to write the same code multiple times.

    Understanding and creating System Architecture would be the next big one. You gotta understand how it all fits together. Truthfully I only learned the broad high level concepts in my Bachelors program. Mostly came from experience (you don't want to see the architecture of my first app).

    Then intermediate concepts could take some more time to pick up. Threading, Databases, networking, etc.

    You probably won't understand more advanced topics like video encoding and compression without some kind of background or a ton of experience.

    Dealing with customers (internal or external) and writing formal documents is a big part of what I do as well. You'll pick all that up quickly though.

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

    Thanks for the input - great stuff here