Thursday, December 1, 2016

Elite Worship

Yesterday I read an article called In a world..., which talked about the problem of elite worship in the iOS community. I'm an Android developer, but I see the same problems in our community as well.

Here is how I see it:

  • People who tweet, blog, speak and open source are considered elites
  • Elites are held above the rest of the community, making it unwelcome for others

Does being loud make you a better developer?

Or, flipping the question, are people who don't share their work inherently worse? No, of course not. Unfortunately, unseen work is just that: unseen. Without external evidence, there is no way to tell if a developer is good or not, so we assume they are average. Not better, not worse.

I, too, would like to believe that we live in a meritocracy where good work is automatically recognized. But how? How do people know what you are doing if you don't tell them?

This encourages people to run up a hill and yell on top of their voice. And the people who are comfortable doing that are rewarded, are seen as "better".

However, this is not automatically lead to elite worship. Yes, there will always be some people who are more visible in the community. But that does not mean it has to be a small group who are revered above all else.

What you can do

When you see good work, point it out

One problem of elite worship is that we ended up comparing ourselves with people with more Twitter followers, more mentions in the industry newsletter, more conference talks etc and feel defeated. We can counter that by pointing out the good work we see that is not enshrined on the internet.

Here is a concrete thing you can do: When you do a code review, don't just point out the things to fix. Remark on the good parts as well.

When something takes longer than expected, write it down

We need more voices in our community. Blogging is great, because there is no gatekeeper to decide who gets to publish and who doesn't. But there is still one hurdle: What to write about?

Pay attention to what you do day to day. If you spent more time figuring out how to do something than you thought you would, it is worth writing down.

Don't worry about looking stupid because others must know how to do it already. You don't have to push the boundaries of human knowledge. That's PhD theses, not blog posts.

Think of it as notes to your future self, a place to put codes and commands in monospace font so you can come back in 3 months to copy and paste them.

Just because some people share more doesn't mean there is no place for you to do it. Everyone has a different experience, and we want to hear from you.

Speak at local meetups

In the original article, the author laments that there is no diversity at conferences. Always the same faces, always the same topics. As a conference organizer, I can tell you that speaker selection is hard. There were so many people that very much deserved a speaking slot but didn't get one, because we had a very limited number. You can read more about how we try to have a balanced speaker roster at 360|AnDev.

That said, we don't have to let conferences be the only place where technical talks are given. There are numerous meetups happening all over the world on any given week. And they are always, always looking for speakers. Sure, it does not come with the prestige of conference speaking, but does that make them worthless?

If you think the local audience is too small to worth your time, record your talk and post it on the internet. I wrote a guide on how to record your screen and voice with QuickTime. Would love it if someone write one for Open Broadcaster Software (OBS)!

Give talks yourself, and encourage those around you to do it. That is how we get new voices. Don't let the conference speaking circuit dictate who gets to speak and who doesn't.

Sharing != Elite Worship

People are lazy. If we see the same name over and over, we think that person must know something. This is fundamentally what leads to elite worship. We can't change human nature, but we can spread the love. Point out each other's good work, encourage each other to make it visible. Make the elite circle so large that it is no longer elite.

Thursday, October 13, 2016

Dennis Ritchie Dies Again

Yesterday many people on my Twitter timeline sharing an article about Dennis Ritchie's death:

I clicked through to read the article, which was from 2011. Why is this circulating again?

My guess is that some people were retweeting without bothering to read the article, and thought he died recently.

This makes me think of a reaction to a tweet I posted.

I was furious. Why would I post something that I'm not sure about? I even backed it up with a slide. Why are you doubting me?

Took me a while to remember that that's what other people do. Say things even when they are only 60% sure. I look back at my career and cringe to think of all the times when other people were regarded more knowledgeable because they open their mouths even when they are not sure.

This time, I am happy that I checked the details before passing it on.

Saturday, October 8, 2016

Constraint Layout: Icon Label Text

I am making one of those classic layouts: an icon with two lines of text. I would like to use vector drawable for the icon, and scale it according to the text sizes. I want the top edge of the icon to line up with the top edge of the first line of text, and the bottom edge of the icon to line up with the bottom edge of the second line.

How would I do that? With ConstraintLayout!

<ImageView
  android:id="@+id/flower_image"
  android:layout_width="0dp"
  android:layout_height="0dp"
  app:layout_constraintTop_toTopOf="@+id/label"
  app:layout_constraintBottom_toBottomOf="@+id/text"
  app:layout_constraintLeft_toLeftOf="parent"
  app:layout_constraintDimensionRatio="1:1"
  app:srcCompat="@drawable/ic_flower"/>
<TextView
  android:id="@+id/label"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:layout_constraintLeft_toRightOf="@+id/image"
  app:layout_constraintTop_toTopOf="parent"
  android:text="@string/flower"
  android:textSize="16sp"/>
<TextView
  android:id="@+id/text"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:layout_constraintTop_toBottomOf="@+id/label"
  app:layout_constraintLeft_toLeftOf="@+id/label"
  android:text="@string/jasmine"
  android:textSize="24sp"/>

The width and the height of the ImageView is 0dp. This tells ConstraintLayout to compute them by the constraints. In this case, the height of the ImageView is determined by these constraints:

app:layout_constraintTop_toTopOf="@+id/label"
app:layout_constraintBottom_toBottomOf="@+id/text"

The width is the same as the height.

app:layout_constraintDimensionRatio="1:1"

The rest of the constraints are for positioning.

With that, the image scales up as the text sizes increase. It stays sharp because it is a vector.

Layout Editor

I tried to make this layout with the Layout Editor, but could not figure out how to create the constraint app:layout_constraintTop_toTopOf="@+id/label" for the ImageView. I was hovering my cursor around the top edge but not sure how to drag it to link the two views. So I added up playing with the editor a bit to deduce the XML attributes, and switched to editing the XML directly. I hope to use the layout editor in my next attempt to use Constraint Layout.

Follow-up Twitter discussion:

Read the whole Twitter thread.

Source code

github.com/chiuki/iconlabeltext

Click on either TextView to increase its size. Click on the image to reset.

Friday, September 16, 2016

TransactionTooLargeException crashes on Nougat

I was testing my app on Android Nougat, and it crashed when I try to move from one Activity to another. I saw this in the log: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 700848 bytes.

Actually, the platform has been printing warning log about this for a while, but let's be honest, who has time to read all the logs? Nougat (API 24) throws TransactionTooLargeExceptions as RuntimeExceptions, so we cannot ignore that any more.

onSaveInstanceState

Turns out I was saving a big list of search results during onSaveInstanceState to persist them over rotation. Time to move that to a Loader!

But what is the limit?

But now I'm curious: What is the limit? I wrote a sample app to find out.

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, AnotherActivity.class);
    startActivity(intent);
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    int length = 1000;
    Uri uri = getIntent().getData();
    if (uri != null) {
      try {
        length = Integer.parseInt(uri.getLastPathSegment());
      } catch (NumberFormatException e) {
      }
    }

    byte[] data = new byte[length];
    outState.putByteArray("data", data);
  }
}

To try different sizes, I start the app like this:

adb shell am start \
  -a android.intent.action.View \
  -n com.sqisland.tutorial.transcation_too_large/.MainActivity \
  -d 700000

This launches MainActivity, which immediately goes to AnotherActivity. When that happens, the system calls onSaveInstanceState, which tries to stash away a byte array of the length specified in the adb command, retrieved by getIntent().getData(). This way, I can try different numbers without recompiling and redeploying the app.

I did a binary search on a Nougat emulator and my Nexus 9. The limit is slightly different, but it hovers around 500000. That is not a small number, but not too hard to exceed if you try to store data rather than state.

Thursday, August 25, 2016

Speaking profile

Your speaking profile showcases your speaking experience. Conference organizers can see where you have spoken at, look at the slides, and watch videos of your talk.

Make one now, even if you are just getting started. You can list the topics you would like to speak about, and then add your talks as you schedule and give them.

Here are 3 places you can host your speaking profile.

Blog page

Most blogging platforms e.g. wordpress, blogger allows you to add pages independent of the blog posts. You can add a speaking page there.

Example: Annyce Davis.

GitHub pages

