• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps Thinking of becoming a developer...

I am considering getting into app development for cell phones such as androids and iphones. Problem is, I've basically have zero programming experience, although I'm generally pretty sharp with computers.

Question is, what skills are needed to get good at it, starting from the ground floor. I can't find any posts like this, so if someone could just let me know "first you need to learn this... helps to have a degree in..." stuff like that.

I'm not saying I'll be good at it or anything, I just want to know what it takes.

Thanks very much!
 
Don't let this prevent you from trying, but I would really suggest understanding creating applications for desktops before going mobile. In many respects, mobile development can be more difficult because you must account for limited resources (or more specifically, you must account for the operating system accounting for limited resources).

Java is a decent first language and there are lots of helpful resources. Perhaps try creating some small console-based applications on your desktop. If you seem to get the hang of it, try a Hello World application for Android and work your way up.

A good head of common sense will allow you to create some very basic things. There are enough examples out there. Your next step would be learning ListViews. For a new Android developer, they're one of those "you think you know, but you have no idea" kind of things. Once you think you have the hang of it, watch Romain Guy's Google I/O presentation on ListViews and refine your skills. If you're looking to create some really useful Android applications, watch Virgil's Google I/O presentation on REST applications. Creating real, functional, useful applications is going to require a deeper understanding about how the Android platform actually works.

Honestly, as you're someone with 0 programming experience, even if this is just a hobby, you may want to invest in an entry-level Java programming class to get you acquainted with some simple, yet necessary concepts.
 
Thanks, Andy... very helpful post. So basically, strong Java skills are the foundation of Android development?

And on the subject of classes, I was considering a career change, which may include going back to college. Do you know of what degree would be best for software development and the like? I've seen degrees in computer science and IT, and I'm not sure what the difference is.

Again, thanks for the help.
 
As a programmer with no experience, knowledge of programming concepts is important. It's not so much the syntax as you can find many code examples and discern proper syntax. Java is [syntactically] a fairly simple language to learn. It also does a lot of memory management for you. You just need to grasp ahold of a few concepts.

