Code Memorization 101

As we learn to code, we have probably all experienced the frustration of stumbling over the basics and feeling like we will never get to the more advanced material because we keep forgetting the simplest things.  How do we remember that HTML command or learn that CSS protocol to make the magic happen on the page a little faster? How do we, like the pros, keep the basics in the forefront of our minds where we need them so we can become pros, too?

Paradigm Shift

I don’t know about you, fellow classmates, but when I signed up for Writing on the Web, I didn’t read the course description.  It simply sounded like a good class to take to be better prepared for the multi-modal-ness that has infused the writing profession. 

From the name of the class, I thought we would be learning some design principles concerning texts or visuals that make for interesting websites; you know, as in, Writing FOR the Web.  I assumed we would be working with template applications like Word Press, Jigsy, or Weebly.  With these apps, we only have to learn how to use a limited set of functions already thought out and laid out for us. 

Despite the ease of these and other Web 2.0 features, the learning curve is high for me because I don’t know much about computers or using these programs.  Coupled with assignment deadlines and never having enough time in the day to explore and experiment at my leisure, thoughts of the above ventures onto the Web were intimidating enough.  

After the first class and a good look at the syllabus, I realized I should have been thinking about the class along the lines of Writing THE Web.  We are going into the Web, Dr. Martin informed us, not just onto it!  As it sank in that we would be learning to write computer code so we could build our own websites (:-0), truly, I was downright nervous.  

As the weeks have progressed in class, though, my interest and fascination for programming languages has become stronger than my intimidation:  I want to go into the Web instead of just onto it; I want to thoroughly learn this skill; I want to be able to code my own work.  And the faster, the better. But how to do that when there is so little time and so much to know?

How the Pros Do(n’t) It

I chose this topic as one of my three blog articles so I could answer these questions.  Because I knew I would have to do tons of research for these articles, I thought it would be a great way to inform and to help us as a class with any “noob” frustrations that were sure to reveal themselves as the class and the code progressed.  I couldn’t think of a better way to find the time to study how veteran coders learn and retain all they know than to think of it as a requirement for class.

However, I was not expecting what I have learned about the subject:  How the pros memorize code is, mostly, they don’t!  Many experienced programmers swear it is not necessary to memorize commands because the more we use them, the more embedded in our long-term memory they will become.  Few, if any, of us will ever be able to memorize all the commands associated with a program; even coders of many years still use “cheat sheets.” 

The majority claim “. . . [i]t is more important to know how to look it up rather than to know the information itself.” (programmers.stackexchange)  They point out that as long as there is a solution to a problem encountered (sometimes there isn’t!) and an accurate programmer resource like Mozilla Developer Network (MDN) or w3schools is referenced, that is enough.  In other words, they preach what our parents always preached when they wanted to annoy us:  “Look it up!”

They blow off the extra time spent and the ribbing we will surely take when other programmers see us using a ref manual every step of the way.  Do it anyway, they say, and be grateful that reference manuals are there to guide us.  It is far more productive to understand the concepts behind the function rather than to recall the function itself.  If we understand why an attribute, a tag, or a selector is used, knowing what to do to create it will come more intuitively, the experts assure. (blog.treehouse)  

Programmers advise against rote memorization for exactly that reason—our goal should be to hone our intuition skills, not memorization skills.  Tom, a developer commenting on an article about the subject of code memorization apps at smashingmagazine.com, says, “That’s not a learning program, but a way to memorize facts.” [Emphasis added.]

Another reason this is a best practice is because the programming languages change so rapidly.  Again, understanding the underlying connections between computers and programming will always serve us better than knowing many commands in just one or two languages.  As we strive to fully understand the concepts of developing, we will save ourselves a lot of new “basics” learning when Ruby goes off her Rails and onto something else.  When she does, or when we get those fabulous tech jobs where Python or PHP is used, knowing the principles that all languages share will allow us to apply them regardless of the fact that we may not yet know the syntax or specifics of these languages.  (This is also when we will be very thankful for the ingrained habit of reaching for our handy-dandy, accurate, reference manuals!)