If you don't have a blog, you can use GitHub pages to host your speaking page.

Example: Margaret Maynard-Reid.

Lanyrd

If you don't want to deal with formatting your page, you can create a profile on lanyrd.com. You will need to find the conference you are speaking at (create it if there is no entry), add a session, and mark yourself as the speaker. It is a bit of a hassle to enter all that structured data, but you get cool stats.

Example: Estelle Weyl.

Further reading

Even more examples: https://github.com/asg-feminati/speakers

Watch my How to Write a Conference Proposal talk where I mentioned how to use speaking profiles to discover conferences.

Friday, August 12, 2016

360|AnDev: Money

360|AnDev is the first time I run a conference. I was raised to be frugal, never spending money that I don't have, but putting on a conference requires exactly that. We have to book the venue, order badges, buy plane tickets for speakers etc, all without knowing if any one will actually buy tickets to the conference. It was nerve-racking.

50 Shades of No

Our first source of income is sponsorship. As a first year conference, we have no track record to show, and it has been difficult to attract sponsors.

We were so grateful that POSSIBLE Mobile and Tack mobile jumped in as sponsors the moment we announced. But after that, we had a long period of nothing. I was cold emailing a lot of companies, getting various versions of no.

  • The classic: No reply.
  • The cliff: Initial interest, but no follow up.
  • The black hole: Ask me to submit to a ticketing system.
  • The clash: "We are already sponsoring a conference in the same city in the same month."
  • The budgeteer: "We have no more budget for this year / month."
  • The freeloader: "We would rather get presence for free through the CFP." (Okay they didn't say that, but that's what happened)

Surprising Yes Stories

I was quite discouraged, to be honest. Fortunately my co-organizer John has put on many conferences before, and knows that everyone procrastinates until the last moment. So I should not give up hope.

And indeed, we got an influx of sponsors in the last month. Some of which are the same people that we have been pinging, and the reminder of "Hey, conference is really soon" kicked them into action.

One sponsor approached us out of nowhere, pretty late. When I talked to them at the conference, they told me that one of their employees saw me at Write/Speak/Code the month before, and the company decided that really want to be a part of our community-focused conference. Wow, I had no idea!

Another sponsor came from counter-solicitation. From time to time I get recruiter emails, and I have been replying with, "No, I don't need a job, but please sponsor my conference to reach out to other Android developers." Most of the time I get "Oh I am just a recruiter I can't make decisions like that", but one company actually followed through and became our sponsor!

I was genuinely surprised. This really reinforces my belief that you should always ask for what you want. You need to give people a chance to say yes!

Attendees

Same as sponsors, attendees are major slackers. I had this exchange with so many of my friends:

Friend: I'm so excited about 360|AnDev!
Me: Yay! You bought your ticket already, right?
Friend: hmm... no.

John told me that they always procrastinate, no matter what you do. I was sitting at the edge of my seat until the day of the conference, not knowing if we were going to break even.

I was promoting the conference as hard as I could, but there was still a lot of people who did not hear about the conference, or did not know until it was too late to arrange travel. Perhaps I have been promoting it within my echo chamber? How can I reach out?

Again?

The conference has come and gone, and yes, we broke even. I went into this knowing that I am not running a conference for the money, but still, the uncertainty was no fun.

Will I run 360|AnDev again next year? Right now I am leaning towards yes. I was so happy to see so many people connecting with each other and lifting each other up. With a stellar first edition, I hope next year it will be easier to get sponsors and sell tickets.

Do you want to be a part of 360|AnDev next year? Sign up to stay in the know!

Saturday, August 6, 2016

360|AnDev: CFP process

One of the reasons why I decided to run 360|AnDev is that I want a inclusive place for Android developers to learn from each other. Inclusivity has many dimensions: identities, financial status, level of experience, to name a few. We want everyone to feel welcome, and we know that the speakers will set a tone for the whole conference, so we were very careful in our CFP process.

Core track

I know from experience that conferences are great to forge connections that help you in your career, but a lot of beginners fear that they do not have enough background to participate. To address that, we dedicated one room one day to cover fundamental topics, to let beginners know that there is something for them.

The rest of the conference has more advanced topics so that we take of experienced developers as well.

Clear, specific guideline

When I reach out and ask people to speak, they often ask, why would anyone listen to me, and what would I talk about? We address those two questions specifically on the Call For Papers page.

Contrary to popular belief, you do not need to be an expert to teach. In fact, for fundamental classes it is often best to hear from someone who has just learned it. They know the pain points, and highlight details which may seem obvious to experts.

After that, we offer some topics to get people started. It is not an exhaustive list, but it gives a flavor of what we are looking for, which is much more useful than, "Everything is good, just submit!"

Cover travel cost

We want everyone to be able to come and speak, regardless of their financial situation. It costs quite a bit extra to cover 2 nights of hotel plus flight for each speaker, but we care about inclusivity enough to do so. This way, people don't shy away from submitting because they are between jobs, they work for themselves, their companies have murky policies about conference reimbursements etc.

Q&A hangout

Even with a detailed CFP page, we know we cannot anticipate all the questions. We hosted a Q&A hangout for potential speakers to chat with us directly. Yes, we answered questions, but the most powerful part about the hangout is to put a human face behind the conference, to have a chance to tell everyone that, yes, we want you. We have a few talks that resulted directly from the hangout.

Anonymous voting

With all that effort, we hope to have a variety of talk proposals from speakers with different background. Next step is to make sure that the selection process preserves that, rather than just pick out the famous people.

Our talk selection has two rounds. In the first round, we removed all personally identifiable information from titles and abstracts, and send them out to members of the Android community for voting. Here is the voting guideline:

  • 5: OMG I'll drop everything to see this talk (Please do not give this score to more than 20 talks).
  • 4: I'd like to see this talk.
  • 3: Neutral. I'll probably see this talk, but skip if there is another talk at the same time.
  • 2: I'd rather be in the hallway than see this talk.
  • 1: Offensive/Too commercial/Inappropriate.
  • 0: Abstain.

In the second round, Dave and I look at proposals from each track, from the highest-scoring one down. For the most part we just take the ones ranked highest by the voters, but sometimes there are multiple proposals on the same topic, and their scores are too close to use as a differentiator.

In that case, we compare the titles and abstracts to see what will be covered. We also look into the speaker to try to get a sense of how well the material will be delivered. This is why this round is no longer anonymous.

Final program

While there are still many ways to improve, we are very proud of what we managed to achieve for the first year of our conference. Here is our final speaker roster:

Friday, July 1, 2016

One year of sketchnoting

I made my first sketchnote at Write/Speak/Code 2015 on the impostor syndrome talk by Neha Batra.

I started with a single black pen, added a gray marker as I experimented with shading.

My friend saw the little gray hearts and suggested that I get the primary colors, which was perfect since I was about to attend Google I/O.

The overwhelmingly positive reaction I got for my sketchnotes gave me the confidence to try drawing as well, which, mind you, I grew up believing that I cannot draw. It was a pleasant surprise to discover the joy of copying and coloring.

When I first wrote about sketchnoting, I said there is no way I can draw portraits. Guess what, I do that now!

At Write/Speak/Code 2016 I sketchnoted for Neha again, and it is really fun to see how much I have progressed in a year.

You can do it too

I have seen many other engineers start sketchnoting since I posted my first sketchnote last year, and it was been absolutely delightful. Wanna get started? Here are some resources:

Saturday, June 25, 2016

Write/Speak/Code: 10x Myself

I am very active in the Android community, blogging and speaking and sharing code, but I can only do so much as one person. To scale my efforts, I mentor others to do the same, which aligns with the goals of Write/Speak/Code exactly.

During Write day last year I shared my conference report blogging formula, I have seen it being adopted widely. Some examples:

For speaking, last year I met fellow Android developers Yash Prabhu and Danielle Vass at Write/Speak/Code, and I am delighted to see them start their speaking careers shortly afterwards.

This year, I was on the writing panel again, and also moderated the conference organizers panel. I hope to inspire many more women to go forth and share their knowledge. Storify:

Besides mentoring, I took the opportunity of being surrounded by amazing women to level up my own career as well. One of my 2016 speaking goals is to give a keynote, and during Write/Speak/Code I brainstormed and refined a topic that I am super excited about: The State of Android Testing.

