Blog

My work at Google

It’s been a few months since my internship at Google ended, and I’ve been waiting to write about what exactly I did there. This happened because I am under a confidentiality agreement, which prevents me from talking about confidential things I worked on before they get released to the public.

Recently however, Google released the Android O developer preview, which brought to public some cool Android O features, including one of my internship sub-projects – add Android custom ringtones from audio files (press coverage).

As you might know, on the stock Android version there were only 2 ways for you to add a custom ringtone – use a 3rd party app or place an audio file in a specific folder of the device (and in some cases, reboot the device). This was a pain point for a lot of users, and something that should have been made simpler a while ago.

After I finished my main internship project (which is still confidential), I was given the task of making it easier to add custom ringtones on Android, which I enjoyed a lot since it is a very “visible” feature, and one that will probably be used for all Android O+ users.

The feature

From Android O, you will be able to simply add custom ringtones from any audio file that is in anywhere in the device (yes, even without rebooting!).

If you go to the Sounds section in the Settings app, and open the ringtone picker (by tapping any of the ringtone settings), you will notice something different at the bottom as there will be a “Add new ringtone” option. By tapping that, you will be shown the Android file browser, through which you can browse the device storage for any audio files, and choose your best custom ringtone. After doing that, the custom ringtone becomes available in the ringtone list, and you can even delete the original file without losing your precious ringtone 🙂

How it works

The internal processing behind this feature is quite simple (although maybe not as simple as you may think).

When you select a file in the picker, the system copies it to the ringtone directory in the storage, and directly adds it to the ringtone database without requiring the device to reboot.

Although this seems simple, there are a few issues related to this feature that might not be so obvious. The main concern always has to be security when something is done in the most used mobile operating system in the world, as nothing should be vulnerable to attacks or exploits. This means that developing features like this always requires special attention from the developer. In this case, the user must not be able to access files that it shouldn’t access, e.g. in Android for Work profiles the user can’t access files that belong to the work profile.

Development challenges

The main challenge was to be aware of the security issues that I mentioned above. Paying attention to possible security flaws was something that I was not really used to do, so that meant I had to try my best at focusing on it. All Android code is available for free around the world, so anything can be used for hacks and exploits, and as an Android developer that is something you really need to look out for.

Another interesting aspect was the fact that this feature required some UI work. Although it is a small feature with nearly no impact on UI, I had to talk to several different people because of aspects that are really important for user experience that I didn’t really focus on before (e.g. what is the simplest way for users to actually use this feature, or what is the best text to shortly explain this feature). This was not really a challenge, rather an interesting way to make things that I was also not used to.

Conclusion

Overall I really enjoyed working on this feature, and I was really lucky to have such an interesting project as an intern, a project that I can show people how to use, and a feature that eventually may be used by thousands or millions of people world-wide.

Stay tuned to learn about the other features I developed during the internship 🙂

Advertisements

Applying for Google

As you know, I was a Software Engineering Intern at Google during the Summer of 2016. It was a great experience, and I’ll write all about it soon, but I’d like to first talk about how you can apply to get an internship at a similar company, as well as give some advice on what you should do.

First of all: YES, YOU SHOULD TRY!

A lot of people say they don’t apply for companies like Google because it is too hard to get a position, but I don’t aggree with them because that’s not a reason for not trying! What I always say is: if you don’t apply, you have 0% chance of getting a position, but if you do, you have >0% changes of getting it. To me, that alone makes the “effort” (if you can call it that) worth it.

So, how does it work? (I’ll talk specifically about Google’s hiring process, but it is very similar in other companies like Facebook, Amazon, …)

Applying (CV screening)

First, you should check out careers.google.com. There, you can take a look at the available positions, filtered by location. It’s really easy to apply just choose a few positions and follow the instructions.

During the process you will be asked for a CV. This is very important, because it may be the deciding factor for you to get through. CareerCup offers some great resume tips, and I also recommend the Cracking the Coding Interview book for both interview and resume advice. As an example, you can also take a look at my CV.

At this point you need a lot of luck. Each resume only has a few seconds of attention by the recruiters due to the hundreds of thousands of applications they get every year, so I’d really emphasize on keeping the resume short and specific. If you do get selected, you move on to the interviews stage.

Interviews

At Google, you have 2 45-minute interviews with two different interviewers. These are video-calls via Google Hangouts with the interviewers, in which you write code in a shared Google Docs document.

This is the part that requires most skill to pass. Usually the interviews have 5 minutes at the beggining and end where you can ask questions and get to know the interviewer a little bit. During the rest of the time you are asked algorithms and data structures questions (mostly). I’d recommend the Cracking the Coding Interview book as well as HackerRank for tips and practice questions (especially the book), but here’s some advice:

  • Keep talking to the interviewer. If you don’t talk, the interviewer can’t understand how you are tackling the problems, so walk them through your thought process.
  • Don’t rush. Rushing will make you more stressful and your speech harder to understand, so do your best to stay calm.
  • Ask questions. If you have doubts or want something to be clearer, just ask the interviewers. This shows a lot about your problem-solving process and interviewers often give some tips on the problem if you ask the right questions.
  • Be honest. This is one of the most important points. Be honest about what you are thinking. If you really can’t figure out the solution to a problem, be honest about it instead of going around not making any actual problem. The interviewer might switch to an easier problem and that keeps your chances alive!

Host Matching

Up to a week after the interviews, the recruiter will call you to tell you their feedback. If it was positive, then you move along to the Host Matching stage. At this point you are seen as “Google approved”, so intern hosts will start looking at your profile, and will reach out to your recruiter if they think you are a match for their teams. If this happens, you are scheduled calls with the hosts so that you can understand what they work on and decide if that interests you.

Keep in mind that getting to host matching doesn’t guarantee you a position (and the recruiters tell you that), but especially if you get in at the beggining of the hiring process, it’s almost guaranteed.

If you get through all this stages, then you get to experience what was for me one of the best experiences of my life: working at Google!

I’ll write about the internship experience soon, but I end this post by highly recommending applying for big tech companies, because it doesn’t hurt trying and if you do get it, I almost guarantee you will never forget it!

First blog post

Hi!

I decided to create this website, along with the blog, as a way to not only display my skills and experiences, but also to share any thoughts that I might find useful for other people.

Since this is the first post of the blog, I think I should describe myself a little, so, on to the introductions:

I’m André 🙂 I’m from Portugal and I study Computer Engineering at the University of Porto. I love computer science, it’s one of my biggest passions, and I know for sure that I want to work on technology because I’m just too big of a fan of it! I still feel the same excitement I used to feel as a kid when I learn about some cutting-edge amazing product some company made.

But that’s not all about me. Another great passion I have is music. Nothing can make me feel the way music does, and nothing’s better than plugging in the headphones late at night and listening to some great songs.

Finally, I should tell you about the sport of my life: basketball. I’ve played it since I was a kid, and the complexity and intensity of the sport is simply irreplaceable.

That’s pretty much it 🙂 I hope that by making this blog I can inspire other people to do what I have always tried to do – follow their dreams – because that, I believe, is the true purpose of living.

Enjoy!