Category Archives: Education

Self-learning is not enough

Last month I wrote an article about how years of development experience is a poor metric for evaluating software developer quality. I concluded that…

If I had to pick one trait to filter for, it would be self-learning, i.e. evidence that the developer actively chooses to self-learn offline and online and then applies that learning to their own side projects.

Lately I can’t stop thinking about ‘what makes a developer a great developer’. Something’s been bugging me about choosing self-learning as the most important trait. I don’t take back that self-learning is the most important trait mind you. I’ve just had a gnawing suspicion that the statement needs a (few) caveat(s).

So, what’s the fundamental problem with self-learning?

You don’t know what you don’t know.

This is a critical obstacle to growth as a developer.




In a two part blog series (part 1, part 2) Erik Dietrich (@daedtech) talks about the “rise of the expert beginner”. He introduces the concept of the expert beginner through a bowling analogy.

He says that in his early days as a bowler, he developed a technique that didn’t involve putting his fingers in the bowling ball. This technique worked well – to a point. He was able to improve to a certain level in the league that he played, scoring up to 160 a game. Until he stopped improving. An old manager eventually told him what it would take to improve:

“There’s nothing you can do to improve as long as you keep bowling like that. You’ve maxed out. If you want to get better, you’re going to have to learn to bowl properly. You need a different ball, a different style of throwing it, and you need to put your fingers in it like a big boy. And the worst part is that you’re going to get way worse before you get better, and it will be a good bit of time before you get back to and surpass your current average.”




The concept of an expert beginner is elaborated from this observation:

The Expert Beginner has perfected the craft of bowling a 160 out of 300 possible points by doing exactly the same thing week in and week out with no significant deviations from routine or desire to experiment.

The self-learning expert beginner can find themselves in a position where they do ‘good enough’ and even ‘better than most’ but not ‘truly great’. By not knowing and/or actively avoiding their own knowledge gaps, the expert beginner misses out on discovering what they don’t know. This is a huge inhibitor to growth.

It’s not unusual to see expert beginners inheriting positions of authority. After all, they perform stronger than pure beginners, creating a perception of expertise.

How do you avoid the expert beginner trap?

Recognize that self-learning doesn’t mean learning by yourself.

Self-learning means actively seeking out and exposing yourself to different knowledge and beliefs than your own.

Attend events in your local software development community. Attend national and international events in the software development community (and bring that knowledge back to your local community!). Complete College and University level diploma and degree programs in your field, maybe even do a masters part-time, as these programs by definition ’round out your knowledge and diversify your experience’. Identify good mentors online and offline. Keep working on your mathematics background. Try to understand technical opinions held by developers that you might (at least initially) disagree with for whatever reason.

Actively try to seek out what you don’t know yet, and especially why those things may be important.


Build your own lightsaber

Our industry is booming, not just in Silicon Valley, but all over the place. The job outlook for software developers is great as a result. However a lot of these jobs aren’t the “computer programmer” jobs of the 1980s and 1990s. A lot of these jobs are front-end web development work for example, jobs that often require additional skills (graphic design, ability to communicate effectively with clients, etc.) not typically associated with the old school hacker stereotype.




There’s a lot of debate and articles out there trying to define the differences between a developer, designer, programmer, coder, computer scientist, computer programmer, software engineer, software developer etc. I don’t really want to get into that too much. The truth is it’s a mess to try to define. So few people agree on any particular arrangement of labels.

There’s also the problem that people turn labels into unnecessary hierarchies, when it’s really just a matter of differences. There’s a lot of great front-end developers who have no interest to learn theoretical computer science and there’s a lot of great back-end developers that don’t have a knack for graphic design, but often times you need a balanced team to create something great. Suggesting one is better than the other is like suggesting a defenceman is more important than a forward in hockey – both are required to win, so it doesn’t really make much sense.




That said, we’ve seen a lot of innovative efforts to crank out more people that “know how to code” to meet the demand for these new job openings:

Going back to the hockey analogy… we’re doing a great job developing talent at the “forward” position let’s say, but what about the other positions on the tech team?