I'd love to hear your Write/Speak/Code story. Did you get started on writing, speaking or open source because of it? Let me know!

The State of Android Testing

We all know testing is good for you, but it is very overwhelming. What is a unit test? What is an instrumentation test? Espresso, Robolectric, Mockito… what do all these libraries do? More fundamentally, why should I test?

I'd like to give a keynote talk to answer all these questions. Do you know a conference that would be interested? Perhaps Droidcon NYC?

Saturday, June 4, 2016

Coding live stream

I first heard about live streaming when I watched Dina Rodriguez hand lettering on Twitch.

But I wasn't sure what to do in front of a live audience, so I didn't do anything about it until I met Liam Spradlin at Google I/O. He started streaming after watching Dina, and encouraged me to try it, giving me lots of practical tips. There was a lot of code labs announced at Google I/O, so I thought, hey I want to do them anyway, why not live stream too?

Software

OBS, Open Broadcaster Software. Free, available in Windows, Mac and Linux.

Streaming service

restream.io: Stream to many places at the same time. I picked:

Layout

Here is how my desktop looked like during live stream:

My monitor resolution is 2560x1600, and I cropped the Display Capture to 1920x1080 so get the 16:9 aspect ratio. I popped out the chats from the 3 services so I can monitor them, but put them outside of the capture area so my audience won't see them.

I put the emulator outside as well, and declare it as a source in OBS so it is always visible, even when I type in Android Studio. If I want to hide it, I move it down in the list of sources in OBS.

The last source is my webcam. I cropped it to a square.

Here is how it looks like when I stream:

The emulator source is in the top right, and the webcam source is in the bottom right.

Preparation

  • Click "Start Recording" in OBS to see what it captures, and adjust the microphone, webcam etc as needed.
  • Set up the channels in restream.io, and copy the stream key to OBS.
  • For each channel, set up archiving on the site itself e.g. YouTube.
  • Set up OBS with the instructions from livecoding.tv: https://www.livecoding.tv/obs-guide
  • Increase the font size of your browser and IDE.
  • Try out a little bit whatever you plan to do while streaming. I was going to stream from my Linux box, but couldn't get the Android Wear N Preivew emulator going, so I had to switch to my Mac.
  • Advertise multiple times before the live stream, and once again after you have started streaming.

Streaming

Keep an eye out on the chat windows when you stream. Live stream is much less fun without audience interaction! I say my reply out loud, but type links into the chat window so people can click on them.

Results

I trimmed the video to skip the initial part when I'm setting things up and waiting for people to show up.

People seem to like it!

Next

I'll try to stream once a month. I'll be announcing them on Twitter, and you can also subscribe to our YouTube channel to get notified of the recorded videos.

Thursday, June 2, 2016

Advanced Espresso at #io16

I missed the Advanced Espresso talk at Google I/O this year because it was at the same time as Building rich fitness experiences with Google Fit platform and Android Wear, where Fit Cat was featured.

Finally got a chance to watch it at home, and wow, lots of good tips and tricks!

onTransitionToIdle (at 10:33)

According to the talk, it's preferable to set the state of the idling resource once, and call the idle transition callback when the state changes to idle. A good example is CountingIdlingResource, in the decrement function.

I went back to look at my custom idling resources, and try to skip calling the idle transition callback in isIdleNow. That gives me this error:

Caused by: java.lang.IllegalStateException: Resource com.sqisland.espresso.idling_resource.intent_service.IntentServiceIdlingResource isIdleNow() is returning true, but a message indicating that the resource has transitioned from busy to idle was never sent.

So it's seems like I must call the callback. From the doc, it seems harmless to call it multiple times, so I'm going to leave my querying idling resources as is.

For idling resources that query the state in isIdleNow, there is no need to call the idle transition callback. See IntentServiceIdlingResource for an example.

loopMainThreadForAtLeast (at 11:18)

Try to avoid it, but if you need some time to pass in your test, do not call Thread.sleep or SystemClock.sleep. Instead, use UiController.loopMainThreadForAtLeast.

You will need to make a custom ViewAction to get access to the UiController. Note: Not to store the UIController outside the ViewAction, because it may not be valid any more.

More tips

  • (12:10) Do not copy and paste between tests. Create helper functions.
  • (13:35) Use available Matchers. Write your own only if necessary, with TypeSafeMatcher and BoundedMatcher.
  • (15:08) Use CountingIdlingResource.
  • (15:54) Change IdlingPolicy if the defaults are too short.
  • (16:35) Focus on testing behavior, not layout properties. Use position assertions e.g. isBelow if you must verify layout. They are relative and easier to maintain.
  • (17:35) Write many small tests rather than large ones.
  • (18:44) Launch directly into desired screen and state with intents.
  • (19:56) Most UI tests should be as hermetic as possible.
  • (20:37) Use Espresso Intents to intercept Intents that launch external apps.
  • (21:19) Learn how to run long running animations. Read ANIMATOR_DURATION_SCALE from system settings and disable that in your app when it is zero. Show surface updates from Developer Tools to see hidden animations.
  • (24:00) Implement your own FailureHandler if you want to log extra information when your test fails.
  • (24:41) Developer Tools FTW!
  • (25:05) Change touch and hold delay for slow devices / emulator
  • (25:49) Enable testing for accessibility issues. Super easy: AccessibilityValidator.enable()

Thank you Wojtek KaliciƄski for the informative talk!

Thursday, May 26, 2016

Tips on hosting Google Hangout on Air

My friend Yash is hosting an Ask Me Anything via Google Hangout, and asked me for some tips. Thought I'd share them with everyone!

Rule number one of Google Hangout: Anything that could go wrong, will.

That said, here are a few things you can do to make it better.

  1. Get on it 15 minutes before event time to get over technical difficulties.
  2. Go live 5 minutes before event time so people who come early can already see the live stream. Otherwise their window will stay static until they refresh i.e. they won't know the event has started. Also, by starting a bit early people can start posting questions already.
  3. Send reminder emails / tweet after you go live for the same reason as number 2.
  4. If you use the Q&A module, beware that it may or may not work. So you may need a different place to post questions e.g. the event comments.
  5. It's better to have another person to keep an eye on the questions so you can focus on talking. Have that person ask the questions for you to answer.

Here is an example of a Google Hangout on Air we did for 360|AnDev:

Sunday, April 3, 2016

Go Code Colorado

Go Code Colorado is a state-wide event to innovate on top of Colorado open data. Android Atelier went to Challenge Weekend in Fort Collins.

Preparation

We wanted to use CartoDB to visualize the geo data on the map, so we went to Maptime Boulder to learn about it.

Also, I baked cookies.

Data

How are we going to create value? By showing multiple sets of data on the same map.

The different layers made it very easy to parallelize the work. We looked at different data sets and scrubbed the geo data to put it on the map.

Here is our working demo:

Presentation

Go Code Colorado 2016 centers around the problem statement:

Create an app and business concept that helps businesses build a competitive strategy.

Our app shows agricultural, demographics and logistics data allowing businesses decide where to set up shop. Here is our presentation:

Winners

Two teams advances per location to the final round.

SWO

SWO, or Shop Women Owned, crosses the Colorado business entities with the Social Security Number gender data to showcase women-owned businesses in Colorado. They had a great pitch, and made us realize that we were taking the problem statement too literally.

At the end of the day, this is a business pitch competition. Helping businesses build a competitive strategy (Where will I play? How will I win? Is it worth it?) was not a hard requirement. As long as public data is used, any business plan is fine. In this case, SWO promotes women-owned businesses in bulk, without necessarily helping them build a competitive strategy individually.

Colorado Well Spot

Colorado Well Spot aggregates public data to help oil and gas companies figure out where they should operate. You would think that they would check and make sure not to drill too close to a school, or right of top of a pipeline. Turns out the data is scattered all over the place, and there is not really a good way to do a comprehensive check.

Emily Hueni, the leader of the team, is a GIS specialist with oil and gas experience, and really understands the problem. Once she started talking about the app, we knew they were going to win!

CartoDB

CartoDB is really nice. I like how I can extrapolate from my existing knowledge of SQL and CSS to customize my map. Even though we did not win, we had lots of fun exploring and visualizing the data.

