Tuesday, 30 June 2015

A Busy Second Term + JobMine Round 2

As you can probably tell from the lack of posts since the beginning of May, this summer has been a busy one as I dove headfirst into my second school term. After a comparatively relaxed co-op term, the schoolwork took us all by storm and we returned to the seemingly endless cycle of labs, assignments, and quizzes. Now that it's already a week after midterms and just over a month until school finishes once again, I thought I'd write up some updates.

1B Term
Second term has been going really well so far; I feel that the courses are more interesting than in 1A, and we're learning a lot more completely new material (compared to reviewing high school topics for half of last term). This term has involved a lot of math, with both Calculus and Discrete Math courses; Discrete Math has been all about logic, from proving various integer relations to even a bit of basic cryptography. The proofs can get quite difficult at times, but it's been a refreshing break from calculus. Then, extending from last term are continuations of Physics, Circuits, and Programming. As Circuits mainly involves digital logic this term, the circuits labs have been really cool; we are working with VHDL to program circuit boards to simulate different tools such as a car controller, an elevator controller, etc. While I still prefer software over hardware development, the experience designing circuits and then interacting with hands-on controls has been a very fun experience.

Although the workload has increased quite a bit, I feel like I was better prepared for it and thus adjusted faster to the workload, as I've gotten used to what has to be done by when in order to finish everything on schedule. While the assignments have gotten more difficult, I've found the content across all courses to be a lot more interesting. Of course, there are still lectures that are hard to sit through, as well as professors that may not teach in the most easy-to-understand fashion; the 8:30 to 4:30 days aren't very enticing, but all in all I think this term has been much more enjoyable than 1A.

Revisiting JobMine
While May consisted mainly of getting back into academic mode, June was spent prepping for the second round of JobMine, which meant updating resumes and prepping for interviews. They say that finding your next co-op job should become easier as you gain more experience, but I actually felt more pressured this term to find a job that I wanted. Last term, I didn't really have any expectations of where I would end up working, but after working in a development role, I wanted to find another, hopefully better position, and so I dedicated probably even more effort to JobMine this round than last.

I was definitely more selective when applying to jobs this round, making sure that I only applied for development positions at companies that I was really interested in. Since I worked on web application development last term, I hoped to gain experience working in mobile development. In terms of my resume, since I now had relevant work experience, I was able to remove some older, less applicable experience from my resume and focus the information on development-related activities. I also made it appear more polished by updating the font and some styling. Throughout the job application period, I attended many employer information/networking sessions to talk with different team members, learn more about companies, and even give out my resume. This was really helpful because not only did I get a better sense of the company, I got to talk with the actual people that I could potentially be working with.

I ended up receiving eleven total interviews sporadically through the next few weeks. Since I now had programming experience, I knew that the interviews would be more focused on technical questions. And so, I prepared quite a bit for my interviews, especially for the first few. I found that brushing up on the specifics of major object-oriented programming concepts helped a lot; since I didn't use certain concepts very much throughout co-op, it was a good reminder of things that I'd previously learned. The interviews this round were definitely longer and more intensive, but I gained a lot of valuable practice for answering technical questions; it's one thing to program on your own, but a very different experience to write code under pressure during an interview. In particular, I tend to get overwhelmed by problem-solving questions that aren't even that hard to solve with a clear mind. Prior to next term, I hope to practice more so that I don't feel as stressed out while I am in the interview itself.

All in all, I ended up receiving five offers this term and it came down to deciding between what I wanted to work on. I'm really excited to be working at BlackBerry next term on one of the mobile development teams! After working at a small company last term, I'm looking forward to working at a bigger company and seeing how the team environment and workflow differ. Traditionally, BlackBerry has been focused on both software and hardware, but they are transitioning more towards software development now so I am already anticipating the projects that I'll be working on. As I was hoping to work on mobile development next term, I'm really excited for this opportunity to gain valuable work experience and learn a lot throughout the next term.

Friday, 8 May 2015

Co-op Reflections 1.2: Some Hindsight and A Little Foresight

I feel like these posts are becoming a testament to just how fast time goes by! It is already the start of the first week of classes back at Waterloo; with the academic course load returning to full swing, I thought I'd take some time to reflect on my co-op term before things get too crazy.

