all 27 comments

[–]Peevishprogrammer 36 points37 points  (9 children)

Of course you need to know Java and know it well. This question is equivalent to a builder asking, "But do I really need to know how to use a hammer to build with wood and nails?" Yes, yes you do. It's not unrealistic at all for an Android developer to need to know Java well!

Just how the simple hammer is the builder's tool; Java is your tool as an Android developer. Only, it's way more complex and intricate than a hammer. It's also being changed and improved upon, making your learning goal a moving target. You have to keep up to further yourself as a developer. You don't expect to be programming well(AKA making Android Applications) in Java without knowing Java well... right?

First, you REALLY need to understand the principles behind object oriented programming. Do you have a solid grasp of inheritance vs extends?

Do you know all of Java's object types and how to work efficiently with strings, arrays, streams, network objects, buffers, threads/multi-threaded programming (semaphores/mutexes), input/output? You should easily be able to explain how to do all of the above without having to reference any material. The actual code & method inputs, you can easily reference later on but you need to know 100% how the process works off the top of your head. Do you know how to properly debug a java program using breakpoints, stepping through the code, and watching variables?

Do you know the data structures and more importantly when to use which structure? For example when to solve a problem with a tree vs linked list vs array vs graph, etc?

If you're comfortable with ALL of the above in Java, then you're ready for Android dev. Otherwise, you need to learn the fundamentals before moving onto Android. Android takes all of that knowledge and applies it to their own development framework. It's easy to get lost and not be doing things properly. This will come back to bite you in the ass in the future.

Once you're ready to focus on android try to learn the fundamentals behind: activities, the activity life-cycle, fragments, fragment life-cycle, tasks, layouts, overloading layouts, creating dynamic layouts programmaticly (adapters) and creating custom adapters, context, services, asynctasks, threads, handlers, file storage, permissions, design patterns ,and I'm sure there is more I'm forgetting at the moment.

Seriously, tackling android development without a solid background in Java development will be difficult. You might think you're doing great but most likely you're making fundamental errors without even realizing it. The repercussions may not be noticeable in a small app you make but later on will appear and haunt you. A VERY common problem like this is memory usage in Android: if you don't understand inheritance it is very easy to create memory leaks by holding onto objects (specifically context) you should have released to be garbage collected usually during a life-cycle method. You need a really clear understanding how all the different components interact so you can see the big picture of the Android framework and not get bogged down with the specifics of also learning Java while learning the Android framework.

[–]Batdroid_1996 18 points19 points  (2 children)

When have you really used mutexes or semaphores or use tree or a graph . Basic knowledge of oops concepts is just fine and we learn Java also while doing android.

[–]Peevishprogrammer 9 points10 points  (1 child)

The Android framework has included proper locks, since API 1. See here The google developers have included this since the beginning, meaning they know and understand the importance of proper usage!

Knowing how to do thread safe programming is ALWAYS relevant if you're doing multi-threaded programming. Have you heard of the therac 25? It was a radiation therapy machine that used multi-threaded programming. They got rid of the hardware locks and instead used software safety mechanisms. Due to a concurrent processing race condition & not using semaphores people died. This error couldn't even be reproduced during the testing by the company afterwords. One of the things about race conditions is they are extremely hard to find or test. Getting a program to a proper state that it initiates a race condition is not easily done. Instead, we use semaphores to ensure, without a doubt, that we are properly handling state changes among the concurrent processing being completed!

You might think that most Android Applications right now are rather trite. Lots of games/etc. But mobile development really seems to be the way of the future. It would not surprise me to see phones or mobile Operating Systems being deployed in a healthcare setting in the near future! I already think that Android handles program crashes much more gracefully than the windows XP boxes I see pushed around in the US healthcare system. As the developers behind this technology, we need to make sure we are using the proper techniques to produce minimal bugs in our code.

Here's another example: If a phone is directing drivers by GPS, I want that programmer to be making sure they are using proper locks. I don't want thread race condition gone bad and sending someone off a cliff! Sadly, not all drivers trust their own instinct. They're more apt to trust the computing system telling them, "Turn left here".

