Sunday 21 December 2014

Mining for Jobs Part 3: JobMine Rankings + Where Am I Working?

It's been quite a while since I've updated this blog, but finals caught up to me and before I knew it, 1A was over! Our first university term was filled with lots of both fun and hard work, but most of all it honestly flew by so quickly that, coming home, I almost can't believe I just spent four months away. As I look forward to the next four months of co-op, I thought it'd be a great time to end off this series about JobMine and talk about perhaps what is the most relaxed yet also nerve-wracking part, ranking jobs. 

JobMine works on a dual-ranking system; employers rank students that they interviewed based on preference, and the students who are ranked get to rank the employer. Then, the system will match students with employers based on the cumulative rank; after adding the two rankings together, the student with the smallest sum gets the job, and in the case of ties, JobMine works to ensure that as many students are matched with jobs as possible. Students who are ranked #1 receive an Offer; if they rank the company #1, the job is guaranteed to be theirs. Otherwise, you don't get to see what rank you are placed at by a company - the ranking status simply indicates Ranked. This is where it gets tricky; because we don't get to know our ranks, it comes down to a game of risk versus reward. Do you rank all your jobs #1 but risk not getting the one you most wanted, or do you rank them according to preference and risk not getting a job at all?

My own experience with the ranking system was entirely different from the risk/reward scenario I'd originally imagined. Out of thirteen interviews, I received eight Offers, three Ranked, and two Not Ranked (essentially a rejection). The large amount of job offers was so beyond my expectations that I was very overwhelmed; although this was clearly a fantastic situation to get caught in because I was guaranteed a job, it meant that where I ended up working was up to my own choice. If you know me, you'll know that I have a hard time making the smallest decisions, so having to make such a major choice in a weekend's time was a little stressful. There was quite the variety to choose from; eventually, I managed to narrow the list down, one offer at a time, by weighing the perks and drawbacks of each job. Because I hadn't asked about wages during my interviews, I didn't really know how much I was getting paid for each job; this was unfortunate as it may have made the decision a bit easier, but then again I wanted to pick my job based on the position rather than money. For each job, I mainly considered the role's responsibilities and the company location. It was definitely a process that included tough choices, but in the end I'm very happy with my decision.

With all that being said, I will be working as a Software Developer for Savision Canada near Ottawa for the next four months! Savision creates business management solutions, bridging the gap between information technology data and marketing. The company works with Microsoft System Center, and I'll be working with C#, so I thought that it'd be a great way to expand upon my foundational understanding of C# and explore how much more can be done with it. Furthermore, I've only visited Ottawa briefly before and it was a lovely place, so I am thrilled for the opportunity to explore the city some more while I am there. The combination of the job itself (where I'll be able to gain very relevant experience), what the company does (which sounds interesting and I'm excited to learn more about) and its location were what sold me for what I hope to be a fantastic work term during and out of work.

I aspire to do lots more writing over the break as well as many updates throughout the work term. The past four months have been a blast, and I can't wait to see what the new year will bring.

Tuesday 18 November 2014

Mining for Jobs Part 2: Interviews

After two consecutive busy weekends applying for jobs, notifications of interviews began coming in on a rolling basis. I remember distinctly the nerve-wracking feeling of sitting in the Tatham Centre (where all on-campus co-op interviews happen), waiting to be paged for my very first interview; I hadn't had a legitimate job interview before, so I didn't really know what to expect. Sure, everyone can think of generic interview topics that have a good chance of being discussed, but especially for software development positions, it's hard to predict what combination of technical and general questions you'll be asked.

If only it were this easy?
From late September to late October, I was fortunate enough to receive thirteen interviews. These numerous experiences helped me not only to get used to the interview process, but also to build up confidence in answering questions on the spot. To sit in a small room with one or a few interviewers is intimidating enough, let alone having questions thrown at you with minimal preparation. I've never been a fan of public speaking, but I was able to see myself improve in my ability to articulate my experiences clearly and present myself as a good candidate for the job. 
Throughout this period of time, my perception of how to handle an interview also changed; I learned that it is not so much about presenting yourself in the best possible light, but more about connecting with the interviewer. The interviews that I felt best about were the ones where I got to have meaningful conversations with interviewers, whether it  was about their work or even their previous experiences. I think that one of the things we tend to overlook is that interviewers are great people to learn from. When I found out about my Google CSSI phone interview, I decided to make the most out of talking with the interviewer, who I knew was going to be an engineer at Google, regardless of the interview's outcome; I made the same effort with many of my co-op interviews. I think that if you can demonstrate that not only do you care about the job itself but also about the company and people behind it, you add a level of depth to your character that goes beyond merely talking about your accomplishments.

When it comes down to it, I think everyone has their own different way of tackling interviews; there isn't anything specific you can do that will guarantee anything. As long as you are prepared and let your natural character shine through, you will impress an employer sooner or later. Furthermore, since this is only our first work term, I'm sure there will be even greater things to come. Stay tuned for part 3, where I'll be talking more about (UWaterloo-specific) job rankings and where I'm working for the winter term!

Monday 3 November 2014

YHack 2014: First Ever Hackathon + YOCHECKIN

Last Friday at 6:00am, I got on a twelve-hour bus ride down to New Haven, Connecticut to attend YHack at Yale University! After having missed Waterloo's own Hack The North earlier this year, I was thrilled to finally experience my very first hackathon. For those of you unfamiliar with the term, hackathons are programming competitions where participants team up to create projects in a short, condensed amount of time (commonly over a weekend). These events are notorious for sleep deprivation, but are a great way to not only compete for prizes, but for programmers to come together and focus on something new and learn a lot. I was especially for YHack because it meant getting to see many Google CSSIers again! After going off to universities across the US and Canada, it was awesome to catch up with many of them again.