Monday, March 21, 2016

How to make a podcast transcript

I really enjoyed my chat with Saron on the CodeNewbie podcast, and wanted to circulate the content more widely. Audio is great, but text is more searchable and thus more discoverable, so I wanted to transcribe the show.

Automatic transcript via YouTube

YouTube transcribes for free, all you need is a video. I took the podcast and made a video with a black screen, and uploaded to YouTube. The transcript got maybe 70% right, but not enough to actually understand the show without listening.

1
00:00:00,000 --> 00:00:12,259
welcome to the gurney podcast when we
talk to people on their current journey

2
00:00:12,259 --> 00:00:16,779
notes about being you on yours I'm your
house around today on the show I'm so

3
00:00:16,779 --> 00:00:21,060
excited to have to teach an independent
Android developer and creator of

4
00:00:21,060 --> 00:00:28,230
technically speaking to be on as a high
so you do a lot of stuff but the main

Correct the transcript via Fiverr

I did not want to correct the transcript myself, so I outsourced it on Fiverr. I provided the link to download the podcast, the .srt transcript from YouTube, and some extra information:

  1. The name of the show is CodeNewbie
  2. The host is Saron Yitbarek
  3. The guest is Chiu-Ki Chan (aka me!)
  4. Technically Speaking is the name of the newsletter we talked about. Please capitalize.

I got the cleaned transcript the next day, for $30 ($31.5 including fees):

1
00:00:00,000 --> 00:00:12,259
SARON: Welcome to the CodeNewbie podcast, where we
talk to people on their coding journey

2
00:00:12,259 --> 00:00:16,779
in hopes of helping you on yours. I'm your
host, Saron. Today on the show I'm so

3
00:00:16,779 --> 00:00:21,060
excited to have Chiu-Ki Chan, independent
Android developer and creator of

4
00:00:21,060 --> 00:00:28,230
Technically Speaking. Chiu-Ki, you want to say hi?
CHIU-KI: Hello! SARON: So you do a lot of stuff, but the main

Convert to HTML

The transcript has line breaks that makes it a bit hard to read. I wrote a Python script to convert that to Markdown, then open it in Atom to get the HTML.

Add links and Publish

This is optional, but when I pasted the HTML to my blog I added some links as well.

You can see the results here: blog.sqisland.com/2016/03/codenewbie-podcast-visibility.html

Sunday, March 20, 2016

CodeNewbie podcast: Visibility

I was on the CodeNewbie podcast a few weeks ago to talk about blogging, tweeting, speaking, and shared a some tips on how to promote yourself without feeling braggy. I would like to make the content more accessible, and decided to make a transcript of the show.

I used YouTube, Fiverr, plus my own python script to produce the transcript. Read how I did it: How to make a podcast transcript.

You can listen to the episode here: http://www.codenewbie.org/podcast/technically-speaking.


SARON: Welcome to the CodeNewbie podcast, where we talk to people on their coding journey in hopes of helping you on yours. I'm your host, Saron. Today on the show I'm so excited to have Chiu-Ki Chan, independent Android developer and creator of Technically Speaking. Chiu-Ki, you want to say hi?

CHIU-KI: Hello!

SARON: So you do a lot of stuff, but the main thing that I know about you, and the thing that people keep telling me about, is this thing called Technically Speaking. so tell us about what that is.

CHIU-KI: Technically Speaking is a newsletter about public speaking, and it's mostly targeted for people who want to speak at technical conferences, which is why "Technically Speaking." I was pretty proud of the name.

SARON: It's a good name.

CHIU-KI: Actually yeah, when I thought, I was like "Oh, but, but - maybe it's too generic. And it's OK. I think people got what I'm trying to get at.

SARON: Yeah.

CHIU-KI: And it actually got started when I was at a conference with my friend, Cate Huston, and we were talking about how it is very difficult to break into the speaking scene, but once you get started, it's actually not too difficult to keep going as a speaker. So we want to try to help people who are interested or just have an inkling that oh, maybe this is something that they want to do because it's good for their career or because that's something that they see other people do and they thought it's neat. Whatever reason it is, we just want to have a way for people to get started. And then we decided on a newsletter because we figured that if we have a website, we'll probably just forget to update it. A lot of the speaking stuff is very timely, right? A particular conferences is looking for people, and then you put it there, and then two years later people come back and look and say, "You know, this site is dead." So we didn't want that, which is why we went for the newsletter format.

SORAN: So what was the mission? Who are you trying to help? What are you trying to accomplish with this newsletter?

CHIU-KI: That's an interesting question, because the way it started out, we were just saying that, oh, you know, just people who are interested in speaking at conferences. But because both of us are women and we wanted to see more women on stage, we make it a point to include 50% content that is either about women or generated by women. And that ended up somehow branding us as something targeted for women, which is very interesting because we were not aiming for women; we were just aiming for balance.

SARON: Yes.

CHIU-KI: I guess our industry is so tilted towards men that having something 50-50 automatically gets you the label "Wow, it's for women."

SARON: Isn't that so interesting, how it works out that way?

CHIU-KI: Yeah.

SARON: That's not the point, but...

CHIU-KI: We never marketed ourselves as "Ooh, it's for technical women," but it ended up being that way. People look at us that way, which I mean, I don't mind, but I just find it very fascinating.

SARON: It's very telling of the industry more so than it is, you know, you and your product. It's an interesting observation.

CHIU-KI: Yeah.

SARON: So one of the things that I love about this is a lot of times when you hear about a CFP, like you said, it's very timely, right? You just so happen to have heard about it at the right time and the right situation, and hopefully you have an idea to submit. And if you don't know about it, then you kind of miss your opportunity. So you're making it more accessible to a lot of people, and I'm really excited and I'm really hoping that a lot of new speakers and new developers really take advantage of a lot of the legwork that you've already done. Every week in my inbox, I get a list of upcoming talks, and now I have no excuse to not speak and not submit. So have you seen people who wouldn't ordinarily speak, the people who are not regular speakers? Have you seen them take advantage of this opportunity?

CHIU-KI: Oh yeah, definitely. So actually last year - so the newsletter started in November 2014, so last November we celebrated our one-year anniversary.

SARON: Congratulations.

CHIU-KI: Thank you. And as part of the celebration, what we wanted to do was have people essentially submit their stories about - actually, no, I got it wrong. Let's take it back. That was our six-month anniversary. So I'm going to talk about both. The six-month anniversary, what we wanted to do is for people to write in and tell us what action, what concrete action they took as a result of the newsletter. So some of them wrote blog posts, some of them posted a tweet, and there are definitely people who told us that "Hey, I just gave my first conference talk. Thank you so much for just making it happen." Part of it just is something that you think - you know, you have to be an expert, you have to be someone that just knows everything. And having that newsletter, reading stories about what other people did, really removed that mystery of like, how do you become a speaker? A lot of people were more courageous to step, to take the first step. And then for our first year we did something slightly different, which is we did one-on-one coaching. So if you wrote a list of essentially your 2016 goals, like what do you want to do in terms of public speaking, and post it somewhere public, then we pair you up with someone who are already speaking and try to come up with a game plan with you. So that we don't know yet, because this just happened two months ago, so we don't have any - well, we should follow up and ask people, "So, what happened after the one-on-one sessions?" Yeah, so I'm definitely seeing action coming off the newsletter, which is really, really rewarding.

SARON: So what do you think are some of the advantages of speaking?

CHIU-KI: There are multiple. One is that I don't know about you, but when I go attend a conference, I really don't like the "networking," the small talk. Like, you're in a big room and you go around and you have to put yourself out there to introduce yourself. Because you know, right? You are at a conference to meet people, and there are a lot of good things that come out of meeting people. But just doing that little small talk, saying "Hey, my name is Chiu-Ki, I'm an Android developer" - for me, I don't like doing that. But if you're a speaker, you in a way introduce yourself in broadcast on stage, right? So you went on stage, you talked about a particular topic that, well, you have enough to talk about for 15 minutes or 50 minutes. So after that, when you run into people during coffee breaks or lunch or any of the social events, people will come up to you and say, "Hey, I went to your talk. It was really great, and I have a little bit of follow-up discussion that I want to have with you." So to skip all that, for me, annoying small talk and jump right into the interesting part - that's huge. In a way - I mean I am not in any way an introvert; I am still afraid of doing small talk, and I have also heard people who told me that. Like they'd rather go hide in a corner than put themselves out there. But doing that one lump of "Whoa, I'm so scared. I put myself out there," and give a talk - that, you can reap the benefits afterwards for the whole conference.

