My career in a nutshell can be described as a cosine curve. You might ask me how a cosine curve can represent my journey. My interest in computer programming started off at a peak, then gradually diminished to the rock bottom, then gradually sky rocketed to another climax. Below is the graph of cos(x) if you need to refresh your math knowledge.
Like most kids, I was absolutely attracted to video games when I was young. I still remember the thoughts and questions I had long time ago. I always wanted to know how computer games were made, and all the magics behind them. The addiction to video game never diminished slightly ever since.
Luckily in grade 12, I picked my first ever computer programming course where I got introduced to the computer programming language. On the first day of class we learned how to print “Hello World” to the screen. To be honest, I was really amazed that writing code can magically make computer listen to my command. It was until this point, I started to unravel the mystery behind computers.
Everyday in programming class, I wanted to learn more and more. Finally a few months later, I decided to fulfill my childhood dream to design and implement game as the final project for the course. I did a lot of research on example codes for different types of games online and then brainstormed all the features I wanted to have in the game such as monsters, player’s abilities, maps, and story line. With a well-designed layout, the game turned out to be functional! I felt EXTREMELY accomplished and I have reached the highest point on the cosine curve of my life. It was at that point I realized that I wanted to become a game developer in the future.
My cosine curve life probably started to fall dramatically ever since I came to University of Waterloo. I chose the program Computing and Financial Management where I can master both CS and Finance skills. The CS courses I took really made me to question myself if I actually like CS or not. The journeys of taking CS135 and CS136 courses were nightmares. They were so different than high school course because in high school I had lots of freedom to learn what I was really passionate about, whereas University courses required me to learn algorithms, data structures and countless proofs. Even though I attended every lecture, I still felt like I was listening to Greek, or some foreign language that I could not understand. The assignments were also difficult and lengthy to the point where I had to pull multiple all-nighters. My dad is a software engineer, so he keeps telling me that I “will understand the code, it just takes time”. How long is time? Will I be able to live that long? ONE YEAR? TEN YEARS? FOREVER? I lost interest in computer science in my First year of University. This was probably the lowest point of the curve.
However, the cosine curve started to rise when I started my first internship as a software developer. The programming I have done at the work place was unexpectedly interesting compared to those boring mandatory assignments. I made contributions to the company and I was proud of myself to see clients using some of the software features I implemented. The knowledge and skills I gained from work is really different than what I can possibly learn from attending lectures and copying notes. Now I look back at my freshmen experience, I am glad that I did not give up half way through. I am very looking forward to internships at software companies, and I don’t believe my future life can be described as a cosine curve anymore.
Although a lot of people say programmers don’t need a good communication skills since they just sit in front of the computers and code all day, I don’t think that is the case. During my internship, I realized that I really lacked communication skills when I tried to write documentation and code review. Writing a well documented and organized code is essential communication skill. Additionally, whenever I got a new project, I needed to discuss and analyze the user’s requirement with the business analyst, which also required effective message delivery and interpretation. To summarize, here are some of the types of communication we as a developers will encounter:
- Intra-team communication – Communicating with our team members and peers with the goal of developing the product.
- Intra-company communication – Communicating with our managers, executives, or bosses who are sure to be less technically sophisticated.
- Client communication – Communicating with someone who may have little to no technical awareness, and we must be able to explain to them why this idea is good, and that idea is bad, or why one request is not practical, and another is.
I think the second point is my weakest area because I become anxious and scared when I formally speak to someone who has more authority and higher level than me. Overall, communication skills in software developers are really important and we can’t ignore it.