Lately I’ve noticed an uptick in people contacting me or asking me about things like scalability issues, code generation, and analytics. There are some problems out there where no matter how brilliant a manager leads however many great people that “know how to code”, it’s not going to be enough to solve the problem. There’s some problems that just necessarily require some “hardcore” mathematics and computer science to properly and economically solve them. Solving these hard technical problems is critically important to the success or failure of many startup businesses. Look at what happened to Friendster (founded by McMaster computer science alumni Jonathan Abrams):


…it basically came down to failed execution on the technology side — we had millions of Friendster members begging us to get the site working faster so they could log in and spend hours social networking with their friends. I remember coming in to the office for months reading thousands of customer service emails telling us that if we didn’t get our site working better soon, they’d be ‘forced to join’ a new social networking site that had just launched called MySpace… the rest is history.


So I worry a bit that in our industry’s rush to “teach everyone to code” or “just build an MVP” we’re neglecting the importance of the mathematics and computer science behind a lot of great products. I wouldn’t even just limit it to mathematical computer science, I’d add other computer science subtopics to the mix too like software testing, design and usability. I’m sure supply and demand will correct any imbalance over the long run, if indeed there is an actual problem.

But to newcomers who are learning to code for the first time and finding that they enjoy it very much, I’d encourage you to keep going. If you’ve gone through a Codacademy, learn to code workshop or coding Bootcamp and have “caught the bug” (no pun intended) and find yourself thirsty for more technical problems, there’s a lot more out there you should know about.

If you find you love creating and modifying WordPress themes, try building a plug-in next. If you get that far, try building an actual content management system next. Yes, those are some pretty big leaps, but if you find yourself loving it, why not make the jump? You’ll be opening yourself up to positions that let you build more complicated software systems. A huge amount if not the vast majority of work in our industry is at this technical level too, and it tends to be better paid.



What if you want to keep going even further? Some people will tell you to “re-build an existing popular web app”. For example, try to make a Twitter-clone. That’s not a bad idea.

But I think an even better idea is to build a compiler and/or operating system. Why? Because Jedis know how to build their own lightsabers, that’s why! Like a Jedi’s lighsaber, compilers and operating systems are your most foundational tools as a software developer. Understanding them enough to be able to build your own isn’t directly essential to your career, but it will make you a stronger developer.




But also because compilers and operating systems are where a lot of more foundational computer science concepts “come together” in an interesting way. Building a compiler and an operating system forces you to put together different areas of computer science in an interesting and practical way, knowledge of everything from the registers in the CPU to formal grammars is required. It’s the thought process of having to put those different areas together that matters.

Building a compiler and operating system will also force you to learn about how the programs you write execute on a more fundamental level. Because unless you are writing assembly code some form of compilation or code transformation is happening to your programs at some point, and the program is operating in some form of operating system/environment.

Chances are you will never have to build a compiler or operating system on the job, the employment in these fields is practically a niche area in the field. It’s just not a skill that everybody needs to have. But if you can build these tools yourself chances are you’ll have obtained enough experience at figuring things like this out that you’ll be able to tackle other problems where their solutions require piecing together knowledge from otherwise unrelated areas of computer science.




Want to give it a try? Here are some resources…



Basics of Compiler Design – free PDF book
Dragon Book and related course notes
Let’s Build a Compiler by Jack Crenshaw

Coursera / Stanford compiler course – includes an optional project where you build an actual compiler


Operating System

The Dinosaur Book

PintOS – Nice and simple educational OS project out of Standford



Interestingly, I’m not the first to make the (very nerdy) argument about Jedis building their own lightsabers in relation to compilers.


HammerTown CoderDojo further expands local learn to code movement

This afternoon at Mohawk College (@MohawkCollege) I was able to attend Hamilton’s first ever CoderDojo event:

CoderDojo is an open source, volunteer led movement orientated around running free not-for-profit coding clubs and regular sessions for young people. Since CoderDojo is open source all Dojos are different and completely autonomous!

