Women Who Code Atlanta

September 9, 2014

Announcements

  • Connect JS WIT Scholarship
  • Atlanta Javascript Meetup: Js Fundamentals
  • Atlanta Code Camp
  • Rails Girls Athens Fall Workshop
  • Women's iOS Developer's Group:  Intro to iOS Development with Swift

Connect JS WIT Scholarship

JS Fundamentals:  

Scope and Closures

  • beginner friendly talk and QA session
  • hosted by the Atlanta JavaScript Meetup on 9/15/2014
  • presented by Chris Aquino
    • will be helping with our upcoming JavaScript Study Group

Atlanta Code Camp

Rails Girls Athens

Fall Workshop

  • Will be held October 10 - 11, 2014 
  • Bring Laptop; No prior experience required
  • Register here

Intro to iOS Development with Swift

  • hosted by the Women's iOS Developer Group
  • October 21, 2014
  • RSVP here

Other Announcements?

How to Think Like a Programmer

Being a Programmer

IS        

KNOWLEDGE

    NOT

Being a Programmer is

A STATE OF MIND

Nebulous Destination.

More than one right way.

Not About Knowing Everything

CODE IS...A STORY!

 

Code explains something 

 

In such detail, a machine can do it

(And other humans can understand it)

 

Requires creativity, syntax, and strategy

 

Separated into pieces to enable reuse & maintenance

LEARNING A LANGUAGE

THOUGHT => ENGLISH

LEARNING TO CODE

THOUGHT => ENGLISH => CODE

CODING

THOUGHT => CODE

LINES = SENTENCES

 

An operation, or small set of operations

 

Actions like...

 

Declare a new variable

Read a variable

Write a variable

Apply an operand between variables

Call a function

BLOCKS = PARAGRAPHS

FUNCTION

A reusable set of instructions

 

CONDITIONALS

Block modifier that may cause a block to be skipped

 

LOOPS

Block modifier that may cause a block to repeat

 

Programming can be hard, but also rewarding

  • Jobs Aplenty
    • By 2020, there will be 1,000,000 more jobs in the computer science field than students to fill them
  • Flexibility
    • Work hours, Telecommuting, Generous Vacation
  • Fame & (Relative) Fortune
  • The challenge is its own reward.

Elements of a Developer Mindset

  • Be patient with yourself and the process.
  • Always keep in mind why you're doing what you're doing.
  • Remind yourself that everyone needs help.  Reach out!
  • Sharing is caring.
  • Growth mindset vs Fixed Mindset

Solving Problems => Creatively

!=

Skills

  • Technologies, Artifacts
  • Devices
  • Programs
  • Languages/ Environments
  • Products

 

Useful, but too specific, Dates quickly

Disciplines

  • Ideas
  • Principles
  • Laws
  • Techniques
  • Methods

 

Broadly applicable, Dates Slowly

 

 

 

How Students Are Taught

  • Given lots of information about a languages syntax and what different instructions do
  • Shown lots of sample code
  • Shown how to read programs
  • Told to go program

Syntax-first Approach

What's wrong with the

Syntax-first Approach?

  • Students "get" code, but don't "get" how to code
  • The "Blank Screen" Problem
  • Driving in Circles
    • Programming by trial and error, with no real strategy

Problem Solving is the missing link

A problem solving approach to learning programming

  • Learn syntax elements slowly
  • Learn to combine a small number of elements before learning a large number of elements

 

Learning language elements more slowly, means you can develop your problem solving skills more quickly.

 

The Problem Solving Approach

Programming Knowledge

Programming Knowledge

Ability to Apply

Ability to Apply

Syntax-First

Problem-Solving

Learning to Combine Language Elements

  • Helps you with programs that use those particular language elements
  • Builds a "cook book" of programs for later use
  • Helps you with all programs, because you develop problem solving strategies

Benefits of Making Up Your Own Problems

  • Learn the utility of each construct through exploration
  • Keep Asking "What can I do with this?"
  • Try to develop guidelines about when you prefer one approach over another
    • For loop vs While loop
  • Always have a plan
  • Restate the problem
  • Divide the problem
  • Start with what you know

Basic Techniques for Solving Problems

  • Reduce the problem
  • Look for Similarities
  • Experiment
  • Don't Get Frustrated

Next Steps for Solving Problems

  • Data Structures
    • Present strategies for organizing information in programs
  • Algorithms
    • an input, a defined set of steps, an output
  • Design Patterns
    • Reusable concept for structuring code
      • A writing "cliche" for code

Language Agnostic

Books for Further Reading

Other Resources

Presentation Sources

  • https://www.youtube.com/user/vantonspraul
  • http://brikis98.blogspot.com/2014/05/dont-learn-to-code-learn-to-think.html
  • http://slides.com/erikralston/how-to-think-programmer-introduction/#/
  • http://happybearsoftware.com/how-learning-data-structures-and-algorithms-makes-you-a-better-developer.html
  • http://skillcrush.com/2014/06/26/the-developer-mindset/
  • http://blog.andrewshell.org/developers-and-the-growth-mindset/