Don’t UNDERESTIMATE yourself!

I have been a full-time Android and iOS app developer for almost three years. I had never thought I could enter IT field after graduating from the university, because I am not major in Computer Science related subject. Instead, my subject is Biomedical Engineering which focuses on applying modern technology on biology related fields. For example, writing a Matlab program to indicate the location and size of cancer cells in a CT / MRI image, making a circuit board for monitoring the usage of a saline bag, and doing biochemistry experiments just like a student major in Life Science.

A circuit board that I made for monitoring the usage of a saline bag.

It sounds weird to be a software developer with only Biomedical Engineering background. But nothing is IMPOSSIBLE when you pay enough efforts on the thing you really love! Never underestimate your strength.

Great words from Micheal Jordan

I would like to share my little history starting from the university life to my career in programming industry, and also some interesting things that I have experienced on and gained in my career. Hope this can inspire any one of the readers here. 😉😊

University life

I chose Biomedical Engineering as my subject in the university because it was interesting that students could apply Physics, Mathematics and Computer Science theory into Biology. I could do lots of experiments in laboratory and observe some subtle behavioural changes in cells or electronic phenomena. There were both many achievements and fantasies from the courses and I enjoyed my school life a lot.

MatLab is the first programming language that I have been mastered of

After my graduation, I became a research assistant in the university and was responsible for programming some MatLab programs for analysing radiation. That was the starting point where I found myself really loves programming a lot. I started watching online courses and reading blogs about programming and computer. Visual Basic for Excel was mastered in those years since Microsoft Office was the easiest way to start my mini-projects and applied to my daily routine.

My first app

The turning point was the second year of being a research assistant. I was ordered to program two simple apps for a big conference. It was challenging to me, although it was only a 6-paged app! I started googling materials from the Internet and watched a lot of online tutorials for making apps from scratch.

Luckily, I could finish my tasks on time and got some appreciations from the attendees. I felt great when I realised others thought the app was useful and user-friendly. The sense of success was greater than whatever I could achieve from writing any thesis or doing any experiment. From that time, I started to change my focus from academic research to mobile app programming.

Thanks God !

God always lead me to a way that I have never imagined and is the best I should have in my life! I became a freelance programmer in a church uncle’s app company for a few months and was given an opportunity to work with a group of full-time app developers. That was a precious experience and I learnt lots of practical skills in programming, e.g. database management, network request and response, and UI / UX considerations, etc.

With this great working experience and further self-study on app programming for around a year, I decided to leave the university after long-term and serious considerations. I finally got a position in an app company as an Android and iOS app developer, and have worked until now.

Learning pattern

During the 3 years of full-time programming life, I have tried many different ways to study new technologies and dropped lots of notes in my notebook. I did something stupid but also something smart. Thus, I want to share my learning pattern and some kind suggestions to you. Hope you could find anything useful.

1: Code repository VS Notebook

“Code repository” is probably strange to non-IT readers here. It can be simply considered as a bucket containing all your programming codes and be hosted at several free online platforms (e.g. Github and Bitbucket). With the help of free versioning software (Git), I can monitor the repository history and instantly roll back to any of the previous nodes to test for new features.I treat it as an electronic note book for studying programming knowledge.

In the 21st century, technology grows and changes rapidly throughout years, and lots of programming codes are deprecated and replaced by new one every year. Lots of tedious corrections have to be made if I write down my codes in a note book. With the help of code repository and IDE (Integrated Development Environment), old codes can be updated instantly with just a few clicks! It is convenient to keep my codes up-to-date.

Concept of nodes and branches in a code repository

Moreover, branches can be created in a code repository and each branch can be represented as an independent learning path. I can switch between different branches to compare the performances and features when I want to. It helps me to manage my progress in a more tidily way.

2. Self-learning

The second thing I have gained in these years is “Falling in love with self-learning”. Programming is a very large growing area. Lots of new codes coming each year. No one can understand every underling concepts at a rate faster than the technology growth rate. We could not expect someone to explain everything to you step-by-step in details. There must be some blind points at his / her point of view. Under this circumstance, you should get used to finding and reading materials yourself along with others’ explanations. In one sentence, self-learning is the most important step to achievement.