Programmers think that memorization might have a limited usefulness, but warn that it makes us lazy and being lazy about really learning or collaborating on new methods poses the risk of us getting stuck in a familiar rut, a comfort zone that lacks creativity or curiosity.  It is constantly exposing ourselves to new techniques and then patiently, but consistently, practicing and applying them that pays dividends.  

We should be creating something all the time, whether it is a mistake-ridden first attempt at a new trick or a masterpiece of perfection, it makes no difference.  Just keep coding because that is the only way.  We will notice that our code consequently gets better as we gain more knowledge and hands-on experience.     

Getting heavily involved in open source projects and sharing our own creations with others to receive feedback are also critically important ways to properly and truly learn code and understand the deeper complexities of computer science and programming.

But, If You Insist . . .

Yet, there are times when we as new coders might feel the need to recall more automatically some of the foundational steps in JavaScript, CSS, or another language.  For such a time as this, recording and studying a function or a piece of code in an app like Anki, a stacked repetition program, can help.  The stacked repetition technique is a glamorous way of saying we can make and use flash cards for frequent study.  We no longer have to spend hours hand-writing on index cards, though; applications on our computers and phones have taken some of the labor out of the process.  Anki is perhaps the most well-known, but there are several other programs like it:  Revisy, Supermemo (not free!), and Memrise, to name a few.

Programmers have better strategies than memorization for keeping up with code they want to refer to in the future.  An expert in her own right, our very own Professor Martin has revealed in class that she practices the following and has strongly advised that we should consider doing so, too.  Other seasoned programmers offer the same advice.

  • Keeping a code journal in an editor like Gistbox, “the beautiful way to organize code snippets,” to copy and paste code for future reference and practice is an invaluable learning tool.

  • Evernote invites us to use their “workspace for your life’s work.” Do any of us feel like the code we are working so hard to learn is not our life’s work? Using this or a similar app to record detailed notes while learning is another way to regularly study and review code and methods with which we are trying to get familiar.

  • Much can be learned from looking at the source elements in websites we like to find out how the programmer turned a cool trick we would like to imitate—write it down or copy and paste into a note-taking editor and then go practice it!

  • Just as valuable as studying on our own, open source spaces like CodePen—they bill themselves as “the developer’s playground,” who can resist?—will get us in the know faster and give us experience working with other programmers. CodePen is also an excellent resource for learning by studying what others are doing and how they are doing it.

Conclusion

The best way to learn something is to repeat it and apply it over and over as quickly after being exposed to it as possible.  The more hands-on we are with it and the more we apply the item or information we want to retain in context, and especially, the more we collaborate as we learn, the faster and easier it will happen. 

That is not to say that learning, or even memorizing, code is easy, especially when new to a language or trying to learn a few languages at a time.  But with practice, patience, and a little self-forgiveness, we will be able to recall the proper command when we need it.  If not, we can always do what the pros do and look it up.


Works Cited

http://blog.teamtreehouse.com/retain-code-youre-learning

http://programmers.stackexchange.com/questions/154497/is-it-necessary-to-memorize-code

http://www.smashingmagazine.com/2014/08/mastering-a-programming-language-using-spaced-repetition/

 

Advertisements

Cracking the Code Through Mentoring

“Web Developer, Programmer, Professional Nerd  whatever you want to call the job, it is a deceptively difficult career to get started in. While there are many online resources for learning how to program, there is a steep learning curve between making a program that repeats ‘Hello World’ and working on an application used daily by thousands of users. You can learn a language from a book, but it’s much harder to learn how to be a good citizen of programming.  This is where the concept of mentoring comes in.”   Meeka Gayhart, developer and consultant at Quick Left

Why Do I Need A Mentor?

Technology is now such a major part of our personal and industrial lives that employees with stellar computer skills are indispensable to the marketplace.  Creating new applications is as important as maintaining existing technology, but our nation is not computationally prepared.  Most people who are good with computers consider themselves tech-savvy but, echoing Meeka, Code.org CEO, Hadi Partovi, says that there is a big knowledge difference in knowing how to use Facebook and knowing how to create the next Facebook.  As technology becomes the center of everything we do, computer mentoring programs play an increasingly important role in our lives.

