This area will be dedicated to interesting programming articles that I read and new things that I've been trying out at work or outside work in regards to programming.

Writing about my programming experience is kinda interesting I guess. I started programming at a relatively young age... in high school. But I was sucky for the longest time. So I first started programming in grade 9. I learned how to code in turing. It was a weird experience where I would make shit up with a lot of copy paste and having no idea how it works. I guess that's always the first step of learning. Just copying and then doing things without a real ideas of how things work.

Growing up - I played a lot of video games. It was one of my childhood dreams to become a video game programmer. So that's why I tried learning programming as early as a could. After learning turing. I learned Visual Basic, C++, and Java in high school. Most of it was spent in Java so I have quite a number of years of Java experience.

The thing about learning about programming in high school is that I feel it's totally irrelevant and not that useful. We learned about Object Oriented programming and inheritance. One of the projects forced used to use inheritance... but there wasn't a real point of using it. It was more of using inheritance for the sake of using inheritance. Academia yo. What's really funny is when teaching recursive programming... they always teach you using the tower of hanoi. I still don't know the how to code the tower of hanoi using recursion. I don't know how to solve the tower of hanoi using any form of programming... because my brain is fail and I don't even know how to solve the tower of hanoi in person. I guess your code is limited by your human understanding. Also, I had no idea what static did back then. But static and global variables were awesome. :D

I got accepted into the University of Waterloo for Software Engineering. It was a childhood dream come true. But then when I got there... I fucking hated it. I had to learn chemistry, physicals, calculus and all this stupid crap that I didn't care about. All I wanted to do was code and learn programming. I ended up skipping most of my classes. I think by year 2... I really wanted to switch majors to Computer Science. My parents wouldn't let me because Software Engineering was more prestigious according to them... and also because I was talented enough to do it I should stay in the harder program. I *failed* out of Software Engineering shortly after and then switched to Computer Science. I put failed in asterisks because I don't see it as me failing. I was just too pussy to switch majors of my own accord so I failed such that I had to switch.

Computer Science was a much better major for me because electives are so much fun. I got to take all the fun courses that I wanted to such as Japanese, Economics, and Psychology. After transferring to Computer Science and taking all the intense programming courses. I still didn't really appreciate the education. Design patterns at that point still had no meaning to me. Who really needs a factory design pattern in real life? Did I really need to learn about assembly language, compilers and how to do memory management at the OS level? Why did I have to implement fork? =|

So the University of Waterloo has the coop program which is basically a 4 month internship. We have 4 month internship followed by 4 months of school. The coop Computer Science bachelor degree would take 5 years to complete because of this. I got to work at various companies doing super cool shit. In my first job I got to do Web Application Development using C# .NET and SQL. Databases were so cool. I finally got to learn about magical databases. I had a 3rd year course on databases... which was so easy because of my first work term. The course on DB basically taught you about SQL language, joins and nulls. Something really interesting is that I only learned the practical method of SQL. What this means is that everything can be completed with a left outer join. I was a left outer join master. Too jokes. I remember an interview where this guy asked me what the different between inner join, outer join, and union was. I was like - you can do anything with an outer join. And he's like... how would you do this while ignoring nulls? Answer: add is not null after your outer join. Too jokes. Outer joins are more expensive and shit, but technically speaking you could do anything with it. :D

I remember in my second work term I had to do front end html/css/javascript. This was before the days of template languages so you still had to write opening and closing tags and what not. I was so shitty and slow. I was assigned to do pair programming with this guy who graduated from Conestoga college. He would just code so freaking fast it was hard to follow. Then when it was my turn it was like... type type type... think think think. It's okay though because by the end of the term there I was definitely on the same level.

I used to be so bad at programming. When I did this pair programming assignment with my friend who was really smart. He would always code shit in huge chunks before compiling. Then fixing everything. The way I did it back then was change a couple of lines - compile. Rinse and repeat. The thing is - code is deterministic (usually) and thus it should always work the way you think that it works. While small changes is good... the level of small changes I was making was really small compared to my friend. /shrug

I remember my first introduction to Linux was at the University of Waterloo. We had to do this really simple assignment in unix. It wasn't even programming but they wanted you to write the solution using an editor in Linux. They checked your answers by comparing the end line characters. If you understood the previous sentence... know Linux. Congrats. I really didn't want to learn Linux at that point I wrote my solution using Windows and ended up replacing the new line characters with a byte editor.

Then around 2008 April. (8.04) my friend installed ubuntu. He showed me the rotating cube. Shiet~ Linux.. and Ubuntu is so amazing. Multiple desktops?! Time to install Ubuntu. Since then I've been a die hard Linux user. I'm currently on Linux Mint KDE.

I think I stopped wanted to become a video game programmer at some point at University. Video game programming was hard. And when you did video game programming all you did was one very small slice of it. You don't get to build a game from start to finish nowadays. I think that's when I started getting an interest in doing web programming. I tried learning php on my own... no idea why. I learned it to the level where I was so bad that I couldn't even use associative arrays properly.

Then after University of Waterloo I moved to San Francisco to work as a full stack web developer. It was in php but the learning was amazing. Too lazy to write about it now... maybe I'll continue in part 2.