In stead of going to library and borrowing printed books, software developers usually read online materials, which are more specific, up-to-date and time-saving. With the help of Google search, StackOverflow, YouTube and Medium, my horizon is much widen and my understanding is much deeper.

StackOverflow is a forum-like website for anyone to raise questions and answer others’ questions at the same time. It forms a very good and effective way for developers to discuss about an issue from different aspects of view. This can help me to reveal my blind point and explore some new directions I had never thought of.

YouTube is also one of my favourite websites but I do not watch video clips for entertainment only. Beside those game-review YouTubers, there are actually many YouTubers who are programmers. They would like to share up-to-date news, practical tips and tricks on programming. Audio explanation on programming codes is usually a better alternative when you could not understand a long and dull article. I treat YouTube as an audible newspaper and dictionary.

3. Learning path

Reading and copying a solution from an answer in StackOverflow is very simple and effective. You could fix your issue within 1 minute. However, we should instead focus on the underlying concept and explore your unknown area.

In my experience, I would recommend others to read the official documentations (e.g. Google Developer Guide) or even the open source codes (e.g. widgets in AndroidX) directly on GitHub. I believe they are the best way to really understand the underlying concepts and help me to be aware of different possible circumstances.

Authors at StackOverflow, Medium and YouTube are all referencing to the official documentations. However, they trivially could not include all scenarios in their 10-min posts or videos clips. They also need time to update their posts every time after official APIs are changed. Therefore, the most reliable and up-to-date information can only be found at the official documentation and open source codes.

4. Sharing is important

Sharing is the most valuable culture in the company I am now working at. We have 3 sharing sessions every week. Each session is 15-min long. The content is not limited to app side and can even be related to the server side. Colleague and I can share anything interesting about programming. The purpose of these sharing sessions is widening our horizon, revising any old knowledges and finding out new one.

During the sharing sessions, there are many discussions or even challenges on your codes. Don’t be upset about any challenges. Kind challenges are actually opportunities for you to think more deeply, consider more possible situations and finally consolidate your knowledge!

Sharing is not only helping others to understand new knowledge. It actually helps the presenter to observe his / her weaknesses or blind points. You can definitely get more than you even think.

Pitfalls

Beyond the above gifts I got from my 3-year programming experience, there are also some pitfalls I have experienced to. Here is one of them that I want to share with you.

Never buy printed programming books

Printed books are always at high price but programming is a frequently changing industry. Printed programming books become out-dated very soon after release. Take iOS programming language Swift as an example, Apple has totally released 29 major and minor version updates in 5 years. Although not all APIs are changed in each version, parts of each printed example would be suffered from the changes. It is always frustrating when the codes you have studied about cannot be run in the real world any more.

Buying a printed books seems to be a common practice in other occupations, for example medical doctor, mechanical engineer and scientist, etc. The biochemical composition and mathematic formula they are using are seldom changed. However, in the quick growing programming area, reading books is not yet good enough to get the latest technology. As mentioned before, searching through the Internet is the best recommended way to study programming.

Summary

After passing for these 3 valuable years, I have been changed so much, from working on biomedical fields to app programming industry, from dropping down handwritten notes to electronic notes, and from buying printed references to reading online forums and blogs. I have gained some many that I did not expected. Thanks God again.

I admit that it was so challenging to leave my comfort zone and strive for what I love. I have done so many extra studies and revisions than my colleagues with Computer Science background did. It is a tough process but is certainly worthy. I have never regretted entering IT industry and it can hopefully be my life-time occupation.

Never underestimate your own strength. No one can succeed without failure. No matter the result is good or bad, you can gain lots of valuable experiences during the process. I would like to quote Michael Jordan’s words again at the end this article.

You are welcome to follow me at Twitter@myrick_chow for more information. Thank you for reading this article. Have a nice day! 😄

🇭🇰 _Hong Kong App Developer; Android, iOS & Firebase lover; Sharing & Writing can strengthen my knowledges!