“A Highly Opinionated & Abbreviated Guide for Taking the First Steps to Learn a Bit of Code”

Why Write this?

Someone asked me for help figuring out where to start regarding learning how to code today. Fundamentally, that’s why I’m writing this. I figured I’d might as well put it in a post and send her the link.

Additionally, the results you get from googling “best ways to learn how to code” can be a bit daunting. They tend to be long lists of 10 to 50 different websites or books with only a short description about each. That’s not very useful. I know from personal experience figuring out how and where to start can lead to decision paralysis due to the large number of options.

Warning!

I’m still very much a newbie. Don’t put too much trust in anything I say. Some trust is okay, but let’s not go overboard.

Who am I Writing for?

My target audience is someone with no knowledge taking their first steps. My goal is to help them avoid decision paralysis and simply start. Simply starting has a lot of value as it gets you to your first initial understanding of how exactly coding works and to the point where you can say, “I built that”. Once you have a tiny bit of experience under your belt, it will be a lot easier to decide how much you like coding, easier to pick what you want to learn, and more obvious how you want to learn it.

What am I Going to Cover?

What language should you learn?

  • I’m not going to describe the merits of every language. I’m going to focus on the most common languages and the easier languages to learn.

How should you go about learning?

  • I’m not going to give a big list of 30 or a 100 options for different websites and books to use. Google will give you lots of those. I’m going to describe the categories of different learning resources.

What Languages Should You Learn?

  If you want to build a website or put things on a website:

  1. Sign up for a free web-builder like Weebly. Put something online quickly without coding knowledge to get some initial stoke.
  2. Learn HTML, CSS, JavaScript – in that order. Use them to make a better website with your free web-builder.
  3. Build simple web pages entirely from scratch without a web builder to hold your hand.
  4. Learn the additional languages and libraries listed on W3 schools.

  If you want to work with data:

  • Python! Python is what a lot of scientists and academics use. It is also relatively easy to learn.
  • R is another good choice and very common in the social sciences.
  • Alternatively, if you’re interested in data visualization and not data analysis, then JavaScript.

  If you want to make games:

  • Probably python.
    • Check out Pygame.
    • Other languages are used in professional gaming, but python is a better place to start in terms of learning resources, ease of learning it, and lots of free example code you can reuse.
    • If you want to get very serious about games very quick, especially games with amazing graphics or in virtual reality, you might want to jump straight into Unity.

  If you want to use a computer language that runs inside another piece of software, likely at work:

  • Learn that language. It will  be faster to learn that language directly than learn another one and then switch. Get good at one before you diversify too much is repeated advice I see everywhere.

 If you have no idea or have a small child to learn with you / help you when you get stuck:

  • Code.org   Start learning code concepts by playing games (Star Wars!) and moving around instruction blocks. Build up to writing actual code in the JavaScript language.


For a longer and more visual version of this discussion, check out this awesome infographic for what language to learn at carlcheo.com. In addition to providing a flow-diagram for what deciding what language to learn, it describes common computer languages in terms of Lord of the Rings character traits. While you’re there, browse around a little. The site has powerfully communicative articles and infographics for newbies that explain a lot of things that get missed elsewhere. 



 

What Are Your Options for Learning to Code?

You have a huge variety of options. In fact, you probably have more options for learning code than most any subject out there. Instead of listing the websites and schools, I’m going to list the categories of different learning options. For some reason this approach is less common in google results.

Conventional Educational Institution

  • CON = Takes a long time
  • CON = Expensive
  • PRO = Learn a lot of the theoretical computer science fundamentals.
  • PRO = Useful for getting a job
  • SUMMARY = Not what you should do if you’re just starting out as we assumed for this post.
  • EXAMPLE = Any four-year or two-year university with a computer science department.

Code Boot Camp

  • CON = Expensive (thousands of dollars)
  • CON = As this is a relatively new concept, it is uncertain how it impacts your long-term job prospects.
  • CON = These are often start-ups and can have related growing pains and quality problems. Research!
  • PRO = Less time than conventional educational institutions
  • PRO = Cram a lot of information into your head in a relatively short amount of time.
  • PRO = Useful for getting a job
  • SUMMARY = Not what you should do if you’re just starting out as we assumed for this post.
  • EXAMPLE = The Iron Yard

