Summer and Winter 2022 Work Term

For my 2022 Winter-Summer co-op term, I returned to BlackBerry again as a Software Developer Student. Coming back as a returning co-op in the same role, I was able to continue to develop my skills as a developer without having to do as much onboarding and able to get straight to work. This page will show discussing my goals, job description, as well as everything I have learned over this work term.
BlackBerry was originally founded under the name Research in Motion(RIM) in 1984 in Waterloo. They have worked in many industries including smartphones, security, embedded systems (QNX OS), enterprise management systems, and much more. They now have offices all around the world operating in 30 countries with 48 locations. Creating and developing products such as EPP/Optics, EDR/Protect, QNX, BBM, just to name a few. In the past few years BlackBerry has shifted away from being known for developing smartphones to becoming a security giant in the enterprise space, working with 18 out of the G20 governments, and 9 out of 10 of the largest car OEMS.
Goal 1
  • Learning Goal
    CRITICAL & CREATIVE THINKING - Problem Solving
  • Goal
    Improve C++ Programming
  • Action Plan
    I want to continue to work on my c++ programming skills and proficiency. Working on efficiency maintainability and style. I also still feel I have some work to do in thread safety and best practices and standards.
  • Measure of Success
    While I believe this will be a goal I'll hold for the rest of my life as I can always Improve, and I will never truly be done. I think it's still important to mention so for the sake of this goal, this will be complete once I can sit-down and write a simple C++ program (for example a pro/con program) using the STL and following a style guide (perhaps Google's C++ style guide).
  • Reflection
    I believe that I have finally reached this goal, as I am more comfortable with C++ in general and have learned a lot of new tricks I can now use throughout the term. Everything for pass pointers as a reference instead to guarantee it is not null, to learning when to use different stl data structures for example std::map verses std::unorderedmap or std::vector verses std::array. I have also gotten used to following an internal style guide when coding, and have gotten in the habit of adding things such as copyright, Doxygen comments, and always including resources before you use them even if they are included in another system header.
Goal 2
  • Learning Goal
    CRITICAL & CREATIVE THINKING - Depth & Breadth of Understanding
  • Goal
    Gain A Better Understanding of System technologies
  • Action Plan
    I have been really interested in different system technologies, whether it being networking protocols, OS Level Programming (QNX or Linux), and everything in between. I would like to gain a better understanding of how some of these technologies work and how we can apply that knowledge to my current work. For this goal I want to focus on the Knowledge learning more about how stuff works rather than what I have done in the past which is just how to use it.
  • Measure of Success
    This will be complete once I am comfortable when I am able to explain to someone else some of the technologies that I would with over this 8-month term on a high-level.
  • Reflection
    I believe I have also completed this goal now having a better understanding of different system libraries and how they work as well as interfacing with varying libraries of hardware. While I will never know everything about system technologies I have learned where to find the needed information as well as the ability to go look for an answer to something than be able to explain it to someone else.
Goal 3
  • Learning Goal
    COMMUNICATING - Oral Communication
  • Goal
    Be able to clearly communicate my points during a technical debate
  • Action Plan
    Well, I don't think I necessary do a bad job in this area, there are some places I could improve. Over the next 4 months, I will try to chime in and bring forth my opinions during technical debates and meetings. But also on the other side if I am not familiar with the topic be comfortable saying that I don't know, and allow others to discuss it, listening so I can try and learn along the way.
  • Measure of Success
    Be able to contribute to team meetings and technical debates about topics I am familiar with, and sit back and learn when I am not familiar with the topic.
  • Reflection
    Throughout this work term, I have been working toward this goal by showing in technical investigations and sitting in some technical debates just to observe and see what they are like and how people act. While I do not believe I have finished this goal, just being exposed to them has helped me progress. I think with more time and opportunities I will be able to complete this goal
Goal 4
  • Learning Goal
    LITERACY - Technological Literacy
  • Goal
    Become comfortable working with an existing code base.
  • Action Plan
    In school we only ever really work on projects from the ground up, whether it be by ourselves or as a group, never really getting the chance to work on a project that is already started. In software development it is rare that we get a chance to start projects from the ground up, so even though I have some experience with this I am still not fully comfortable contributing to existing projects, and still need to learn how to approach learning the code base of existing projects.
  • Measure of Success
    This goal will be complete once I can look at an existing code base and come up with a clear plan on how I am going to approach learning and coding for the project.
  • Reflection
    After working with 3 existing codebases (two for 4 months and one for 1 month) I now feel comfortable and know how to approach learning and coding for a new project.
During my time at BlackBerry, I worked on the BlackBlack IVY platform. I mainly worked on 2 different data ingestion frameworks as well as one Tensor flow ML application.
The definition of Blackberry's IVY from BlackBerry's website is

BlackBerry IVY is a scalable, cloud-connected software platform that's poised to give developers and automakers a reliable and secure way to share vehicle sensor data. With data normalization, partners will be able to discover actionable insights on board and in the cloud.

IVY landing page - https://www.blackberry.com/us/en/products/automotive/blackberry-ivy
For the first part of my work term, I worked on a simulation data-ingestion framework that was able to take scenario files and provide simulated data to our sensors which will be put up through the stack to create useful insights. Developers can then use the created insights when testing their sensors. I was responsible for adding features to our application such as playing, pausing, and changing the playback speed of the simulation, as well as designing, and implementing a TUI for the test application. The test application made use of NCURSES to provide our testers with a GUI application while still being able to run it on all of our targets because it runs within a terminal window. I was also responsible for fixing any defects that were created against the application which forced me to dig through unfamiliar code in order to find the bugs. I helped supported other coworkers using the application throughout the rest of my work term.
For another part of my work term, I worked on a data-ingestion framework that ingested real data from a device. This framework was able to ingest data from the device and then convert it into useful insights that could be used up the stack. For this project, I spent most of my time working on the ingestion code for one of our platforms grabbing data off the device. I also was assigned with fixing defects through the various parts of the framework. I was also responsible for creating, designing, implementing, documenting, and testing sample custom code for our application. Customers can then use this when trying to create their own custom code against our application. This sample code maintained a code coverage greater than 90% code coverage for both line and function coverage.
The last project I worked on was a TensorFlow ML application, where I was mostly responsible for supporting the teams in any odd jobs they had as I joined the team during the wind-down of the project. For example, adding code coverage and pipeline builds for one of our target platforms, as well as improving test coverage and fixing defects.
Not tech-related responsibilities I had included helping my manager on-board his new co-op team providing technical support getting them all set up as well as answering any questions they had throughout the rest of the work term, as well as running a few stand-ups for the co-op team when my manager was away. Which has greatly helped me grow non-technical skills, which was one of my goals throughout the second half of my work term.
This work term has allowed me to become familiar with many different technologies and see many different sides of software development. Including research, design,and implementation. I hope this report reflects how much I was able to learn in such a short time because of the great people around me who challenged and supported me in developing my knowledge and skills during this term.
Thank you to BlackBerry and to all of my coworkers who created a welcoming work environment, as well as taught me many things throughout the work term. Special Thanks to my mentor Darcy as well as my manager Stuart for supporting me throughout the work term and helping me grow as a developer.