Why Android For Me ?
Android have been around since 2008/09 but I just jumped into the bandwagon 1yr ago and because of my passion with Android I’ve setup an Android blog called ozAndroid. The blog is about anything and everything Android and every time I come across people and told them about the website they asked me the question why are you into Android and why you setup your own website, what is your motive of getting into Android. Every time I always give a very simple answer – I love open source and I love Android. In reality the answer is deeper than that and thought I spend a bit of time outlining the the rationale behind my love for Android.
Open Code
This is the primary driver why I want to go deep into Android. I’m a developer at heart no matter what role I played in my professional life, I love looking at code. Nothing is more powerful and more exhilirating than looking at real production code and see it works. Google open sourced Android since day 1 (except for few Google’s apps) and they have committed to that promise until now. Google is a strong proponent for open source, I can’t see it any other way for Google to have a successfull product other than open sourcing it.
Linux
Linux is the heart of Android and without it Android (or even other mobile OS) will not even exist. This is the added bonus you get with learning Android that you will also learn about how Linux works and the nitty gritty of Linux – from bootloader, kernels all the way upto device drivers. Linux as a software is fascinating at the same complex, but if you learn it piece by piece you will know that it is not that hard to learn about Linux internals. Linux have been in the market for a long time so you can imagine the sheer amount of information and expertise that is out there on the ‘net. I started learning Linux kernels by reading code and also complimenting it with reading few books such as Linux Kernel in a Nutshell and Understanding the Linux Kernel. Learning Linux kernels it not only learning Linux as a software itself, I also start digging into hardware and learning about the processor, memory, etc and how these different devices comes together in Linux.
Learning hardware is very foreign for me as I don’t have electronic engineering background but that’s what drives me more and more into learning deeper on how the different hardware works together, you can say I’ve found something that I need to itch. I admit though, that learning kernels from the internet is hard because there are so many resources out there and you get overhelm and also you don’t know where to start and what to read first. This is where I turn to the books I mentioned before as those books (even though bit outdated in terms of publication years) can give you pointers how and where to start learning about the kernels. There is no silver bullet in learning kernels you need to find out what you are comfortable with. I’m more comfortable with reading code but referring to books as a starting point and as I understand more about a topic I dig deep into the ‘net to find what I need. The other best place I found was going through website such as github, I have made few friends by communicating with developers whose project are hosted in github. Most developers are more thatn willing to help out as long as your questions are clear and tell them exactly what answer you are looking for and also what you have done so far to understand about something. We as developers are blessed with the ability to network with so many different talented engineers around the world, and now is the time to tap into their knowledge to gain more knowledge for yourself.
C/C++/ASM
The other reason why I was attracted to Android was because of the language it was written in – C/C++. I’m a strong believer that no matter what language you use – may that be Ruby, PHP, Scala, etc, it still goes back to the root. I like to call C/C++/ASM language as ‘Bare Metal’ language, and it’s been eons since last I’ve used them. I’ve wrote a book before (it was written not in English language) when I was 17yrs old back in the days of Turbo C++ 1.0 and I guess it’s true when they say ‘First love never dies’, I’ve always had a thing for C/C++. For me learning C/C++ was a natural fit and all I have to do was refresh myself on how to use it again and also learning more about GCC at the same learn how the whole things work with Linux.
Going into C/C++ and also ASM kills 2 birds at the same time for me, on one side I will be using it for Android (may that be user or low level coding) and also Linux. The ASM part is needed to learn more into the hardware side as most of hardware initialization and to understand the hardware side will need me to learn ASM again. The ASM that I have to learn is more for ARM as most of Android devices runs on ARM hardware, however that could change in the future. Nonetheless, by learning C/C++ this will give me an advantage that if down the track there is a new technology after Android it won’t be hard for me to jump as I have all the necessary knowledge on coding in the language, and you can’t go any lower than C/C++ and ASM combo.
Embedded
I’ve been doing coding on PC for as far as I remembered, and this closed me from knowing that there are more world than the PC world. I came to understand and learn about embedded when I came across Android, the more I dig information about Android the more I can see how closely it is related to the embedded world, not to mention the history of Android. Embedded market is bigger than the PC market and it is a very different world than what I was used to. Embedded system is different than the PC world, in embedded you do need to understand hardware as electronics and need to learn the basics of electronics. I never thought in my lifetime that I will be touching hardware but because of Android I’m really into electronics and now I’m coding into the bare metals in ARM processor. Learning electronics enable me to see coding in a different way, I always thought that everything in PC runs on 1′s and 0′s but after learning embedded I now understand that everything is drivem by voltages (0v 0r 5v). Because of the exposure I have to electronics I’m able to understand better how Android can be run on different system (besides mobiles and tablets) and what is needed to run Android properly on an embedded system.
Mobile phones have different kind of sensors such as GPS, Accelerometer, Radio, etc. Undestanding how these different sensors work and how it is being used in Linux and in turns the Android apps communicate with them is what interesting as this touches the different Android layer from the apps layer all the way to the hardware layer. This kind of sensors are now gaining traction is because the ability to manufactured them in such a small package that it can be integrated into the mobile phones, and this is what drives me to understand how do you use them inside and outside the phones. This ties in nicely with learning Linux, Hardware and also the C/C++ programming. Some of the books that I read for embedded topics - Embedded Linux Primer: A Practical Real-World Approach and Building Embedded Linux Systems
Most of my career I’ve been doing lots of back end coding in Java space, sure I do write code for front end but at heart I’m not a UI person. I know how to write the code to come with a UI but I can’t come up with a pretty UI for users to look at. Learning Android have given me a different perspective on looking at UI, what I found was the UI makes a big impact regardless how bad or good your backend is. Designing UI for embedded devices which have space constraint do require certain skills than designing for web UI. In PC world we take drawing a window for granted because it is available but in embedded world this is a big issue because you need to find a proper UI library that you can use for your product. With Android all this are provided but it do takes time to really understand how the whole UI framework works and how to use them properly.
As you can see the reason for learning Android is much bigger than just Android itself it’s a whole new world out there that I haven’t touch and I’m sure many of us developers must not have heard or used what I’ve discusses here. We are living in exciting times where things are getting smaller and faster and we are blessed to work in industry that always comes out with something new and exciting before you can finish learning what you are doing at the moment. Passion and patience is the important ingredient in learning things and as long as we have the drive it’s not easy to do things at the same time. I’m really excited about the potential Android and it’s ecosystem can bring to us and future generations.
Comments(1)