“Finding experienced mentors and peers might be the most important thing you can do if you want to become a great programmer.” Breck Yunit 

Computer mentoring programs seek to offer everything a program like Big Brothers/Big Sisters or City Year offer:  alternatives to risky situations through companionship, accountability, advice on life and career choices, networking, and the sharing of knowledge and resources. Technology mentorship programs add to these benefits the specific goal of increasing interest in the computer keep-calm-and-find-a-mentor_bluesciences and engineering and ensuring that the current shortage of IT graduates does not continue to follow us into the future.

If we do not catch up, experts say, by the year 2020 there could be as many as 1.4 million technology jobs in US cities going unfilled because of an increasing IT “talent void.”  And that’s not just in the hallowed halls of computer engineering labs; the estimate is that nearly 2/3 of all IT jobs will be outside the technology sector.

How Does Mentoring Work?

GirlsCodingLaughing

Learning early and learning together is a powerful combination!

Just like learning to walk and talk, or read, children learn computer code or other IT tasks easier, and retain them more deeply, the earlier they are exposed to them.  Some mentoring programs take advantage of this by getting kids involved as early as kindergarten by inserting computers into the classrooms and curriculum.  This instills the use of computers and how they work as a natural part of growing up, giving those children the decided advantage of understanding computer functions and languages as intuitively as a second dialect.

However, most mentoring programs for kids target those between the ages of 9 to 15, when development is still very flexible.  These programs take on many forms, from online instruction and face-time to after-school meetings and summer camps. Organizations like Girls Who Code and All Star Code place an emphasis on cultivating the interest of minorities, an under-represented demographic in the technology world.  Whether serving our youth or adults already in the workforce, the idea is to pair experienced programmers with those new to computer science.

“. . . The mentors provide an outside perspective which might reinforce or might differ from the instructor’s opinions. That’s really valuable. It’s just not possible for a few instructors to spend much one-on-one time with each student . . . outside mentors are typically more available . . . [i]t’s great for the hiring process; we’ve had students from every class go to work with mentors.”  – Jeff  Casimir (Executive Director of the Turing School of Software and Design and Jumpstart Lab)

Mentorship programs can be as informal as one person in the neighborhood befriending another, or they can be formal programs administered by the local school, community club, or college.  The details of mentor/mentee sessions can vary wildly, depending on factors such as the time allotted for the session and the needs and level of computing of the mentee.  The mentee can expect to gain insight into the field and get constructive criticism and positive feedback from their mentor.

What Can I Expect From Mentoring?

TechRosieTheRiveter

“I left each session feeling excited, motivated, challenged, and ready to take on the world.” This is the sentiment expressed by a mentee, but most mentors would say the same!

In order for the relationship to be beneficial, both parties must be proactive.  The mentor has to be willing to carve time out of her schedule for the mentee and be dedicated to the mentee’s success.  One goal of the mentor is to answer questions or help with troubleshooting some code.  More importantly, though, the mentor should try to provide deep understanding of computer science and problem-solving.

The mentee is expected to work on her own, doing her homework or having a plan for what she would like to accomplish during the session.  Ideally, she will be prepared and attentive during her time with her mentor, asking questions pertaining to computer programming or developing, discussing computer theory, or debugging code.  Sometimes, mentor and mentee meet just to touch base about the circumstances in their lives or to prepare for job interviews.

“For me, [the most important thing to keep in mind while working with a mentor] is to value the other’s person time to the fullest. No one gets paid to be a mentor, and they are doing it because they believe they can help along on your journey. I always gave my full attention during mentoring sessions.” – Persa (Mentee)

Mentors regularly report that they get as much or more than the students out of giving their time and expertise.

“I think the most important realization is that someone is not either a mentee or a mentor. . . . I learned as much from my ‘mentee’ as I taught.”  – Raphael (Mentor)       

