Archive for the ‘Learning’ Category

Are you passing up opportunities?

Tuesday, September 13th, 2011

The trouble with opportunity is that it always comes disguised as hard work.

The year was 1995. I was 14 years old and recently purchased a screaming fast 14.4 Kbps modem and signed up with a local ISP to finally get graphical Internet. This was the Internet with pictures! Ah, how I remember the days watching the purple going in and out waiting for pages to load. 28.8 Kbps modems had recently come out but they were around $250. Luckily for me, the 14.4 modems had been reduced in price to only $100 which I could afford with my paper route money. How could I complain though? Previously I had been using a 2400 bps modem to access the Internet in text-form through the Lynx browser.

This was incredible! I was amazed by the World Wide Web.

Fast forward a couple years and I was itching to learn how to make websites. What should I make one about? I was a big hockey fan at the time so after some thinking about it, I decided to make a website about my favourite hockey team, the Toronto Maple Leafs. I put countless hours into the site entering statistics from a book I bought and updating the site after games. I opened an account with Geocities, taught myself HTML and even a little bit about graphics to “pretty” up the site. It’s even still available on the Internet Archive. It wasn’t the best site but I put a lot of work into it and it was a labour of love.

Forward again another couple years to 2001. I was off to university and didn’t have the time to maintain it anymore so I let it die. Just before school let out for the summer one of my friends asks me if I can make websites. I say “Yeah, I’ve been doing that for a couple years now.” His brother wants to setup a simple online store website to sell some products. I talk to him about it and we agree on a price of $1500, half paid up front and half on delivery.

After getting back home for the summer I have lots of free time and figure it will be a piece of cake. But I procrastinate and procrastinate until finally a month later I feel bad about it and I tell him I can’t do it and return his money.

One thing I’ve since learned in life is that each time I do good work, I get rewarded with a greater opportunity as a result of it. It may not be from the same person or company but somehow life tries to put me at the next level and give me a reward.

Looking back on this decision to fail, I figure it probably cost me tens, if not hundreds, of thousands of dollars and probably set my career back 5-6 years. I wouldn’t start doing any web development until after I graduated in 2007, six years later.

If I had successfully completed that project, I could have easily found others. The Internet was just getting started and was hot at that time. I could have worked while I went to university in web development instead of brainless part-time jobs earning barely above minimum wage. I could have built up a portfolio and client base that would still serve me today. But I chose to give up.

Life always seems to present opportunities when we’re ready. It might not be in the form we like and it certainly won’t be gift wrapped up in a nice perfect package with a bow on top. But you’re ready for it. You wouldn’t be receiving it if not. If you say yes and complete it, you will be able to move on to bigger and better things. However, if you reject life’s opportunity, it will say “Ok, never mind” and then you won’t get it again until you prove you are ready again. This may take years as in my case.

If you are currently being presented with an opportunity, are you accepting the present? If you choose to pass it along, it will take some time to get back.

Advice for New Software Developers

Wednesday, June 1st, 2011

When starting a new path, it is often difficult to know which way to go. Some good advice I once received is that when people are starting something new, they need to be told exactly what and how to do it. It is only once they have a bit of experience that you can remove the “how” from the equation and just say what needs to be done.

For new programmers just getting started, here are the steps I recommend taking until you understand your working style better and can make adjustments.

1) Understand the problem

What you are trying to accomplish should be clear in your mind. You should know what will happen once the task is complete and what the user will see. If you are confused about anything, as a developer, it is your responsibility to ask for more clarification until your are clear about it. There is nothing about writing code at this stage. Often times, developers just want to jump right into coding but understanding the problem is paramount.

2) Plan your approach on paper – pseudo code

On a piece of paper, away from the computer, write out all the steps necessary you think it will take to accomplish the task. Don’t write any programming code. This should be pseudo code and written in plain English. Write one action per line. The more detailed, the better.