Looking Back
From feeling extremely overwhelmed to a nice sense of simultaneous challenge yet familiarity, I found myself immersed in many different sides of software development throughout the term. I was lucky to have started during a very busy time for the company; getting to see Dashboards transform from a true work-in-progress to a polished, commercial product was an incredible experience. While I got to work on many aspects of the application, the portion that I'm most proud of is the custom dashboard authoring experience, which I helped build from scratch; thinking back to the very beginning now, it amazes me that we pulled everything together to make it both functional and user-friendly. The responsibilities that I received gave me a more comprehensive understanding of the roles of a software developer; not only do you code, but you design your code to be effective, and test its implementation to (near) perfection. Communication with the team plays such a key role in efficiency; not only is clear communication imperative, but checking in frequently and asking lots of questions allowed me to stay up to speed with others' work. In fact, I almost wish I'd spoken up more; there is only so much that I could understand on my own; by asking more questions, I likely would've saved some time that was spent pouring over confusing parts of the code.

Throughout the term, I was able to work on both frontend and backend code, which allowed me to become familiar with the majority of our project. Through the full-stack immersion, I improved my familiarity with C#, HTML, and JavaScript, as well as even delving into a little bit of SQL. Work on a team with both a primarily backend developer and a web developer, it was really interesting for me to see how they think so differently; while the web developer focuses on user interface and intuitive user interaction across platforms, the backend developer concentrates on optimizing performance and functionality. It was really nice to be able to gain some knowledge on some of the intricacies that go into making the most out of the code.

Looking Forward
One of the things that I'm looking forward to learning more about is software design. It is one thing to write code, but another entirely different experience to design various components of a program for maximum code and performance efficiency. Up until now, we have really only been learning how to program, not so much actually making our programs. That’s why I’m really excited for our Embedded Systems course this term, where we’ve begun to go over the components of various software engineering cycles. I think technical skills by themselves can only go so far; gaining a better understanding of how to design and implement good software is an important ability that'll help tie everything together.

Furthermore, we've begun working on Android application development! I've been really excited about this because it means getting to work with Java and a new platform - I have experience creating many web applications, so it's been fun building something so new and so very different from anything I've done before. This term in itself appears to be a lot more software-oriented than 1A, which I couldn't be happier about.

I never thought that I'd have the opportunity to work in Ottawa and subsequently explore its depths, nor that I would begin my co-op experience diving headfirst into a development role. Throughout the term, I was able to improve many skills, both technical and interpersonal. Above all, I think the most valuable lesson that this co-op term taught me is that adventure is out there waiting to be found. When it comes down to it, the beauty of co-op is getting to discover the diverse opportunities that one can pursue in a particular field; I am already excited to see where I'll go next.

Wednesday, 25 February 2015

Co-op Reflections 1.1: The Midway Mark + What I'm Working On

It's hard to believe that this co-op term is almost halfway through; it truly feels like just yesterday when, thoughts scrambling, I spent the first day trying to understand just what I was getting myself into. I'm happy to say that it wasn't long before I was fully immersed in my project. I think what has really made this work term amazing is the fact that I am trusted just like a full-time employee, allowing me to take complete ownership of everything that I create. Before the term started, I'd imagined that, as a student, I would end up doing some small on-the-side tasks for my employer. It is one thing to just be given jobs to complete, and another completely different experience to be fully integrated into both the project and the team. I've been really lucky to get to be a part of that from the beginning and I'm really enjoying having a great deal of responsibility for the code that I write.

Speaking of what I'm working on, introducing Dashboards by Savision, a web application that gets data from Microsoft's System Center Operations Manager (SCOM) and displays it in an accessible and interactive fashion. Its first release is in early March! You can check out some more information about it here, or watch a quick demo below (which I helped to code!).


I am thrilled that during my time here, I'll be able to see the product launch and continue to work to improve its additional features. As this is the last week before the release, every day is a busy one and there is always a lot to get done; but being surrounded by a passionate team and getting to work on an interesting product means that even the various problems that we inevitably encounter each day can't compare to the individual and group drive to get the project ready. It's been really interesting for the past few weeks to participate in this change in dynamic as the first release wraps up; as we get closer to the day, everyone just keeps working harder towards bringing to life all that we want to achieve. The additional momentum has been fantastic; I've had a blast so far this term and I'm certain that it'll only go up from here.

Thursday, 15 January 2015

Co-op Reflections 1.0: The First Week

2015 sure came in fast around the corner; before I knew it, shortly after celebrating the New Year, my suitcases were packed yet again and I set off for Ottawa.

First impressions: Left: a very snowy landing in Ottawa. Right: the colourful waterfall, one of
the first sights after arriving
in the airport
.

Now, over a week later, I am continually amazed by how quickly time manages to fly by. From my very first day on the job at Savision Canada, I was put right to work, figuring out how to fix the first bug we came across, and gain a better understanding of the code from the project that I'd be working on. As my manager put it that day at lunch, "you're already doing more than 95% of your classmates on co-op today," and he was right - by getting to work directly with the code as I looked it over, I began actual work on my project right from day 1, and it's only continued to go up from there. And I'm grateful for this approach; despite the initial "I-have-no-idea-what-I'm-even-looking-at" moments, I feel that by jumping right in, I've learned a lot more in a faster amount of time, simply because I had to in order to determine the issue and solve it.