Where Can I Find A Mentoring Program?

It is not always easy to find a program despite the many resources that have become available in recent years.   Whether you need one or want to become one, it can be hard to find the time to dedicate to a mentoring program, but don’t let that stop you from joining the community or sharing!  There are still ways to get involved.

MentorMenteeJobSearch

Ralph Smith of Computer Mentors helps Dainnea Leggett navigate Linked In.

Breck Yunit, a relatively new programmer, shares some of the ways he has discovered for getting feedback, learning new things, and finding mentors or job leads.  His strategies include joining Github.com and participating actively on the discussion boards as a learner studying the work of more knowledgeable programmers and as a contributor on open source projects.  This can be intimidating, he admits, but hanging out in the same spaces as veteran developers is one of the best ways to get advice and hands-on experience if you can’t meet with a mentor one-on-one.

LatinoMenMentoring

Sam Verdin and Jesus Nijera at San Diego’s Mission Valley Mall. Both teens credit their HS mentoring program for helping them to have confidence in a bright future. Click the picture to hear their story.

Recruiting friends with similar programming interests in order to learn together is a way to knock ages off the learning curve.  He says, “My best tutors are my peers, people who I took a class or two with in college. We knew each other when computers were a big mystery to us, so we don’t feel embarrassed when we ask questions that may sound dumb.”  Yunit also recommends regularly attending programming or hacker meetups—Meetup.com has an extensive catalogue of meetups around the country—and going to as many conferences as you can.

Jeff and Susannah, executives with Jumpstart Lab and the Turing School of Software and Design, say that if you can’t get involved with a one-on-one mentoring program, don’t discount the value of online mentoring.  Susannah says, “The cool thing about web development mentorship is that, much like the actual work, it can be done successfully from anywhere.”  Technology affords many avenues for successful online mentorship.  Mentors can tutor mentees through Skype or Google Hangouts, for example, just as if they were in the same room.

They also recommend using Excerism.io.  “[It] is an amazing way to work on solving large and small code challenges, submit your responses for review and receive feedback from other programmers. The platform supports an insane quantity of languages and is also open sourced and wonderfully maintained.” They mention Jekyll as a great place to gain experience and meet other programmers, too.

Breck, Jeff, and Susannah all concur that participating in these ways “significantly increases the chance you’ll strike up a relationship with a potential mentor or mentee.”  As Jeff says, “. . . we find that mentors love putting time into new developers if the mentees are willing to put in the time and effort.”

Mentoring Is Where Its At!

Plutarch_mindfirequote (3)

Research over the years has confirmed the results we can plainly see with our own eyes:  “relationships drive learning.”  In other words, mentoring at-risk youth works on every level, from intervention to prevention.  Mentoring can help kids succeed at home, school, and in the workplace.  Having a caring role model can be life-altering to a young mentee and giving back has its rewards.

Having a mentor can be a big boost up for adults, too.  Guidance in navigating those tricky moments in life can mean the difference between pursuing dreams and giving up.

It can also make the difference in whether or not our society is prepared for the continued rush of technology-dependent jobs.  Whether needing a mentor or volunteering to mentor those in need, there is a place for everyone and everyone benefits.


How Do I Find a Mentor?  

Click the picture to find out more, Dedicated One!

DanielSanAndMrMiyagi_onethatworks

http://nypost.com/2009/11/16/greenpoints-borkowsky-waxes-on-and-off-about-karate/

How Do I Become a Mentor?

This picture you click.  

Gigantic-hearted hero, you are!

Air_yoda

http://starwars.wikia.com/wiki/File:Air_yoda.jpg

Mentoring can make a big difference!

Mentoring can make a big difference! Get help or help someone today!

Coding or Foreign Language: Should We Have to Choose?

<!–Coding or Foreign Language:  Should We Have to Choose?–>

The debate surrounding whether computer coding should be incorporated into our school’s language departments or whether it should be categorized as a math and science requirement is not new.  It has shadowed our nation’s technology and education systems since computers went public.  It fades quietly into the background for a few years then comes back as complicated and divisive as ever.

