Time to learn!
I'll admit it — I'm lazy. Often times the hardest thing to do is motivate myself to learn new technologies, particularly if I've been busy or I have other obligations. It is especially hard if you're not forced into it. I've heard people complain about not knowing the newest hottest frameworks and language features because they aren't being used in the project they're working on. In order to get past doing the same thing, I have to come up with a plan to force myself to learn by putting my back to the wall.
It's not enough to sit around lazily reading and playing around with a couple of HelloWorld examples. I need to either have a solution that to work towards, or put myself in a situation where I have a deadline which involves obligation. I'm hoping that blogging about it will be a genius way of forcing myself further down this path as to avoid embarrassment with my colleagues.
The idea came into my head to learn a new language like Swift or maybe Node.js or Groovy. Without having a project idea in mind, I figured the best way to learn is to teach a geek night at work.
What is a geek night?
At Isos, a geek night is an informal gathering with a lecture/discussion involving any type of technology, whether it's programming, messing around with electronics or anything just plain 'geeky'. The level of effort varies from having a full blown lecture to just chatting it up and having people load code onto their laptops. The point is to get people familiar with the technology and get them in a position where they are excited and can hit the ground running with any project of their own. Everyone at Isos is encouraged to attend and to teach and contribute themselves.
I also wanted to come up with a way to teach a language that is repeatable — a template approach that I can apply to teaching any language in the future. Due to time constraints it will be limited in scope, but my motivation is to scratch the surface of the language, to get people up and running and get them familiar with the new language in a way that they can relate to what they already know.
My language teaching template
Here is my starting template that I'm going to apply. I'm sure I'll have revisions along the way, but it should give me a good starting point.
- How the language uniquely solves problems
- Why you should learn it
- IDE / project setup
- Architecture of a standard project
- Basic syntax & language constructs
- How to search documentation / API
The first three parts are to give background information, how it's unique and to really stress the 'why'. People should know why the language was invented, the special way it solves problems and why they should bother to learn it. Without good reasons why, people will lose interest and motivation.
The next two parts are focused on the development environment and structure. Sometimes it'll be as easy as setting up a project in a free IDE like Eclipse or Xcode. I would need to make sure that I can come up with the fastest way to get everyone to install it so that it doesn't cannibalize the whole meeting. I would then explain the layout of a typical project for that language: the folder structure, configuration files, etc. An example would be akin to explaining the structure of a WAR file in Java.
Next I would present the most common language constructs and how they relate to what everyone is most familiar with, in our case Java. So, for example I'd go over if/then/else, loops, functions/methods, how classes are constructed (if applicable) and how they compare or differ from how they're done in Java. I'd also be sure to point out any new paradigms they are not familiar with.
Finally, I'd make sure they know how to look up the API and present the best resources for information to allow them to ramp up their skills as quickly as possible. It's not enough to teach a couple of points and examples, you must teach how to learn by showing them how to find answers on their own.
Time for action
Well.. nothing to it but to do it. I'm going to get the ball rolling by committing to a date to run the geek night. That'll start the fire under my rear. Next I'll need to choose the language I want to learn and start filling in the details of my template. I'll need to be sure to allow enough time for revisions and to make adjustments to the template. I'll probably make at least a minimal powerpoint presentation for the background information and concentrate on making clear, concise instructions for setting up the programming environment. After that, it's teaching time!
By my next blog (or two), I hope to have this experiment complete. I'll be sure to blog about how successful it was, the problems I ran into, and how I'd change it going forward. I'm nervous and excited — exactly the mix I need.