SARON: That is so interesting. I never thought of it that way. I never thought of it as a solution to, you know, to not...

CHIU-KI: Just get it done once and for all, right? Rather than repeat it 15 times.

SARON: Right. And, when you get it done once and for all, it's scripted. You get to prepare for it, you have your slides, you know exactly what you're going to say, when you're going to say it. You don't have to respond spontaneously to different people and react. So I can definitely see that as being a solution to small talk. That's a really great way to look at it. I like that, yeah.

CHIU-KI: Yeah, so for me that was almost a side benefit. Actually, I didn't start public speaking because I wanted to solve the small talk problem. I just noticed that once I started doing this, I was like "Oh hey, this is really nice! I don't have to bother with going around the room and trying to introduce myself, because people come to me." So when I started - and this is true, still - what I wanted to do is essentially make a name for myself. I mean, that sounds really egoistic.

SHARON: No, good for you. Make that name.

CHIU-KI: Yeah, because I'm an independent developer, so I go around and I have to go tell clients to hire me to write Android apps for them. And having some recorded talks out there and just saying "Hey look, I know what I'm talking about. Like, I literally know what I'm talking about. I talked about it for an hour" - that is really helpful. It's really concrete. Because a lot of the times - well, I guess sure, you look for a job with resumes, but resume in a way for me is keyword stuffing. You just put things in there, hoping that it catches someone's attention.

SARON: Right, something clicks.

CHIU-KI: Right. But if you are giving a full lecture on the topic, that really tells a lot about you as not just a developer. So you have to know your technology, but you also have to know how to communicate, how to express yourself, how to explain complex concepts. And they see more of you than just the two- dimensional you on a piece of paper. So for me, that was the initial goal. I wanted to be able to have essentially a living resume, almost. Like, "Hey, this is me. Look, you can watch me explain what I do." And that for me was really helpful for my career, but not in that sense - I don't know if you noticed a theme, a lot of things I started doing and then I saw the side effect and I liked the side effect better. So I didn't actually get any direct - what do you call it, leads out of speaking. I ended up having a lot of my clients as friends of friends, so not necessarily strangers that watch my talk. But by speaking I get to meet a lot of people at conferences and also I get to essentially share what I know. That helped establish myself as "Hey, she knows her Android things." So I think indirectly when I get hired by my clients, they know that "Oh OK, I think we can give her the benefit of the doubt that she can do what she claims she can do."

SARON: I like that. I like that a lot. I love the idea of speaking as your living resume.

CHIU-KI: I just came up with that, by the way.

SARON: Genius. So one of the things that you said a little bit earlier really stuck out to me, where you said "I want to do this to make a name for myself," and then you followed up by saying "Not to sound too egotistical." And I think that that feeling, that feeling of "I want to advance my career, I want to put myself out there, I want to build recognition and expertise... but at the same time, I'm hesitant to be a self-promoter, I'm hesitant to feel braggy" - and it sounds like something that you've dealt with too.

CHIU-KI: I think part of it is, I'm not sure if it's something specific to my upbringing or everybody faced that problem, but I grew up in Hong Kong, and our culture is a lot about don't stand out. Like for example, when I was in school, I remember I was maybe in 8th grade, and - I mean, it's kind of a Hermoine moment. As the teacher asked a question, I know the answer, so I raise my hand and answer the question. It sounds straightforward. But one of my really good friends pulled me aside one day and told me, "Look, even if you know the answer, you should not answer all the questions because people don't like it. People don't like people who show off." And at that point I didn't even realize that it's a problem. I guess I was just naive. But then after that, I was like "Oh, OK. This is something that people will view negatively if you are showing off, essentially." Also, the Chinese culture is a little bit different. We have very intricate protocols about - like basically you praise someone and then they say "No, it's nothing," and then you praise again. So it's not very easy to just come out and say, "I am the best." You don't do that, pretty much. And I guess I have carried that with me even though now I'm in America, which is a little bit different. At least when I was going through in my job, every six months or year or so you have to do a performance review and you have to write about the great thing you did for the company, and that is really uncomfortable that you have to list out all your accomplishments. So yeah, I mean, that's kind of my explanation why I feel that I should not brag. That other people don't like it, basically.

SARON: And I don't think that's just you. I know lots of people, a lot of friends of mine who I'll talk to and I'll say, "You should really put that on your profile, share that, tweet that, go on stage, talk," whatever it is, and there's a lot of "Oh, I just, you know, I don't want to be too promote-y." This idea of self-promotion is being seen as negative. So coming from a culture where that's how it is, how have you countered that? How have you dealt with those feelings of discomfort and still going out and speaking and making sure that people know about your work?

CHIU-KI: Well, I guess it comes in two stages. The first stage is, like I said, during company performance review, I feel like this is something I need to do. It's not a choice. I don't get to choose to write about my achievement or not. Because I don't want the company to view me as someone who is useless and just fire me either.

SARON: That's true.

CHIU-KI: So the first stage is I read a lot of self-help books. All the books about how to advance your career, how to speak up, how to toot your own horn without bragging. I think that's an actual title of a book; I'm not 100% sure. So I went through a big phase of just prepping myself and getting excited about telling other people how great I am. That worked to a certain extent. I wouldn't say that that was - I mean, that got the thought planted that it's okay.

SARON: It helps, yeah.

CHIU-KI: It's like, this is a big enough topic that there is a whole bookshelf of books about this, so it's something that I need to do and I'm not comfortable doing it. It's fine. It's something I need to learn. And I think that's a good way of putting it, is it's a skill that you need to learn, much like programming, much like learning to write almost. It's not natural. Nobody just knows how to tell others about the good works that they do. So once I got comfortable with the idea, then there's the execution. What exactly do you do? And that kind of came after I became independent. For some reason, once I left a corporate job and I know that I have to fend for myself in terms of just demonstrating that "Hey, I am good. You should hire me," then I'm much more comfortable in just writing on my blog or being visible on Twitter and just trying - I feel like once I make it a goal, then it's OK. Rather than I did something and then as a second thought "I should promote it," I make it really, really forefront of what I'm doing. I write code, but I also tell people what I wrote about. So that, I feel like it's almost a mind trick. I just told myself that, "Look, this is something you do now, so just go do it."

SARON: This is who you are, yes.

CHIU-KI: And also, one thing I realized is that when I first started, nobody's reading my blog. I have no Twitter followers. So I can brag all I want; it's not like anybody is listening. That's a very comforting thought. So that helped a lot, actually. I will try to post - I'll write a blog post and post it on my Twitter, which then my friends will come and like it, and I'm like "thank you!" But it's not really braggy, I feel like, because I felt like I'm just yelling in the air; there's nobody there, really, to judge me I guess.

SARON: That is so interesting, because I've heard from so many people that the reason why they don't want to blog and they don't want to tweet and they don't want to do that is because they say, "What's the point? No one's going to read it anyway." And instead, what you're saying is, "Great! I'm so happy no one is reading it because that gives me the freedom to put myself out there and to self-promote without worrying about people judging me as much." I really like the different take on that situation. Yeah.

CHIU-KI: For some reason, people are really afraid of people throwing rocks at them, almost, right? Because if I write a blog post about some technical topic and I'm wrong, oh, the horrors! There will be hoards of people coming after me and telling me that I'm wrong. But the truth is there's no one reading your blog.

SARON: So it's OK. It doesn't matter.

CHIU-KI: I'm sorry to tell you, but there will not be hoards of people to tell you that you're wrong. I mean sure, it's sad that you are just yelling in the air, but on the other hand, it's a great chance to experiment.

SARON: Yeah.

CHIU-KI: Just do something, write something, and then if some posts end up being read, great! Then you'll end up building your audience. And if not, well, try something different. There's, like I said, no one there to critique you.