Before I knew it, we'd arrived at Yale's West Campus:

The weekend went by in a whirl of activity; before I knew it, time was up and it was time to submit our projects. I had so much fun over the weekend, getting to not only develop my programming skills but also going to talks by various companies, and hearing about ideas from people across the country. The enthusiastic atmosphere of the hackathon was contagious; everyone was so passionate about their projects and willing to help us with ours. The crazy environment of the hackathon was very motivating, because everyone was having a great (albeit sleep-deprived!) time.

Our Project: YOCHECKIN
The inspiration behind my team's project came from wanting to taking Yo, possibly the simplest application in the world, and making something more complex and useful out of it. If you've never heard of Yo before, it is essentially a no-character communication app where users tap a button to send a "Yo" message to another user. That's all there is to it. However recently, Yo was updated so that in addition to a mere "Yo", users can also choose to send their location, or a link to a website as well.

We wanted to take such a simple mode of communication and turn it into a useful, hassle-free service. We came up with a situation that we'd all found ourselves in before; we're going out, and our parents want us to check in with them to make sure that we were safe. For some kids, it may feel annoying to take time out of hanging with friends to text their parents; furthermore, how could their parents verify that their children were where they said they were? YOCHECKIN is a solution for both of these issues. After entering in you contact phone numbers on a simple web application, all you have to do is "Yo" your location to YOCHECKIN, and everyone on your contacts list will receive a text message to notify them of your location. We felt that this was a great way to integrate Yo users with people who didn't have the application, to increase the functionality of the app.

The Programming Process
We used the Yo API, Google Geocoding API, Twilio API, and Google App Engine to create YOCHECKIN.