If you get stuck on part of it, then you do not understand the problem well enough. Go back to step 1 and get it clear what you are trying to do. Notice, there is still nothing about writing code at this stage.

3) Understand existing code

Once the pseudo code is written out and your plan makes sense, now you can find the files and the areas that you think you will need to modify in existing code. You should read the surrounding code and understand it first before making any changes. If you do not understand it fully, there is a greater chance that any changes you make will introduce more bugs. Notice, there is still nothing about writing code at this stage. So far, it has been all understanding and planning.

4) Write code, one line at a time

Ok, now you can start writing code because a) it is clear what you want to accomplish and b) you understand the existing code well.

NEVER, EVER copy code from somewhere else. If you do find code somewhere else that (once you fully understand it) you think applies to your task, then type it out line by line. You may think this will be slower but making sure you understand what you are doing ALWAYS saves you time down the road. When typing it line by line, you should be reading it and understanding it as you go along. If you are copying and pasting code, alarm bells should start going off in your head.

When writing code, only write out enough code for one of your pseudo-code lines. Do not write out everything. Start at the first line written on the paper and then convert that into actual code. Then go on to the next step.

NOTE: this stage should actually take the least amount of time in the process. Yes, it’s a little ironic that as a developer you’ll be spending the least amount of time writing actual code but you should be spending the majority of your time understanding the problem, planning it out, reading and understanding other code and testing your work. If you are spending the most of your time here then there is something you do not understand well enough. If it is the problem, then go back to step 1. If it is the other code, then you need to read and understand more. If it is the programming syntax then you need to read and understand more about the applicable programming language.

5) Test what you have done

For each line of your pseudo-code that you have written in actual code, test it to make sure it is doing what you expect. Do this immediately after writing the code! You do not want to write a whole bunch of code and then find out that it is not working somewhere. You should be testing after each step so you can fix it at that point while it is fresh in your mind instead of finding it hours or days later and you have to think again about what you were doing. If you test it and it works as you expect, go back to step 4 and write the code for the next line of your pseudo code.

6) Don’t give up

You are probably closer to the solution than you realise. Have you heard the story about the gold miner? During the gold rush he bought a mine and after weeks of exploration, found gold. Experts said that he had found one of the richest mines in the state. Returning with more equipment he spent time mining but no more gold could be found. Frustrated, he finally gave up and sold the mine. The new owner brought in an expert to assess the mine and he discovered that the main vein was just a few feet away from where they had stopped mining.

Sometimes it can be frustrating when you are programming and going in circles. Instill good habits at the start of your programming career and they will treat you well down the road. Be as orderly about your programming style as your code and you will find a successful career as a developer. I wish you the best.

Learn Quickly: How to Soak up things like a Sponge

Saturday, August 7th, 2010

All my life I’ve been able to pick up things very quickly. This has led me to being bored with classes at times since they need to go at the pace of the average learner. I still remember taking Math class in high school. One year my teacher would assign the homework due for tomorrow at the beginning of class. I would usually just ignore what he was talking about and read the textbook and do the homework in class. Often I would be finished by the end of the hour.

When I’m learning something new now, I’ll often look around at other beginners and see them struggling with things while I’ll be ready to move on. I often wonder what is the difference? I have no doubt that some of it might be due to nature and genetics. But I have also noticed general things I do that allow me to learn faster than others. Here is what you can do to learn faster:

Adopt a Learning Mindset

This is probably one of the biggest aspects. People are 99.9% the same. We are much more similar than different. A lot of the time we don’t realise this because it’s much easier to notice the differences. Being similar means that anything someone else has learned, you can learn too…if you put in the effort.

Know you are going to Fail

When you start something new, you will fail the first time. Maybe the second or third time too. I think everyone innately understands this. Unfortunately, many people try to avoid this. When starting something, they will spend a long time trying to decide the best way to do it in an attempt to avoid failing. This leads to people giving up before they have even started or overthinking.