<h3>As American as Apple Pie: Coding Then and Now</h3>

In the 70s and 8os, coding was still paying its dues across much of the globe.  Few outside of the developers’ lab or scientific circles knew to even call coding a language.  Only the more hard-core engineer and hobbyist types had microcomputers in their homes or knew the rules and syntax of the coding languages. 

Silicon Valley and its “rock star” software developers held a different view then than they do today.  In response to the need to train future developers and programmers, they campaigned unsuccessfully for substituting BASIC computer language for natural foreign language credits.

Not many citizens were paying attention to the debate.  However, when Oklahoma allowed computer science to take the place of a foreign language credit in 1991, the question of whether computer code should be on par with natural languages in the classroom exploded into societal consciousness.

Like the developers of the past, today’s 21st century proponents of allowing computer science to replace foreign language credit have many of the same challenges.  Employment, poverty, and lagging global competitiveness have only grown worse over time. 

Lack of hardware and software, internet connections, and knowledgeable instructors are some of the reasons our states are not faring well in the technology arena.  Advocates also hope this strategy will revitalize a waning interest in the computer sciences and increase diversity in the field, a long-standing complaint in the technology sector.  

However, traditional language instruction in the classroom has not been immune to its share of the same problems.  Our nation’s citizens, especially today’s younger generation, suffer from a lack of interest in human languages, too.  Like our computer skills, the US is well behind the rest of our global counterparts in percentage of citizens who speak or understand multiple languages.  In 2010 some 53% of the European population understood another language besides their native tongue, compared to a mere 18% of Americans.  Recently, classrooms suffered another blow to linguistics when, in 2012, a 27 million dollar budget dole-out was given and then cut. 

<title>The Rub</title>

Knowing someone else’s language enables communication among people.  It gives us the ability to work and socialize with those of another culture, both at home and abroad.  This sense of community ensures continued creativity, cooperation, and production; fluency in a language other than our own brings value to us.  Learning and practicing new languages exercises our brains by challenging our critical thinking skills and adaptability. 

The same things are said about computer coding.  Coding meets the definition of a language, stretches our abilities, connects us to others, and creates and shapes our daily actions.  Until now, there has been no hard data to back that up, but recent studies of the brain suggest that the same impulses that one uses to study natural languages are also at play when studying code.

Yet, the natural language department doesn’t want the burden of teaching students to code, the computer community agrees they shouldn’t teach it, and no one is denying that learning a natural language and learning computer science, with its language of coding, are both highly beneficial.  So where is the rub?  Ironically, it comes in the form of a prepositional phrase: in place of.

Supporters of the idea contend that allowing computer science as a language credit in place of a German or Mandarin one is our nation’s most prudent solution to a plethora of problems concerning the need for a computer-literate nation.  It is an unpopular solution, but it is catching on.  Washington State, New Mexico, and Kentucky are among the states to recently finalize legislation that will allow two years of computer science classes to count as foreign language credits.    

However, many feel this is an ineffective and, possibly, a disastrous plan.  Derrick Graham, former House Education Chairman, spoke to the heart of the matter for those opposed when he said, “You should not cut one program that we know is beneficial and important to incorporate another.”  Today’s technology companies and experts agree with Graham.  They champion that computer science fits within the math and science disciplines only and should not be lumped with linguistics.  They advocate teaching our nation’s students computer science as a math requirement in high school or earlier.

 Amy Hirotaka of Code.org, a tech advocacy non-profit, says, “Counting computer science as a foreign language might sound like a creative fix, but it causes major problems . . .”  Many agree.  Richard Barton, co-founder and executive chairman of Zillow Group, an internet real-estate giant, echoes their sentiments when he asks, “Should geometry be substituted for history?  It is almost an apples-and-oranges sort of thing.  They don’t seem sustainable.”

 Twenty five states currently count computer science classes as math or science credits rather than linguistics credits.  They believe this is the best path because our economy is dependent on many areas of math and science to prosper.  It is also the more sensible alternative, they say, because the US lacks the resources to properly re-train in the computer sciences teachers who have certification in other fields. 

