Android personal experiment 1 year & 18 Failed interview processes
After some time working at same place I decided to challenge myself and move forward, to see what was happening on the world, around android and software development, learn differences between many types companies, learn how all works, find some place to learn more.
how was it? was hard, so many weekends working on tests, so many of my free time doing Skype interviews, I got also some free flights for some cities around Europe, and a very interesting experience.
what I learned from processes? They are so different! but I could identify some similarities and huge differences between them, for example all of them include a first Generic interview, used to “explain” your experience, so you can expect some questions like: which was your big challenge project and why? or how was the way you work? very generic stuff, be relaxed and please speak you, don’t wait their questions, that allows you to take the control about what you want to say.
Technical Interview or app to develop
This is different, Big Tech companies do it in a Californian traditional way, HackerRank style coding challenge so prepare yourself for at least one month before do it, unless you are just recently out of University and you have all the theory of Software dev fresh enough.
Other companies have a more understandable kind of test, usually an app, most of them are this style:
1) App with a list containing some items obtained from web services, then you click on them and show a detailed stuff. (use all libraries that you want) The idea with this is see how you approach the development so be careful about architecture, use RxJava, Dagger2, and Retrofit if you want go forward on interview process even if for this simple app should be not necessary and is unnecessary over-coding doing it, but you know is trendy.
2) App with specific demonstration of high level of some skill, for example:
super tricky way of RxJava use… so they suggest you use RxJava to solve the problem and then you have to figure out how to use it in an advance mode.
3) PURE Android app, so do all by yourself no use of third party libraries! please check for android the best practices!
PLEASE FOR THIS PART WRITE A README, IN CASE YOU DID SOME ASSUMPTIONS, EXPLAIN THEM AND SAY WHY YOU DID THEM! THAT SAYS A LOT OF HOW YOU USE YOUR BRAIN!
Technical interview review
So you did a reasonable app with all things company wanted to see, then what? Usually two different approaches that are possible to be complementary:
1) they will ask about the app you did they will go deep, kind of questions: why? how works? What if we change this? how works this library? what if we want to support android 2.3?
2) they will ask about other things of android not related to the app, more about Android theory questions like: which types of intents are in android? What is a loader? what is a memory leak and when you should expect them? difference between Service and IntentService…
3) they will ask about so much theory about JAVA, kind of questions: polymorphism, what means abstract, what is final keyword for?
wait for them then… if all goes good they will make an offer or in some cases an extra interview with CTO and those other generic interviews.
What I figure out of all of this? what i learned? What do I think?
I figure out that many of these types of interviews actually don’t evaluate so much and are senseless, why? because are easy to trick, is all about memory, not about analysis.
For example for android challenge apps I actually did a baseApp and app modules that without so much modifications it can adapt to many of the required things on challenges.
are useful theoretically questions? There’s not so much you can learn about how someone develop or how good someone can be solving a problem, asking about if he remember exactly the difference between static and final variable in java… why? Because we all learned in different ways, because the tech is continuously evolving, because today we write code in java but tomorrow maybe in Kotlin or Swift, actually the concept that you memorised just… will not work. I think on tech environment the things have to be more about how a developer can adapt to changes and mental approach to solve a problem.
For example what happened when reactive programming took the priority on environments like web or mobile… so many developers actually didn’t know “how to think” in reactive way, and it was so hard for many companies implement it because their developers were so deeply masters of traditional way to do web dev, or singleton approach for android that was so trendy some years ago that they just didn’t want to change the way to analyse.
I think from this point of view are better the Big Tech companies, at least they ask about how analyse, but actually is so smart use a traditional Software dev problem (btw is highly possible you will never use in real life) for example The Even tree problem.
I think this is why in so many cases you find yourself working with colleagues that you expect so many things but… it never arrives because he just know how to answer your questions and just that?
Very Big problems!
A big ugly problem that I find out is the “Android company developer”, why? because we all know we have huge ego, not all the persons are open, and everybody have their own way to decide what should know a good developer just based on what they already know, and what they learned on past. The thing is, we should work together but we have not think in same way, because actually is just… boring? you will learn nothing from me and I will learn nothing from you is a good statement? maybe differences make us stronger?
For example in android The DataBinding… there are some people who like it and they think is super cool and useful and magnificent, and other people like me that think is not good way to do the things, it doesn’t mean I cannot do it. Or learn more about it. In other cases is just about: you didn’t answer good “the question” that for me makes you a good developer, even if you know more about something else that can be useful, even if you did all good, and so on. or you were just tired after two hours of interview after work. I Think for this case is better use a website or some impartial method or list of questions or external resource.
What is the coolest thing to be a developer? the open source concept, that all we share and work and help us to be better, the best expression of that is shown in StackOverflow is cool see how two or a lot of unknown persons help each other to solve a problem without expect something in change.
What i expect from this? just share knowledge, share experiences, maybe someone want to change job and wants to know how’s going to be? how to deal with interview processes, maybe help to make the interview process better, i learned a lot of how android is evolving in many places in many companies, in different countries.