For example, when I decided to learn salsa dancing last year, I signed up for a course which was quite expensive and wasn’t teaching me what I wanted to learn. I spent a lot of time and money on it and didn’t receive as much value from it as I should have. Later I found different classes that were much cheaper and more valuable to me so I switched. Signing up for those first classes was a failure in that I wasn’t getting good value for my money but it was much better to do that than take time hemming and hawing about which direction to go.

Another reason people learn slowly is ego. As we grow older, many people don’t want to be seen as beginners. It’s a good thing we didn’t know this when we were babies. There may be a lot of people who never learned to walk or talk if we did. Can you imagine a baby not enjoying the process of learning to crawl or walk?

Knowing you are going to fail at something the first few times means you should jump right in. There is no avoiding it. Get those failures out of the way quickly so you can move on to the learning stage.

Rest and take Breaks

Rest is completely undervalued in our culture. I like not being busy and having lots of leisure time. Many people don’t seem to be like this. They “brag” about how much they work or how little sleep they get. There is a limit to how much a person can do or learn in a set period of time. Once you reach that limit, you will not be able to do any more until you rest and re-charge your batteries.

I have forced myself to go to dance classes when I was really tired and they have been a waste of time. I wasn’t able to retain anything I learned. Contrast that to classes where I had a nap beforehand and the difference is incredible. I was able to retain a lot more of what I learned and I had a lot more FUN! You should be taking breaks after 45 minutes of learning to let your mind absorb and process the new information.

Understand the learning curve

The best book I have read on learning is “Mastery” by George Leonard. One of the many great insights in the book, that is obvious when you think about it, is that we don’t learn linearly.

Linear Line

Not how we learn

Instead, we learn in a series of rises and falls.

Plateau Lines

Two steps forward, one step back

We take two steps forward, one step back and then be stuck at a plateau. This plateau could be anywhere from a few minutes to several years. Many people quit when they are in one of these plateaus. It’s easy for us to get frustrated and think we have stopped learning. Instead, enjoy the plateau! It is your mind’s way of saying “Ok, you have learned enough for now. I need to process all this new information and master it before we can move on.” The plateau is a necessary part of the learning process. It allows you to retain what you have learned.

A great thing to know about the learning curve is how fast you can advance. After just 6 months of practice, you will be better at that skill than 90% of the population. It doesn’t matter if you are a complete beginner. No matter what you take on today, you will be better than almost everyone in only six months if you practice regularly.

After that, the curve really steepens. It takes another 10 years to get into the top 1%. Understanding this scale lets you be aware of how much effort you want to put in. Maybe the top 10% is good enough for you. I am in Toastmasters but have no aspirations to become a professional public speaker. Because of this, I don’t feel bad if I am not putting in as much effort into that as in other areas. Some other things, like dancing or programming, I do want to be in the top 1% and so I need to practice regularly for a longer period of time to achieve that.

Everyone has the ability to learn. If you haven’t used the learning portion of your brain for a while it may take longer to re-activate it. You can learn quickly and you can learn whatever interests you.

Enjoy the learning process. Be like a child. Jump into things. Have fun!

You, Inc.

Monday, December 14th, 2009

Are you an employee who dreams of starting your own business? You have an idea that excites you when thinking about it. You visualise the finished product coming to life. You imagine all the money rolling in from sales. That is great but it could be months or years down the road. Do you really need to wait that long to start a business?

No. You already run a business, and that business is You, Inc.

No matter if you are an employee or employer, you are operating a business. Each month you have revenue (income) and expenses. You have a balance sheet (whether you realise it or not). You have at least one customer. Sounds like a business.

One of the best realisations I have had in my career is that I am not an employee, I am a business of one. As an employee, I choose to provide my services to one client. As a business, it is quite risky to have just one client. However, if you choose to do so, you need to be aware of the pros and cons.