The HammerTown CoderDojo (@HammertownCDojo) launch event involved an explanation about what the CoderDojo movement is all about and what sort of programming HammerTown CoderDojo is planning to offer. This new initiative is led by McMaster University gScale lab researcher Brock Dubbels, and the inaugural event started off in a totally packed room filled with children and parents before moving to the computer labs.




Inside the computer labs the group I was with used the light-bot web app to teach simple algorithms including procedures in a fun social puzzle solving sort of way.




HammerTown CoderDojo joins and expands upon a growing movement of local learn to code events and initiatives. Just last weekend GHTGT (@GHGTrecycling) held a Tech Camp and Mabel’s Labels (@Mabelhood) ran a HelloWorld Camp. And let’s not forget the McMaster software outreach program that has reached over 1500 Hamilton-area children this year, Gr8 Designs for Gr8 Girls and the new Ladies Learning Code series of events too!

Software is written by people and tech startups are founded by people. If we want to continue to grow this industry these initiatives couldn’t be more important!

Hamilton and Waterloo unite to teach kids how to code

Parents and children crowd around two large white tables where circuit boards, wires, laptops, tools, stickers and markers lay splayed across the surface. Four home-made robots, built over the course of the full day, also lay on the tables in anticipation for their presentation to the entire group. It’s late in the afternoon at Mabel’s Labels HQ, in Hamilton, Ontario, and the four coloured teams are ready to show off their hard days work. One after another the teams present their robots, and each one is able to wow the crowd with unique functions, sounds, and plenty of attitude. One robot sneezes when a child reaches too close to it, another frowns unless someone tickles her, another begins blinking her eyes in spectacular patterns. Which ever robot it was, there was something to impress and delight everyone present. Surprisingly, this kind of scene is the norm for Gillian Gutenberg, founder of Hello World Camp.

“Hello World Camp is a tech camp in Waterloo Region for kids. We explore programming and multimedia, build robots, and take special field trips to local companies.

We also offer neighbourhood coding clubs and family workshops.”

Gillian of Hello World Camp, far right, clapping along as a robot presentation wows the crowd.

In Toronto, while volunteering at the Girls Learning Code March Break Camp, Gillians eyes opened up as to how rewarding solving these programming challenges were to the young girls. With that, and the support of friends and colleagues, she began developing what has come to be the Hello World Camp’s core teaching methodology. Through the use of physical computing, a mixture of software and hardware engineering, Hello World Camp allows students to receive instant feed back from their hands on work. As I write this, there are more than fifteen kids running around installing motors, wiring circuit boards, programming lights, and installing sensors; all here in one action packed day. Watching the childrens’ eyes light up as their robots come to life assures me that the learning today, ignites curiosity and a passion for possibilities tomorrow.

Kids learning to code

Katie Clarke of Mabel’s Labels, helping a bunch of curious kids figure out how to work the hardware / software interface

Kids learning to code

Nay and her son adjusting some parameters on the console. Parents and children alike worked fearlessly towards accomplishing their goals!

Today I witnessed a 9 year old girl battling with the wiring of her circuit board, upset with the motor as it would start vibrating unexpectedly, and then working feverishly to get it to behave as she so desired. For this kind of reason Hello World Camp considers physical computing a prime medium for children to learn how to work with hardware and code in a challenging and rewarding way. With how engaged I saw the kids today I have to say that I fully agree. Best wishes to Gillian and her program over in Waterloo. We know that opportunities are building up and we are glad to share and be a part of them and we know how grateful Gillian can be. You can find Hello World Camp over at Look out for them in the future, and if you want to know where to hire in the next 10 years, look no further than the Hello World Camp alumni! ;)

How I created my SkillShare class

Originally posted on

Special note to Software Hamilton people: Once this class officially opens on December 4th, I’m going to need help populating the student projects section to make it look lively. I’m offering 20 free coupons for anyone here to use or share. The coupon is SWHAMONT. If you do use the coupon, please see the class through to completion (approx.1-4 hours) and share your work in the projects section. If you need help I’m offering free tutoring to you as well. Many regards!