SARON: I think another problem that I've heard in our community is this idea that the thing they did or accomplished isn't worth promoting. You learn something, and especially if you're at the very beginning of your journey, you go "Well everyone else already knows that, so what is there to celebrate?" Have you had those feelings before?

CHIU-KI: Hmm, that's interesting. Personally, when I first started doing all this blogging and tweeting and stuff, I do have - not necessarily that "Oh, whatever I have to say, somebody else already knows," but more like "I don't have anything to say period." It's not like I come up with something to say and then I silence myself because I feel like it's not worth saying. I feel like somehow I nip the idea even earlier, you know what I mean? And usually, by the time I come up with an idea, like I have invested enough time in it, then I will just go for it. So in a way it's a mindset. That's my personal experience. It's not like, "Oh, let's talk about X" and then my left hand says, "No, don't do that! That's stupid! Nobody wants to hear about that!" It's not like that. It stops even earlier than that. I don't even come to the idea generation phase. I would just sit back and say, "Why bother?"

SARON: Do you feel like that results in you possibly dismissing good ideas before you really give yourself a chance?"

CHIU-KI: I feel like it's so internalized. I didn't even get a chance to have that internal dialogue, like "Ooh, let's write about this." "No, don't do that, that's stupid." That just played itself without manifesting in concrete ideas in my head. Just, my brain just stifled itself, like "No, don't even bother thinking about it." Of course, you know this is all looking back in three years, I would say. I started blogging about three years ago. And it's almost like going to the gym: just keep doing it until it's like, "Hey, you know what? I can lift a lot more now." Which by the way I don't go to the gym. Just a metaphor. But for my blog, I definitely feel that way. In the beginning, in a way I was just forcing myself to go write this thing, and then it seems very clumsy, and I don't want to read it myself. But nowadays I actually enjoy my own reading, which is crazy right?

SARON: That's awesome.

CHIU-KI: I am so trained to not praise myself and not say anything good about myself that I feel embarrassed about telling you that I enjoy my own reading. I like the way I structure my articles. I have my own little formulas; I chunk things up into smaller paragraphs so that they are easier for me to write, but also easier to read. So I have my own bag of tricks by now, like building up. But you know, three years, is that a long time? I don't think so. It didn't feel like "Wow, it took me 20 years to come here from the beginning." I think I went from "Oh, I have nothing to say" to oh, OK, now I have a pretty good idea of how to structure a blog post. And when I'm coding, I'm actually paying attention to like, "Ooh, that could be something that is interesting to talk about." So it is really for me a mindset. Just switching from "Oh no, who am I? Why would I blog about anything?" to now I have a blog, I have a few articles out there; let me pay more attention. And it's not even intentional that I'm paying attention to things that I'm doing, always mining for opportunities to tweet or blog, but it's more like since I started doing that, my subconscious is just like "Oh OK boss, that's what you do, huh? I'll pay attention now." Which is cool.

SARON: That is cool.

CHIU-KI: I don't understand how the human mind works, but at least that's how it works for me, is once I started doing that, then I see things differently.

SARON: It sounds like a large part of you blogging consistently and speaking and doing all these things is not so much about being comfortable, it's not about wanting to do it and necessarily being excited about doing it; it's about recognizing that it's important and just being disciplined about doing it anyway and trusting that as long as you get in this rhythm and have a consistent process of just doing it, that eventually you'll be proud of it and you'll be able to self-promote without it feeling so squeamish.

CHIU-KI: Yeah. I think a large part is telling myself that it's about the quantity, not about the quality. Just write it. Write something; it doesn't really matter. Just do it. I mean, some people are even more vigorous than that. They actually keep a schedule. I don't. I think in the beginning maybe I did. I don't even remember. Because I have this vague notion that I should blog more if I want to be an independent and be known for my work. But even now, I will go sometimes to look at my blog and say "Oh, I didn't write at all last month. Oh well, too bad. I guess it was Christmas." I don't give myself a hard time not writing because I know that I am writing "enough," whatever that means. But when I first started, there were definitely moments when I'm like, "OK, this thing that seems remotely interesting, maybe I should write about it... ugh, are you kidding me? Do I have to do this?" There's definitely moments where you know what? Just go through the motion, figure out, type it up. And usually once I type it up and I'm reading it again, I'm like "You know what? This is not half bad. Let's just hit that submit button already." So convincing myself to do it.

SARON: Yes.

CHIU-KI: Usually once it comes out, then I look at it and say "that wasn't too bad." So I just really have to convince myself that, just do it. I actually sometimes tell myself, "If it's not good, throw it away." It never happened. Once I committed myself - I'm all about committing device. If I need to go exercise, I sign up for a class. Once I'm committed, I do it. So once I'm committed to writing it and I get started, then I will keep doing it. That has worked pretty well for me.

SARON: Yeah. So we talked about blogging, we talked about speaking; what are some other ways that you've been able to make your work more visible?

CHIU-KI: Tweeting is a lightweight way of blogging, in a sense. And again, tweeting for me was also actually really, really difficult to pick up in the beginning. I sign up for an account and I don't really have anything to say. It was kind of funny; like, "I know Twitter is very useful for connecting with other people in the industry," and I sign up and - it doesn't work the same way as blogging, is what I'm trying to get at. If you want to write an article, you can sit down, come up with a topic and just do it. Tweeting is much more nebulous. Like, how do I participate on Twitter? So for me, the breakthrough was actually going to a conference and just - usually when you go to a conference, they have a conference hashtag and people will post things that are related to that conference with the hashtag. So I started following and trying to see what other people do. I was like, "Oh, this is brilliant." I would see people, for example, they will listen to a lecture and write down some - not really catchphrases, but interesting points, and then other people will retweet those. I was like, "OK, that I can do." So I started off with just retweeting other people's things when I go to conferences, so it's a very, very specific little niche of how I used Twitter. And then I started - "Oh OK, this is the kind of thing that people will report, essentially, during a conference." Let me try that too. So if someone put up a slide that has an interesting quote, I'll type that up and put the hashtag in. So gradually that got me started on Twitter. Then nowadays, I apply the same lesson after a conference, or maybe I will be reading certain articles like, "Ooh, that's interesting." I'll post a link and just put the title of the article. I don't agonize too much over "Oh, I need to put something witty in it." But then much like blogging, I started noticing things. Actually, one thing that was really funny - at least I thought - so basically nowadays, tweeting to me is such a habit that I have tweetable moments in life. One day, it was maybe a year or two ago, we were at a supermarket and we were getting a jug of milk, and my husband said, "Wow, milk is more expensive than gasoline." Any normal person would just laugh, get the milk, and go on with life, but me, I was like, "Oh, that's a tweet! Wait!" So I stood there, took a picture of the milk jug and the price tag, and then I posted on Twitter. Actually I think I phrased it slightly differently; I put "OH" which is overheard, "I wish we can drink gasoline," and then there was just the milk and the price. But this is not something normal people do. Normal people will just make a comment to their wife and continue with life. But kind of going around the same theme is once you start doing it, then you pick up certain tricks and habits and things become much easier afterwards. So I really like that. Nowadays I'm pretty active on Twitter, but I mostly do a lot of technical tweets. If I read an interesting article, I will post a link. Or if I wrote one, I would definitely post it. That's actually another reason that I got more comfortable with promoting my stuff, is that I feel like I've built up my Twitter feed in such a way that it's not just me, me, me, me, me. I share other people's stuff. Last night I was cooking and I was using a cooking thermometer, which is a very nerdy thing to do, but hey, I'm a developer; it's okay. So I posted a picture of the cooking thermometer in my fish. So it's not just me talking about things that I do that is "Oh look at this crazy technique that I'm using so that my app is more responsive." It's not always just showing off how cool I am. I talk about other things. I share other people's content. So that helped a lot to too, just getting a good mix, essentially. Then I feel I'm just sneaking in my little braggy stuff among all the other things that I talk about. Which is life. I mean, that's how I am. A person. I don't walk around talking about what I do all day long; I talk about other things too. So I reflect that in my Twitter presence.

SORAN: Yeah, I like that. So what advice do you have for people who are a little bit newer? Because you learned to code many years ago, and you've been in tech for a while, and I'm wondering how can people who are just getting started, who are maybe a year into coding, hoping to get their first job - how can they share their progress and the work they're doing so that in the future it helps them get that job, make those connections, and really advance their career?

