I am now sitting at my desk, with all the jobs done, ready to say goodbye to all the fun stuffs, perks and talented co-workers at Microsoft Taiwan.
I can’t believe a solid 10 weeks of Software Engineer Internship has passed since I first came to this office. And it is already time for me to catch a flight to Hong Kong tomorrow. There are a lot of decision makings and stories behind this internship. I feel like I have changed a lot, both mentally and physically (Literally… I gained 2 kg with those free snacks and drinks), in this short period of time.
This post is really a personal wrap-up to conclude everything for myself, and for the people/students who are interested in an internship at Microsoft to have a peek.
I actually hadn’t thought of applying for this position at the beginning.
Back to October last year, I started to invite friends initiating a team project to organize a student Hackathon. It was completely random though stimulated by the fact that I didn’t want to graduate normally. I wanted to make an event for students to have fun, pick up new skill-sets and make friends across disciplines. If you are interested in the vision I had for E.C. Jamming, here is the post I wrote at that time:
First of all, before diving into the discussion of Hackathons, I would like to make our first semi-formal announcement…medium.com
And we got Microsoft, dotTech, Github and a lot of startups on board to sponsor our events (including the pre-Hackathon workshops). That was when I started to realize
Hmm Microsoft does care about students.
My father asked me why not go for an internship with them then?
“They are a great company.” my dad said. In Chinese, of course.
I went, “But they only offer 1-year internships in Taiwan, and I need to go to Hong Kong to complete my undergraduate degree after summer”.
“Give it a try” I followed my dad’s advise and it WORKED.
Through their internal referral system, a manager in Seattle, who luckily has a team in Taiwan, was interested in what my resume says and scheduled interviews with me. After a series of coding tests and design problems on Skype, I finally landed this unexpected internship opportunity despite that I cannot work for a year unlike other interns in Taiwan.
I was on the team of Bing Geocoding. It may be confusing to people for what that means? Bing Maps? The short answer is no. Bing Maps aggregates a lot of internal services including Geocoding, which really means by adopting a series of parsing, machine learning and matching processes, will translate an address query to a geographic point on the map. We don’t handle the way Bing Maps displays this information.
I, particularly, was working on internal tools to parse information and payloads within all stages of our data pipeline into a debug-able, testable and benchmark-able interface.
What that means to me is that — I got to play with a lot of full-stack web technologies, from handling the data to displaying them in an interface that makes sense for other developers and researchers in our team.
Having tasks and projects I really enjoy, this is how my daily schedule looks like:
09:00 Breakfast and GRE
10:00 Go through the emails from last night (80% of the team are in Seattle —with 9 hours time difference), start to hotfix some bugs or handle some feature requests.
12:00 Lunch with co-workers
13:30 Intensive coding with earphones on, listening to some pop musics (speaking of which, I do need some recommendation on my Spotify playlists, it’s a mixture of Mandarin, Cantonese, Japanese and English songs), and occasionally disturb my supervisor with some discussions.
15:00 Grab a free cup of coffee #MUST
18:30 Go back to enjoy mama’s dinner
02:00 am. Interesting enough, as most of people on this team are located in Seattle, I participated in a 2 am meeting to showcase my project to all the team members using Skype at the office. I needed the intranet.
I don’t know if this looks too intensive or too relaxing for other student developers out there, but I feel like it is at a great balance where everything is manageable, yet challenging and rewarding.
What I learned
Last Thursday, I had a final meeting with my manager in Seattle to sort of chat about my career plans (It was at 11:00 pm in Seattle, I really appreciate that). He gave me some solid advice and some pats on the back, and asked me what I thought I learned in these 10 weeks on top of just programming.
Here are my answers.
I think it might also be a reference for people to see if these sound important and worth learning in a 10-week internship.
My first PR to the master branch had 26 issues from my supervisor.
That was really unexpected and embarrassing for me at the time. I felt good naturally after completing my first task but it turned out tasks in Microsoft are not just to be done effectively, but to be done efficiently.
I cannot make specific examples here. That was an internal project not intended for open source, but yeah — I have experiences working on large scale projects, but never had I realize Algorithms are indeed important in web programming as well. Readability matters as well, as the codes I write could affect other team members or even myself in a month later and become a technical debt otherwise.
Never Stop Learning
This sounds old school. I know.
But I had a chance to talk to the manager of the manager of my manager. She flew to Taiwan for a year-end meeting and she told me that she has been with Microsoft for more than 20 years.
From a developer in Windows team to realizing the rising power of computation on the cloud, she then joined Bing and have been working on new stuff like Cortana.
I really respect her for being such a great example of a forever learner.
If I was still working on my own projects, with less heavy payloads to play with, I guess I would never be spending all these efforts to optimize performances.
Another thing I learned from this internship was completely unexpected.
I respect the developers who speak at BUILD or F8. They are not only capable of developing amazing products but also evangelize the technology in front of thousands of audiences effectively and efficiently.
But I never expected myself to be like them.
My manager did.
The internal tool I was working on was actually initiated by the manager, and he treated this tool and my personal growth very seriously. At first, when he told me I am going to present this tool in the weekly team meeting, I thought it was just going to be a 10-minute quick introduction.
I had a dry run with him on Skype based on this expectation and he told me that was too fast and not comprehensive. Even himself, who had worked on this project, had a problem catching up with the content.
20 min then.
Same feedback again, and I ended up having a 40-minute presentation and demo in a weekly meeting for the entire department at 2:00 am at the office (my supervisor came to the office to support me as well!). My manager was very satisfied with the final performance.
Happy ending but this is something I have never thought about.
I had spoken at a conference in front of 100 people on “React and Meteor”, but I have never prepared a presentation with all these efforts. I understand some people may see this as a trivial thing, but this really helps me define and understand who I am.
From getting annoyed at first, turning into having the desire to make this presentation right — I realized that I do look up to those developers at BUILD and F8. I do expect myself to be like them. I want to be able to code and evangelize my technology, which is also why I have started to treat this blog very seriously.
Hard skills are crucial, but these soft skills are something that can make me, and people, special. I think, in the end, the ones who do shape the world are the ones who can deliver ideas.
And this is really not as trivial as it may seem here. I only did this kind of presentation once. And all the dry runs took place at around 2 am in Seattle time.
Again, I think Microsoft does care about students
Startup vs Microsoft
A final thought, or say comparison, I would like to share in this post is “Startup vs Microsoft” (I don’t want to generalize big companies, and I have worked with a lot of startups on the other hand, so I figured this is the safer way to put it.)
This is honestly the first thing I thought about when I received the offer.
Don’t get me wrong. I still love everything about startups.medium.com
I made a blog post on this topic earlier as well, but I really want to revisit it here as a concluding point.
I have always seen myself as a startup kid.
I have worked at startups when I was a business student, joined a startup working on web projects in Taiwan and then started my own projects as both a developer and the guy who pitched to investors.
The reasons I have been so into the startup scene are the highly rewarding learning curve and the opportunities. The former really means that in startups, I got to touch so many different things. I needed to learn how to configure a Webpack setup, work on front-end development with React, Angular or other frameworks depending on projects, design and build APIs with Php or NodeJS, and even touched a bit of DevOps when needed.
And opportunities… Exactly how I even got this Microsoft internship in the first place. Working on my own projects certainly exposes myself to a lot more opportunities.
Now, working with Microsoft as an intern, I feel like as oppose to having to learn and work on different things, I was working on the same stack but with different approaches and experiments to make sure what I am doing is optimal. We have teams working on run time codes, we have teams working on CI/CD, I just needed to worry and make sure my job is done well, so others can do theirs without a problem.
I honestly don’t think either of the work styles is better than one another.
What I would like to think is that being in startups and working on my projects prior to this internship prepared me so well for opportunities like Microsoft or even other startups. I am confident and comfortable to pick up new technologies and be a good team player in teams. And now at Microsoft, I think I’m further equipped with the ability to research and experiment for better quality.
Again, Not just get things done, but done nicely and efficiently.
I feel like both are critical to being a better developer.
That is, if you are reading this post to find an answer between choosing startups or not. It’s completely up to you. You make the call. You can think which kind of experiences can prepare you for what you want next, and you will find the answer yourself.
For me, I have enjoyed every single event in my University life. That is for sure.
Tomorrow, I will take a flight to Hong Kong for my last semester in University. I think I have figured out my short-term career goals in this summer.
I want to have more of these experiences.
I want to join an Engineering team in these competitive (and friendly) environments preferably in the US where new technologies are born and celebrated — And well, my girlfriend is in the US as well. I want to keep absorbing and climbing for a couple more years before coming back to Taiwan.
I have experiences living in Taipei, Hong Kong, Budapest, New York and Toronto (all for at least a summer), and I honestly see great potentials in my Taiwanese friends. Developers in Taiwan are humble, hungry, talented and very friendly. I want to be back, but not yet.
So I will be preparing applications for graduate programs in the US in this semester while also sending out resumes to some companies that could potentially sponsor my visa without OPT. That is, I really hope to focus my last semester on the following things:
- Preparing GRE and grad school applications
- Job/Internship Search for opportunities in the US
- Work on the ChatWeb project
- Run Projectable to a self sustainable level (The link is in Chinese)
- Maintain GPA that is already horrible
- Meet friends in Hong Kong
This is going to be a challenging, fun and, hopefully, rewarding semester :)
Finally, one last time — Thank you, Microsoft and the team, for the amazing summer internship. I will see you guys soon!