Thinking as owner of You, Inc. puts me in a different mindset than if I consider myself an employee. As an employee, the company is in control of the work I do. As a business owner, I am in control. It helps me question things like: Is this the kind of business I want to be in? Am I providing good value? Will my clients want to work with me again?

When you start thinking of yourself as You, Inc., different questions start to come up? Am I running my business well? Am I investing in the future of my business? How can I grow? Is it smart having only one client? What are the goals for my business?

It is important to run your business well because how you run You, Inc. today is the way you will run a “traditional” business. If you do not communicate well with your client now, then you will not communicate well with clients in the future. If you are running a loss every month, you will do the same with your business. Does You, Inc. operate with little or no debt? It is important to get You, Inc. running smoothly before moving onto bigger things otherwise you won’t be able to handle them.

A year after winning the lottery, most winners say they wish they had never won. Generally, life only lets you move on to the next step when you are ready. If you jump too far ahead, such as in the case of lottery winners, it usually causes too much hardship.

To run You, Inc. successfully, copy what successful businesses do. Just do it on a lower scale.

Good businesses spend money on sales and marketing.
Good businesses do not rest on their past. They are constantly investing in development of new products (skills).
Good businesses demonstrate values and try their best to live up to them.
Good businesses reward those who help them.
Good businesses treat others fairly and courteously.

To shift your mindset, spend a little time each day thinking about your business. If you were in control, what are some things you would do differently? Then realise that you are in control.

Read Books, Not Blogs

Thursday, December 3rd, 2009

“Spend 15 minutes per day reading about your craft and within 5 years you will be in the top 5% of your industry.”

I read this quote a couple years ago and have tried to live by it since to see if it is accurate.  I wouldn’t consider myself in the top 5% so it hasn’t worked yet.  I keep doing it though because I see why it can work.  To be in the top 5%, you have to do things only the top 5% do.  The top programmers continually learn new and better ways of programming and if you do that, then one day you will be among them.

What does this have to do with blogs?

It is tempting to go through RSS feeds and think you have improved your knowledge.  When you think about what you learn by reading blogs, have you really learned that much?  Blogs are great but there is a major problem with relying on them for learning.  How much time does it take for an average blogger to write up a blog post?  A couple hours?  Maybe more if they aim for higher quality.  Compare that with books.  Authors spend months and months writing the content for a single book.  Books go into much more depth than even the best blogger could provide. When choosing sources to learn from, pick the ones that have had the most effort and thought put in. Books > articles > blog posts > comments

A programmers job is on getting things done and getting things to work.  When you can reliably get things working with little effort, complacency can begin to sink in.  You start thinking that because you always get things to work, you know everything.  This is dangerous. It’s a good reason to read books to keep you humble.

Whenever I’m reading a technical book, I’ll always find better ways of doing things. It could be simple like learning a new function or bigger such as design methods. This keeps me from wrongfully thinking I know everything. If I can still learn new things, I am far from being an expert.

Can you really accomplish much in 15 minutes?

You would be surprised how 15 minutes per day adds up.  The first few days seem like nothing. After a week or two you realise how much you have picked up. 15 minutes doesn’t allow for excuses. No matter how busy anyone can find 15 minutes each day. This can be applied in other areas as well.  If you have a business idea but think you don’t have enough time, start doing it for 15 minutes per day.  You will soon start to see major progress.

But you say, “I don’t want to buy technical books. They will be out of date in 2 months and will just collect dust on my shelf.”

Luckily the Internet has solved that problem. I recently signed up for Safari Online and couldn’t be more pleased. There are thousands of technical titles to choose from for only $23 per month. Considering that just one technical book costs double that, it is an excellent deal. I can read as many books as I have time for and don’t need them cluttering up my desk afterwards.

There is no excuse not to develop your skills a little each day. Time and cost are not issues. Do yourself a favour. Read for 15 minutes each day.

——-

Link to Safari Books Online