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

Caldus

macrumors newbie
Original poster
Jan 3, 2015
3
0
I have been a full time C++ software developer for over 7 years. I have worked on the Windows and Unix platforms. I have no experience with developing apps for either iPhone or Android although I am very curious about it. As I read and research about mobile app programming, some questions are running through my head:

1. Should I even bother switching over to iOS programming (as opposed to the traditional desktop programming I've been doing the whole time)? I am asking more about from a professional standpoint ... is iOS programming (or mobile app programming) becoming the new norm for programming jobs these days? Is a job like the one I have right now going to become pretty much obsolete in the next several years? Just how popular is the mobile world really compared to traditional programming jobs?

2. If I already know C++ (and some C# and Perl), then how difficult will it be to pick up Objective C and all of the iOS frameworks out there? I heard it's more about learning the frameworks which is a pretty involved process.

3. I would like to eventually create a game for fun (and to learn). What I have heard is that creating games using cross platform technologies like HTML5, JavaScript, etc. (which I haven't used in so long) is not a good idea for games for performance reasons. Is this true? Should I even bother learning Objective C (or this new Swift programming language that is out) in that case? There's so many terms being thrown around and so many frameworks that it's all too confusing for someone new to the scene.

4. How hard would it be for someone like me to eventually get a job doing this type of work instead? Would someone with C++ experience be valued? Or do they not care generally and want to see what kind of apps you have in the store?

Thanks for helping this confused developer!
 
Welcome to the world of mobile! I was in the same boat as you about 4 or 5 years ago.

We've seen things come and go over the years, some stay longer than others. The issue for me and mobile was the power of the device. While others see them as consumption devices, I see them as computers to replace (at least in part) notebooks.

Now, enterprise mobile is all the rage. The devices aren't toys anymore like the old PDAs.

As a profession, I see nothing but up hill. I can't see any way this tech will be going down hill for a long, long time. Look at the level of power the devices have and how quickly the market became saturated... it blows away 'mobile' of the past (notebooks).

IMO, this is what mobile was meant to be, complete enterprise functionality at your fingertips at all times.

Knowing a C/C++ is clearly an advantage, and you're right about learning the frameworks/APIs, that takes time.

I find ObjC a bit odd, but the reality is that languages are languages, meaning it's more important to know what to do than how it's done. If you know what to do, you can likely find a snippet on how it's done.

Swift is a clear up-n-comer, but I don't know how it's going to take in the job market (if that's a concern for you).

You can mix ObjC and Swift, so you might study both if you are concerned about getting employment.

You probably already know that coming in some 5 years after a tech is going can be a disadvantage, so in that case, Swift might have an advantage as well as focus on high quality apps (again, if you're looking for a job)

I think at this point HTML5 is dead, the audience has spoken about native vs HTML5 types and native won.

Advanced games are usually done in something like Unity or SpriteKit/Cocoa3d. They are high performance and Unity is multi-platform.

As far as the value of C++ vs "apps in the store" and the job market:

I see the job market as at least 3 parts:
1. standard programmers for general apps (including simple games)
2. games - high end, usually Unity or some engine is the main skill
3. enterprise / business apps that usually require a background in business software as well as platform specific stuff.

Right now, the predictions for the market is that 1 & 2 are about the same growth as 3, meaning that enterprise is expected to see huge "come from behind" growth.

1. would require ObjC/Swift and general programming skills
2. would require advanced game development knowledge and some engine (Unity)

There's also a claimed trend towards moving away from "full stack" development to specialized development. I don't know if that's the case or not, because I still see job posting wanting 10+ different skills.

One of the big things is proving skill by having an app or two in the store, they look for how advanced it is and proof you didn't just buy some template code.
 
I was offered a job (that I eventually turned down) at a small to mid sized contractor. My resume was just a short cover letter with names of my apps and a short description of my skill set. The owner said he gets tons of web developers and c++ developers looking to get into the hot new thing but mostly they end up at the bottom of the pile.

He told me what he values most is knowledge of Xcode and the frameworks. My apps are very non stock ui and I showed him 3 different apps in the interview and after some tech talk with the lead dev I was in.

What I learned from him is that prior programming skill in a different platform was not enough. I had zero professional experience 2 years of comp sci and iOS experience since ios3.
 
Thanks guys for the thorough responses so far!

So it sounds like my C++ experience will not be of much use to employers if I want to dive into this stuff. What am I afraid of is that I will be stuck in the same niche field (C++ development on financial trading systems) forever because my skills are not easily transferable to the hot and new markets such as the mobile one. It makes me think that the only way out is to start learning iOS programming on my own and even get an app in the store before employers will take me seriously ... even while working full time. I don't hate the work that much really ... it's just that I have this nagging feeling all the time that it's becoming more and more obsolete/irrelevant each day. I just don't hear much about new C++ projects anymore unless they are embedded projects or a financial trading system.

KarlJay, out of those 3 parts of the job market you listed, along with #2, I would also consider #3 if it would open up a lot more doors for me. I already have some prior experience with developing business apps so I could maybe use that to my advantage as well. Making a game would be more enjoyable to me. I could also eventually do both of course. Would working on an app for #2 or #3 involve very different learning paths (in other words, would I be able to reuse that knowledge for the other)? You mentioned Unity a lot. I suppose I wouldn't be able to reuse Unity anywhere else other than just games?

I already have an idea for a game app. After the research I did, I saw one other game in the app store similar to the one I had an idea for. The graphics are quite good actually. It would be difficult to create something that high of quality at first for sure. But I figured that even if the game doesn't succeed, then at least I've learned a hell of a lot and could potentially use it in a future job application instead. Do you think an employer would appreciate an app you have even if it didn't get as many sales as you had hoped? Punkjumper, if you don't mind sharing ... when you interviewed and showed your apps, how successful were they at the time?
 
Last edited:
Thanks guys for the thorough responses so far!

So it sounds like my C++ experience will not be of much use to employers if I want to dive into this stuff. What am I afraid of is that I will be stuck in the same niche field (C++ development on financial trading systems) forever because my skills are not easily transferable to the hot and new markets such as the mobile one. It makes me think that the only way out is to start learning iOS programming on my own and even get an app in the store before employers will take me seriously ... even while working full time. I don't hate the work that much really ... it's just that I have this nagging feeling all the time that it's becoming more and more obsolete/irrelevant each day. I just don't hear much about new C++ projects anymore unless they are embedded projects or a financial trading system.

KarlJay, out of those 3 parts of the job market you listed, along with #2, I would also consider #3 if it would open up a lot more doors for me. I already have some prior experience with developing business apps so I could maybe use that to my advantage as well. Making a game would be more enjoyable to me. I could also eventually do both of course. Would working on an app for #2 or #3 involve very different learning paths (in other words, would I be able to reuse that knowledge for the other)? You mentioned Unity a lot. I suppose I wouldn't be able to reuse Unity anywhere else other than just games?

I already have an idea for a game app. After the research I did, I saw one other game in the app store similar to the one I had an idea for. The graphics are quite good actually. It would be difficult to create something that high of quality at first for sure. But I figured that even if the game doesn't succeed, then at least I've learned a hell of a lot and could potentially use it in a future job application instead. Do you think an employer would appreciate an app you have even if it didn't get as many sales as you had hoped? Punkjumper, if you don't mind sharing ... when you interviewed and showed your apps, how successful were they at the time?


It's unfortunate that there seems to be this apparent necessity to have an app in the app store in order to be an employable iOS developer. I've yet to release my own app (although I do now have one in the works) but for my two commerical iOS developer roles I've shown projects that have never shipped and they've still helped get me employed. I think ultimately if you can demonstrate a willingness to learn/improve yourself, as well as be able to talk about your app (challenges you faced, solutions you used etc) you should be fine.

Having an app in the app store can be convenient for prospective employers to download and try it out but you can always use a beta distribution tool like TestFlight/Crashlytics/HockeyApp. Beta distribution is still a valid part of the software lifecycle so it's always good to show that you have that skill too.

My final point is that a good app can still have poor sales and usually as a developer I'm employed to develop the app, not market/promote it. Making the app is half the battle, actually getting its name out and promoting it is just as difficult and so I don't think it would be fair if an employer didn't appreciate your app due to its sales.
 
Not hits by any stretch. They never asked about sales. Contract firms know that most of the apps they create for clients will fail. Not because they don't look amazing but that's the just the way it goes. Emoloyers are more interested in the scale of the app rather than the sales. I chose the apps I made to learn new api's and expand my skillset. That's what they want to see.
 
Knowing C++ is a big advantage (especially if you actually know C as well). It typically takes a skilled C/C++ programmer only about 2 weeks to comfortably read Objective C, and maybe 2 months to learn enough about the Cocoa Touch frameworks to finish their first non-trivial iOS app. That's a far far shorter path than for a web developer or non-programmer. And a lot of new mobile developers don't have the basic software engineering skills to code their way out of a paper bag. Advantage C++.

In general, the more platforms you have on your resume, the more opportunities one has where somebody might at least talk to you. The basic resume necessity for any mobile development position is to have at least one portfolio app already in an app store.

Swift is almost useless for production work right now, but the advantage of learning it NOW (and perhaps building a toy portfolio app) is that you can sooner claim 1 year of experience in Swift, if, after mid-year, it actually becomes more useful than Objective C for something other than just being new.
 
My thoughts:

Native is dying. A lot of people don't realize it, but as I show my coworkers what WebGL can do, they're saying "crap... I need to start learning this NOW."

I expect that Swift is actually going to cause a drop of interest in native from people who historically made native iOS apps, as they decide the hurdle is too great and the rewards too small. I'm one such person. Why learn Swift? Sure, it's better than Obj-C, but everything is better than Obj-C so that's setting the bar really low. Java 8 is about as good as Swift and Python is better than Swift. I already know Java 8 and Python, so why bother with Swift?

And then WebGL - over 50% of people are using a browser that supports it right now and that's expected to grow to over 90% by the end of the year. If you haven't seen apps/games using WebGL yet, I suggest you look for them. They run on desktop and mobile and can be as performant as native and look great.

Everything I'm doing now I'm doing with Unity. One is a game. Two are apps that just need 3D features in them (actually, the game is 2D. Hah.) I'm planning on distributing them as WebGL + ASM.js apps with Unity 5. If I'm wrong and WebGL doesn't smash native like I expect within 2 years, then Unity also allows you to make native builds for any platform. So no matter how things go, I think Unity is a good and safe choice.
 
Thanks guys for the thorough responses so far!

So it sounds like my C++ experience will not be of much use to employers if I want to dive into this stuff. What am I afraid of is that I will be stuck in the same niche field (C++ development on financial trading systems) forever because my skills are not easily transferable to the hot and new markets such as the mobile one. It makes me think that the only way out is to start learning iOS programming on my own and even get an app in the store before employers will take me seriously ... even while working full time. I don't hate the work that much really ... it's just that I have this nagging feeling all the time that it's becoming more and more obsolete/irrelevant each day. I just don't hear much about new C++ projects anymore unless they are embedded projects or a financial trading system.

KarlJay, out of those 3 parts of the job market you listed, along with #2, I would also consider #3 if it would open up a lot more doors for me. I already have some prior experience with developing business apps so I could maybe use that to my advantage as well. Making a game would be more enjoyable to me. I could also eventually do both of course. Would working on an app for #2 or #3 involve very different learning paths (in other words, would I be able to reuse that knowledge for the other)? You mentioned Unity a lot. I suppose I wouldn't be able to reuse Unity anywhere else other than just games?

I already have an idea for a game app. After the research I did, I saw one other game in the app store similar to the one I had an idea for. The graphics are quite good actually. It would be difficult to create something that high of quality at first for sure. But I figured that even if the game doesn't succeed, then at least I've learned a hell of a lot and could potentially use it in a future job application instead. Do you think an employer would appreciate an app you have even if it didn't get as many sales as you had hoped? Punkjumper, if you don't mind sharing ... when you interviewed and showed your apps, how successful were they at the time?

Don't short the value of C++, it's about as universal a language as it gets.

2 and 3 (games and business/enterprise) are going to be very different paths. IMO, games are far, far more advanced in terms of what the user expects.

Games pretty much require excellent performance and graphics, as well as marketing. It's far and above the largest, richest category and that's not going to change much as far as mobile is concerned. The skill sets don't have much overlap.

Enterprise has the advantage of extreme growth, less "number of years in iOS" required, less "non programming" type skills needed (graphics, game engines, marketing)

IMO, the job market will be very different. With business apps knowledge would be more about programming in ObjC (BTW, C++ works in Xcode/iOS).

If the goal is a job, I think the business route will have more demand as iOS gaming is already a bit flooded and most still see the mobile devices as game devices. In addition, the business apps are still somewhat new.

You could download the Unity setup and try it for a few weeks and see how you like it as well as if you think you can develop games that are up to the standard found in top shelf apps. Also, if you want to go indie, then dig into what it takes to market a game app, it's not so easy. The big companies have huge money and the life of a game tends to be limited. A smaller, simpler game is usually cloned in no time... look back at Flappy Birds. They buy templates and change the artwork all the time, then copy keywords to take your sales.

In the end, you need to find out what you really want to do. I've been making custom business apps for some 30 years now, games look fun, but in the end, programming is programming.
 
Based on the responses so far, I think I will focus on learning Objective-C and XCode. If I can come up with an idea for a business app, then I'll do that. Otherwise, I'll just work on the game idea I had without any intention of ever getting it to the app store -- it would just be for learning purposes (at least I can have some fun while learning). I will develop a version of the game that focuses more on the backend functionality and no graphics but maybe some UI for learning purposes. If later on Swift proves to be successful, then maybe I'll learn that as well.
 
Native is dying.

They've been saying that since the early days of UCSD Pascal, Forth, Smalltalk, Java, C# and Javascript (et.al.). There's always overhead when you get farther away from the native bare metal, and that overhead will increase mobile battery drain (and global warming in data centers) and memory requirements, except in narrow special cases that are a very close match for the tuning of the interpreter.

You could only build apps that fit in that sweet spot, but so will zillions of other newbie developers who only pick-up the new high-level fad tools. Code closer to the metal and, these days especially, you will have less competition for your skills or products.

Note that the hot categories usually start with the smaller more constrained stuff, early unix minicomputers, 8-bit PCs, PDAs, smartphone apps, now moving to tiny IoT and watch apps. Lower-level native coding won't die.

I'm polishing my skills with coding for Arduino and ARM M0 IoT devices (many of which can nicely cooperate with iOS apps via BLE).
 
They've been saying that since the early days of UCSD Pascal, Forth, Smalltalk, Java, C# and Javascript (et.al.). There's always overhead when you get farther away from the native bare metal, and that overhead will increase mobile battery drain (and global warming in data centers) and memory requirements, except in narrow special cases that are a very close match for the tuning of the interpreter.

You could only build apps that fit in that sweet spot, but so will zillions of other newbie developers who only pick-up the new high-level fad tools. Code closer to the metal and, these days especially, you will have less competition for your skills or products.

Note that the hot categories usually start with the smaller more constrained stuff, early unix minicomputers, 8-bit PCs, PDAs, smartphone apps, now moving to tiny IoT and watch apps. Lower-level native coding won't die.

I'm polishing my skills with coding for Arduino and ARM M0 IoT devices (many of which can nicely cooperate with iOS apps via BLE).

I wasn't going to chime in (but I really wanted to) on the native vs web apps, but since you started it, I'll go ahead and chime in.

You are 100% right, in addition to what you site, the device itself has speed limits due to heat issues.

If you look back at PC CPUs, they had small heat sinks, now, the fastest ones use liquid cooled and/or HUGE heat sinks ... you can't do that on an iPhone.

Long ago, they've moved from faster single core chips to multi-core chips and multi-threaded apps/programs in order to spread out the workload and make SOME apps seem faster (not all apps will do well from multi-threading) not to mention everything takes overhead.

As apps get more advanced, the "need for speed" goes up, just to keep the user interaction in line.

Look back at the PC, as the speed went up, the OS got "fat and happy" and the programs did the same. If you run a spreadsheet on an 80's PC using DOS vs Windows/Mac and current spreadsheets, you'll see the net speed is nothing near the gain of speed at the chip.

The gains in chip/bus/ram speed has been offset by heavy apps. The heavy apps happen for at least 2 reasons: ease of development, advanced offerings.

as this levels off, the need for ease of development will take a back seat.

Ask a user if they care what language or compiler was used... they couldn't care less. They only see buttons and tap on the buttons.

The advantage of a programmer doing less work is lost as the user doesn't really care. The responsiveness of the app and functionality is what they care about.

Same with inside the code, the programmers care about readability, the users care about usability.

Facebook tried HTML5 and said it was their biggest mistake, I agree.
 
Cloud and mobile. Cloud and mobile. Cloud and mobile.

That's the future. Actually that's the current state of affairs.

Cloud is Java, Ruby, Groovy, html, javascript, other junk you never heard of. Kind of endless actually. Mobile is Objective-C, Java. In an enterprise setting iOS is it, and Android is, well you know. The money is made on iOS.

If you are a top-notch C++ developer you will absolutely hate Objective-C. I mean really HATE it. For a while. When you start to like Objective-C better than C++ you will have grown as a developer.

Regarding jobs, having something, anything, on the app store is important. Anyone can talk about apps. Not anyone can build one and put it onto the app store. If you can't get your current employer to pay you while you learn iOS development then you need to learn it on your own.

Unity is for games. It's not iOS development. There's a fork in the road there. Take it.
 
Unity is for games. It's not iOS development. There's a fork in the road there. Take it.

I'm going to disagree with saying Unity is just for games. Unity is for any app that needs to be cross platform and will be media heavy. Often, that means games, but it also means CADs, for example.
 
@ ArtOfWarfare, but I assume you agree that it's not iOS development. You don't need to know Obj-C to use Unity.
 
Yes, one can develop apps for iOS devices without learning much about iOS native development tools and frameworks. However, the job and consulting opportunities will be far fewer and narrower. Companies rarely ever look for a Unity-only developer for a non-game mobile app project. You will also depend on a tool vendor promptly keeping up with the latest iOS releases and bug fixes plus new APIs.

If you want to have a cross-platform skill set in mobile, learning both ObjC and Java for will likely lead to far more opportunity.
 
I'm going to disagree with saying Unity is just for games. Unity is for any app that needs to be cross platform and will be media heavy. Often, that means games, but it also means CADs, for example.

This is actually an interesting point. I guess you could develop a business app in Unity depending somewhat on what the app does.

Some business apps could be very graphical and Unity could be used for that. People are probably more used to a "text" looking app for business, but graphics are a big part of business as well.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.