Different aspects led me to learn Android as fast as I did, including my background, my struggles, and the hacks I used.
What did I know before attempting to learn Android?
Your base conditions impact what you pursue. Below are few of my base conditions that helped me in my learning process.
- I used to code on so called legacy systems like mainframe in the early stages of my career. So I knew basics of programming, and more importantly, algorithms.
- I had learnt C, C++ (more of theory and very less of practice) in college.
- I had tried to learn java before, so I knew the basics of object oriented programming.
Every one has mental blocks to doing something. Identifying and tackling them are as important as learning itself. These were some of mine..
- I am too old to learn something new
- I do not have enough time to learn
- I can’t learn and build the product at the same time
- Time is too short for me to achieve this
- I am not a cool “coder”
- I do not know a lot of theoretical concepts of coding like multi threading, pooling etc
- Can I code? (as if only “certain” people have been chosen by God to code in this world)
Every one, even the “cool” coders have such insecurities. You can only get over it by acting — by constant learning, not by getting scared and giving up.
The importance of “why”
Like a lot of people, this was not my first attempt in learning any object oriented programming. I had tried Java, Ruby on Rails, Python, only to lose interest and not pursue coding. I attribute this to trying to do something for fragile reasons. The key to be interested and curious in learning something, is to find a direct relation between what you are doing and what goals you are aspiring for. Your actions “should make sense” to you.
In contrast, this time I was building my first app for my first startup, it was something central to my core —
- I am significantly contributing to my startup by building the product [contribution]
- I am learning a new skill something that would greatly enhance my life as an entrepreneur [intellectual growth]
- I could start earning if I build properly [security]
- I can impress my team by building it faster [social status]
I spent 14 hours every day, coding my day out. This is not to glorify the long hours I put in, but to emphasize that once you find the “why”, you can unleash the energy within you to achieve anything.
Basics to learn coding
Coding has its own intricacies. Knowing them can speed up your learning process.
- Basic understanding of algorithms — convert any problem in to a series of steps to attain the final result
- Basics of the language — for Android I used the big nerd ranch guide. Its a great place to start, it runs you through some examples which you should try. It gives you a place to start quickly by giving you components over which you can build your app.
- Coding is like painting. You draw the outline first. Then you add layers to it. So start with basic premise of what you are trying and then you can add more components to it. Start with the skeleton. And keep adding component parts to it.
- Gamify your learning. Keep taking more and more challenging things to build. If you see a cool feature in your favorite app try implementing that in your code.
- Be visual — I get really enthusiastic to replicate a design visually. If I can mimic a cool feature I can spend hours in learning, without knowing.
- Come up with more ideas. I learn more when I think of new ways to improve something or innovative features to build. You think there is a better way to get inputs from people without manually entering anything? Or a better way to display the photos or the various menu items? The more you try to bring your ideas alive, the more you learn.
- Use Google, Stackoverflow. Say you want to do scan a qr code function and generate a result . You do not know where to start, go to stack overflow and type “how to scan a qr code android”. You will find so many examples with code. Try them out.
Myths about coding
- You should know each and every syntax — Nope. Android studio gives you enough tools that will automatically fill in the full syntax.
- You should be extremely smart to code — Bull@#$ . This is what people in any domain wants to believe, that what they do is too smart. And if you are still not convinced, read The Mindset by Carol dweck.
6 under-rated things that can help you grow
- Keep learning, learn something new every day. Just do not copy a piece of code and use it. Understand the logic behind a way of coding.
- Keep the intent of improving your code by 1% every day. This means better comments, better algorithms, faster methods, neater functionalities over a period of time.
- Keep challenging yourself to do more complex functionalities.
- Read. A lot. Check on blogs like High scalability. Subscribe to Android weekly newsletter. You can also read more about just coding and hang out with coders on news.ycombinator.
- Go to android events and conferences. You can learn a lot from a bunch of smart people who come.
- Focus on the learning, understanding. Do not focus on how fast others code or build something. Focus on the process. And keep at it till you achieve the results
What will make you feel like you have learnt something
Ultimately, anything you learn is useless if you have not been able to create anything out of it. Following are some of the ways where you can realize the value of new skill
- If you have an app that people can try and give feed back on
- If you can feel that you have done something of “use”
- If you can start having conversation on “coding” and android with other coders
- If you can build stuff that can make a difference to others
- If you are trying something that drastically improves user experience or reduces effort, cost, time
- If you can take your learning and share it with others through your blogs, youtube channels and what not.