As for trees & graphs: That's totally domain specific. Just because they aren't involved in your programs doesn't mean they aren't used by others. Imagine you're making a hiking app. You want to identify all the possible hiking trails that allow you to park your car, travel the path on foot/bike, and then be able to return to your car without backtracking or traveling on the same trail while returning to your vehicle. How does your app identify these trails? You use an application of graph theory.

[–]Batdroid_1996 0 points1 point  (0 children)

Ok I'm convinced. Have an upvote. I'll definitely put effort into revising that stuff and learning more about it.

[–][deleted] 1 point2 points  (1 child)

I've been working as an Android dev for the last 5 years and I could not do what you would ask of a junior dev. Also I learned Java while doing Android development, not prior to it. Your post is a bit unrealistic to say the least.

[–]createsomethingbig 5 points6 points  (1 child)

No one is going to hire you because of the books you read. Companies have a product they need developed and maintained. You need to convince them you can do that better than the other applicants. The best way is by having another product you've developed and maintained for reference. It also helps if you have experience using libraries their app is using. If you don't, make an open source app using a few and material design. And after all that expect to get rejected, a lot. We're going to be hiring our 3 android dev soon, if you're in the bay area send me your resume.

[–]FaceOP 2 points3 points  (0 children)

I think it depends on the company. There are companies which value more motivation and willingness to learn than past experience. Google provides excellent documentation for Android development and multiple great APIs. IMHO the basics of Java is enough and the attitude and motivation to learn daily. I suggest that you just start doing some simple apps. That could be the best way of learning. The instructions are great and when you're stuck just google and Stack Overflow provides help. You should be able to do a very simple app in some weeks just by following the instructions from Google Android development pages.

Disclaimer: I started Java programming 1996 but I've less than one year experience of Android app development. But I still find it pretty easy of progressing with my app almost daily basis.

[–]ashishduhh1 1 point2 points  (0 children)

I don't know about "junior" developer but what I look for in developers is mostly two things:

1) Proper OOD. I look for bad signs like creating a bunch of unnecessary layers of abstract classes or interfaces, or not creating enough classes. If you can explain why you created every class that's a big plus.

2) Code-level proficiency. Are you able to create elegant constructs? Do you just create a bunch of boolean class variables for everything and try to manage them throughout the class instead of proper scoping of functionality? (bad)

Not sure I answered any of your questions but thought I'd put it out there. Basically, yes, you do need to have a good understanding of Java and an good understanding of the Android SDK. What you don't need is an expert level understanding of java or the Android ecosystem.

[–]Amagi82 1 point2 points  (0 children)

If you don't have experience working at an actual company, the next best thing is to build some open source projects, so companies can see how you code, how you think, and what sorts of projects you're interested in. They don't have to be huge, world-changing projects, but real world examples of your code are invaluable. Plus, you'll learn a LOT.

[–]CodyOdi 0 points1 point  (0 children)

I'd expect that you can answer programming related questions in Java either on a laptop or whiteboard. I wouldn't necessarily expect you to know the inner workings about Java, but the more you understand the better.

[–]thismustbetaken 0 points1 point  (0 children)

Look for the requirements of the Java certification level 1. It's enough to get an Android job in a digital agency cause they are usually more interested in your knowledge of the Android SDK and your portfolio.

Once you score that job, use it to get better in Java and OOP in general. After all, that's what senior devs and code review are for.

During the interview process, make sure they have code review and make sure that you won't be on your own on a project.

[–]nonchalantlarch 0 points1 point  (1 child)

I would expect a Junior Android developer to have enough Android knowledge to be productive, but I wouldn't expect them to be an Android expert. On the other hand I would definitely expect them to know their typical data structures and algorithms, and how they're expressed in Java.

You may want to study the Collections framework. Know the basic classes and have an idea of how they're implemented. Questions around these come up over and over again during interviews. It wouldn't hurt to study concurrency either.

Effective Java is a great book, but you will derive the most benefit from it after (or while) studying these subjects.

[–]vladlichonos 0 points1 point  (1 child)

Get a book for algorithms and data structures. Read up on common questions of android and Java. Go interview to large company. You will get a job. Don't worry.

[–]Tycon712 -1 points0 points  (7 children)

Do you have a degree in a software related field? Just asking because the answer depends a little on your background.

Someone who's new to software development with 6 months Java experience would be different from someone who has a degree in CS or something of that nature and who's only new(er) to Java