CHIU-KI: I think part of it is - I mean, even I'm struggling with that, is that I don't want to show my weakness, almost. For example, when I write a blog - it has evolved. In the beginning I would only write about my final solution, the perfect, all shiny "this is how this is done because I know what I'm doing." But nowadays I actually go through a little bit more storytelling, almost. So I always start my blog post with like "This is what I'm trying to do. I tried X, Y, and Z, and they don't work, and finally I tried this other thing and it worked." So I feel like getting comfortable with just telling it as a narrative of "this is what I am doing" - not necessarily phrase it as "this is the one and only way to do it" - that's very helpful, and I feel like you could do that whichever stage you are in your career. In the beginning, maybe that will be "I have ABCDEFG and I've tried a million things. They all don't work" and then your blog post just stops there. It's okay. It doesn't have to be everything is perfect, even though a lot of us would like to present ourselves as flawless and amazing. So I understand. I tell myself to do that and I can't get myself to do that 100% of the time, so I wouldn't necessarily say it's advice, but it's something that's worth trying. Just let go of the notion that it has to be perfect before you put it out to the world. But the important part is you're explaining that "This is what I'm trying and this doesn't work because of this." It's not just "Oh OK, I cannot do anything. Everything just failed." Don't phrase it that way, but it's more like "Wow, this thing is more complicated than I initially thought. I tried this and that." So that would be, like I said, not quite an advice, but I think it's worth trying and seeing where that takes you. Maybe you are super uncomfortable doing that, you don't like putting yourself out there, telling people that "Yeah, I walk into dead ends all the time." Which to be honest, that's how programming is. I feel like people will understand. If you're always painting a rosy picture, that's almost too fake in a way.

SARON: Yeah, people will definitely see right through that.

CHIU-KI: Yeah. And then also, like I was saying earlier, it doesn't always necessarily have to be something that you have done. Like conference is a great example, where you can report on what has happened. You can say that "Oh wow, I went to this talk and I wanted to try this thing." You don't even need to necessarily try it at that point in time. You can just say "I want to try it" and just put it out there and get the conversation going. I feel like at least that's how - I think that's how I transitioned from "I have nothing to say" to "Wow, OK, I regularly have something to say. It's like I broadened my sense of what I can share. Because for some reason, I really constrained myself in the beginning that it has to be finished, polished, and perfect before I show it to the world. But now I do a lot of "Oh, that thing looks interesting. I should look into that." Sometimes I even say I "should" look into that. I'm not even committing myself to looking into; I'm just saying that it looks interesting. And that has value. Even though maybe all you have is a link to something that you've never seen before, maybe other people have not seen that either. So just broadening to things that you wish you were doing, things that are half done, things that you started doing but did not finish because of various reasons. It's OK. It's OK to document all those things.

SARON: So next let's move on to some rapid-fire fill in the blanks. Are you ready?

CHIU-KI: Yep.

SARON: Number 1: "Worst advice I've ever received is..."

CHIU-KI: This is not specifically directed to me, but it's more in general, that you should go find a mentor.

SARON: Ooh, tell me about that.

CHIU-KI: So I picked this kind of on purpose because its controversial.

SARON: I was going to say, yeah.

CHIU-KI: Yeah. What I mean is that for some reason there's this notion that if I want to advance in my career, what I need to do is to find that one person, one special person that will hold my hand and lead me to my next level or the next thing I need to do. And I tried that. I tried that for years and that didn't bring me anywhere. There will be companies that have, for example - it's all in good intention - they'll have a corporate program that pair up people and have them mentor maybe junior people and help them. But the problem at least I personally experienced is that I walk in, I don't really know what I want out of it; the mentor doesn't know what he or she should be doing to help me. So in the end, we meet once a month and then we meet not really and then nothing happens. So that's the worst advice. But there's a very easy way to flip that. Basically all you need to do is find mentors.

SARON: Interesting.

CHIU-KI: Instead of one singular person. The way I look at it is instead of going into a fancy restaurant and getting a chef's choice and every course is laid out for you and you can just sit down and eat them all and be full, you're going a la carte, basically. You have to look at every single aspect of your career and decide what you want to do and then find a person that can help you. And it may be one person; it may be ten people for ten different things. Because at that point, then it's become much more focused. So maybe you want to start public speaking, and maybe you are an Android developer. So then you started going to the different conference websites and see what people do, and then maybe you'll find somebody that seems interesting. At that point, also mentorship is not a very - for me, not a very rigid concept. It's not necessarily "Oh, let's meet once a month and talk about what I need to do next." I will consider someone my mentor - actually I have a lot of mentors that don't know that they are my mentor because

SARON: I have a lot of those too.

CHIU-KI: Exactly. When I first started speaking I would go look for people that I feel like is what I always call 2 years ahead of me, essentially. They're 2 years ahead of me, they're already speaking, and I see what they do. I follow them on Twitter. It sounds really stalky, sounds kind of creepy. But what I do is I emulate. I find people that are doing things that I want to do myself, and I observe what they do and then I try it. Much like I was telling you about when I go to conferences, I see other people tweeting, I do that. There are a few people that I am observing very carefully what they do on Twitter and try to reverse engineer and figure it out. I never go to them and say "Hey, will you be my mentor?" No. But eventually usually what happened is that then I ended up replying to their tweets and seeing them at different events and we become friends, but I never actually come out and tell them that actually, secretly, you have been my mentor for all these years. I don't do that. But I do have many different people that I consider my mentor in the sense that OK, I want to figure out how to do this thing. How do I contribute to open source maybe. And I'll find some project that have people that are really active and see what they do, and then I'll figure it out. And sometimes I do reach out and specifically ask questions. But I never use the word "mentor." I'll reach out and say "Hey, I saw that you've been doing this for quite a while, and I want to get started on it," and I have a few really concrete questions that I would ask them and say maybe something very specific, like "How does a pull request work? How do you squash a commit -" something really super specific.

SARON: Very specific, yeah.

CHIU-KI: Right. That way they know how to help me, and I want to help them help me, essentially. Which I feel like when you just have this romantic notion that "if only I had a mentor, then my career would be all set," that is not going to help you. I mean, I know people that have that in their life, that they have this one person that really guided them and helped them move to the next stage. Great for them, but I feel like it's not something that you can pursue. If it happens to you, it's great but I - at least I tried and that didn't work, and I feel like finding multiple people is a much more reliable way of actually getting the mentorship that I need.

SARON: I like that. Number 2: "My first coding project was about..."

CHIU-KI: I actually started coding very early. So when I was eight, my mom brought home a computer that her company didn't want; they upgraded to something better. And I ended up learning BASIC programming, which is a programming language that is very close to assembly I would say. So it's kind of low-level. So I learned that; I went to - my mom signed me up for a community center course, so I was learning programming. I don't think she even knew I was learning programming; I think she thought it's a class to learn how to use the mouse and type and things like that. But I loved it. I really like - I was eight, so I really liked the fact that I can tell the computer to do something and it will do it. I think - I mean, I don't think that's the very, very first program that I wrote, but the very first that I remember was a hangman program. I gave it an array of words, and then it renders little dashes and then you can put letters and it will show which one you got right. And I was so excited, and I was forcing my cousin to play it and she was not interested at all. But my cousin was also much younger than me. I was eight; I don't know how old she was. She was maybe four. I don't think a 4-year-old is interested in hangman. Yeah, that's my very first programming project.

SARON: Very cool. Number 3: "One thing I wish I knew when I first started to code is..."

CHIU-KI: I wish I knew that it's okay to ask questions. I feel like when I've - it's not even when I first started. I've been working for a long time. But every time I have something that I want to ask someone about, I will research extensively. I'm making sure that I have all grounds covered before I reach out and ask someone because I don't want to waste their time. And what I've discovered is that the process of asking a question actually helps me clarify what I'm confused about.

SARON: Yes.

