Hi There!

My name is Jadon Fan. I graduated with a BASc in Computer Engineering at the University of Waterloo in June 2022. I was part of the University's co-op program, which meant that I alternated between study terms and work terms every 4 months. I hope you enjoy exploring my website, which I am using to gain further experience in web development.
I would describe myself as a determined person who loves to employ his problem solving skills. When I face a problem, I will put in as much effort as I can (eating and sleeping are still important!), and use whatever relevant tools I have at my disposal, to find a solution to that problem. That said, my mantra is thatwhile it is important to work hard, working smart is more efficient and effective
. Meanwhile, my friends would probably describe me as a helpful person whenever it is help with academic work or just life in general. Helping people not only enables me to put my knowledge and skills to good use, but also provides a great learning opportunity for myself. For example, if I make a mistake when I help others, I become aware that I might make that same mistake in the future and will try to find why I made that mistake and how I can potentially avoid it.
Quick Facts
I used to play chess semi-competitively in high school. However, I stopped playing for a while once I got to university, but I now play it again but this time only casually against bots and in puzzles on chess.com. I don't really have a favorite opening but I usually play the Ruy Lopez or Scotch opening, some variation of the four knights opening (classic beginner's opening) or if I'm playing black, the sicilian defense. I would count myself as a pretty aggressive player albeit a slow one.
Skills
In order to navigate through the bubble layout panel, click on it to focus and then either scroll through the panel or press the arrow (↑ ↓ ← →) keys.
JavaScript
TypeScript
React
Redux
RTK Query
Axios
Apollo
Jest
React Testing Library
Work Experience


Software Engineer Intern

Software Engineer Intern

Software Engineer Intern

Software Developer in Test Intern
Projects
Academics
TODO
TODO
TODO
This course covered the fundamentals of operating systems, particularly real-time as you can guess from the course title. There was a lot of content to take in, such as memory allocation and management, multi-threading and multi-processing, caching and I/O, but no memorization was required as the assessments were open-book. Each lab involved the creation of a particular aspect of an operating system written in the C language that would run on the ARM-based Keil MCB1700 microprocessor.
This course covered the fundamentals of databases including ER modelling, SQL queries, relational algebra, transactions, basic data warehousing and mining, concurrency and recovery. There were four labs done in MySQL, with the first one completed individually and the other three completed in groups of three. The final lab combined our knowledge of MySQL as well as some basic SciKit-learn APIs to predict whether a particular baseball player would be in the MLB Baseball Hall-of-Fame given their play stats. Overall, the breadth of knowledge covered was great, but the depth was lacking.
This course covered the fundamentals of computer networks, particularly of each layer in the OSI model other than the application and physical layers. For the longest time, I have been working as a software developer writing APIs on the back-end and calling them on the front-end but I didn't have a complete grasp of how these APIs were sent over computer networks. This course gave me that valuable knowledge, and I would be lying if I said that I didn't enjoy the content!
TODO
This course covered the fundamentals of compiler design and implementation. It started off with a recap of finite automata and grammar from ECE208 (discrete mathematics and logic). Then, we learnt how to apply those abstract knowledge to create and optimize various aspects of a compiler, including recursive descent parsing, compile-time optimizations, register allocation and garbage collection. Through the labs, I slowly but gradually applied my newfound knowledge of compilers to build a simple yet capable compiler in Java to convert Java code to a subset of the VHDL language to, finally, Assembly. Oh, and I was one (1!) percentage point away from achieving a perfect grade.
Time flies by quickly. After the next co-op term, I'll be half way through the ECE program. I still have no regret about choosing ECE as both my hardware and software courses so far have been exciting and interesting. With most of the foundational courses cleared up, I do expect that the courses from here on out will be more practical, so I will be able to better see how what I have learnt so far can be applied to real-life situations. As for the 2B term itself, the content was not particularly difficult. The labs were time-consuming, so the lab rooms in the Engineering buildings felt like a second home to me, especially on weekend afternoons!
It appears that I survived the infamous 2A ECE term. With 6 courses, I essentially spent half of my day every weekday of the week on campus in a lecture, tutorial or lab... and that's on top of completing assignments, working on side projects, and preparing for co-op interviews. All in all, relaxation was mostly a weekend thing. Unfortunately, I only realized the great extent of my procrastination after midterm week, which saw my marks dip significantly from first year. Thankfully, I eventually caught up with the content after the midterm after promising myself to not leave the problem sets until final exam period. As a result, the final exams were able to save my grades.
The previous study term was more of a general engineering term. On the other hand, with mathematics (both discrete and continuous), circuits, digital logic and E&M courses all bundled into 1B, this term has clearly established itself as a more ECE-specific foundational term. I have so many opinions regarding each course, but I doubt anyone would want to hear my rants, so I'm going to summarize my opinions. I put in the most effort into circuits and felt it was easy after doing so many problem sets. This effort paid off as I scored 100% in that course. Meanwhile, digital logic was difficult even after completing the problem sets since it required covered tons of content so quickly and a lot more memorization and out-of-the-box critical thinking. However, the course made me approach problems with a more "hardware" mindset; for example, breaking down problems into state machines, with the consideration of transitions and assignments across various clock cycles. The difficulty of all of the other courses would somewhere between the two aforementioned courses, but they were about equally as useful to me.
TODO