The first half of our coding process consisted of learning how to use the Yo API. It was initially fairly easy to understand because the code is quite simple when using Python (which we'd already had experience with from CSSI); however, the code in the available documentation used Flask (a Python microframework) to send Yo's from the service, which wasn't supported by Google App Engine. To circumvent this issue, we had to determine how to use the Python urllib and urllib2 libraries instead to replace Flask.

After learning how the Yo API worked, it was time to combine everything together. In essence, our project consisted of the following steps:
  1. User enters contact phone numbers, which are stored in an Google App Engine datastore
  2. User Yo's their location to YOCHECKIN
  3. The latitude/longitude coordinates are converted into a street address through reverse geocoding with the Google Geocoding API
  4. If the user can be found in the datastore, text messages are sent out to the user's contacts via Twilio 
  5. Otherwise, the user receives a Yo back with a link to the website, to enter their contacts in
After working on separate parts of the process, we all regrouped to piece together the final product. Our team worked together really well to overcome all the challenges that we faced while developing our project. In fact, before I knew it, we'd worked almost twelve hours straight from 7pm on Friday night to 7am Saturday morning! Thankfully, we managed to finish our project in around 24 hours total, meaning we were able to get a lot more sleep on Saturday. By the end, we'd created a service that we truly believed would have a beneficial purpose.

The Final Product
Our final product comes in two parts: the website (http://helpyofind.me/) where users go to save their contacts, and the Yo service itself, YOCHECKIN on the Yo application.

The user interface of the website, modeled after the simplicity of the Yo application itself.

The source code of the entire project can be viewed on GitHub. I am really proud of how this turned out in a short period of time and how much we learned as a team throughout the process. There is definitely room for more improvement; depending on how much time we have to work on it in the future, I definitely have ideas of ways to increase functionality and error-checking user input on the site.

One of the other exciting aspects of our project is that we actually got to speak to the CEO of Yo himself about our project and he was interested in adding it to the official list of Yo services, the Yo Index! I hope that we will actually be able to get it up on there soon, as it'd make our service a lot more accessible to Yo users.

All in all, I had an amazing time at YHack 2014; it felt really nice to be able to dedicate a weekend to focus solely on a single programming project. I will without a doubt be going to more hackathons in the future! But until then:

Tuesday 28 October 2014

Mining for Jobs Part 1: Applications

After two months of going though the job hunt process, I'm happy to say that I've found work for Winter 2015! As a first year, particularly Stream 4, I definitely felt the pressure from submitting my first application up to deciding which job to take. In this next series of posts, I'll be reflecting on my experience with the different steps of the job search and what I've learned from the first ever job search.

The University of Waterloo has an internal job search system called JobMine (which inspired the title of this series) for its co-op students to find and apply for jobs on. The first part of the job search consisted of reading through hundreds of listings and deciding which ones to apply for. JobMine limits applications to 50 per round, likely to prevent everyone from applying to everything. Without much previous job experience or even programming experience in general, it was a fine line to decide between the "safe picks", entry-level jobs that didn't require a lot of experience, and the "long shots", jobs where I didn't meet all the requirements.

The easiest way I found to sort potential jobs that I wanted to apply to was by three categories:
  1. Fits most requirements
  2. Fits some requirements
  3. Hard to get
As I added jobs that I was interested in to my shortlist, I added them to one of the categories; this made it a lot easier to keep track of how many of each type of job I was shortlisting. Then, when it came time to apply, I could easily choose from the categories and keep track of how many jobs in each category I was applying to.

From this round of the job search, here are some important things that I learned:

  • Don't be overwhelmed by a long list of required skills: As a general rule of thumb, employers who list a lot of requirements generally aren't looking for someone who fits exactly all of them. I mostly applied to jobs from the first two categories above, but I also took a chance to apply for some "hard to get" jobs. You never know specifically when you'll fit well with what an employer is looking for; while it's good to be realistic, the required skills are only part of the picture.
  • Don't be scared to apply to jobs that many people have applied to: I made this mistake when considering whether or not to apply for some jobs, in thinking "what chance will I have against tens or hundreds of other people"? Again, you just never know, so if it is a job that you really want, it doesn't hurt to take a shot.
  • Be specific on your resume: Writing specific details about relevant skills or experience and how they'd apply on the job not only helps employers to connect your skills to their work, but also helps you in deciding what to talk about/elaborate on if you manage to snatch an interview!
  • A cover letter isn't always the best way to go: I actually chose not to write any cover letters when I applied for jobs, because I didn't have a lot of time to personalize them for different jobs. From what I've heard, it's sometimes better to not include a cover letter at all if it's going to be a generic one. Unless you're confident that your true interest in a job or skills description shines through in a cover letter, it might be best if you just didn't include one.

Overall, I definitely learned a lot from the very first round of job application; thinking ahead, I will be changing my mindset a little when applying for jobs next round. I hope that these tips are useful to Stream 8 co-op students or anyone really who is looking for a job. Job applications are a crucial first step because they are the deciding factor for whether or not you receive an interview (which I'll be talking about in the next part). All in all, be prepared, don't be afraid of failure, and I'm sure the results will show for themselves.

Tuesday 21 October 2014

Midterm Week Is Over

It's hard to believe that my very first university term is already half over. Last week, commonly referred to as "Hell Week" here at Waterloo, has been a whirlwind of studying for and writing all of our midterms in the span of five days. There were definitely a few stressful moments throughout the week, from unease about the very first exam (calculus) to apprehension over the notoriously difficult physics midterm. Reminiscent of the pressure that I'd felt during International Baccalaureate exams only a few months ago, this week seemed to bring about more anxiety due to it being our first official test of university. Whether it was self-motivation or simply the weight of stress - likely a combination of both - many of us spent the weekend of Thanksgiving studying rigorously for the midterms to come.

Since I am in Stream 4, midterms happened to coincide with the second-last week of job interviews for winter co-op positions (which I'll be talking about more in my next post!). I happened to also have one to two interviews a day, so I spent the week running around from midterm to interview, then back to my dorm to prepare for the next ones. Thankfully, we had the week off from classes, meaning that we could focus all our effort on exams. One of the main things I've enjoyed about living in residence is always having a group of people to study with; in high school, I preferred to study independently, and while I still like to study alone for more major exams, it really helps to have a network of people to go to with questions, where we're able to help each other out.

They key to midterms, I soon realized, is to study past exams. You can study lecture notes or the textbook for as long as you want, but it isn't as effective as studying actual exams from previous years. Often, it becomes easy to see patterns of questions you know for sure will appear again. University exams focus more on applying what you know versus simply just knowing it, so it really helps to practice examples and put your knowledge to the test. 

Overall, midterms went by smoothly, and I am quite pleased with how I did. I think that they were a great introduction into how to better study for exams in university; it already feels as if finals are right around the corner. Thankfully, they're not all in one week, as they are quite heavily-weighted toward our final course grade. Now that exams are over, the focus is back on securing a co-op job; I'll be discussing some of my experiences with employer interviews soon, as Monday is when I find out where I'm working next term! More exciting details to come.

Sunday 21 September 2014

The Job Search Begins: Highlights from Employer Info Sessions

Yesterday, co-op students in Stream 4 officially start applying for jobs through the university's internal job postings, JobMine. After exerting all efforts to perfect our resumes during the past weeks, it is finally time to put our skills to the test and apply to internships for the next term. Throughout September and October, companies big and small host employer information sessions around campus where they speak about their company and what projects they have been working on, to give students a deeper understanding about whether or not the company will be a good fit for them. Having been to a few sessions this week, here are some features from the talks, as well as some tips related to attending sessions.

Highlights
This past week, I attended information sessions for Facebook, Google, and BlackBerry. Each one had a slightly different setup; Facebook held a talk about security in computer network systems, Google discussed its Waterloo office and projects that they are working on, and BlackBerry mainly organized a networking session with recruiters from various departments.





The first information session that I attended was for Facebook. Much of the presentation went over my head as it was very advanced and technical. However, the presenters concluded with information about Facebook itself and available job/internship opportunities. At the end, I had the opportunity to speak with one of the recruiters; although I found out that Facebook mostly only hires students with a lot of experience (e.g. upper-years), it was through the recruiter that I found about Facebook U, a special internship-type program for first-year students. Unfortunately, the program is only available in the summer so I am unable to apply, but nonetheless it was great to find out about the opportunity.






Next, I attended an information session from Google, as I had been introduced to our campus recruiter from the CSSI team! The presentation was given by Steve Woods, Engineering Director of Google Canada. One of the interesting parts was about why Google chose Waterloo to set up its first Engineering office in Canada and how the company has worked with so many start-ups coming out of the University of Waterloo; I find it so exciting that Waterloo has fostered such a culture of technology engineering and entrepreneurship. We also learned about the many community initiatives that Google contributes to - many of these projects involve sparking children's interest and supporting underrepresented people in engineering. I thought it was fantastic that every Google is so active in encouraging younger generations to explore technology. In terms of internship opportunities, Google offers the Engineering Practicum Internship for first and second-year students, which unfortunately I am also unable to apply for this year, but I am definitely going to apply next summer!




The last information session I went to was for BlackBerry, which is based right out of Waterloo. Their session focused on a networking fair setup, with stations for various job departments to speak to recruiters and a display of current/new BlackBerry products. One of the exciting aspects of the session was having the opportunity to test out the unreleased BlackBerry Passport! The most interesting feature of the Passport is its full QWERTY keyboard with touch functionality. I feel that this feature is very innovative because it combined the traditional Blackberry keyboard with increased user-friendliness by allowing users to use the keyboard to control applications instead of touching the screen. It was fantastic to be able to try out and learn more about Passport.
The BlackBerry Passport, soon to be released.
I really enjoyed the networking fair because I got to speak one-on-one with different BlackBerry employees: a Campus Ambassador who'd done two co-op terms with the company gave us a lot of insight into what her role was during her internships, and one of the recruiters for Software Development answered many of our questions about first-year co-op students and internship opportunities, which was very helpful. It was great to find out that BlackBerry has several internships tailored for first-year students in Winter 2015, which I am definitely considering applying for.

Tips
From attending these few sessions, here are some suggestions that I've gathered about making the most out of employer presentations (wherever they may happen):
  • Come prepared with questions: If you have specific questions that you'd like to ask the employer about, there will definitely be people there who can answer them and it is a lot easier to talk in-depth to recruiters in person than through email.
  • Talk to employees: Whether it's during or after sessions, talk with people from the company. Even if you don't have any questions, employees offer a lot of perspective and more details on what it's like to work at the company.
  • Bring your resume: This one applies more to non-co-op students, but if you bring a copy of your resume to a session, there will be recruiters taking them in or employees who can pass on your resume directly to one.
  • Attend many different sessions: Each session that I've gone to so far has offered something different, not just in terms of company but also in content; even if you're not interested in a position at a company, the sessions are a great way to learn more about how they are contributing to the tech industry in general and you may be surprised at how the company fits with what you're looking for. 
Employer information sessions are very beneficial to find out about a company and what they're up to from people who have actually experienced working there. I have only gone to three so far, and I've already learned a lot more specifics than you could find out on their websites. In my opinion, these sessions are very useful and I'll definitely be going to a few more in the coming weeks.

Monday 15 September 2014

The First Week: Initial Thoughts

The first week of classes has finished up at Waterloo! After a fun and exciting orientation week where we got used to living in residence and met lots of new people, this week introduced us to the academic aspect of university life. From lectures to labs, we are slowly but surely making the transition from cramped high school classrooms to capacious lecture halls.

This week was definitely much more relaxed than I'm anticipating the rest of the term, because many tutorials were cancelled and so the days felt a lot shorter than they are supposed to be. With also fewer-than-normal assignments and studying for the week, this week has been a good transition week from orientation to the full engineering workload. To be honest, I am somewhat intimidated by the impending work; even after completing the International Baccalaureate program in high school, I feel that engineering will have a heavier workload, with the added pressures of living on my own and balancing school with extracurricular activities. 

That being said, there are also many things that surprised me about university class; they aren't as different from high school as I'd previously thought. Although the class sizes are much larger and professors definitely have a different teaching style than high school teachers, most lectures utilize interactive components such as examples to demonstrate topics. Moreover, professors are generally very open to stopping lectures to answer questions. A common misconception is that university is all about sitting through lectures and taking notes; in actuality, during labs and tutorials we have many opportunities to apply our knowledge to example problems and hands-on work, in order to practice what we learned in our lectures. This ensures that if we have any questions about the work, we are able to speak to teaching assistants and get help right away.

All in all, the first week of classes has been a great start to the term ahead. I hope to continue keeping the momentum of the week going and stay on top of everything, become accustomed to classes, and join clubs/student design teams at Clubs Fair next week! University life has been a big but exciting change, and I'm looking forward to whatever opportunities come next.

Sunday 14 September 2014

Why I Chose Computer Engineering at University of Waterloo

As school at the University of Waterloo officially started this past week, I thought it'd be a fantastic opportunity to talk about my reasons for choosing both my program and my school.

Why I Chose Computer Engineering
For me, deciding on what university program I wanted to pursue fell between Computer Engineering (CE) and Computer Science (CS) from the beginning. Initially, I was only sure that I wanted to work with software, and I didn't really know what the distinction between the two programs was. After doing a little research, I came across several key differences between the two fields:
  • CS focuses more on understanding theory, while CE focuses more on applying knowledge to build things
  • CS involves writing programs for computers, while CE involves integrating software and hardware components of computer systems
  • CS students take mostly only math and programming courses, while CE students also take physics and circuits (and even chemistry during first year)
Computer Engineering and Computer Science are very similar fields, and lead to similar careers. In terms of university program though, they vary in workload (CE has a heavier workload) and elective options (CS students choose elective in first year, while CE students only get electives starting second year). In the end, I chose CE because I felt that it would give me a better all-around understanding of computers and technology. CS focuses on software, which in my opinion, requires a lot of initiative to progress in coding skills and work on personal projects. Thus, I thought that by taking Computer Engineering, I could learn more about programming myself while also gaining a better understanding about hardware, which I've had minimal exposure to. Most importantly, I felt that engineering was the right choice because I enjoy hands-on application to create relevant and innovative projects using what I know, and that is largely what engineering is about.

Why I Chose Waterloo
One of the main features of Engineering at the University of Waterloo is its Co-operative Education (Co-op) Program, in which students work at internships throughout their years at university. While many other universities across Canada offer similar work experiences, the University of Waterloo is unique in that students start co-op during their first year. This has its perks and drawbacks, based on personal opinion. The biggest advantage is that students graduate with two years of work experience, and work experience is often regarded much more significantly by employers than education. However, students don't have a lot of experience when they start applying for jobs; hence, they may not find the most relevant jobs to their field.

All factors considered, co-op was the main reason I ended up choosing Waterloo. I feel that being able to gain work experience would be much more advantageous, particularly in upper years. Furthermore, being able to work with a variety of different employers during each co-op term means that I will gain a lot of insight into what different positions and what it is like to actually work in them; this will be very helpful in figuring out what exactly I want to do within Computer Engineering by the time I graduate.

In the end, Computer Engineering at Waterloo was the right choice for me because it fit the most with what I was looking for in a university education. UWaterloo is one of the most innovative universities in Canada, and I am looking forward to exploring the innovation of Computer Engineering through not only the program itself, but wherever my future degree will take me.

Monday 18 August 2014

CSSI Days 20/21: Summer Picnic and Goodbyes

The last Friday of CSSI was filled with many moments of laughter as we enjoyed our last day at the Seattle office and then joined in on a Google summer picnic. In the morning, we had some free time, so we took advantage of the shuffleboard and foosball tables until lunchtime.

We were lucky enough that our final day at Google coincided with Google's annual Summer Picnic! We, along with summer interns and Google engineers, were invited to Vasa Park to enjoy an afternoon of food and fun. I think the pictures speak for themselves:  



We had an amazing afternoon at the picnic; it was the perfect way to enjoy our last day in Seattle. Later, we headed to University Village a final time for some post-birthday crepes (as my actual birthday had been spent madly coding!). It was the first time I'd ever had a crepe, and it was fantastic.



















Finally, to end off the night, we finished watching The Internship! It felt fitting to watch the movie after CSSI as the next step for us is (hopefully) an internship at Google, but we laughed at how funny they depicted the whole internship process.

Next was when the goodbyes and sadness began, as many people were leaving early in the morning the following day; many hugs and best wishes were exchanged. Carrying over into the next morning, having to bid farewell to new friends whom we'd just spent so much time with over the past three weeks, it was sad to think that it would be a long time before we'd see each other again. Not only was CSSI itself incredible, but we were able to meet so many amazing and talented people along the way, from fellow CSSIers to the many Google interns, instructors, and other employees who helped us throughout the program. While I've taken all the new experience and knowledge that I have gained with me, the people are what I will miss the most about CSSI. I can only hope that we will meet again someday!

Friday 15 August 2014

CSSI Day 19: Final Presentations and Graduation!

Today was an exciting day, as we all got to share this past week's work with Googlers at the Seattle office. After three days of working hard on coding, Kristen, Emmi, and I are excited to introduce Telephone, an interactive game designed to test your memory and facilitate communication between both old and new friends! Modeled after the traditional party game Telephone (or Broken Telephone as we know it in Canada), players in a game pass along messages that they receive, trying to send the same final message as the initial one. 

Telephone's homepage; the telephones display their functions when hovered over
(which you can experience by taking a look at the game!)
You can check out the game here: http://telephone-2014.appspot.com. To test out gameplay by yourself, you can open the application in multiple tabs and play as players with different names. Or, even better, invite your friends to check out the game together!

I am really happy with how our game turned out; starting off CSSI with no programming experience and having only three days to code the entire program, I am proud of our team for working so well together and I learned so much during the process. From the beginning, I knew Javascript the least well and so I was hoping that we wouldn't need to use it at all. However, ironically I ended up writing all of the Javascript in the program (and there was a lot of it!); throughout the process, I gained a lot of experience with connecting the server and browser through writing code where Javascript and Python communicated each other. While Telephone is still in a very basic state - we hope to implement features such as password-protected games and sending messages through audio recordings - I think that we were able to accomplish a lot within a short amount of time and I really hope to add some additional features in the future.

After presentations, we had a closing party where our game won the award for Best Design! On top of everything, the party turned out to be a graduation ceremony, complete with graduation caps, certificates, and even a book scholarship! After the hard work of the week, it was fun to relax and celebrate our learning and projects. For the rest of the day, we hung out and took advantage of the shuffleboard and foosball tables some more, relishing one of the final days at the Google offices.


I can't believe that tomorrow is the last day of CSSI already! We'll be celebrating at a picnic with Google engineers; it's sure to be a fantastic way to cap off what has been the most amazing three weeks ever.

Thursday 14 August 2014

CSSI Day 18: Birthday Magic?

Do you believe in birthday magic? I think I might after the magic that was today. I woke up this morning with only one goal in mind: finish our project at a reasonable hour today. After the results of yesterday's work, I wasn't very optimistic about this goal, but I was determined to enjoy my birthday and not let the stress get to me. By some source of magic or another, we were able to solve all of the problems from the day before and a few more by the end of the day, finishing our game! 

My team worked fantastically well today, supporting each other when necessary and otherwise each working on our own components. Because of the way we coordinated it, there weren't many problems with concatenating our separate coding together, which has been a relief throughout this entire process. Today, I was really happy that I was able to reinforce and learn more about Javascript, my least familiar programming language, while coding and debugging our application. I handled a lot of data transfer between server-side event handlers and browser-side Javascript functions today, meaning that I got to code quite a bit in both languages.

After lunch, we had a presentation about how to deliver presentations effectively (ahead of our final project presentations tomorrow)! After discussing some tips about engaging presentations, we broke off into smaller groups to practice speaking in front of an audience. I can still remember when the very thought of public speaking was a nightmare to me; over the years, however, I've grown in becoming more comfortable talking to crowds. Regardless, the practice that we did was really beneficial because I got a lot of feedback into things that sometimes I didn't even realize I was doing. I felt that the workshop really helped us get ready for our presentations tomorrow.

Then, I was presented with a cake and card from the CSSI team! It was so lovely of them and I felt so grateful to be able to celebrate my birthday at Google, with all my fellow CSSIers. 

Cake! Two candles to represent 18? Why not.
As if there wasn't enough icing on the aforementioned cake, we also found out today that our team won the scavenger hunt from Seattle Saturday! The prize was an awesome bag filled with various Google goodies:
Fruits of our scavenger hunt labour = excitement!
All in all, my 18th birthday ranks high up in the list of "most awesome birthdays"; after all, just being here at CSSI for the past weeks have been an amazing experience that I will never forget. It's hard to believe that we'll be back home in less than three days... However, first off it's time for final presentations on our projects tomorrow. I'm really interested in seeing what everyone came up with, as well as debuting our finished game! 

Wednesday 13 August 2014

CSSI Day 17: Project Progress and Mock Interviews

Once again, today started off quite well with a lot of debugging and working out problems with our user interface. Additionally, we were able to get started on the design aspect of our application! This was fun because I really enjoy graphic design as a hobby and all three of us in my team got excited to make our web pages look fantastic with CSS and Javascript. However, we still have a few major problems that we need to solve before continuing with our coding, and we are all racking our brains and the Internet in search of answers.

After lunch, we had mock technical interviews with actual Google interviewers! I enjoyed the session very much, because we got to experience the atmosphere and content of real Google interviews; it was great to hear a lot of feedback and tips from our interviewer, who was very kind and answered a lot of questions. In the end, through having an afternoon of mock interviews I feel better prepared for problem-solving and working with code during future interviews. 

The updates are fairly short this week as we slave away at our final project, but I hope that by presentation time we'll have a working demo to share. As we head into tomorrow, I feel very focused and I know that my team will be banding together well; we are all hoping for the best and I know we'll be doing our best to make it happen. 

Monday 11 August 2014

CSSI Day 16: Projects and Resumes

I'd be lying if I said that today wasn't an exhausting day for everyone. I felt strangely drained throughout the day, particularly due to trying to solve problems that are beyond our capacity of the programming that we have learned. However, that's not to say that we didn't celebrate some victories today. We started off with a running head start through having the first few pages of our application coded; this continued throughout the morning with successfully adding all of our data into the datastore. However, that was when we realized that a major component of our application requires auto-updating web pages, which we'd underestimated the difficulty of. There is one method of doing it, which involves using the Channel Python API in App Engine, but reading through the tutorial we felt that the self-learning how to incorporate the code into our program was over our skill level. Tonight, our team will be trying to work out the details and hopefully find a solution, as well as laying out the tasks for tomorrow. Still, I'm having a lot of fun applying what I've learned in CSSI to the beginnings of our project, and I feel like we are almost on the right track. 

The highlight of the day was the resume workshop after lunch. I thoroughly enjoyed having break-out sessions with members of the Google recruiting team, for I learned so much about how to write a succinct yet detailed resume. I thought that the session was extremely helpful; it was so nice of the recruiting team to take time out of their work to come look over our individual resumes. 

As we move into crunch time and some heavy programming in the next few days, I am hopeful that our project idea will come together and take shape. Our team is working hard together; I hope to have some great updates in the days to come!

CSSI Days 14/15: Woodland Park Zoo and Underground City

This weekend has gone by so quickly that I can't even believe just how much of CSSI has already gone by... I'm combining the two weekend days into one post because it has been so eventful and filled with further exploration of the lovely city. 

We started off on Saturday with a trip to the Woodland Park Zoo; I'd actually been looking forward to the trip since it'd been so long since I'd gone to a local zoo where I live. The weather was perfect for walking around, and we got to see many animals. Here are some pictures below:

Penguins! Surprisingly living outside in the hot weather.
Giraffes frolicking around the field
An elephant!
After spending most of the afternoon at the zoo and checking in with everyone at 4:00pm, we celebrated Christine's birthday with cake and Happy Birthday songs in many different languages! Out of everyone who was there, we counted twelve languages known between us; it was so cool to see that out of such a small group, we knew quite a few languages. Next, a few of us set off for University Village, a local shopping and dining area that was only a short walk away from campus. For dinner, we went to a sushi bar! This was so exciting, because I'd always wanted to go to one where the plates of sushi revolve around the tables, and Blue C Sushi was exactly that. The food was, needless to say, delicious.

Outside Blue C Sushi
Rotating sushi bar!


Some of the scrumptious sushi I had
Dinner was followed by taking in the scenery and doing a little shopping, we walked back to the dorms after sunset and hung out there for a little while until it was time for bed. After a long day of walking around, it was nice to finally relax in our rooms and go over plans for the next day before going to sleep.

Today, we set off for lunch first at Auntie Anne's (tried soft pretzels for the first time and they were awesome!) and Cheesecake Factory (for some pre-birthday cheesecake)! Afterward, we embarked on Seattle's Underground City tour, which I'd wanted to go on since last year in order to learn some more about Seattle's history. During the tour, we visited a few underground buildings preserved from the early 1900s; I learned many interesting facts about the city's earlier days, including one of Seattle's corrupt mayors Henry Yesler, a fire that burned down the downtown region, and a 2001 earthquake. To be honest, the tour was a bit short for my liking and there wasn't too much to see underground aside from dilapidated buildings, but the history aspect was what made me enjoy the tour the most.

One of the original banks in Seattle; it was
open 24/7 for business due to the gold rush.
Original historical underground skylights,
installed for natural lighting.
The first ever known picture of downtown Seattle.
To end the day, we went to dinner at Red Robin, a classic American burger chain. The three August birthday girls, we actually all ended up getting birthday sundaes and being sung to by the serving staff!
Red Robin selfie while waiting for food
Back at the dorms, our group began some preliminary planning and coding for our final project, in order to get a jump start on tomorrow's official beginning. From what we were able to accomplish today, I feel confident going into Monday that we'll be on schedule for the week and it was exciting to finally get started on the programming! Also, seeing as today was likely our last opportunity to explore the city, I enjoyed the packed weekend, particularly getting to experience many places that I hadn't been to last year. As we head into the final week, it's crunch time and I'm ready to put my acquired coding skills to the test. 

Friday 8 August 2014

CSSI Day 13: Let the Projects Begin!

Our final projects officially began today! First, however, we had a discussion about reverse engineering, where we broke out into small groups to discuss the mechanics behind different popular websites and and applications. Our group got Google+ Hangouts, which was interesting because I'd never really used it before, and so we took some time to look more into the details of its features. About Hangouts, we had to answer four questions:
  1. What does the application do, from the user's point of view?
  2. How do users interact with the application?
  3. What handlers might the application have?
  4. What data is stored by the application?
The first two questions were easier to answer because they were a lot more intuitive; the latter two got us to think more logically and linearly about how different parts of the application achieved what it wanted to do. In my opinion, the exercise was a very great way to start getting us thinking about the actual steps that an application takes in order to execute its variety of functions. Through thinking through these processes, it was easier to design our own project while keeping these in mind to help guide us.

After lunch, we got our groups for our final projects and set out to brainstorm some ideas. Although still in the early stages of development, Emmi, Kristen, and I were able to come up with a solid plan by the end of the day; I'm really excited to be working with them during the next week to make our project come to life through applying everything that we have learned! Stay tuned to find out what web application we're working on.

Friday night movie night!
In the evening, a large group of us went downtown to see Guardians of the Galaxy, the newest Marvel movie. But first, before the movie began, we got to go to Gameworks, an arcade that was right next to the theatre. I got to play Dance Dance Revolution (DDR) and a very cool racing game with a motion chair that mimics the movements of your car. It was so fun to play in an arcade again for the first time in probably 7/8 years!

DDR battle!
Cool racing simulator
I'm not a fan of action movies but I did want to check Guardians of the Galaxy out as there was a lot of hype around it. I thought that the movie was great, largely because it was so funny! The many different character names were a little confusing at times, but the humour kept the movie interesting and cut through much of the tension. I had a lot of fun tonight playing at the arcade and watching the movie with everyone; I'm only looking even more forward to the activities to come on the weekend!

CSSI Day 12: App Engine Projects and Kayaking

Today was only a half-day of classes in the morning, which consisted of working on select App Engine projects to further practice the skills that we'd learned from the week. For the first hour, I had to focus on debugging my code from yesterday after adding in a new feature; the process was painstaking because my code appeared perfectly fine and so it involved going through line-by-line. Through this, I learned an important lesson: App Engine templates still read code that is "commented out"; while no normal programming language (that I've encountered, at least) actually executes code that is labelled as comments, the App Engine template  did. While this problem took far too long to solve, I'm really glad that I learned about this unique feature of templates to help in future projects.

Afterward, I worked on a "Rock Paper Scissors" application, in which the user plays against the computer - randomly generated computer responses. The basic setup game was quite easy to program, which I'm hoping means that I am improving in my App Engine/incorporating Python with HTML/CSS code skills. I hope to add more features to the application before I launch it, but here is what it looks like now (again, graphics are minimal as I haven't been focusing too much on the CSS aspect of the code):

Start screen of game
Game results page

After having lunch, we had a tech talk with a biologist who is currently working on a team and with Google on projects such as looking at different antibodies and researching how to create antibodies to match antigens of diseases, and mapping out neural pathways of the entire brain. This was really interesting because it exposed us to some of the projects that Google takes part in aside from its main line of products, as well as how computer science factors into these projects. Having learned about the immune system and the nervous system in Biology class, I was able to understand the more technical aspects of the presentation more deeply. However, I think that this talk really opened all of our eyes to ways where computer science isn't the main component, but still extremely important in other ventures. Computers are masterfully taken advantage of to do tasks at a faster and more efficient rate of humans; however because the greatest "computer" - the brain - has yet to be replicated, there are many issues to be encountered when working with technology. While these smaller challenges may be eventually resolved, looking at the bigger picture really makes me wonder just how much more information is beyond the reach of humans and computers alike, and the extent to which it will take for us to acquire such knowledge to our satisfaction.  

Kayaking and paddleboarding right against the Seattle skyline.
In the afternoon, we visited Alki Beach, a local Seattle park, to go on a kayaking tour! This was my first experience with kayaking, so I was extremely stoked. I was expecting for it to be harder to balance in the boat, but after we got in, even in a two-person kayak it seemed difficult to capsize. I definitely wasn't expecting to get so wet though! Not only did we get wet due to residual water from our paddles, but we started a little water fight in the kayaks amongst CSSIers and in the end many of us were soaked. However, the entire experience was fantastic; we got to kayak along the coast of Alki Beach for over an hour, and it felt both fun and relaxing. Later, we had dinner on the lakeside in the park with interns who were working at Google for the summer, which also gave us time to soak in the fantastic weather.
I also tried skateboarding for the first time...
and was consequently very, very shaky.
This photo masks it well though!
Hanging off the edge of the lake during dinnertime!
During free time, we walked down to the beach and even got to play a bean bag toss game similar to "Cornhole" or "Tailgate", where a two-person team tries to score points by tossing and then hitting bean bags into the holes. This afternoon was a fantastic way to wrap up the day and enjoy the Seattle sights from the lake; not only did I get to try kayaking for the first time, but simply hanging out with everyone outdoors in the fabulous weather was a blast. 

Thursday 7 August 2014

CSSI Day 11: Databases and Internship Talk

Today was all about datastores in App Engine, and how to use them in order to store data from users not locally, but in a database for future access. In the morning, we learned how to import datastores and add data to them, use queries to create objects out of and filter through the data, and also to delete data. This sounded a lot easier than it already was, especially grasping the many different aspects of datastores, including models, its properties, and manipulating objects inside of them.

Next, we began our project for the day, to create an application where users can create profiles and write messages on other people's profiles. This involved many steps, including:
  1. Creating a form to take in user information
  2. Storing the gathered information in a datastore
  3. Creating a homepage to link to every user's profile
  4. Creating profile pages for each user
  5. Allowing users to delete their profiles
  6. Enabling users to leave messages on others' profiles
I managed to complete the exercise today (yay!), but I haven't deployed the application yet so it isn't available to view online. I realized today that fully understanding the programs we built goes beyond understanding the code; instead, it is equally important to grasp the process that occurs in both the browser and servers. Through being able to explain what goes on in the background, it becomes a lot easier to apply those concepts to becoming better at coding.

After lunch, we got to meet a panel of current university (or college, as they say in the US) interns working at Google; they spoke about their experiences both applying to and working at Google. Furthermore, they gave us advice for writing resumes and participating in interviews. Hearing them talk about their roads toward the internship was very perceptive because it was easier to relate to these students, some of whom had only been in university for a year. As an added bonus, there was actually a University of Waterloo intern there! That was exciting, as afterwards I was able to ask him about questions that were more specific to Waterloo. 

After dinner, before leaving on the shuttle, I got to play shuffleboard for the first time at the office! The sliding is super tricky to get a hang of in the beginning, but I really loved the game. It's like a mini-version of curling, and since I really enjoy watching curling (especially during the Olympics) I had lots of fun.


The shuffleboard table! This game needs to be more popular.
I can't believe that today was already the last day of formal instruction... where has the time gone? The past few days have been a whirlwind of education and fun, entwined into a brilliant experience so far. As we move into finishing up App Engine and getting started on our final projects, I am excited to find out who I'm working with and begin coming up with our own ideas for building applications!

P.S. The Capital Cities Quiz app that I shared yesterday has been updated to include US capitals! Check it out here: http://capitals-quiz.appspot.com

Also, song of the day - awesomely upbeat remix of Pompeii by Bastille:

Wednesday 6 August 2014

CSSI Day 10: App Engine Developments

Standing outside the office doors!
One of the two buildings on the Seattle campus.
Google Seattle sign; how fitting!
We continued our progress in App Engine today by learning about templates, which made coding much easier through allowing for the integration of separate HTML files into the main Python code file. This made the code for our applications look a lot cleaner, and consequently easier to read.

We began with creating a quiz for users to take, in order to learn how to connect HTML input boxes with Python actions. To make the quiz more bug-proof, we learned to use conditionals and for-loops in the HTML code to prevent users from submitting the quiz with blank answers. To make our quizzes look more aesthetically pleasing, we added pictures to our program through served static files using App Engine.

After lunch, we had a "Laying the Groundwork for a Technical Career" presentation, where we learned about Google's mission, recommended courses to take in university, additional resources for practicing computer science, as well as different internships that are available throughout the university years. This talk was fantastic and very informative, including the Q&A session at the end. I think that the advice we received through the presentation will definitely aid in being better prepared for work opportunities (especially at Google itself!) in the future. 

Our second project for the day was to make a collection of profiles of all the CSSI students this year. Through this exercise, we learned how to import Python files into our main file and use the data stored in the file in our program. During this time was when I began to find things quite tricky, for there were many variables that looked very similar and thus were easily confused with one another. But after sorting out what variable belonged to what, I was able to finish the application quite quickly. After the project, I decided to modify the quiz exercise that we made today into a "capital cities" quiz! The app interface isn't very attractive yet as I haven't had the time to write up CSS for the file. Also, only the "Canadian Capital Cities Quiz" works so far; I hope to have a USA version up soon! Test out your knowledge of Canadian capital cities:

In other news, back at the dorms I got to play the ukulele for the first time! It was really fun to learn how to play "I'm Yours" by Jason Mraz; the song is the perfect summer song and also sounds amazing on ukulele. Because I have experience playing the guitar, it was quite easy to remember the chords and learn how to strum the rhythm, but there was a chord that was quite difficult to switch to so I practiced for a bit. Still, learning to play was a great break from a day of coding. Today felt like it went by so fast, with lots of studying, creating, and debugging going on. It's now time to sleep... see you tomorrow!