MOOC = Massive Open Online Classes. (may or may not have certification & fixed schedule)

  • PRO = Learn from awesome professors in traditional lecture style without paying Harvard tuition.
  • PRO = Usually has additional resources not available in the website learning options below, like discussion boards, tests that are more than monkey-see monkey-do, and advanced final products to show off (see some of my early python posts)
  • PRO = Typically, you’ll be coding in the browser, which means you don’t have to worry about which version of python you have, how to set paths, or what the terminal is and how it differs from the PowerShell in Windows. This might not be true if the MOOC consists only of videos.
  • CON/PRO = Typically 4 – 12 weeks & 3-10 hours per week.
  • CON/PRO = If the class has fixed test and project deadlines, you can’t put it off for two weeks to deal with other stuff. On the other hand, deadlines make it more likely you’ll maintain forward momentum even if you have competing priorities. Some classes have deadlines with lots of tardy days to use up, which gives you best of both worlds.
  • CON/PRO = Means something on your resume, not a lot, but a little more with certification
  • SUMMARY = Can be great option if you like the traditional lecture learning methodology, want some personal interaction via discussion boards, want at least a taste of computer science concepts, and are willing to commit to 3-8 hours a week for 5-12+ weeks. Whether or not it has a fixed schedule can be critical for whether it matches your needs.
  • EXAMPLE = An Introduction to Interactive Programming in Python. By Rice Univ. C.S. dept. on Coursera.com or Learn to Design and Create Websites by Univ. Michigan on Coursera.com

Free or Pay Website for Learning Code (may have little balloons that fall when you do good)

  • PRO = Short. Individual course segments can often be completed in a number of hours.
  • PRO = Typically, you’ll be coding in the browser, which means you don’t have to worry about which version of python you have, how to set paths, or what the terminal is and how it differs from the PowerShell in Windows.
  • PRO = Lots of silly things, great graphics, and quick immediate goals to keep you engaged and learning.
  • CON = Doesn’t really help your resume. May not teach you all you need to know, depending on your needs.
  • CON = No discussion board if you get stuck. Some have annoying mistakes in them.
  • SUMMARY = If you like monkey see and monkey do learning without in-depth discussion of concepts, this is perfect for you. If you want to try out coding in a relatively short amount of time, this is also good. If you want a more serious approach, maybe you skip this and go to one of the options above, or maybe you start here and quickly move to book or MOOC.
  • EXAMPLE: Codecademy.

Children’s Free Website for Learning Code

  • PRO/CON = Similar to above, but typically even less time to complete classes / segments.
  • SUMMARY = Purposely built to be short, fun, cute, and put you on a learning progression with lots of little steps. Good if you want to do this with your kid. If you don’t know how interested you’ll be in coding and only want to spend <2 hours to find out, this is perhaps the option for you.
  • EXAMPLE: Code.org

Online Book or Physical Book

  • PRO = You get a nice book out of it. Reference manuals are very useful for coding. You now have one.
  • PRO = Step by step learning with a clear forward path to follow is very appealing for some people.
  • PRO = Work at your own pace. You can even skip ahead!
  • CON= You’ll likely have to download and install things. You’ll have to figure out how to use the terminal or command prompt to execute code and move files around. You’ll have to figure all this stuff out eventually, but, with learning out of a book, you have to figure it at the same time as you’re figuring out the coding part.
  • SUMMARY = I’m going to be opinionated and say I don’t recommend just using a book as a learning method unless you  have some experience. Too much installation and figuring out things in the terminal or command prompt before you actually get to learn what you want to learn. Go the book method in tandem with another option or after you’ve done another option.
  • EXAMPLE: Learn Python The Hard Way, by Zed Shaw or HTML and CSS: Design and Build Websites by John Puckett

Mentor + Any of the Above

  • PRO =  Mentors can help you figure out how to address not knowing stuff. How big a deal is not knowing something? What should you focus on learning? Why does this not work, and google won’t help me.
  • EXAMPLE = More experienced people on the internet or in person, experienced people at work, that other guy at the hackathon, people on stack overflow, computer science meet-ups, random coding boot camp alumni you email for more information, anyone who knows anything relevant that will drink beer or coffee with you, etc.

How did I get started?

My interest in coding resulted from my activities as a geologist. Although most of my time was spent on purpose-built software, sometimes I needed to do things that didn’t quite fit into standard software models or were annoyingly time intensive. I also ran up against memory limits in Excel on large datasets. Learning to code presented a way around these hurdles.

Once I put aside time for learning to write code in a more series manner, and not just editing example snippets run inside ArcGIS and other software packages, I found a set of classes taught by Rice Professors and offered online through Coursera to be very helpful. Course syllabi are available at this link and this link. More general information about this sequence of python courses can be found here.

I took:

An Introduction to Interactive Programming in Python (Part 1) . Certificate earned on April 10, 2015

An Introduction to Interactive Programming in Python (Part 2). Certificate earned on May 14, 2015

Principles of Computing (Part 1) by Rice University on Coursera. Certificate earned on October 17, 2015


Update: Since I first wrote this, I’ve talked to many more people and been responsible for directing interns to learning resources. For people that want to spend a minimum amount of time to learn just a little, I’ve been directing them to resources that fall in the “Free or Pay Website for Learning Code” category. Additional learning resources that have worked well are:  code.org , w3schools.com and codeschool.com . Those options present a zero setup (everything can be run within their website) way to quickly dive-in.

 

 

 

 


Please feel free to leave any questions or comments via the comment box below!


0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.