Ask Slashdot: Preparing For the 'App Bubble' To Pop?
Niris writes "I am currently a senior in computer science, and am expecting to graduate in December. I have an internship lined up in Android development with medium sized company that builds apps for much larger corporations, and I have recently begun a foray into iOS development. So far my experience with Android ranges from a small mobile game (basically Asteroids), a Japanese language study aid, and a fairly large mobile app for a local non-profit that uses RSS feeds, Google Cloud Messaging and various APIs. I have also recently started working with some machine learning algorithms and sensors/the ADK to start putting together a prototype for a mobile business application for mobile inspectors. My question: is my background diverse enough that I don't have to worry about finding a job if all the predictions that the 'app bubble' will pop soon come true? Is there another, similar area of programming that I should look into in order to have some contingencies in place if things go south? My general interests and experience have so far been in mobile app development with Java and C++ (using the NDK), and some web development on both the client and server side. Thank you!"
Mobile app bubble
Professional stubble
For who will browse jack
Amid the economic rubble?
Burma Shave
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
I'm not sure it is. Maybe I'm biased because I am employed as an Android developer, but both Android and iOS developers are both incredibly in demand right now. Every brand wants or has an app, and every webapp needs a native mobile counterpart to be taken seriously. Weren't the app bubble predictions back in 2010? I don't think they hold any water any more. Mobile is the future and isn't going anywhere.
Programmers should be able to take on a wide variety of tasks. Fortunately, smart phones are not alien space technology with nothing in common with computers. From the point you're at now, you should be able to branch out to things like desktop graphics-based apps and perhaps GPU computing without too much trouble. You should prepare yourself for this *now* so that you don't find yourself scrambling if the smartphone app business doesn't go where you want it to. Remember, what your prof teaches you in college is maybe 10% of what you need to know. (Not kidding, that really is the deal, you should be doing A LOT of coding on your own time in order to learn how to operate without that safety net & get enough patterns stored in your head that you can tackle harder problems in the future.) Good luck!
As people transition more and more of their time to Phones and Tablets, the market for iOS and Android apps will only grow. Was there ever a PC apps bubble? A career in software development isn't about "having diverse skills", its about learning whatever you need to know when you need to know it. Sell yourself as someone who is constantly learning and can pick up anything, and you will never go out of style.
The App bubble has already popped. The only people that make money writing apps are contractors building them for companies that insist they need an app (even though they probably don't...), employees at companies like that drawing a salary, and the 1 in a million that comes up with the ugly meter. Eventually the marketing departments will realize that "Billy Bob's horse feed insurance" doesn't need a mobile app and all of that will dry up pretty quickly.
If you want to have a long career in development, learn databases. You don't necessarily want to be a DBA since they tend to get tied to a platform and their fortunes rise and fall with it (Foxpro anyone?). But, learn how to manipulate information. There will always be someone willing to pay you to manage their data. Maybe through an application, maybe through an app, maybe through a web interface.
At the end of the day, most of the decent paying technology gigs come from managing information for someone.
I got into this business in the early 90's and was told that by a friend of my father's who had been programming since the 60's. It's the best business advice anyone has ever given me.
spend a weekend brain storming.
Create your own company.
Make a go.
You're skills are fine.
The Kruger Dunning explains most post on
You mean, companies that have no business plan except leech off investors until a profit model magically appears? Those are the kind of companies that fail when tech bubbles pop.
But there are tons of smartphones, and tons of people who want apps for their smartphones. As long as you work on something that has a real market and makes real money you don't have to worry about 'bubbles'.
How can I believe you when you tell me what I don't want to hear?
Gather lots of knowledge on cloud development. It's a much slower moving, but very certain, change coming. Even the most hardcore nay-saying managers or admins (who will always whine about security as long as they can scare people) who want to keep it all in house are going to fold for the cheap allocation of VM's in the cloud. That's where your software will be running in about a decade (again, it's slow moving). But companies will own fewer and fewer physical servers.
Sorry...need to repost...browser had logged me out...grrrr.
---
The fact is, development of mobile apps as an individual and getting rich has come and gone. The marketplace is filled with so many versions of apps that do the same thing.
That being said, enterprise mobile development is hot. Some think that most companies don't really need an app - maybe, they don't. But, most want to offer additional value to their customers or to develop enterprise apps for use within their company to manage the company's business processes.
When the .dotCom bubble burst...many found themselves out of work...briefly. So, the big website isn't really happening. But, most companies still wanted a presence. And, so those developers still make a decent living. The internet hasn't dried up. And, the promise of mobile is just beginning.
And, the skills one learns...assuming it isn't just HTML or HTML5 will be transferable. Grab a little JavaScript, learn Android or iOS programming. And, learn about hybrid solutions that leverage all of the above. Lots of jobs out there for those skill sets. No worries for those who are on top of their game and keep their skills fresh and take opportunities to learn.
I agree that this is good advice to start out. But if you really want to be a retargetable developer who can pick up a new area quickly, you need to know at least five to a minimum level of competence.
Four of the languages that you need to know reasonably well are: an object-oriented language (C++, Java, and C# are all close enough to being object-oriented languages that one of them will do), a scripting language (Perl, Python, and Ruby are all fine choices; even modern JavaScript isn't too bad), a functional language (Haskell or Scheme are the obvious choices), and a logic/relational language (a dialect of Prolog which supports CLP is probably the theoretically "best" option, but for most developers SQL seems to do the job).
One of these four will probably be your "primary" language. There's one more language that you need to know reasonably well, and that's a "pure" form of your primary language. So, for example, if you spend most of your time in Java, learn Smalltalk to see what object oriented programming is supposed to be in its purest form.
You need to know enough about these other languages that it prevents you from thinking in a language. You need to think in the abstract, and then realise that abstract idea into a language. Knowing more than one programming language makes your code better, even if you never use them most of the time.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
1- if you're good at what you do, there'll be work for you. Just make sure to get the message out that you *are*good, on top of being good. Network !
2- Maybe widening your scope is wise, but build on your strengths, don't branch off in a completely unrelated domain. Maybe if you do Android, that means iOS, or maybe that means looking into revenue generation so you can get into independent developing, or maybe looking into low-level (OS, drivers) programming, or maybe graphics, security, databases... Look around you: what skills would help you do your job better ? Which skills are most needed and rewarded in projects around you ?
3- The App bubble will burst for some, and strengthen non-bubbly others. Try and find a good company that's here to stay, with a business plan and credible income projections... not a flash-in-the-pan outfit that's mostly here to part investors from their money. Subcontractors/consultants are usually safer, inquire about the good ones in your area and make yourself known.
4- Don't forget the non-technical stuff. Dress sharp. Be pleasant to work with. Be frank and honest about issues, but don't be a bitchy diva, learn as much tech and relational stuff as you can...
The Cloud - because you don't care if your apps and data are up in the air.
Learn databases. Figure out how to make software which pulls data out of a database, does some simple calculations, then puts it back in a database. Also learn how to make software which takes data out of a database and puts it in a report. On the Microsoft side there's all sorts of frameworks and tools for this, and it's dead easy.
On the down side, you'll be ready to shoot yourself after a couple of months of this.
... and no-one employing you will expect you to have decent specialist skills for many years..
Apps may or may not stick around, but one trend will continue: the increase in service oriented computing.
I.e. computing functionality is being broken down into modular services (usually web services) that are simple enough and independent enough to be easily scaled horizontally but that can be composed in order to provide richer more complex functionality.
If you understand this architecture, it will help your marketability immensely whether you are writing end user interfaces (such as apps) or building the aforementioned services.
http://yetanotherpoliticalrant.blogspot.com
The more important question, from the economic view, is whether apps are overpriced. Given the number of free and 99 cent apps, and considering that we were used to $200 software titles before, that hardly seems realistic.
If anything, apps are evidence that the $400 productivity suite bubble has popped.
Stop worrying about the "app bubble" and build yourself a portfolio of working products.
In my case, I registered a .com address with my name and built a nice and easy to navigate website that showcases my finished products (complete with videos screen capped from the device simulators), audio and visual works, experiments, etc. For each thing I generally wrote down a little blurb about how I arrived at the results I attained, why I decided to do specific things and sometimes how I achieved my end goals (you have to be very careful not to divulge your techniques though).
The decision to hoist up my own website as my professional portfolio was probably the single most career-changing thing I ever did as a freelance programmer/graphcis designer/musician. Almost instantly, people stopped asking me for paper qualifications and prodding my history and started hiring me simply because they liked what they saw and I'm a nice person to work with. More often then not, someone will come to me with an idea and pick out something from my portfolio and ask me if I can make it as awesome as that. I'll typically say that I can adapt the design aspects they like to better fit their idea for a product, and off we go on a business contract together. I've even had a few offers for jobs from some local studios and one game development company. All of this came through my portfolio website.
So really, the best thing you can do is demonstrate your own skills by assembling a portfolio of things other people can see. If you can do that, then it doesn't really matter if the app bubble bursts. You'll have completed a few projects that you can showcase as a testament to your own abilities, and since a lot of stuff like C++ programming is cross platform you can use your portfolio as an augment to your own CV (or a straight out replacement).
If you can comfortably program something semi-decent in C/C++, Perl and JavaScript, then you've got the skills to learn any modern programming language within two days. That should be your aim. Forget about "having contingencies". You don't need them. You need to be able to learn them quickly. That'll do. As a programmer, you're able to learn. That's the skill you have. That's the skill you'd need. Add an older language, like assembler, or fortran, and there's no programming language that you won't be able to learn in a single day, and master in a single month.
The only thing limiting apps right now is small memory and slowish, low core-count processors.
More RAM and a faster CPU than my last PC had in the early 2000s. Didn't seem to limit it too much.
When your pad or phone has 16 cores running at 3 ghz, a decent ultracap power supply, 64 gb of ram... you'll look at that "app bubble" statement the same way we look at what the head of the patent department in the early 1900's was saying when he declared something along the lines of "everything important has already been invented", or the famous "no one needs more than 64k (or was it 640? Can't be bothered, both are equally ridiculous.) The little AI in your pad will laugh with you.
My server has 32 cores, 32GB of RAM and runs at around 3GHz. I haven't noticed it laughing at me yet.
As others have said, there are millions of apps in the app stores, and maybe a few dozen that are actually useful outside of a small niche market (or instead of the web site they're replacing). Most of the rest are just crap to bring in ad views.
I deliberately didn't mention C, because modern thinking is that you should start at the top of the programming language hierarchy and work your way down, rather than the other way.
Warren Siegel famously pointed out that most physics textbooks are history books, basically covering physics in chronological order of discovery. Basing your programming knowledge on C is kind of like that. Real physicists, even those working in the non-relativistic limit, don't use Newton's laws directly. Not when we have Lagrange and Hamilton's equations.
It is the simplest useful programming language, in the sense that it gives you the thinnest possible layer of abstraction on top of assembly while still being an actual high-level programming language. C is uninteresting, both as an engineering platform and as a science platform.
That's not to say it's not useful; of course it is. But I'm not convinced that learning C will teach you anything (other than C) that you couldn't learn with, say, C++. C++, after all, almost contains C as a subset.
The era when the most important thing you need from a programming language is to give you an abstraction on top of assembly is... well, it's not gone, but it's become a very specialist task. The primary job of a programming language today, for most people, is to support engineering. Real programs are multi-layered, and only the lowest layers are written in C style. Every good programmer needs to be able to do it, but every good programmer needs to spend most of their time not doing it.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
There's always a tech bubble. You'll constantly have to update your skills. Accept that.
Work on your non programming skills. Take some engineering classes, learn how to engineer something instead of hacking something together. If your future boss plonks something on your desk and says "do it", you should be the person who thinks about it, writes out the requirements, does some math, uses that to look for a solution, writes the documentation, etc... and THEN programs the thing.
Be that person, and you'll always get hired, because you'll do good work.... Hopefully. :D You'll still do better than the schlub that just hacks out a quickie solution. It will break. Or it will be too slow. Or it will not take future constraints into consideration. Or it will be poorly documented. etc etc etc.
You can already program. Make sure you can engineer.
I think you misunderstood my comment about Newton's equations. Applying F=ma to pretty much any real-world situation that isn't exceedingly trivial is much, much harder than most people think. You already need calculus to solve it, so the small amount about partial derivatives that you need to use the Euler-Lagrange equation is actually easier than doing the algebra. And the time is easily amortised over just a small number of physical modelling problems. IME, anyway.
Similarly, I would argue that it's easier to learn the relevant bits of C++ than to try to do anything nontrivial in C. It's a rite of passage, I'll grant you that, but it's also enough to turn people off programming.
Modern programming language features are not "simplifications", any more than currency is a "simplification" compared to barter, or a pen tablet is a "simplification" compared to a paint brush. They are advanced tools which enable you to control and manage complexity.
A first semester undergraduate subject which uses C is not really teaching software engineering or computer science, it's "introduction to the syntax and semantics of C". If you teach Haskell or Scheme first, you're really teaching computer science.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
follow the Hype Cycle. http://en.wikipedia.org/wiki/Hype_cycle
Phone apps will be no different. Just be sure to have a job during the trough of dissolutionment, or a day job you can pursue in the meantime. The real money is to be made after the hype curve when the technology matures.
Science advances one funeral at a time- Max Planck
The only real bubble is that companies like Yahoo are willing to pay lots of money for one-app companies with very little tangible value. You should only really be concerned if your plan is to try to make money by creating your own app and selling it to a megacorp.
Where the money is for mobile developers is not making apps themselves, but making apps for businesses that want apps to further their non-app-related goals. It's similar to websites in the 90s - while a few outliers were people making money on websites they were building for themselves, most web developers were making money by building websites for companies to achieve their other business goals.
I've been doing mobile development for over four years now, and this whole time I've been expecting hordes of developers to descend on the market and give me a lot more competition. It doesn't seem to be happening - demand for mobile developers is still far outpacing supply. It will be a good field to be in for years to come. Eventually the mobile developer market will be saturated, but this took a decade for websites, and the people who were any good didn't care because they had the time to build up loads of experience and put themselves at the top of their field.
If you find that you do need to shift your career path, you can generalise quite easily - Java is still widely used in other areas such as server-side web development, and Objective-C will let you write native OS X applications. Generally speaking, if you can handle mobile development, you can handle desktop development with ease.
Bogtha Bogtha Bogtha
No, it is relevant, because I was talking about apps. Not computer software for desktops, but apps. They live on tablets, phones, televisions and the like. I described it clearly in that context, and then he tried to make a counterpoint by bringing up something I wasn't talking about at all. I explicitly described low core counts and small memory. Clearly I wasn't talking about desktops. The subject was apps. "Preparing for the 'App Bubble' To Pop?", remember?
And in the same spirit, here's a tip for you: Since we don't (yet) know how intelligence works (ours or any other means to accomplish it), there's no cause to be assigning it to a list of unsolvable problems, or to be slinging the idea around that clever software would have already got it done were it actually possible -- most of the time, you have to know what you're trying to do before you can do it. I'll allow that it could happen by accident, but I'm also pretty comfortable saying that it very probably won't. For instance, if you set out to program a means to rotate an arbitrary cartesian XYZ-by-N object, but you don't have the required trig to understand how rotation works, you're not likely to solve the problem. AI is likely to be like that, only far more challenging and may require more hardware resources than anyone presently has to throw at it. So as far as accidental solutions go... I really wouldn't bet that way.
So far, every indication is that the mechanisms involved in the hardware (ok, wetware) are mundane in the extreme, but that the whole is presently out of our reach in terms of sheer numbers of computational elements and related connectivity. Knowing that our hardware is advancing at a rather formidable rate, there is every reason to think that it will reach a level where it can do enough to accomplish the required tasks. With any luck at all, by then we'll figure out what those tasks are, and make a working analog or metaphor for them. Some parts of the problem are already solved, such as associative memory, speech output, speech input (somewhat), image acquisition and storage, touch, smell (somewhat), and other sensory areas that we don't have analogs for.
Unless someone suddenly discovers one or more completely new features of the brain that use fields and/or forces and/or materials we cannot model, solving this problem can reasonably be assumed to be inevitable. And frankly, as nothing like that has yet been found or even so much as hinted at, it is highly unlikely that it exists at all.
As long as the solution can be codified in the digital world, we really only have to solve the problem once. Making AI #2...n could be as simple as a few seconds of copy time. There's also something to be said for the fact that an intelligent answer is just as intelligent if rendered in a second, or in a minute. So it's going to be about achievable complexity, not so much speed.
I've fallen off your lawn, and I can't get up.