19

Expertise Grows Over Time

As a kid, I recall doing lots of “fixes” for things. I’d begin to fix anything that could be torn apart, only to realize that I either didn’t know what was the problem, or I broke something trying to fix the problem. There was a laptop with a broken CPU fan [1], [1] The power button shorted somehow when I plugged in power. a scratched PS2 disk that I tried to restore by rubbing down with acetone [2], [2] I used a cotton ball which streaked, and then left the acetone on for an hour. It was frosted by the time I got back! plenty of cables I tried to splice together (without additional insulation), and plenty more I’m probably blocking out.

Additionally, I had problems finding ways to apply skills I’ve learned. I once skimmed through Automate the Boring Stuff with Python. While great content for learning about Python, and with very practical examples, I didn’t leave the book thinking of hundreds of places where I can automate things. In fact, I couldn’t think of a single thing that I could do to apply what the book taught. Anything I thought of was either too complex to probably work in Python, or too simple to be worth doing.

Now, I have a much higher success rate when it comes to repairs, I have less catastrophic consequences, and I find many more things that I can do with my skills. Here’s the inspiration for me writing this: I was looking at the Awesome-Selfhosted list on Github, and wanted to go through each entry and see which I liked. So, I downloaded the markdown document and made a quick Python script:

# In case you want to make something similar,
# I license this code under CC0 <http://creativecommons.org/publicdomain/zero/1.0/>.
class Software:
    def __init__(self, category, name, link, description):
        self.category = category
        self.name = name
        self.link = link
        self.description = description

import re
def split_line(l):
    m = re.search('- \[(.*)\]\((.*)\).* - (.*) [\(`].*', l)
    if not m:
        # Maybe there's not a link?
        m = re.search('- (.*).* - (.*) [\(`].*', l)
        if not m:
            print('that\'s not good: {}'.format(l))
        else:
            return (m.group(1), None, m.group(2))
    else:
        return (m.group(1), m.group(2), m.group(3))

lines = []
with open('README.md') as f:
    lines = f.readlines()

started_reading = False
category = ''
software_list = []

for line in lines:
    if not started_reading:
        if line == '<!-- BEGIN SOFTWARE LIST -->\n':
            started_reading = True
        continue
    if started_reading:
        if line == '<!-- END SOFTWARE LIST -->\n':
            started_reading = False
            continue
    if line[0:3] == '## ':
        category = line[3:-1]
    elif line[0:2] == '- ':
        if '⚠' in line:
            # Depends on a proprietary service outside the user's control
            continue
        (name, link, description) = split_line(line)
        software_list.append(Software(category, name, link, description))

import csv
with open('selfhosted.csv', 'w', newline='') as f:
    w = csv.writer(f)
    w.writerow(['Category', 'Name', 'Link', 'Description'])
    w.writerows([[s.category, s.name, s.link, s.description] for s in software_list])

With a little scripting knowledge, I converted a painful task into a simple one. Now I have a CSV to which I can add an “Interested” column for each that I’m interested in. Now, why did I come up with this sort of idea now, and not at any time before?

I think the answer is that in the past few years, I have gained a tremendous amount of expertise. I have learned so much more about scripting and electronics and design and stuff, and I have so much more experience with those tools than I had previously. When you have a big toolbox, and lots of experience with it, you’ll get a lot done.

So, reader—if you are young and green (or just green!), don’t get discouraged when things seem useless to you now, or if you constantly see your shortcomings. The knowledge and experience you build now will be your foundation of success in the future. Learn from your mistakes, and eventually you’ll stop making mistakes!