So I launched my SkillShare class yesterday (JavaScript for Non-Programmers : Code a Pong-Like Game. Check it out!). It took about 4 months (on and off) to put together starting early August. The original class stemmed from a live workshop myself and a couple of other guys put together last January. I also launched which for now acts as a landing page for the same SkillShare class. I used flatro multi purpose landing pages theme from theme forest and hacked the components to a simple arrangement.

My promo video (which I will actually be replacing/upgrading very soon):



Tools I Used:

Google Drive (free) – For creating slides, which I then downloaded to PDF to share with the class.

Camtasia (paid) – For recording video & audio, screen capping and video editing.

VLC (free) – For viewing outputted files. Also for ripping audio out of my initial recordings for further processing. Camtasia’s audio processing is limited.

Cool Edit Pro 2 (paid) – The predecessor to Adobe Audition before being bought out, for converting to mono and doing some normalization + compression on my voice recording.

SnagIt (paid) – For taking screen shots and grabbing particular sections of the screen. Very handy as it freezes the particular image, so animated frames are caught exactly as intended.

Adobe After Effects – I downloaded Adobe cloud so that I could use the after effects trial. I purchased the vintage promo AE package from video hive and rejiggered it to work with my product offering. I’m not sure if it was the best choice but it stands for now. I’d like more people or faces to be in the advert/promo.

For music I searched “free bed music” and ran into podingting bear on, which turned out not to be free, but relatively cheap so I purchased a license for two songs (promo/intros, outro).

I have a General Electric condenser Mic (that I’ve had for over 10 years), and a Focusrite USB audio interface. When I recorded the video I kept my pre-coded stuff on my left monitor with comments in the code directing me on which steps to do next. This way I would keep a good flow going instead of having to tab in and out of notepad or my slides for instance. It worked well.

I’m promoting Cyber Monday code and I will see how that will hold up to my expectations. I’ve got some (modestly funded) campaigns running on FB, twitter, reddit and adwords, and will be monitoring performance. If they fail to gain me any traction I will try again in the new year with some more campaigns. I see success in the future, even if it is a really slow build! That’s all for now.

If you view (or even take) the class, feedback would be priceless. Yours truly!

Don’t forget to follow me on twitter or sign up to the newsfeed.

Improving Hamilton-area early software development education

If you’re a regular reader of this blog you’ll probably have come across articles in the past talking about the importance of increasing and improving Hamilton-area software development education. Software has become the driving force of private sector job creation, as computing fields will make up 71% of STEM jobs created through 2018. With over 100 jobs in the Software Hamilton job board in 2013 and local developer salaries ranging from $50k – $100k+, there’s a huge opportunity for the 50% of Hamiltonians working part-time, contract or unpaid work to step into a growing industry. While it’s a grossly oversimplified view of the ecosystem due to people entering and exiting the pipeline at different stages, at the end of the day the “backbone” of our ecosystems looks something like this:




While we often focus on the end of the pipeline because that’s the most easily observable point of job creation and ROI, the skills and abilities that enable that job creation develop much earlier. The ecosystem’s performance is ultimately bounded by the quality of its input. If there were to be a surge in the number of youth learning software development at a high level, it would have a cascading effect throughout the ecosystem as top students go on to become top founders, researchers and developers. That’s why an emphasis on early software education in particular is so critical to the ecosystem.

I called the University of Waterloo and found out that they are admitting about 10x the number of Waterloo-region students into their computer science program than McMaster will admit Hamilton-region students into its computer science program this year (30 in Waterloo vs. about only 3 here according to the survey results). The Waterloo-region put a focus on early math and computer science education in the 1960s, and by the 1980s the University of Waterloo was graduating 1/3 of Canada’s computer science graduates.




