Summer 2021 Work Term

BlackBerry

Software Developer Student

For my 2021 Summer co-op term I returned to BlackBerry but in a different role as a Software Developer Student. Coming from a tester role in my last coop at BlackBerry to becoming a developer has allowed me to see a different side of the company and learn new skills. This will be 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 become 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.

During my work term I believe that I was able to reach all of my goals. If I was to chose one that I could still work one it would be to become more familiar with the technologies we use but I believe this will be something I will be working on for the rest of my life. Completing these goals will help me in my future co-op work terms and in the rest of my career as they are all life long goals, and I don't think I will ever stop learning in my career.

Goal 1
  • Learning Goal
    GLOBAL UNDERSTANDING - Global Understanding
  • Goal
    Improve Coding style and understanding to meet companies' standards. For this goal, I want to gain a better understanding of C++ and other tools that are used by my team. Not only in a technical sense but work to increase the readability and performance of my work done.
  • Action Plan
    For this goal, I plan to try to really understand what is being done behind the scene of the code, thinking about how the compiler will treat the lines of code I write, and how performance will be impacted, this means using proper move semantics, not copying variables when it's not needed, and using the correct data type for the job. I also want to gain a better understanding of multithreaded programs and making them thread-safe. All of these goals will be accomplished achieved by making sure I take notes from code reviews and try not to make the same mistake twice, always learning from my mistakes.
  • Measure of Success
    This will be achieved when I am comfortable writing programs with little to no help, and the number of comments left on my code reviews diminishes over time. This does not mean the code needs to be perfect the first time, but to limit the amount of back and forth to make simple changes.
  • Reflection
    My coding style has been approved, due to having to conform to the Google style guide which allows me to be more strict in my naming style, I was also able to become more familiar with C++ and some other technologies we used like eBPF.
Goal 2
  • Learning Goal
    CRITICAL & CREATIVE THINKING - Inquiry & Analysis
  • Goal
    Improve my skills in the design process of dev stories. For this goal, I want to fully understand dev stories before diving right into them. As for going head first can often lead to work needing to be redone.
  • Action Plan
    To achieve this goal I plan to ask as many questions as I can when assigned a story to make sure it gets completed right the first time. This will get rid of all my assumptions about what needs to be done.
  • Measure of Success
    This will be complete when I can complete dev stories without having to redo the main parts of the code. this does not include and small changes to optimize the code
  • Reflection
    I believe that I have greatly improved in this area. During this work term, I didn't have any stories that I had to redo the main logic of the code due to lack of a design process, which is a problem I have faced in the past. I Achieved this by thinking of all the questions I had before starting any coding and talking to the reporter of the story to make sure I understood it completely.
Goal 3
  • Learning Goal
    COMMUNICATING - Oral Communication
  • Goal
    Improve my time estimates. I am currently still at a point in my career where I do not feel comfortable committing to any timeline, and always need to give half-baked answered because I am unsure how long something will take. I also have a habit of only factoring in how long it will take for something to get done and not account for the time taken to conduct code reviews and update any changes.
  • Action Plan
    To improve my time estimates I will set personal goals for every story for how long I believe it will take me, and compare it to how long it actually took me to complete, and how long it took me to complete code reviews.
  • Measure of Success
    This will be complete once my estimates are within a day or 2 of the actual time it took me to complete a story.
  • Reflection
    I believe I am starting to get to a point where my time estimates are starting to be within a margin of error and am starting to become more confident to give time estimates without being afraid I won't be able to complete it in time
During my time at BlackBerry, I was able to pick up many new skills, including but not limited to, a more in-depth knowledge of C++ as well as how to do research into different technologies such as eBPF, as well as some internal technologies in our company. I had two main responsibilities during this work term during the first half I was given coding tasks where I was given a JIRA’s with a description and had to implement it. While the second half of the term I was in more of a research role, looking into different technologies and creating presentations or PoC on the different technologies.

At my time at BlackBerry, I was able to become more familiar with the C++ language, taking what I have learned from C in school and applying it towards a new technology. This also posed a challenge as I was tempted to do things the “C” way of thinking instead of leaning on the strengths of C++, allowing me to grow as a programmer taking what I know from past experiences and applying it to something new. I was also able to use my knowledge of operating systems and Linux and apply it towards my research into eBPF and tracing inside the Linux Kernel.

The First Project I worked on was a C++ application that dealt with ingesting raw data and converting it to a more useful and readable data structure. This was the first time I have used C++ in a professional environment, which really allowed me to learn the new technology, and pick up some good coding habits. Coding in a professional environment forced me to look at programming differently than I have had to in school, needing to care about smaller details such as how different operations would affect performance. For example, how to correctly deal with move semantics in function calls, and when you should and shouldn’t have classes with move and copy constructors. Most of my learning took place during code reviews where other developers on our team were able to call out any mistakes I was making, allowing me to learn from them and improve in future reviews. Code reviews also allowed me to see how different members of my team programmed, learning different techniques or ways of solving a problem I would have never thought of, as well as see the project come together piece by piece. The highlight of this project was my first real story I was given as a developer. I was told to come up with the design and implementation of a few simple data structures that was going to be used in the application our team was developing. This gave me the freedom to explore different ideas that I had, and really start to learn the C++ language. While I always had the support and guidance of my mentor during this, it felt like I was personally making an impact in the project however small.

The second half of my work term our team was given a bunch of different technology to research and to see if any of them would be useful in the current field we are investigating. One of the main technologies I investigated was eBPF(extended Berkeley Packet Filter) which is a new technology that allows you to add trace points in the Linux kernel and execute code when the system calls or kernel functions are called. This allows you to have insight into the kernel’s code without having to write a full kernel module. eBPF can be compiled into byte code which allows for quick changes without traditional complication between runs, while still giving the same insight.
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 from this report reflects how much I was able to learn in such a short time because of the great people around 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 teaching me many things throughout the work term. Special Thanks to my mentor Darcy for supporting me throughout the work term and helping me grow as a developer.