Work term report 1 report PDF

Title Work term report 1 report
Author Kevin Lee
Course Work-term Report
Institution University of Waterloo
Pages 9
File Size 243.1 KB
File Type PDF
Total Downloads 88
Total Views 184

Summary

Work term report Work term report report report report...


Description

Yue Yang Yu, 361 Laughlin Cir, Ottawa, Ontario K2T 0E3 April 24th, 2021 Chair of Department, Department of Systems Design Engineering

Dear Paul Fieguth, I have prepared this report, Mr Fieguth as my 2nd Work Report. This report is the first of three that I must submit as part of my degree requirements. This report was entirely written by me and has not received any previous academic credit at this or any other institution. The academic term completed prior to this work term was my 2A semester. The purpose of this report is to cover my progress and knowledge/experience I gained while on my work term that followed my 2A academic term. Specifically, my work term report covers my programming skills and how it was manifested on the job and how I was able to know if I improved or not. During this work term, I worked under Jiajian Yang (my supervisor) and Payal Bhatia (my mentor) under an IOSXR team which is responsible for the more complicated Cisco devices and worked for a software team. The report topic related to this term on my improvement as a software engineer was self-initiated and self-monitored throughout the coop term. I would like to express my special thanks of gratitude to my mentor Payal Bhatia as well as my boss Jiajian Yang who gave me this opportunity at a renowned company like Cisco and do meaningful work.

Kindest regards,

Yue Yang Yu, 20826988, Biomedical Engineering

Progression of Programming Skills Work at Cisco - Work Term Report 200

Yue Yang Yu 20826988 Biomedical Engineering Department of Systems Design Engineering, University of Waterloo

Engineering Skills Summary: My selected engineering skills are inclusive of fluency in programming languages in C and Python and furthering my knowledge of their implementations and how to problem-solve with them. My engineering outcomes for this skill are to increase my fluency as well as gain more in-field experience of how to code and deal with different topologies and code bases. Different skills that will be addressed in this report include communication, precision, problem-solving, perfectionism and patience. This report will also demonstrate progressive improvement through the use of visual representations of progressively difficult tasks alongside their timelines and the amount of help needed to finish them. The skill development methods used were effective but were found to be too general and universally applicable rather than being specific to every work environment. I learned to deal with different challenges involving being independent along the way and improved both my skills as well as my competence on how to improve most effectively.

Keywords – Programming, Software engineering, Independence

I.

ENGINEERING SKILL & DOMAIN OF APPLICATION

Working in the field of software engineering, I have learned and been exposed to many critical skills that are necessary to ensure progress and efficiency on the job - some of these skills include communication, precision, problem-solving, perfectionism and patience. These all relate to engineering as a whole and not just the industry of software because all engineers need to focus on ensuring their product is the best it can be through large amounts of critical thinking and teamwork. Communication is crucial in software engineering, especially when everyone is working from home. Coworkers are not able to get up from their desk and walk over to someone else to seek guidance, the one in need must be aware or seek out who has the ability and knowledge to

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 1

help them in their task and then also has to prepare their questions and know exactly what they are asking their mentor so that they do not waste someone’s else’s time. With proper communication skills, both/multiple parties should be able to clearly articulate what they are asking concisely so that it can be easily understood by other parties, otherwise delays pile on top of the already difficult work from home setting. Communication is also emphasized through holding information meetings, updating company wikis and team meetings so that everyone on a team can do their most with resources already at hand and do not have to scramble to find someone every time they hit a roadblock. Additionally, communication is also conveyed in code where developers add comments to their code to help anyone reading it later or debugging to more easily understand what is going on rather than having to read through everything multiple times. Precision is an easy word to overuse but it has an extremely important role to play in the field of software engineering because there are so many lines of code that if someone trying to identify the root cause of an error cannot precisely formulate possible origins for it, they could be stuck for weeks to months. With such large databases, it is incredibly important for developers and testers alike to have precision so that sloppiness does not snowball on top of itself. The reason why there are such long commit processes into code databases is to ensure the precision of every change and that it is all necessary in how it affects the new code. Without tact, a company’s software side could fall into a deep hole of failures and will eventually become irrecoverable. Problem-solving is a skill that applies to all of engineering and can arguably be used to describe engineering as one skill in itself. Problem-solving appears in all aspects of software from coding something to fruition to refining the product to have as few failures as possible. Engineers are professionals who solve problems for a living, they will encounter problems while trying to solve completely different issues however, this is just how the job runs itself. Similarly, the duty of software engineers is to evaluate, understand and disassemble different problems that come to them. Perfectionism, like mentioned before, is extremely important in the software field because it maintains the high bar that all the master databases of code need to uphold. If everyone were to merge sloppy commits, the code would become a mess overnight. Perfectionism in this job is to ensure anything you add on a permanent scale to the company is genuinely helping the product, even if it takes a little longer to ensure you have found a desirable solution, it is better for the company as a whole because one strong commit can trump dozens of sloppy ones in how much they can help customers in their experience with the product. Without maintaining a strong level of perfectionism, there would be no distinction between the best-performing companies and the worst because all the code would be nonfunctional.