Bill Gates is a great specific example. Microsoft employs 40,000 people in Bill Gate’s hometown of Seattle, but he became a programming wizard due to having regular access to a computer during high school (facilitated by a charitable donation). If you want a specific example closer to home, notice how Printchomp CEO Joseph Puopolo mentions a computer camp and early access to a computer in his article about the Waterloo ecosystem.

It involves taking a 20-year view of the ecosystem, but early and beginner software development education is of absolutely paramount importance.




We must do better. Thankfully there are two ongoing parallel movements that are improving early software development education. Firstly, there are many new fun and effective online resources for children, women and men to learn computer programming, often from right inside the browser, for example Khan Academy and Codecademy. Secondly, many non-profits are running one-off “kids learning code” or “hackjam” days where children get to learn computer science concepts, and various regularly occurring code clubs such as CodeClubs, CoderDojo, After-School Programming are opening volunteer-run chapters in cities around the world.

I’ve added a learn section to the blog, documenting what online resources are available and what local programs exist to improve early and beginner software development education.

Principals and teachers have asked me about how they can host code clubs, and local students and developers have asked me about running them. Non-profits running one-off events have asked me to find developers to volunteer at these events. I want to try to enable more beginner software education in Hamilton by connecting those teachers and principals who want code clubs in their schools with those in the community who are interested in running them. I also want to start connecting developers interested in volunteering at educational events with the people running them.

So if you’re interested in volunteering at one-off educational events, or becoming a lead organizer of a local code club, you can sign-up for the volunteer opportunity newsletter. I’ll blast out notifications about volunteer opportunities with local non-profits, and when teachers or principals are looking to “champion” a coding club at their school I’ll try to connect them to those interested in running these clubs.

Volunteer Opportunity Mailing List


I am interested in volunteering at one-off events – e.g. learn to code workshops, kids learning code days

I am interested in becoming a lead organizer of weekly occurring events – e.g. Code Clubs, CoderDojos, After School clubs


In terms of immediate opportunities to help out, there are two upcoming. I’ll post more details about these ASAP, but for now:


Mozilla Pop-up Event

The goal of this event will be to promote interactive learning, one of the most effective ways to ensure understanding and retention of knowledge. Our tech fair will introduce youth to digital literacy through hands on experience in an open and inclusive learning environment.

Each of our partners in this even will be asked to create a fun, interactive, learning table where youth can explore new ideas and technologies. The overall theme of the day will be “Story Maker.” This theme is broad enough that a number of different ideas can be molded into individual activities, and is one that is also meant to appeal to the imagination of our participants.