Differences
The one thing they never told us about in our programming class was just how different learning programming is from applying it. Last term, we only had to worry about three or four C# classes at max, all located conveniently in one file, but my project involves flipping through interactions between countless classes and their respective interfaces, namespaces, and files. Perhaps the most significant thing that I've taken away from my first week is that you don't need to understand every part of the code to do the work; in fact, that would be nearly impossible as there are files that I haven't seen or touched yet. Instead, as I work on different tasks, I'm slowly being exposed to different aspects of the application I am working on.

At the Office
One of the most important aspects of the job is the work environment and the people that you work with. Because the Canadian branch of the company is quite small, our office is open-concept meaning everyone sits together. I didn't realize that the Canadian office only works on research and development; this is great because although everyone around me is working on different projects, they never hesitate to try and help. Generally, we work in a very quite atmosphere where everyone focuses on their own tasks, but every now and then a random conversation that's completely unrelated to work will pop up. And I can honestly say that my co-workers are all very open and friendly; it's been really nice in these past few days to hear about their variety of experiences both inside and outside of work. My manager, in particular, has been wonderful about checking in about my progress as I work, and breaking down my project into meaningful yet manageable tasks. Being able to break down the large amount of work into smaller pieces and complete them one by one has definitely helped me to not be as overwhelmed and just generally work more efficiently.


All in all, I'm happy to say that I am truly pleased with what I'm working on. I think it's safe to say that you've found the job for you when time just seems to fly by at work. Although a day doesn't go by without their own issues and challenges to overcome, it's been interesting to work through them one by one and I've been learning so much throughout the entire process. At the end of week one, it was fun to see a quantification of the progress that I'd made:

The green column indicates how many lines of code I added/changed, while the red column indicates how many lines I deleted. While it's interesting to look at to see how much I did, these numbers are trivial compared to what I have learned from the week, not only about programming itself, but the process of going about it. As I continue in my work, look out for more updates as I look forward to what's coming next.

Sunday, 4 January 2015

AirDroid: Your Android Phone On Your Computer


I discovered AirDroid while searching for a way to relocate photos from my phone to my laptop, in order to free up some memory. I was having trouble with my laptop not recognizing my phone via USB, and Bluetooth wasn’t a viable option as only one photo can be transferred at a time. Browsing the web for alternatives, I came upon AirDroid, a pretty useful service that syncs your phone to your computer via the internet.

AirDroid offers to Android users the convenience of being able to control certain key features of your phone from your computer straight from the web. After downloading the app and signing up for an account, just log in online and the service will connect to your phone. Initially, I was only going to use AirDroid to back up my photos so I could delete them from my phone. The one downside to this feature is that it can take a while to download large files or many at once, especially if your internet connection isn't great. However, it still proved to be a good backup plan.

After finishing up, and subsequently solving my USB connection problem a few weeks later, I didn't think I'd need to use AirDroid again. But after revisiting AirDroid today out of the blue, I soon found that there are a few other useful features to take advantage of. 

Convenience
This can definitely be considered a first-world problem, but if you're busy at work on your computer and want to quickly check your phone for any calls or texts, yet your phone isn't beside you, just log on to AirDroid. You'll receive live notifications when you receive calls/messages, and you can even call/text straight from your computer. It can come in handy when you just want a quick glance at important phone notifications (or, let's be honest, you're a bit lazy).

Ringtones/Alarms  
This feature allows you to access the ringtones and alarms folder on your phone easily, to add or delete new sounds. For me, this comes in handy because the alarms on my Nexus 4 are the most non-intrusive, serene sounds that I've ever heard. Since I started using my phone as an alarm clock, I prefer to customize my morning alarm so that I can actually hear it blare in the morning.

Find Phone
Mac + iPhone users know that Find Your iPhone is a useful feature that comes from being able to sync up Apple products. Android users don't have a native phone-finding service, so this would be very helpful for those of us who misplace things easily. I haven't actually tried the feature yet (which is good news!), but from what I've read it allows you to locate your device on a map, call it, erase personal data, and also lock your phone. Now I'm sure that there are many similar services out there, but AirDroid conveniently bundles this together with other nice features.


AirDroid is an unexpectedly useful service that I'll definitely be reaching for from time to time and further exploring what it has to offer. I'm not sure if there are other similar services out there but I found it interesting so I thought I'd share my initial thoughts on it. If you're interested, be sure to check it out and let me know what you think!

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.