(Note: At some point, I would learn C++. I'm very conflicted when it comes to helping someone choose their first language. C++ is not an easy language to learn as your first language. However, in an attempt to make development easier, other languages like Java hide some things from you that you'd be forced to learn with C++. The problem is, these things are beneficial to understand, even if you're programming in Java. The good news is Java is very syntactically similar to C++. So the best choice may be to spend some time learning Java and then try to jump into C++, simply to learn about how memory is really passed and managed.)

However, as I said earlier, mobile development is a different beast because mobile operating systems behave differently. The big difference is a mobile operating system's inclination to pro-actively kill processes and reclaim their resources. You have to code in a manner that assumes your app could be forcefully killed at any time. To effectively do this, you'll need to really understand the Android system, programming concepts, and Java. Mobile systems are not lenient like desktops. They're slow, low on resources and run out of power quick. This is also the reason why the Android Market is saturated with really bad applications.

(Note: While languages have caveats specific to them, many concepts cross languages. As a developer, you come to understand that syntax isn't particularly important. A good developer could write an application in a language they've never used before. The concepts are what are important.)

As far as your career change...

You'll need [at least] 1 of 2 things to get a programming job: 1) experience 2) a B.S. in a computer-related degree or above. At this point in the industry, having no experience, really the only way to break in is to get a Bachelor's degree. There are many developers with no degree, but the vast majority are older and have a decade or more of professional experience.

If you're looking to become a software developer, I would recommend a degree in Computer Science. Though understand that Computer Science is supposed to be less of a programming degree and more of understanding the theory behind computing (majority of your classes will be programming classes, though). At first, I didn't find much value in this, but as I grow as a developer, gain responsibility, accrue a greater understanding for systems, and learn to develop for different systems, I begin to appreciate it. It will also be very tough to manage a full-time job and get a degree in ComSci. Not that it's impossible, but it won't be easy. You'll be stressed.

Edit: Somewhere in this post I suggest that high intelligence is not a key factor in programming. Do not confuse that with Computer Science. There are classes you would take in Computer Science that do require a particular level of brainpower.

Typically, an IT degree will get you a job as a System Admin. Meaning you know your way around an Operating System and you have an understanding of networks, such that a business will hire you to keep their business and people running efficiently (you fix people's email when it stops working).

Some of this information may seem daunting, but I really don't consider software development to be for the particularly intelligent. I know very intelligent people who can't do it. It's more of a way of thinking. Some people think that way, some people don't. Of course a little common sense will go a long way, but that goes without saying. That will help with anything.

If I were you, I'd go to the bookstore, buy a book on Java development for beginners that reads like a textbook (examples, problems to solve, maybe some small projects, etc). Read through it, do all the problems, do all the examples, ask for help when you've tried and really don't understand something (pro tip: when asking for help on a programming forum, read the sticky post about posting guidelines and be sure to imply you've really tried to solve the problem on your own). Ultimately, books won't do you the justice that schooling will, but trying some on your own may elude you to your probability for success (I took my first programming class in high school. The teacher handed us our textbooks and told us to do exactly this and be done with a particular chapter by the end of the semester. In my case, the chapter was 5 and I happened to finish all 16. As I said earlier, it's a way of thinking; not about intelligence. I'm not a particularly intelligent person).
 
I think Andy has a lot of good suggestions but I'm not sure I entirely agree with the C++ recommendation. I agree it can be useful for the reasons he cites but I don't think it's necessary to be successful. I've been a developer for 16 years in C# and Java and I've never written in C++ and still struggle to read it. I'm perfectly happy letting C# and Java/Android handle my garbage collection. I think the concept works fine for most apps. Consequently, I think low-level understanding of what's going on in memory is increasingly unimportant for most developers. Or maybe I'm just being lazy and advocating sloppy code. :)

If your interest is in application development, I'd say focus on Java and Android or play with C# and Windows; both have nice free tools to get started. I'm afraid C++ might prove to be too intimidating and add to the initial confusion of starting from scratch. BUT, if you really want to know and don't mind the added challenge, then jump in and take a gander at C++.
 
Some people get by without understanding memory allocation and disposal. Some think they do. You may not be seeing it syntactically, but it IS happening and you CAN cause problems. It's not something you simply don't have to worry about because Java just magically protects you. When you become more versed in C++, you can easily surmise precisely what Java is doing for you and, consequently, fathom how it can unknowingly be abused.
 
true, but for a beginning programmer it can be a real pain in the ass to learn c++. He'd be better off learning the programming concepts and a simpler language like Java first. He could decide later if he wants to know more about memory management or not. You'll probably run into it sooner or later so by that time you can start looking into it.
 
I think for now, considering I don't know what I'm doing, I should try Java first. If I get the hang of it and/or like it, then move ahead to bigger things. I did teach myself some basic on my Apple IIe circa 1988, but essentially I'm starting at square one.

Problem now is, my Mac makes it confusing because it's called "cocoa"? All the free books online teach it as if I'm using a PC, so is Java on Mac the same as java on PC?
 
My 2 cents: I've been programming for 10 years. I never took a course once, and I think I do pretty well. What really works for me every time I want to learn a new language (i'm on C++) is that I find a completed project and I modify the hell out of it until it breaks or does something different.

The Android SDK (Software Development Kit) comes with an ApiDemo that shows you a bunch of stuff Android can do, and there are some sample games. I'd find an Open Source Android Game to modify and go from there. Try to add another enemy/challenge/picture or anything to the project.

Anyways, thats what I always do because school isn't my thing.
 
My 2 cents: I've been programming for 10 years. I never took a course once, and I think I do pretty well. What really works for me every time I want to learn a new language (i'm on C++) is that I find a completed project and I modify the hell out of it until it breaks or does something different.

The Android SDK (Software Development Kit) comes with an ApiDemo that shows you a bunch of stuff Android can do, and there are some sample games. I'd find an Open Source Android Game to modify and go from there. Try to add another enemy/challenge/picture or anything to the project.

Anyways, thats what I always do because school isn't my thing.

That's actually a pretty cool idea. Thanks.
 
Back
Top Bottom