CHIU-KI: So what I have done instead - I don't walk up to people and ask questions just randomly just because that is really disruptive. What I try to do is try to write emails. I would start an email, I would type out basically what I couldn't do. "I'm trying to do this but it doesn't work." I have to explain myself, "I tried this, I tried that, I tried that." Usually I'll be like, "Oh, I didn't try that other thing yet." So I would save that draft, go try the other thing, come back and "Oh, OK. That's how it's done." So then I discard the draft. I didn't actually even need to send out the question. So just going through the motion of asking the question

SARON: The process.

CHIU-KI: Yeah, the process of formulating your question helped so much. And don't get me wrong; that's maybe 20% of the case. I do actually, the other 80%, do go out and ask my questions. It is very intimidating in the sense that once again, you're exposing your weakness. You're going out there and telling people that "No, I don't know what I'm doing." But actually this happened just last night. Last night I was on a Slack channel with some other Android developers, and I was using some library, and I could not figure out how to log the error. I know something went wrong; I need to debug it. So I was really reluctant. I was like, "Hm, should I ask this, should I not?" I ended up asking it. I asked, and yeah, it was a very obvious answer in the sense that there are two ways of doing it. I was doing it one way; it's the other way that I didn't try. So I felt a little bad about doing that. But then what happened was after that, after I figured out how to log my error, I went back to the Slack channel and I posted the error message, and somebody else was like, "Oh, that!" It turns out to be a very common problem that a lot of other people had and is on the GitHub issue. A lot of people have problems. It was really funny, because what I ended up triggering was that the dev that was on the project actually merged in a fix for that particular problem because he was like "So many people had this problem, I finally got my act together and just got this into the master." I was like, "Oh thank you! I wasn't expecting that." And afterwards I'm so glad that I asked that, even though it's very intimidating. Especially since I knew that the dev that is doing that library is in the channel, so I would appear very stupid if it is a very obvious question. So every time I ask a question, I still waver, like "Should I do it? Should I not do it?" But I am getting more and more telling myself that "no, do it." Because the times when it was so - basically the number of times that I have looked back and said "Look, you wasted so many people's hours, you were stupid" is zero. That never happened. Usually what happened is that OK, it was a quick answer, thank you, bye, life goes on. Or something like what I described: it actually ended up opening up opportunities for other people. So definitely it's OK to ask questions. I mean, it's scary, but you should do it anyways.

SARON: Next let's do some shoutouts. Do you have a couple for us?

CHIU-KI: Yeah. My first one is an Android one. This is an Android developer. It's called CodePath. I think what they call themselves is CodePath Android Cliffnotes. It is a wiki that is curated by people who are teaching Android, and it's really nice because it gives you a - well, it's cliffnotes, so it gives you a one-pager on various topics - for example, testing or how do you talk to the internet and things like that. What I like about it is that most of the time we want to get the official source. Like, oh, Android is written by Google; I should go to Google and read their documentation. But a lot of the times they are also other libraries out there that are built by the community, and Google don't necessarily want to endorse any particular one. So this is a third-party list which gives you, in my mind, a more holistic review of what's out there and what you should try. So I definitely recommend that.

SARON: Cool. What else you got?

CHIU-KI: The next one is also Android. I will say the first one is for everybody, whether you're a beginner or not; the second one is a little bit specific in the sense that I use it daily, almost, because I do a lot of - well, I write Android apps. And then what I need to do is I usually need to take a screenshot, either to upload it to Google Play or to show people what I have done. I use this app called Clean Status Bar. What it does is that when you activate that, it will cover up your existing status bar, and then it will only put the time and maybe just full wifi signal so that there's no clutter on it. Because I don't know about your phone, but my phone constantly has notifications on it. Usually what happens is there'll be like a Gmail icon, a little tweet bird on it, and then I will have a little Bluetooth icon. It's just very distracting on top. And I used to - either I'd be lazy and just post it as-is, or I would actually take out GIMP and manually rub out all the icons, which is really tedious. But this is a really good app because what you need to do is that you just activate this app and then you pick the status bar color - and then you can even change the time; you can choose the time that it shows - and then it has nothing else. It just has the time and the wifi icon and the status bar. So it still looks real, but it doesn't have the clutter. I highly, highly recommend everybody to do that, because now that I use it, I cannot tolerate screenshots with distracting notifications anymore.

SARON: Mmhm. Yeah.

CHIU-KI: Yeah. And then my final pick is not Android; I figured that I should give a shoutout to not-Android things as well, even though Android is a big part of my life. It's a website called Paletton. It's a bit hard to - I'm not sure how to pronounce it, because I've only ever seen it written in the URL bar. I guess you'll put it in the show notes. What it is is a color site. What you can do is you can go there and you can give the site a color - usually I do it by the hex value; for example, red - and then it will give you complementary colors. So it will give you multiple shades of red that is derived from the red that you gave and also the complementary color, which I cannot do on top of my head, which is why I need the site. Basically a color that goes well with it. So for example, maybe you will have to use the red as your primary color, and then you will use the secondary color for your buttons. I really like it because I have no sense of what colors go well together, and yet sometimes I'm doing my own little side project; I just need to have something that doesn't look awful.

SARON: It doesn't have to be good; just not bad.

CHIU-KI: Right, just not awful. So I'll go through that site, and I'll put in one color - usually purple, because I love purple - and then it will give me that purple and then a lighter shade and a darker shade so that I can use - for example, in Android usually what you do is that you have your app - the app has a toolbar which shows your app title that's a lighter shade of purple, and then the top status bar is a darker shade of purple, and they go well together. Rather than me randomly picking some color.

SARON: And hoping it turns out well.

CHIU-KI: Exactly. You still have to pick one color, which is OK. Maybe you pick green, and then it will generate a color scheme for you. I found that really nice. Just takes the guesswork out of it.

SARON: Yeah, that sounds really helpful. I have a couple shoutouts of my own. One is - I actually found this on your blog - is it Laura Hogan or Lara Hogan?

CHIU-KI: Oh, donuts!

SARON: Yes. Her donuts post is just amazing. She started - it looks like it was two years ago that she first started this. She started celebrating her career wins with donuts. And the problem that she was solving is that she works really hard, she does a lot of really great stuff, is very accomplished, but as soon as the good thing happens, it's "OK great. That's done, now let's move on to the next thing," without really taking the time to celebrate the accomplishment. And I'm very, very guilty of this too; as soon as the thing happens and it's over, it's "OK, what's next?" and you don't really get to appreciate it. And so what she started doing is buying herself a donut with every small or big career accomplishment that she gets, and it's really, really amazing - one, because I had no idea there were these many types of donuts. The diversity of donuts is absolutely incredible. But two, because it's a really nice, easy, simple, fun way to reward yourself, to literally treat yourself and acknowledge the things that you're doing. And her wins include speaking gigs and writing books and chapters and appearing and doing a bunch of things. I can definitely see a place for all of us, no matter how small our wins may feel, for us to celebrate with a little treat as well. So I loved that initiative, and you should all definitely take a look at it and read it. It's larahogan.me/donuts, and I'll post that on the website as well, so check it out. And the second, going back to speaking and Commons proposals - as you heard today, the first step in speaking is oftentimes submitting a proposal, and there's lots of really good blog posts out there that talk about how to write a really good proposal. And one that I really like, that is incredibly thorough, is by Sarah Mei, and it's called What Your Conference Proposal Is Missing. Sarah is part of Ruby Central and organizes RubyConf and RailsConf, and she's been reviewing conference proposals and organizing conferences for a very long time, and she wrote up this really, really good summary of the things you need to make sure that you do, the things that you should not do. There is an example of what a good talk proposal looks like. And she gives a very, very thorough review of all the things you should think about for your next proposal. So if you're thinking about it, if you're trying to figure out what makes a good pitch and what makes a good submission, definitely take a look at that blog post. It'll give you some really good ideas. If you want to join the conversation, you can join us on CodeNewbie Discourse, our online forum for people excited about code, or you can chat with us every week on the CodeNewbie Twitter chat. Just search for #CodeNewbie and tweet with us every Wednesday evening at 9 p.m. Eastern Time. You can learn more about that, as well as show notes on this episode, at codenewbie.org/podcast. If there's a topic you want to hear about or a guest you want to hear from, send us an email, hello@codenewbie.org. Thank you again, Chiu-Ki, so much for joining us. You want to say goodbye?

CHIU-KI: Bye.

SARON: Thanks for listening. See you next week.