Patience may not sound like a skill to many as they may simply interpret it as waiting without purpose however, patience is incredibly important. Being patient when waiting on other team members to approve the changes you make, meeting with a coworker, waiting on a case update and redoing multiple failing tests that you have not seemed to make progress on for weeks are all examples of where patience proves to be an irreplaceable skill.

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 2

This report focuses on the question: Does fluency in coding/understanding a language (was C and Python on this job) improve the ability to identify root causes of failures in test automation to a competence level of solving moderate urgency issues in the code over a 4-week period, as measured in terms of increase in task complexity and reduction in task errors? Task complexity will be assessed using timelines of solving similar difficulty level failures. Task errors will be categorized through timeline extensions and the level of guidance that was required.

II.

ENGINEERING SKILL DEVELOPMENT APPROACH

Proficiency in coding languages is a very daunting task and a skill that needs to be maintained and honed on a regular basis to maintain mastery due to the constantly changing nature of the technology industry. For a complete beginner in coding, it is extremely important to start off with all of the basics and understanding the theory and its purposes before trying to string everything together because programming is an extremely precision dependent task and a beginner will encounter a plethora of roadblocks. With a novice (someone who can understand the basics in a certain language) - I label myself as an experienced novice, experts (such as my mentor, boss and other coworkers) advise me to go through boot camps and online courses first. Bootcamps allow students to learn on their own and grasp concept basics first. The purpose is not to have completionists who suddenly become experts in their field but to allow for students to develop a strong enough fundamental understanding from taking bits and pieces of important information that they can recall from their individual learning; those bits and pieces of knowledge will be able to be strung together and allow for the students to learn quickly and have a better understanding when being taught by a mentor and will have less question and time-wasting periods for both parties. After the novice stage, experts refer to the programmers as intermediates, who are proficient enough to do work mostly on their own and have a good understanding of the database and code that they deal with on a regular basis. A general software engineer will be an intermediate to possibly expert where they have passed the novice stage in learning all the basics and time on the job has led them to be able to evaluate and understand the tasks that are delegated to them. They will need help, but not nearly as often and are fully capable engineers. The timeline for this can range from a few months to a couple of years depending on the complexity and past experience and learning ability of the student. As mentioned before, intermediate is a mix of a strong fundamental understanding, with experience to back up their capabilities. Experts/advanced programmers are veteran intermediates who have accrued large amounts of knowledge and experience in the job over the course of years. These people are usually tech leads and are the go-to person on the team for any coworker to seek guidance from, SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 3

especially if there is a difficult task to overcome. They are usually the “last line of defence” and the most reliable programmers in their field as they can perform tasks that general software engineers complete at multiple times the pace. Becoming an expert takes years of dedication to stay updated and regularly conquering new problems to solve. From tech leads in the industry, the best advice to reach this stage is to stay consistently humble and always ready to learn new concepts and resources so that they can maintain and improve their skill in such a rapidly evolving industry. Anything past experienced novices requires much more direct mentoring and trickledown of inside knowledge rather than googling answers as the tasks become exponentially more intricate and require a precise understanding of the task they are dealing with rather than a general solution. III.

EVIDENCE OF SKILL DEVELOPMENT

The development time frame for this skill development is predominantly in the four-month time span of the coop term. Although my programming skills in Python and C were above beginner level before (refer to Figure 1 where novice skill level was practised on the coding website: Leetcode), the methods of dealing with the codebase and interacting with it were never in my repertoire of knowledge so there was a large amount of learning that occurred to increase my skills. Leetcode Novice programming questions- websites that allow users to practice coding skills

Figure 1. To demonstrate my improvement of problem-solving skills in programming, I made a table and graph to provide tangible evidence (refer to Table 1 and Figure 2).The table has a clear progression towards improvement when considering the time it took to finish tasks as they stayed consistent where difficulty grew. The graph is the progression of my job throughout the term as I

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 4

tackled more and more difficult problems and tried to keep steady deadlines for both my supervisors as well as myself to ensure improvement it allowed my impact to steadily increase to approaching that of a full-time employee. Although more help was needed in difficult problems, it was to help push me and learn rather than stagnating at easy fixes. Table 1. Progression of Tasks and their Difficult with Time and Help Needed Task

Difficulty

Time Estimated

Time Took

Help needed

1.Beginner logic failure fix

Easy

1 week

3 days

Moderate

2.Failure root cause find and fix for testing error

Novice

1-2 weeks

1 week

Low

3. Failure root cause find for the similar error message appearing in a different test suite

