How to How-to

Or, Tips for Effectively Educating New Developers

Dan Gribbin

@dangribbin


Me:
Front End Engineer
Brand Networks
Web Dev classes in Rochester


Records
Baseball
Coffee

Bro, do you even Aeropress?


I work with...


Software Engineers

Front End Engineers

Interaction Designers

QA...folks

Project Managers / Scrum Masters

bn.u


Fridays at 3pm
Beer + Learning

At one time, we all knew nothing about our jobs...



...and that's unfortunately easy to forget

Learning new things 

is a crucial part of doing your job! 



Things that change in our field:

All the things.

Hardware → Software

Possibilities → Realities → Expectations

Teaching can be hard. Why?



We have generally have a terrible memory about the learning process

Which means...

We sometimes take our knowledge for granted

Which means...

Teaching what we know can be difficult

Why be a teacher?



Enhance your leadership skills

Have positive influence on developer's careers

Your dev team will thank you!

Teaching Effectively - Some tips on 'how'



Adapt your teaching style to your trainee's learning style.


Be Inspirational!


Make real learning happen.

The way you teach makes a difference!


A few influences on learning:


  • Learning style preference
  • Personalities
  • Co-workers
  • Goals
  • Interests

On Learning Styles 

A very short, shallow Cognitive Psychology lecture from a non-expert


Two hemispheres in every brain
Right side- creative processing
Left side- logical processing

Some people's processing skills are dominated by one or the other, and some neither.

Which means...

People learn effectively and process info in different ways.
(end of lecture)

Recognition of distinct learning preferences allows you to customize the teaching process.

Two Common Learning Styles



Analytical/Logical
(bottom-up, left-brained)


Creative/Visual
(top-down, right-brained)

For Creative/Visual Learners



A top-down/holistic approach can be effective.

Show where you intend to end up.

Use a progressively fine-grained examination of the topic.

Teach with examples and demonstrations.

For Logical Learners


Effective learning begins with understanding the most basic elements of the subject.

Problem solving involves a logical, linear progression of thoughts.


"Because I know this, I can assume that" etc.

For Logical Learners


We need deep examinations of "why?"

Q: Why is this CSS selector being overridden?

A: An ID has a higher specificity than a class.

...but what the heck is specificity?

Effective learning happens step-by-step

Avoid advanced concepts until the basics are down pat.

Match your teaching style with a developer's learning style

Getting a sense for learning preference


Ask questions!

How do you learn best?

Tell me about a time you struggled to learn something.

If you had to learn a new technology, where would you start?


YMMV, but...



"The best predictor of future behavior is past behavior"
-My psychologist girlfriend and other people smarter than me

But, give it a try!

Be Inspirational!



"If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea." 
- Antoine de Saint-Exupery

In other words: encourage curiosity!

Set an example of inspiration.

Be Inspirational, part deux



Have empathy

Encourage an optimistic attitude

Show respect

The best learning happens when solving real problems.



Get new devs in the trenches! 

...even if they aren't ready.

Teaching new devs- When?


If you're in a classroom setting, 
this is easy.

If you're in a job setting, 
finding time to teach new devs
can be difficult.

When then?



Pair Programming

Code Reviews

Stupid Question Sessions

What topics should I prioritize when teaching new developers?

(An incomplete list.)


Critical thinking
Separating Concerns
Resourcefulness
Code reusability


Technical things
Debugging (HTML, CSS, JS)
Tools (debugging, development)
(knowing how they work)

1. Critical Thinking


Teach understanding of the concepts behind any technology used.



What is HTML for?
What is it without CSS?
How should the two work together?

2. Separating Concerns


HTML | CSS | JS


Don't mix structure, style, and functionality

When a developer applies critical thinking to the technologies they use, separating concerns comes more naturally!

3. Resourcefulness / Small Victories

Get new devs using community-developed tools.


small victories | smɔːl ˈvɪktərɪz 
plural noun
The daily ego-boosters that deliver small doses of pleasant-feeling chemicals to your brain when you do something good that makes you want to keep doing that one thing.

For new devs, make it as easy as possible to achieve small victories.

4. Code Reusability


Encourage reusable CSS classes and abstracted JS functionality.

Instead of this:






Do this:

 $('.element').on('click.closeButton', handleCloseButtonClick);
function handleCloseButtonClick(){ // Re-usable! Put your functionality here...}
$('.element').on('click.closeButton', function(){    $('.someDiv').animate({opacity: 0, 'left', '-25px'}, function(){        $('.someDiv').hide().css({'opacity':'1', 'left':'0px'});    });    $('.element').whatever().somethingElse();
}); 

A Few Final Thoughts


New devs are eager to learn and build.  More experienced developers can either be intimidating or inspiring.


Be inspiring!

A new dev's best weapon is his own curiosity. 


Hiring passionate, curious developers goes a long way towards encouraging the learning process.

Thanks.

How to How-to

By Dan Gribbin

How to How-to

  • 5,020