Those states join the sciences in declaring that computing should stay in the math and science departments, where its roots are deepest.  They counter that taking away resources and instruction time in French or Spanish to teach code puts an already constrained situation in a tailspin.  

Despite problems with funding and such, learning a natural human language is also a high priority because of its lasting value to society and inclusion of more people.  Michael Cluck, a computer programmer, makes the point that “. . . learning a programming language only allows you to communicate with other programmers; learning to speak another language allows you to speak to all kinds of people.”

Patrick Cox is an editor at Public Radio Initiative (PRI) and the host of PRIs The World in Words podcast.  He succinctly voices the concerns these schools feel towards their counterparts when he says, “It’s an indication of the low value that many Americans—and unfortunately, educators—place on foreign language learning.  No linguist I know buys the argument that a computer programming language is even close to a natural language and should be treated as such.” 

However, the champions for coding as a foreign language credit are proliferating.  Sonali Kohli of The Atlantic Magazine points to the reality of technology today when he says “These students are going to be surrounded by computers—in their pockets, in their offices, in their homes—for the rest of their lives.”  Taking a more all-in attitude, computer scientist J. Paul Gibson believes that “encouraging [coding] proficiency should be a priority for American schools because it is code, not Mandarin, that will be the true lingua franca of the future.”

/* Add Facts and Stats Here */  

Disunity on all fronts of the issue is showing itself as a low domestic and global tech-savvy ranking.  Globally, Scotland, Israel, New Zealand, India, Greece, and South Korea are either already participating in, or working towards, some of the most stringent computer science programs in the world to-date.  What can be done to keep up is the pressing question among US citizens today, despite the fact that some of the world’s leading technology companies are American-born staples in this global industry.

There are nearly 600,000 jobs nationwide that are going unfilled in computing, with about 38,000 computer science graduates from US colleges to fill them.  By 2020, sources are predicting a 22% increase in computer-related jobs, further widening the gap.  Code.org gives the ball-park figure that 60% of all current STEM-related jobs are in the computing field.

Industry needs to take a larger, more active role raising funds and equipping the next generation with these vital 21st century skills; many are doing just that.  Robert Montenegro of bigthink.com is really thinking outside the box when he suggests that “if we as a society prioritize learning outside the classroom . . . perhaps coding could become something of a team effort like Little League.”

While stopping short of taking an official stance on the finer points of the language debate, our representatives are working to close the gap.  In December of last year, the White House announced a partnership with the largest school districts in the nation. 

They are teaming up to change the dismal fact that 90% of our schools do not offer any kind of computer-related classes.  Currently only 1 in 10 high schools nationwide teach at least one form of computer science. This would be encouraging—at least a few schools are teaching some computing, right?—were it not for the reality that those classes are usually not substantial, but something fluffy like basic keyboarding.  

Locally, the world is watching our humble state.  Last March, in an effort to eradicate those embarrassing statistics, Governor Asa Hutchinson signed into law, complete with an unheard-of mega-budget endorsement to implement it, a bill that requires all public and charter high schools in Arkansas to offer classes in computer science as part of the standard curriculum. 

It adds an optional flex credit (a type of elective) for a computer science course that aligns with either a math or science credit.  However, it now also requires the completion of a minimum of one digital learning course to graduate.  

The law is not without its detractors, but this puts Arkansas on the map as a national leader.  Since no other state in the US currently has plans to put such an ambitious program in place, all eyes are on Arkansas to see if this law will set a successful precedent.

{ position: relative; }

The thing that makes this such a sticky and long-running issue is that, frankly, both camps are right.  Learning an additional natural language can promote unity among nations as well as enhance one’s career. Learning a coding language, especially when coupled with an intense study of computer science, offers the same. 

It might be more appropriate and beneficial to equalize the two rather than to replace one with the other.  By working together to implement creative funding solutions and exciting, diverse programs, industry, government officials, and schools can ensure our youth gain needed skills in both areas.

Learn more!