My self-introduction

Hi. I am Gabriel (a.k.a. Lance), a competitive programmer from Singapore. I started this blog to share my journey in acquiring mathematical and algorithmic problem solving skills. Since this is my first post, I will elaborate on my background in math, programming (and algorithms).

I was first introduced to programming by a friend in high school, at the age of 14. Back then, I was curious about how to create a website, so I self-learnt web-development languages such PHP, HTML, CSS, etc. Back then, I thought that programming was pretty mundane because I was just following a fixed set of simple procedures to create a webpage layout, write the content, etc. If I didn't know how to do certain functionality, I would just copy and paste code from the web and it magically worked! The fact that I didn't understand what I was doing never really bothered me as I was able to get the job done. This interest was short-lived as I found web-design to be a hassle due to my bad design skills :(

My next encounter with programming was during my studies in polytechnic (tertiary institution). The first programming language that I was formally taught is Java. This time, the experience was a lot more enriching as I had to apply what I knew to create a simple Java application using Object-Oriented Programming. It is not very good though so I won't showcase it here :(

During the final year of my polytechnic studies. something magical happened to me - I studied algorithms for the first time! This was only possible due to my exchange programme with a local university. I was amazed at the existence of countless tricks to optimize programs - something that a brute-force addict like me would never be able to conceive. I really sucked at thinking of algorithmic optimization back then - I would spend hours trying to solve a simple stack/hashmap problem (the longest I took was about 10 hours!). Thankfully, I had a extremely passionate and caring professor who was very passionate about the subject. He introduced his students to UVA online judge and encouraged us to spend our time solving more algorithmic problems rather than using our smartphones :) Even though I struggled greatly in the module, I was moved by my prof's ceaseless encouragement. At the end, I learnt a lot - 5 linear data structures with some algorithmic concepts. But, the most valuable thing that I took away from the course was, the love for algorithms. That was how my journey in competitive programming (and my feud with math) began.

Speaking of math, it has been my nemesis since high school days. I totally sucked at math (to the point of failing). I owe my greatly improved understanding and skill in math to my brilliant (and very patient) tuition teacher. Although my skill in math still sucks as of today (03 July 2017), I made a vow to patch this weakness. Why? Because I noticed that many of the top competitive programmers have a high level of math skill and some of them explicitly stated that good math skill is important. Having been a competitive programmer for almost a year, my experience tells me that this is the truth. Math skill does not imply the notion of memorizing tons of formulas and substituting variables with values to arrive at an answer. It is more about being able to make clever observations and prove why those observations are actually true. Of course, clever tricks such as series manipulation are also encompassed within this domain.

To date, I have solved ~500 problems on different online judges. But my algorithmic skills still suck :( I have worked hard over the past 1 year, learning non-linear data structures such as trees and graphs and algorithms such as dynamic programming, square-root decomposition, etc. At this point, I have come to a realization - knowledge does not imply skill. I think I have quite an extensive knowledge of algorithms (at least for competitive programming). But I often face difficulty even when solving problems that only require me to use knowledge that I already know.

My goal for now is to solve mathematical problems (those that require clever observation and proofs) besides my frequent algorithmic practice sessions. Hopefully, that will make me a better competitive programmer. I will soon be sharing mathematical and algorithmic problems, that I think are interesting. Stay tuned!

Comments

Popular posts from this blog

USACO - Broken Necklace

HackerRank - Search in a 2-D grid

Efficient learning in Competitive Programming