Author: Matt

  • Github Streak is Over

    Vacation broke my Github streak of consecutive days for coding and contributing code openly.

    It started out as a way to get me back into programming Python code and trying to test a theory I had about how to become a top 1% software developer by doing “Freecoding”  – a method based on what authors use to overcome writers block and become faster at writing.

    There were several key lessons I got while doing this:

    • It can be difficult to think of original things to program every day
    • I had the opportunity to find a lot of gems in the Python standard library and practice using them
    • My knowledge of the language is significantly deeper than it would be had I just been programming professionally
    • It gave me time to explore some of the other sub-communities within Python – example: Mathematics, plotting, and  machine learning

    One thing I was hoping this would be more effective with was getting fast at developing with a web framework.  Over the course of 250+ days of coding I wrote nearly 25 web applications with Flask. I wanted to get to the point where I could type a new web application as fast as my typing speed allowed and that recalling names of packages and how to bootstrap a new application would come so quickly that there would be no cognitive load at all.  It turns out that it’s hard to do.for a couple of reasons.  First, If I don’t know what the application is going to do (within the scope of something that can be finished in < 30mins) then I get bogged down with figuring out something to do.  When I tried implementing the same application everyday it became a memorization exercise and didn’t help with the understanding of what I was typing.

    Additionally it was interesting to experience how my short term memory dropped off over time. After several consecutive days of practice I could perfectly recall a 100+ line program (and type it in 15 minuts), but a break from that practice for a couple days and I’d encounter blocks in my recall.  A month long break and most of my memory was missing too many specifics to completely recall it.

    Now that the streak is broken I’m calling it quits and re-allocating that time for something else.  I have some non open-source code that I’m trying to work on, and I’m falling behind on my reading goal for the year.

  • Lessons From 253 Days of Consecutive Freecoding

    My recent camping vacation is what broke an epic 253 day streak of github commits.  Overwhelmingly this activity was a daily practice of freecoding to see first hand just how effective it could be at getting better at programming.

    Freecoding is based on a writing technique called free-writing which is supposed to get the juices flowing and eventually lead to you developing a faster thought to fingers connection for getting your ideas out.  It is a popular practice for authors, but has never become something that programmers took up.

    With a bit more extensive experience now with the process and it’s effectiveness I can draw some conclusions about how it works and where the difficulties are.

    By far the biggest difficulty is trying to think of something original to write every day.  Unlike story writing where you can ramble out words with markov chain like inspiration, the strict syntax of programming forces you to think ahead about what you want the program to do.  I also found it psychologically difficult to finish a program that had syntax errors.  Finally, writing a script is not always easy to to linearly and jumping around the code provides an interruption that can stop the flow of thoughts.

    There were a lot of positives though.

    • Finding interesting things to program everyday inspired me to keep a list of interesting projects and try them out
    • It gave me an excuse to test out things like how threading is limited by the GIL in python which I hadn’t run into with my job
    • was able to scour through the standard library and uncover some features that I now incorporate often into my code.
    • got a much better handle on parts of the language that I didn’t use often such as functional programming
    • took time to try some popular libraries in areas I don’t usually get to deal with (mathematics, graphing, and machine learning)

    Through this practice I feel like my knowledge of Python was able to reach a new plateau.  Learning by doing and practising everyday is a tremendously good way to improve.

    if you are curious what kind of code I wrote everyday for 253 consecutive days it’s all on my github account.

  • More Swift

    Since Apple announced Swift was going open source and coming to Linux by the end of the year, my interest was peeked again to dive in and start learning it.

    With Swift running on Linux servers the race is on to create a compelling web framework so that it will be possible to write iOS apps and server applications with the same language.  A modern type safe systems language that’s still fast and easy to write is pretty appealing.

    Working through the Swift book and code examples, I’m finding it to be quite a nice language – especially with the new Swift 2.0 improvements.

    Unlike other modern languages Swift still has some short comings:

    • lack of a first class package manager (like pip for python, go get for golang, gems for ruby etc)
    • a comprehensive standard library (Python and Go have tremendous built-ins)

    Swift feels quite new and the team at Apple is still making breaking changes to the language syntax.  I’m hopeful that open sourcing the language and bringing it to Linux will open the door to allow other developers outside of Apple’s ecosystem to start learning it.

  • House work

    This past weekend started with the goal of painting the fence with a fresh coat of paint.  To make it a bit less manual I got a pressure washer to help with scraping off the old paint.

    Things went sideways when we realized that one of the fence posts was rotted and cracked and would need to be pulled out.

    So the entire 30 degree weekend was spent doing exhausting work trying to dig and pull out a pillar of concrete in a 3.5 foot deep hole.

    Having grown up in newfoundland the ability to hand shovel a hole that was nearly 4ft deep without finding any rocks what-so-ever was something of a revelation.  This is what using a shovel is supposed to be like.

    The fence post shenanigans have pushed out the painting work. It’s only 1/2 done now and the back side of the fence looks like a scrapped up mess.  So it’ll be another few hours of work before everything is complete.

  • Why You Should Find Time to Play

    Play is one of the more undervalued activities we can undertake as an adult, yet it is one that differentiates many of the worlds top performers from the rest of us.  Playtime could be considered to be the pinnacle of Maslow’s hierarchy of needs.  When you are intrinsically motivated and enjoy what you’re doing  you might considering it playing.  It’s fun.

    Play is an activitiy which can promote dramatic shifts in learning.  When you are exploring the boundaries of your understanding through play it becomes ok to try and fail, to do thing that might be crazy.  Stretching yourself often enough results in leaps in your skills.

    With physical skills the benefits of play are particularly well appreciated.  We go to the playground and become ever more confident with our balance, strength and co-ordination.  These basics translate into other physical skills with bikes and skateboards, and those of us who continue to play like this through into adulthood can reach a professional level.

    For mental skills the idea of play is a lot more varied.  It could include anything from board games, to trivia nights to personal challenges to building something or just thinking.

    Over the last 227 days I have been committed to writing code every day. Sometimes this is a chore and other times it is one of the highlights of my day.  This daily goal of writing a little bit of code every days is my chance to play with software in a way that I don’t normally get to do with my job.  I have been writing python code for this and as a result of all this play my depth of knowledge has increased dramatically.  It’s code that I enjoy writing and as a result of that fun the positive emotions carry over to my work when I write code there.

    Richard Feynman was one of the foremost physicists of the 20th century.  He never stopped enjoying himself or having fun with the work he did. In the book Surely You’re Joking Mr. Feynman it was quite apparent just how much benefit he got in work and in life from being playful and curious with everything and everyone he interacted with.

    I don’t believe you can be a top performer in your field unless you can find the joy and the play in what you do. As adults we easily lose sight of this aspect of life.  Play is not only a chance to improve ourselves it is also part of the spice in our lives that can make it worth living at all.

  • Investing More

    Amazingly we’ve been living in Calgary for 5 years now.  The time came to renew our mortgage and while I was doing that I started the process of opening a HELOC so that we can use some of the equity in our house to invest.

    With today’s low interest rates it has become pretty attractive to borrow money. I expect it will be relatively easy to get a positive spread between the interest rate and the return on any investments.

    Leverage like this is the only way to become wealthy.  This is dramatically apparent for our house value: since buying a house the slope on our monthly net worth tracking doubled.  Unfortunately in the case of house value that equity is not very liquid and difficult to access.

    The plan for the HELOC funds is to invest most of it in a well diversified portfolio of stocks and bonds.  I’ll withdraw funds each month to pay for the interest on the loan.  By the time the HELOC is paid off we should have made a nice profit.

  • Have a Lab Instead of an Office

    The space to create new innovation is dearly missing from today’s work environments.  Creating a space to really encourage great leaps in innovation requires a few things:

    1. Space and time to think.
    2. Freedom to implement or test an idea quickly
    3. Collaboration to help get over hurdles

    Recently I had the opportunity to work in a lab.  It was a bit of a mess – wires strewn everywhere, breadboards, toolboxes, soldering stations all around and within reach.  The mess actually encourages quick testing of crazy ideas. It creates an environment where there’s no limits and its easy to bend the rules to get something working.  If you want to drill a hole in your desk to attach something, go ahead. Run a wire into the next room – poke a hole in the wall.

    This lab was in stark contrast to the IT management in which PCs were locked down. In the software world computers are our entire space in which to invent and create. Yet within the constraints of corporate IT the freedom to innovate can be severely restricted.  Without the ability to install software, tweak settings, plug in new devices our hands can be tied. Rather than call and IT admin to get a password to install something we avoid the confrontation and continue on with the status quo.

    In many ways the modern office is too restrictive to create truly game changing innovation.

    I encourage everyone to strive to turn their office into a lab. Create a space where anything is possible!

     

  • Reading about Solar

    I’ve been reading and doing some math on the feasibility of Solar electricity.

    Turns out that costs have dropped significantly over the last few years due to the scale of production in China that actually is currently over-supplying the demand, and new manufacturing technology that is making it much cheaper.  You can find panels for sale in China for as little as $0.30/watt right now.

    The ROI for solar is getting down to a reasonable timescale and is at a tipping point where it’s a worthwhile investment for many people.

    It’s something that I want to do a lot more research on.  But over the next few years I expect we’ll all be seeing a significant increase in the number of houses with solar panels on them.

  • The Single Most Effective Productivity Tip

    What do you believe is the single most important thing that will affect your productivity?  Time management? Software tools? Calendars? ToDo Lists?  No.  The most important thing that will affect your productivity is your expertise.

    Knowledge is the baseline for almost all work that we do in today’s information economy.  We simply cannot produce good information products without the knowledge to do it. And gaining the knowledge as you go is akin to assembling the tractor before you can use it to plow the field. To be maximally effective you should strive to have the knowledge for how to do what you need to do.

    There are two aspects to knowledge that can be looked at as it pertains to your productivity.

    1. Relevance – The more relevant your knowledge is to the task at hand the more efficient you will be
    2. Competence – how easily you can apply your knowledge.

    When you have relevant knowledge and have competence with it then you have an expertise that allows you to be productive at a much higher rate.

    The four stages of competency will give you a sense of how effective you knowledge is towards your productivity. Simply having the knowledge is not enough to being extremely productive.

    1. Unconscious incompetence – you do not know how to do something and haven’t yet recognized that
    2. Conscious incompetence – you realize that you don’t know something
    3. Conscious competence – you have the knowledge but it requires concentration to execute
    4. Unconscious competence– through extensive practice your skills have become second nature and can be performed without effort

    It has been said that the best programmers are 10,000x more productive than an average programmer. While this claim is outlandish it exemplifies that people with experience hiring programmers see as truth. The right programmer with expertise can implement quickly while the wrong programmer may not even recognize that they don’t have the knowledge required to do so.  In the worst cases incompetence is a liability – incorrect knowledge applied incorrectly can pose a significant threat to your business.

     

  • Book Reports

    For the last couple weeks I have been trying to catch up on my goal for reading 36 books this year.  Progress so far has been good and I have gotten through a decent backlog of books that I have wanted to read.  With the new morning routine of  reading before the day starts I have built some momentum that keeps me interested in finishing the books throughout the day when I have a spare few minutes.

    All this reading has been giving me quite a few new insights.  The bulk of my reading this year has been in entrepreneurship and management areas.

    One new practice that I have started to do with the last 3 books I have finished is to write a book report.  Just a 1-page report of the major impressions from the book, any lessons worth keeping and any other notes I want to have if I need a quick refresh about the book.  It’s like high school. When I think back to books I read just 1 year ago, my memory is fuzzy of anything specific

    One of the things I want to get better at is recalling the title and author of the books I’m reading. Writing the report forces me to learn how to spell the authors name and type out the title of the book. I’m hopeful that that simple thing alone will help me recall the books I’ve read so that I can more quickly talk about them in conversation.

    It seems like a nice habit to have, and I hope it proves worthwhile.