Novice-inter mediate

1-2 weeks

1 week

None

4. Difficult novice logic error causing failure in the compare function

Intermediate

2 weeks

1.5 weeks

High

5. Difficult logic error in processing different items through a function that cannot recognize marker vs object

Difficult Intermediate

2 weeks

1 week

High

Figure 2.

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 5

IV.

DISCUSSION OF SKILL ACHIEVEMENT

My skill improved drastically from my starting point as I was a complete beginner-novice for the work I was doing. From starting off the job not being able to put together how to make sense of how the code runs together, I reached the point where I would not need to ask for assistance immediately and could put together my own questions and formulate my own understanding and then communicate that with my mentor to get more clarity and help in finding a fix to the problem. I am aware of my improvement as I tracked the difficulty of the tasks I completed and ensured they were steadily increasing. Compared to the industry standard full-time employee, like mentioned in Figure 3. I was probably at about 70% of a proficient new full-time employee. From my managers’ explanations, full-time employees are expected of a lot, so their ramp-up is much more extensive than that of mine and will have much more knowledge when they are up to speed so I was probably at 70% of a new full-time where they have not completely grasped everything but can still do work. Through the process, I learned that working remotely may sometimes increase waiting times as full-time employees are really busy, meaning there is a great emphasis on being independent and keeping myself busy to make sure I am still improving.

V.

LIMITATIONS OF SKILL ASSESSMENT & COMPETENCE

The limitations for the methods I used for my skill development is that it is too vague and applies more generally, which means whenever it is used for a specific job, it should be tailored more to the work environment and resources available at hand than following it as gospel. An example of this is when I hit roadblocks on the job, asking mentors would not be an immediate solution as I would have to set up a meeting and that might take a few hours to a day. To ensure I was still doing work, I was flexible and ensured I had multiple tasks so that I was never completely stagnating my progress. In terms of my skill competency in the context of the duty to public welfare and safety, it is as high as it can be - as it was when it started because my work has no effect on public safety. The products that I provided to are not used by the public, additionally, any of my changes would not be affecting any physical problems. The closest thing to public safety that my work might affect is packet loss, which is where during phone calls or other streaming services, there might be information lost - this would serve to be undesirable in an emergency situation. However, none of my work affected that aspect and if it did, code is reviewed by numerous people before it is committed into the actual product, which should almost completely drop the risk. It can be said that I am minimal supervision when working and need supervision when committing. VI.

CONCLUSIONS

Addressing the original goal, the skill outcomes address the goal very well because they work in tandem with each other. As I am moving up to more and more difficult tasks, whether or not I had guidance, my fluency in C or Python programming languages increase because I am learning about new situations to implement the code. As my fluency in the languages increases, I am able to further tackle more complicated jobs as well as do more independently before requesting guidance. Additionally, the

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 6

extension of my comprehension also allows me to work faster and reach deadlines sooner rather than later because there is less research and confused thinking time spent on understanding the problem. Ultimately, fluency in the languages C and Python allow for the solving of more difficult tasks at a faster rate with more independence and errors, this was demonstrated with Figure 2. and Table 1. where skill and comprehension increased steadily as the work term continued.

VII.

RECOMMENDATIONS

Recommendation #1: Further my knowledge and experience tackling different problems and environments that employ Python and C. Rationale: As demonstrated in the results from Figure 2. and Table 1. the progression of comprehension in the languages allows for more difficult work to be done faster and with more independence. Costs: Some monetary costs that might be involved with recommendation are paying for boot camps and books to further my knowledge, an associative value for this is roughly $500 inclusive for both languages. Time costs are extensive and involve over 50 hours of practising problem-solving in the languages as well as learning new implementations. Benefits: The benefits outweigh the costs because I would be able to demonstrate an extensive repertoire of skill to do more difficult work for a more difficult job, which in return would pay more than that of a beginner level (through different companies or more senior-level positions at the same company). ACKNOWLEDGMENTS I would like to express my special thanks of gratitude to my mentor Payal Bhatia as well as my supervisor Jiajian Yang who gave me this opportunity at a renowned company like Cisco and do meaningful work.

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 7

REFERENCES [1] J. Howcroft. SYDE162. Class Lecture, Signal Detection: “Signal Detection Theory & Design Principles.” May 13 2019 [Online]. Available: Systems Design Engineering, University of Waterloo, Waterloo, Canada, [Accessed: 08-May-2021] Sources of Images: Figure 1. Image source: Leetcode (2021) Two Sum Easy Practice Problem [Online] Available: https://leetcode.com/problems/two-sum/submissions/ [Accessed: 08-May-2021] Figure 2. and Table 1. [Image source: Yue Yang Yu, 2021]

SYDE-BME/2020/V1.2

Project-Based WKRPT #[200], Yue Yang Yu

Page 8...


Similar Free PDFs