When: Saturday November 30 from 12:00pm until 4:30pm
Where: Parkview High School
Full Details:
Contact: Tahereh Ziafazeli (


Introduction to CoderDojo

Free courses in game production and coding. Make what you play. Sign up for this session for an orientation. We will preview the different classes to be offered, and you can decide what you would like to learn. Learn about: Scratch, StarLogo, Robotics, Python/ Minecraft, Ruby, Unity, & HTML5, and engines such as Crytek and UnReal UDK

When: Saturday December 7, 2013 from 1:00pm to 3:00pm
Where: Mohawk College
Full Details:
Contact: Brock Dubbels (


GHGT seeks volunteers for youth tech fair

ghgtGolden Horseshoe Green Tech (GHGT) would like to invite you and your organization to participate in a one-day technology fair that GHGT will be hosting in partnership with Mozilla and the Toronto Hive.

The Toronto Hive is a network of not for profit organizations (including GHGT) that focus on exposing local youth to digital literacy and in developing an interest in Information/Communications Technology.

The goal of this event will be to promote interactive learning, one of the most effective ways to ensure understanding and retention of knowledge. Our tech fair will introduce youth to digital literacy through hands on experience in an open and inclusive learning environment.

Each of our partners in this even will be asked to create a fun, interactive, learning table where youth can explore new ideas and technologies. The overall theme of the day will be “Story Maker.” This theme is broad enough that a number of different ideas can be molded into individual activities, and is one that is also meant to appeal to the imagination of our participants.

Participants will be encouraged to tell a story of their own choosing, through activities like character creation using Mozilla Webmaker, paper prototyping a game or application that tells a story, or video remixes using online videos and multimedia with Mozilla Popcorn.

We want our participants to leave this event with their imaginations fired with ideas about what is possible with Information/Communications Technology, and to have inspired in them a desire to pursue further education or a career in the ICT field.

This event will run from 12:00pm until 4:30pm on Saturday, November 30 at Parkview Secondary School in Hamilton (60 Balsam Ave N). It is our hope that with your participation, we will be able to offer 10 to 12 interactive learning stations that the participants can explore at their own choosing and direction.

Participating organizations are eligible for a small stipend to help cover some of the materials they will need for their booth, but the goal is for each group to be able to cover their own costs. If you choose to participate in this event, you will be able to join, and benefit, from the significant marketing effort that is being planned within the GHA. This will be an opportunity to meet and network with other organizations within Hamilton and Toronto, with the goal of creating lasting partnerships for future endeavours.

Please contact myself, Tahereh Ziafazeli ( if you are interested in additional information regarding this event. We look forward to introducing you to our other partners in the Toronto Hive.

Tahereh Ziafazeli
Community Projects Committee Coordinator
Golden Horseshoe Green Tech

Upcoming Ladies Learning Code WordPress for Beginners workshop



When: Saturday November 2nd, 2013

Where: Platform 302 (302 Cumberland Avenue Hamilton, Ontario)


What is Ladies Learning Code?

We’re a group of women in Toronto who provide women (and men*) the opportunity to learn beginner-friendly computer programming skills through hands-on, social and collaborative workshops.

(*Men are welcome to attend workshops – and they do - but we request that you bring with you a female learner where possible.)

Why WordPress?

Whether you want to start your own blog, or your company website is run on it, WordPress allows you to update and create content easily, while allowing for your own style and customization. You don’t need to be technical to use it, but it can be really powerful if you get your hands dirty and work with the code. In this workshop, we’ll show you how to install WordPress, what it all means, and of course, how to edit a theme to make it your own.

Is this workshop for you?

This workshop has been designed for absolute beginners. If you know absolutely nothing about coding or computer programming or WordPress, you’ve come to the right place! Our only expectation is that you know how to open up a web browser and do something online like checking your email. (But if you’re reading this, we’re pretty sure you know how to do that.)

If you are very familiar with WordPress (e.g. you are comfortable with PHP and have launched or customized WordPress-powered sites in the past), this workshop may not be for you. If you’re not sure, take a look at the blog post we wrote after the first WordPress event. It will give you an idea of what will be covered.


You must own or have access to a laptop for which you have administrative permissions. Workshops are taught in English. Please be sure to bring your powercord.

*Are you quaified to help teach this workshop? Great – our workshops absolutely wouldn’t be possible without the incredible developers who help us out! Please join our developer email list here.

What’s Included?

- 4:1 (or better!) student-to-instructor ratio
- A fun, social and inclusive learning envionment
- A great venue
- Catered lunch!
- Plus more!

Please note that by purchasing a ticket to this workshop, you are agreeing to our Refund Policy.


Email us at info@ladieslearningcodecom. You can also find us here:

Twitter: @llcodedotcom (don’t forget to use the hashtag: #ladieslearningcode)
Mailing List & Developer Mailing List:

What participants say about our workshops:

“After years of teaching myself how to code, I wasn’t sure how I’d find the collaborative experience of an LLC workshop – but it completely exceeded my expectations. The lead instructor was clear and thorough, and the volunteer instructors were always ready to throw new challenges at us the moment they saw we’d completed the current task. Solving a coding problem has always been exciting for me, but having a group of people equally excited about it was amazing!”

“[My favourite part was] the casual nature of things, and the fact that all the instructors walked around and helped out learners everywhere around the room – so I got to meet and talk to a bunch of people who were experienced and gain some perspectives. The food was great too. ;)”

“I love how excited the instructors were to teach us – whenever I understood something they’d throw another problem at me, and once I solved that they’d be as excited about it as I was!”



« Older Entries