January 29, 2017
It's been about a year since I've really thought about this ol' website, but I recently felt the inspiration to spruce it up a bit. In 2016, I discovered that a lot of developers give talks at conferences as a way to spread their knowledge and meet other developers. I decided that this was something I wanted to pursue, and started looking into the process of speaking at conferences. Turns out, it's much easier than I thought! A lot of conferences are simply looking for people to speak about challenges they have been tackling at work. There aren't really any prerequisites to becoming a speaker besides having a strong grasp on a particular subject.
Knowing all that, I submitted a few CFPs (Call for Papers), and although I wasn't expecting to be accepted to any on my first try, I ended getting invited to speak at 3 Conferences! In the first half of this year I will be travelling to Tokyo, Boston, and Chicago to speak at Android conferences. I wanted to keep track of my speaking progress, and thus I started a new page on my website : speaking
I'm excited about diving deeper into the topics I will be presenting, and I'm even more excited to meet other Android developers in the community.
December 23, 2015
This is jumping ahead a bit, but I have so much excitement for my Christmas exercises.
At the point before winter break, the students had learned some major concepts in Java such as primitives, if/else conditions, for/while loops and arrays. We had been going over arrays for the past few weeks, but I had a feeling that it wasn't really sticking with the students.
Being that it was the week before Christmas, and that I'm a giant Christmas fan, I wanted to create some exercises to celebrate. These are some of the things I came up with.
1. Write a method that takes in an int, and prints out a Christmas tree with the int number of levels.
So for example, if the method called was printChristmasTree(10), it would print out something like this.
Basically a Christmas tree with 10 layers, and then a little stand at the bottom. If they had extra time, they could try implementing it with ornaments where some X's are O's instead. This problem required knowing the difference between System.out.print and System.out.println, and also having a really good grasp of for loops. Unfortunately, a lot of students strugged with this one, but was able to solve it in the end after hints along the way. I've found that it's a great strategy to present the whole problem first, give the students some time to think about it, and then present hints every 15 minutes so they don't get too frustrated and quit at any point.
The second project I gave them involved using arrays, for loops, and basic coding skills.
The README for the project looks like this.
* We're going to create a game for users to get a chance at getting a
* present. We start with an array with 20 elements, and 3 of these
* elements will represent presents. The rest of the elements
* will be represent coal
* At the beginning of the game, the program chooses
* 3 random array elements to be presents
* The user then gets 3 chances to get one or multiple presents. For each
* attempt the user has, they chose a random number between 1 to 20.
* If they were lucky and chose an array element that was a present,
* they win a present
* For bonus: we can chose 3 random array elements to be presents, and
* also have 2 random array elements to be a TRY AGAIN. so if the user
* chooses one of the TRY AGAIN elements, they should get another chance
* and not lose an attempt
Throughout the class itself, I had a lot of TODOs for the students to fill in. This was a good practice for them in reviewing arrays and keeping track of variables.
December 20, 2015
One of the favorite activities of the class involves using the java drawing library gpdraw. It's pretty easy to use, and could be learned in a few minutes after some explaining. It's also incredibly satisfying to be able to visually see what you've created with your code. We used this library in class on the first day to draw a simple house. This required nothing more than learning to how to call functions, and the importance of giving functions arguments.
As we were learning for-loops, an exercise that I came up with involved drawing a colorful sun using a for loop. The program consisted of drawing 360 lines from the center as "spokes". In the end, it would look something like this.
The colors were achieved with the java.awt.Color library, and by using a different color to draw a line on random iterations of the for loop.
The class really had a lot of fun with this one, as students always love customizing their programs to look unique and cool. Some students were even able to come up with some really cool designs using some magic with the for loop.
December 15, 2015
Now that I think about it, getting the job was probably the easiest part of this whole thing. As the first day of class started quickly approaching, I began to realize how much I needed to prepare.
What kind of teacher would I be? The harsh and strict one that nobody really likes but always has a quiet classroom? Or the chill and easy-going kind that doesn't always have the most controlled students. Should I introduce myself as Ms. Chang? Or would that be ridiculous because some people still mistake me as a high school student? Should we do some ice-breakers so I can get to know the students? Or is that not a thing for high schoolers anymore... The last time I had been in a high school classroom was more than 7 years ago, and I didn't really remember what it felt like besides always being tired.
To add on to my stress, I was out celebrating a friend's birthday till 3am that Friday night (or should I say Saturday morning). I set my alarm for 7am the next day, and tried not to stress out too much.
The next morning, I woke up at 6am, too anxious to sleep more. I got myself a large Starbucks before heading my way, thinking it would get me more energized (I never drink coffee regularly). That morning I ended up arriving at class more than an hour early. I sat there in my classroom, just letting everything sink in a bit. I was going to be teaching in one of the rooms in Soda Hall, the same building I had taken my computer courses while I was in college. Wow, what am I going to say to these kids...
The rest of the day went by in pretty much a blur. We did some introductory coding questions, I let the kids figure out some sorting algorithms with playing cards, and they drew pictures of houses using some of the drawing functions in Java. All the students seemed like they had a great time, and I felt feeling a little more confident.
In retrospect, it was surprising how easy everything came along. I didn't nervous at all once class started. Things progressed naturally, and I felt like I had a command of the classroom without even knowing how I did it. After I left class that day, I felt a natural high.
December 10, 2015
I have been interested in teaching since middle school. Whenever I need to find a job to make some money, I always thought the best opportunities were tutoring and teaching kids.
However, when I entered the adult life and started working full time, I forgot what it meant to do things outside of work that wasn't just hanging out with friends or chilling in bed. I would occasionally pick up a few day opportunities here and there, but I never enjoyed them that much because I felt like the opportunities weren't long enough for me to make a real connection with the kids I was worked with. It's hard to fee the impact and progress when you only see someone once a week.
About 3 years after graduating college, I decided that I really missed being in the classroom and interecting with students on a regular basis. So I decided to search the interweb and see what kind of opportunities were out there. Lo and behold, I happened upon the most perfect position for me. It was a AP Computer Science instructor position that would happen once a week on Saturdays. This was perfect for 2 main reasons. One, I'm an Android developer so I work all day with Java. AP Computer Science also happens to be taught in Java. Two, I always found commitments on weekdays to be harder since I still have a full-time job. Having this opportunity on the weekend would really allow me to still focus on my day job while also being able to spend some time teaching on the weekends. I rarely do anything productive on Saturday mornings anyway.
I applied, knowing that I was probably way too inexperienced, but hoping for the best. The position was also posted to start 3 days after I submitted my application, so I hnoestly didn't have high expectations. Luckily, the organization hadn't found a suitable candidate for the position yet, and after some phone calls and magic happenings, I was offered the position.
At this point, I would say this was probably the most exciting job offer I've ever received.
July 18, 2014
I'm officially entering the last week of the CodePath Android bootcamp, and while I've been feeling pretty burned out for the past few weeks, I'm starting to realize just how much I've learned in this short time.
There's this common conception that there's a very steep learning curve going into any new job, but past the one-year mark, the learning usually starts to decline as you start doing things that seem repetitive.
I think this lack of learning is what prompted me to join CodePath in the first place. Looking back, I've learned things that I probably would've never been exposed to at my day job. Some cool things that I've dabbled in besides the usual Android:
1) Parse - An awesome backend provider for my group. We wanted to focus on learning how to build Android apps and not how to build a good backend system, and this tool was great for that. We were able to set it up, integrate it with our project, and learn how to make some simple calls within an hour.
2) UX - As an engineer who usually works on the backend/framework part of projects, I've never experienced the process of building a product while putting in a lot of thought about the user experience. Building an Android app from scratch forced me to think of what makes users go back to apps. My group started out with a really complicated and bloated app that had tons of awesome features. But as we got further into the development process, we realized that we had so much in our app, it was creating a chaotic experience for our users. With all the available actions, we can see users being frustrated or even bored by the app, simply because they didn't have a direct path to go through. In the end, we decided to simplify our app to just one core user flow with the hope that this will help retain users.
3) APIs and Open-Source Libraries - I remember reading an article about how the most productive engineers write about 10 lines of code a day. Usually these 10 lines are making use of open-source libraries that solves most of their problem already. I didn't realize the full power of these libraries and APIs until I started looking more into what is available. I'm starting to get into the mindset that if I want to solve a problem, someone out there has probably already solved a smaller subset of that problem in a smarter way. In the end, it's always best to not reinvent the wheel.
4) Designing - I think it's safe to assume that I am just never going to be as good as designers in terms of coming up with beautiful UI. Looking at examples in the App store can only go so far, and designers are really the only ones who can make these apps look good enough for users to want to use.
Demo day for final group projects is in 5 days, followed by a second demo day for the finalists. My group has (semi) high hopes, so we'll see how things go. If nothing else, this has been an awesome learning experience that's made a better programmer
June 27, 2014
Android coding was giving me a little too much stress, so I decided to blog about my first experience with Google I/O.
Like many others, I was excited that this year's tickets would be distributed on a lottery basis. Also like many others, I was not lucky enough to win one of the lottery tickets.
So when I heard that Women Who Code had discounted tickets for women in tech, I signed up immediately. Apparently Google made a big effort this year in getting more women to participate in the conference, and as a result the number of women attendees rose from 7% last year to 20% this year. Awesome.
I started out the first day of the conference by standing in a ginormous line for more than an hour. When 9 o'clock started rolling around, everybody started getting antsy, and it wasn't until around 9:30 that I was finally able to get into the building and sit down for the keynote.
The keynote had a huge focus on the new Android platform, L (which stands for Lollipop), and it's new capabilities that brings better design and user experience. Of course, there was also a lot of hype over the new Android smart watches. Another think that I thought was pretty cool was Android's new integration with cars, taking a step towards safer driving in the 21st century.
Before the end of the keynote, the room was informed that everybody would be receiving not one, but two new smart watches. The smart watches, however, were not the most interesting part of the giveaway. A mystery cardboard that was made by engineers in their "20% google time" was passed out to everybody on our way of the auditorium.
Outside of the main auditorium there were multiple booths set-up, mostly from startups that have incorporated different aspects of Google into their apps (Maps, ChromeCast, etc). I was able to check out a handful of them was impressed with all technology that Google has to offer in order for developers to produce cool products.
One of my favorite booths was Big Web Quiz. It utilizes ChromeCast to let friends play quiz based games on a big tv screen with their own handheld devices. The coolest part about the app was how it generates its questions for players. I talked to one of the developers and learned that each question was formed by popular google searches and information through the Google Knowledge Graph. That way, questions have similar formats, but answers are always different and players will never see the same question twice no matter how much they play.
I focused my schedule mostly around learning about the new L, developing for wearables, and new features in Android Studio.
The things that I saw coming out for L were admittedly pretty cool. Making apps look great will definitely be easier for developers in the future, and users will be getting a better experience while interacting with their apps. However, since this new API was just introduced, it might be a while until we see all these new features as part of our phones. I thought it was a good thing to keep in mind though as I look to develop some of my own apps.
As for Android Studio, I was really happy to see all the improvements that Google has made since last year. It really seemed like they put themselves in the developer's shoes to help us be more productive. Of course, the new version of Android Studio will support tools for building Android wearables.
In terms of wearable, it seemed fairly easy to integrate wearable features into existing apps. However, as I sat through these demos and workshops, I had a hard time coming up with good ideas to integrate features of the watch into apps. When would someone want to use the tiny screen on their watch instead of their phone? I still don't have a good answer to that question yet.
One of the last sessions that Google had was a panel with the winners from Bay Area Impact challenge. It was refreshing to get a reminder of how much impact technology can really help people, and to see some real faces telling their stories and aspirations.
Overall, being able to attend Google I/O was a great experience. It got me more excited about developing for Android just knowing all the great things that are up ahead. Being in an environment where everybody was super excited about the new technologies was also really inspiring. Can't wait to see what next year will bring.
June 12, 2014
Since the last time I've updated, there's been three session of CodePath classes, and I thought I'd make a quick update.
For one, the term "bootcamp" is definitely not an overstatement. Going to classes twice a week is already a substantial commitment. But the core of the time is spent on the weekly homework/mini projects. The first homework was fairly easy, and I finished within an hour or two and had alot of fun spending more time to make things look better and adding extra features. This week, however, I've already spent amount 2-3 hours on the homework and I'm still nowhere near completion. So this is probably the start of the uphill climb.
That being said, taking part of this program is probably one of the best decisions I've ever made. I'm always on a learning high after attending the classes. And when I'm not in the class, I'm constantly thinking about how to solve an Android problem, or what kind of features I can build into the current assignment. All in all, it has just been a really great learning experience so far.
Another cool part of the class the instructors are introducing this term is having small teams build apps for non-profits. Our class was divided into 7 teams of 3 people each, and with these individual small teams, we will be paired up with teams from the current Android class and current Designers class. I think this is pretty awesome for 2 main reasons. 1) It's like we have our own little start-up team 2) We're helping non-profits instead of building another app that probably has 10 other counterparts in the app store already. The other day I read a headline that said something about how some of the smartest students from the top universities are all starting to solve 'increasingly minor first world problems'. It really got me thinking about what I want to do for my full-time job and how I want to do more impactful work, so I'm really glad we get to help out some non-profits in this course.
Random side note: I bought an awesome new bike to help my commute to the evening classes. It weighs half the amount of my old mountain bike, and I am no longer drenched in sweat by the time I get to Zynga. It's awesome. Biking along the piers after class without all the tourists walking around and the angry cars honking every 10 seconds is also pretty sweet.
May 22, 2014
This is the first of (hopefully) many posts that I will probably have about the CodePath bootcamp!
I applied a couple weeks ago after hearing about it from one of the tech newsletters I subscribe to. It advertised, "Free 8 week Android bootcamp for existing developers!" I little more research told me that this bootcamp was twice a week for 2 hours each session, and participants are expected to spend about 8-12 hours a week outside of class to complete assignments. There's also an intensive group project at the end where everybody works in groups of around 4 people.
Before I learned about CodePath, I had already been contemplating applying for Hacker School, another well-established coding bootcamp. There’s been a lot of hype recently with these coding bootcamps, but the difference with these two is that it only accepts people who already know how to code well. The purpose of Hacker School and CodePath is help people who already know how to code become even better at coding and for the participants to develop connections with other coding enthusiasts. These two organizations are also completely free for those who get in, as opposed to the others that charge quite the hefty tuition.
To get a sense of how hard CodePath is to get in, I did a quick google search and learned that they receive about 350 applications per term, but only accept 20 people. The average person in the bootcamp also has about 4.5 years of developer experience. I think part of the reason that there are so many applicants is because 1) it's free 2) nobody has to quit their day jobs 3) there aren't that many great mobile learning classes out there and 4) top-notch companies actively recruit people who finish the program
The application for CodePath was fairly simple, asking for links to my GitHub and personal website, as well as what my motivations were for wanting to join. After about 2-3 weeks of submitting my application, I received an email telling me that the instructors were somewhat impressed with what they saw from me. The next step was to build a simple Android ToDo app for submission.
For some reason, these emails telling me about having to build the Android app ended up in my Spam folder, and when I finally found out about it, the due date was 2 days away. I got down to cranking out the app, and finished after about 6 hours of work (the bulk of the time was spent on setting up my environment correctly). The documentation for beginners was really thorough, so I didn’t encounter much difficulty. Coding in Java everyday at work definitely also helped.
The last and final step was a 15 minute phone conversation with one of the instructors. It was really casual, and they just wanted to get a sense of what I wanted to get out of the bootcamp, as well as my background in the coding world.
Only a day after the phone chat, I received an email informing me that I had been accepted to attend the bootcamp for the term. To be a little dramatic, it was probably one of the most exciting emails I had ever received.
The bootcamp itself doesn’t start for another 2 weeks, but I’m pretty stoked for everything. Learning Android has definitely been on my list for a while now, and this opportunity is simply amazing.
One of the benefits it has over Hacker School is that it’s not full time, so you don’t have to quit your day job and move to New York for 3 months. This was definitely a huge plus for me. I’m still unsure of what I plan to do after this bootcamp, but I guess that’s something I’ll determine along the way.
Some other articles on CodePath that’s worth a read for those who are interested:
May 12, 2014
This website sadly hasn't gotten much attention since it's launch. I guess I kind of kept it in the back of my head after showing it to everyone. There also hasn't been any super exciting updates in life for me to post about.
On the other hand, I've been working on some Project Euler problems. It's kind of fun to just do these brain teasers when I'm bored to refresh some programming skills that I don't usually get to use during work. I also get a great sense of accomplishment when I input the right answer. Good times.
April 21, 2014
On a Sunday spent mostly by myself, I think I actually coded more today than I do at a usual day in work. I tried to make my photo galleries prettier, and it's satisfactory for now. I created some scripts to make all the images one size, and then another script to make thumbnail images. Making thumbnail images was a bit harder with all the horizontal and vertical pictures, and not really knowing where to crop the picture in order best represent the picture. Anywho, it's 1AM now and tomorrow is sadly Monday, which means I will have to do some real work. So I guess I'll let it be for now.
April 20, 2014
My arms are currently super sore from rock climbing in the afternoon, but since coding doesn't require much movement besides that from the fingers, I've been pretty productive tonight. Tammie made an awesome suggestion about what I should do on my books page, and so I've implemented it tonight! Looks pretty cool if I do say so myself. Now I just need to think of a design for the food page. Tried an awesome place on Friday night and I can't wait to blog about it. Other than that, once I update my travel pages with more pictures, I think the first version of my website will be good to go!
April 17, 2014
Building up this site has easily become the highlight of my days, just because it feels so productive to do something instead of loaf around in bed all day.
Here are pages that are not ready at all yet:
UPDATE: Felt extra inspired tonight and finished photo gallery implementation as well. Woooooo. Just need to add more pictures to spice things up now.
April 16, 2014
One day while I was just loafing around in bed, I realized that I have absoutely nothing in my public GitHub account. So I set on to brainstorm some ideas about projects I could possibly pursue. It somehow struck me that I've always wanted to create my own website, but always thought that I didn't have the necessary skills to make something that didn't look too lame. I assumed that technology had advanced enough that even someone like me could be able to build something relatively easily. Voila! Here is the result. This site will probably forever be a work in progress, but I'm excited about all the possiblities.