1. Coders for Liberty

1.1 Introduction

https://scratch.mit.edu/projects/185446847 Liberty and programming take imagination. It requires a leap of faith to imagine a world with more liberty or write your first program. However, both experiences are an act of discovery. Many people will help you along the way, but it is your journey. Everyone can code. We welcome all levels of skill to our ranks. You do not need to be an expert programmer to be involved. I myself am not an expert coder. We are dedicated to matching the talent in the liberty movement to the needs of the community in computing outreach and mentorship. Our goal is to provide guidance to beginning programmers and support coding clubs and events, and hold our own where the need exists. View our Introductory Presentation on Scratch. You can use this to introduce Coders for Liberty in meetings as well.

1.2 Getting Started

Not sure where to start? Here's a few ways to help Coders for Liberty grow.

1.3 Events

When you hold events, ask everyone to sit near the front and sit close together.  This makes it easier for them to work together. It also makes for better pictures. Start with an icebreaker to help everyone get to know each other. Encourage them to ask each other first and then ask your facilitators. Nothing reinforces what you learn more than teaching someone else. Take lots of pictures. For examples of how to take pictures, check out Judd Weiss's Facebook albums. Make the room look full. Capture people being engaged and having fun. If you want to make a video, you can remix our Scratch project with your photos, music, and slogans. Press Space bar (to clear screen). Then go to file "Record & Export Video" and hit the green flag.  (Just don't hit Space bar while recording)

1.4 Growth Mindset

One thing you will learn in your programming career, it sometimes pays to be lazy.While we don't encourage plagiarism, we encourage collaboration and learning from others. Much of the code you will write to some extent builds on the work of other people. So with that being said, we're going to start referring you to check out materials offered by other people.
1.4.1 Be Different
Read though some of our blog posts about changing your mindset and focusing on success.
1.4.2 With Math I Can
While mathematics is the foundation for computer science, a growth mindset is applicable to all disciplines. We strongly suggest checking out the resources at withmathican.com and taking the growth mindset pledge.
1.4.3 Successful Programmer Mindset
  Now honestly, I would not recommend watching this entire playlist right now. Watch a couple you find interesting. Maybe watch it when you get into a slump in the future and need a pep talk.

1.5 Bruner's Theory of Learning

While Bruner's Theory of Learning is similar to Piaget's Stages of Development, Bruner refutes the concept of readiness in Piaget's theory. Instead Bruner argues that children can learn complex concepts at an early age if they are presented in a way that is more concrete and manipulative. Then children can move to image based representation and symbolic representation. Learners learn best when they go through these stages, enactive, iconic, and symbolic, even later in life. What this means for coding education is that beginner coders can benefit from starting with a manipulative coding environment such as the drag and drop Blockly languages used by Scratch and Code.org. However, it is just as important to ween coders off these languages as they master the basics of computer logic.

1.6 PseudoCode

Before you can code, you have to imagine. You have picture it. What will it do? What will it look like? What steps will it take to make it work? Break it into steps. Then break it into substeps. Then break those substeps into subsubsteps. Just kidding, the libraries handle the subsubsteps. However, you will want to write you own functions as well. So you may be writing some subsubsteps yourself. Actually, I read that you should concentrate on the big picture and the major steps with the pseudocode. One of the best examples of multidisciplinary teaching I ever saw was when my computer science instructor saw the writing process and explained how it applies to coding. First you write an outline, which is the psuedocode. Then you write. Then you rewrite, which is debugging. In both writing and programming, the last step is usually where you do the most work. Doing a good job on the outline really helps avoid major design flaws. It is better to have a good design than try to fix a poorly designed program with a myriad of patches. Think of how you would do it. Then think about how a computer would do it. Then think about how you would explain it to a two-year-old. Get out a piece of paper. Think of a mundane task you do everyday. Now write out the steps and explain it to someone who never did it before.

1.7 Hour of Code

Let's start with an hour of code, just a mere 60 minutes. You can take your pick.
Do you want something fun and not too terribly difficult?
Try the Foos. If you like platform games and Mario Maker, keep playing it. It gets really fun when you unlock the game design. Or try code.org and play with some popular characters.
Or do you want something a bit more free and less instructive?
Try Scratch
Or do you want to skip all that kiddie stuff and start learning a programming language?
I'd say start with Python But you can also start with JavaScript at Codecademy  or Khan Academy. I'm not sure why Codecademy uses JavaScript instead of Python for their hour of code. Maybe I am wrongfully biased toward Python. You can do either one on CodeCombat, if you're into RPGs.

1.8 Where to Next

Again, I am not an expert coder. The training modules that follow are based on my experience and what I felt was the most helpful in developing my understanding of programming processes and enjoyment of coding. I personally believe that programming should begin with manipulative drag and drop environments such as Scratch or Code.org. Learning Scratch is more important if you want to run a coding club or assist a coding club. However, if you are interested in Web or Mobile development and want to focus on those goals, you may want to skip ahead to those sections and check out FreeCodeCamp and other resources that offer job skills. Regardless, the most important coding skill is collaboration, and that is also an important consideration in these training modules. We pick the most collaborative online environment we can for each step of the training modules.

1.9 A Job Well-Done

When you complete a level of training, you will be awarded a Twibbon badge. This will let other Coders who see you on social media know how far you are in the training. That way they will know who to go to to ask questions. Please wear it as a badge of honor. However, please do not just go to the last training and just download the Twibbon badge, that will defeat the whole purpose of the Twibbon badge.   Congratulations you have completed the level 1 training! Onward to level 2!