The Skeptical Methodologist

Software, Rants and Management

So You Want To Learn to Code: Prologue

This series of posts is derived and will continue to be evolved, from my experience mentoring others in learning how to code.

Coding is something that many people are interested in doing – and it’s certainly sexy right now to claim to be learning to code. But out of the plethora of resources out there, which ones are the best? And what does best even mean?

Expert Review of Available Resources

I’ve reviewed many available resources online for you, from the perspective of someone who already knows how to code. I’ve considered them both in terms of “I wish I had this when I was learning!” factor, as well as what I know about education – keeping people interested, engaged, even addicted to learning good habits and skills.

Emphasis on Engineering Skills

In addition to reviewing resources online, I’ve reflected on things I wish I had learned in school and compiled a set of more traditional curricula to teach these things. Often, these skills, which I will generally refer to as ‘software engineering’ skills, revolve around design and quality. Exercises we do online, or even in computer science classes, are often so small that they don’t run afoul of many problems with complex software. They’re often done alone, so they don’t run afoul of the many problems with software written by teams.

Engineering principles are there to help us move from people coding up toy problems, to people who can work together to iteratively build large projects and solve big problems.

A Designed Curriculum

Finally, I’ve coalesced all the above into one linear curriculum – step one, step two, step three – that will give you what you need to learn not only how to code, but also how to code well.

What Do You Need?

First, you’ll need a computer, obviously. The original curriculum was written for someone who came from a Windows background, however, I’ll be attempting to add hints for Mac users as well. That’s the only piece of technology you need to be comfortable with from the start – I’ll start at the very beginning.

The other thing you’ll be required to have is a mentor. While research skills are something to be learned along the way, having someone you can call upon to ask technical questions is invaluable. Moreover, during the later stages of this curriculum, a mentor is required to check and grade your work.

Finding a mentor may be hard. However, if you already know how to code and would like to help others, I encourage you to use this curriculum and be their mentor! Furthermore, if you’ve used this curriculum all the way through, I implore you to become a mentor for someone else. To become a truly expert coder, you need to teach others!

On Python

For all of the beginning portion of the curriculum, I’d highly advise you to do the exercises using the Python programming language.

Python is a very easy language to learn and was designed as a teaching language. It’s got a simple syntax that is easy to not get mixed up in the gotchas and magic of other languages. The Zen of Python says “Explicit is Better than Implicit”, and the language was evolved with that in mind.

To get the most out of Python, find a mentor who’s willing to teach Python – she doesn’t have to be an expert in it, any “dynamic” language (like Ruby, Perl or Lisp) experience would probably make them valuable.

You can ultimately stick with Python your entire career as it’s used in games, devices, mobile apps, the web, and backend supporting programs. It’s particularly popular in ‘big data’ and ‘machine learning’ circles. I wouldn’t advise this, though, as the best Python programmers got that way by learning other languages as well, though we’re not going to do that anytime soon.

A Note on Pedagogy

I think many CS degree programs can be faulted by focusing too much on theory and not enough on practice.

The practice of programming, of building complex things in teams, is what coders do day in and day out. We don’t talk about finite state machines or discrete algebra, and you don’t need to know how those things work to be an accomplished coder.

Often theory can take away time that a student needs to practice! You can often tell productive programmers from unproductive ones based solely on the number of hours they’ve spent coding before reaching you – especially coding problems that are new to them or require them to push themselves. Understanding how to encode binary, quaternions or regular grammars has never made anyone a more productive programmer.

The worst aspect of the focus on theory, though, is that it turns people off of theory! Theory is beautiful and elegant, and – assuming you already have a solid handle on skills – it can lead you to designs you would never have built on your own that are both orders of magnitude more performant and maintainable. But only if you attempt to apply the theory! Unfortunately, so much theory is pushed on students too early that they memorize it to pass a test and promptly forget it. They don’t see how useful it is because they’re still struggling to get an intuitive grasp of programming in the first place.

Unfortunately, so much theory is pushed on students too early that they memorize it to pass a test and promptly forget it. They don’t see how useful it is because they’re still struggling to get an intuitive grasp of programming in the first place.

My advice – both to students of this curriculum and to mentors – is focus on the practice of programming from the outset. Learn how to code, then learn how to code well, and then you’ll find yourself with dozens if not hundreds of questions that will be answered in your discrete algebra textbook. Until then, just do the fun part – because theory can be fun too, but only when you have practice in mind.

Without Further Ado…

I’ll borrow from the Dreyfus Model of Skill Acquisition to break apart the larger linear curriculum into stages – Novice, Advanced Beginner, and Competency. If this is successful, I’ll attempt to provide guidance for the Proficient and Expert levels.

Enjoy!

The Table of Contents of the Curriculum will be updated below, so keep this page bookmarked!

SYWTLTC: Novice Chapter 1: Building Intuition

SYWTLTC: Novice Chapter 2: Effective Hacking

SYWTLTC: Advanced Beginner (AB) Chapter 1: The Command Line

SYWTLTC: (AB) Chapter 2: Your Development Environment

SYWTLTC: (AB) Chapter 3.1 Quality: Test-Driven Design

SYWTLTC: (AB) Chapter 3.2 Quality: Static Analysis

SYWTLTC: (AB) Chapter 3.3 Quality: Assertions

SYWTLTC: (AB) Chapter 3.4 Quality: Collaboration

SYWTLTC: (AB) Chapter 3.5 Quality: Type Checking

SYWTLTC: Appendix A: Object-Oriented Primer

 

September 20, 2016 - Posted by | So You Want To Learn To Code

6 Comments »

  1. […] I’m creating a curriculum to organize and guide you through the plethora of online resources a… […]

    Pingback by SYWTLTC: Novice « The Skeptical Methodologist | September 20, 2016 | Reply

  2. […] Go here if you want the prolog and table of contents to the SYWTLTC series! […]

    Pingback by SYWTLTC: Novice Chapter 2: Effective Hacking « The Skeptical Methodologist | November 14, 2016 | Reply

  3. […] Go here if you want the prolog and table of contents to the SYWTLTC series! This is the start of the Advanced Beginner series, which is arranged as a series of chapters that will take your skills you’ve learned from the Novice portion and start to apply them to real-world problems – including tools and approaches coders must apply that are not simply code. Please continue to intermix further Code Combat levels as you tackle these chapters, pushing at the pace of a few levels per chapter. If you are at least on the Desert stage and have found about 10 levels or so to be lacking challenge/easy, you can move on from Code Combat. You should find that as you tackle other online methods as part of this curriculum, as well as these chapters, that going back to Code Combat will be easier and easier – levels should begin to seem almost trivial as you get more experience. This first chapter will be about the basics of the command line of the computer you are on, and will build skills we’ll need to draw upon to get other toolsets installed for you to practice with. The only requirement from here on out beyond the usual computer and mentor is that the computer you are on may need administrator access – you’ll need to be able to install things. Whether or not you need it will probably rear its ugly head as we move forward, as your operating system – either OSX or Windows – is going to start complaining. These chapters are structured usually as brief explanations from me on what we’re talking about and why it’s important to you, interspersed with text, video and other exercises around the subject I’ve found online. At the end, there will always be a challenge – tasks you need to perform to move on to the next chapter. For some of these tasks, you’ll need to set up some sort of screen share with your mentor – or get together for a live “pairing” session – while others will be questions you’ll have to answer for your mentor or code you’ll need them to review. When you’re ready for this chapter’s challenge, contact your mentor and set up a time. Below, chose either the Windows Command line or Mac OSX Command Line instructions to go through, depending on what kind of computer you have. […]

    Pingback by SYWTLTC: Advanced Beginner (AB) Chapter 1: The Command Line « The Skeptical Methodologist | November 14, 2016 | Reply

  4. […] Go here if you want the prolog and table of contents to the SYWTLTC series! […]

    Pingback by SYWTLTC: (AB) Chapter 2: Your Development Environment « The Skeptical Methodologist | November 14, 2016 | Reply

  5. […] Go here if you want the prolog and table of contents to the SYWTLTC series! […]

    Pingback by SYWTLTC: (AB) Chapter 3.1 Quality: Test Driven Design « The Skeptical Methodologist | November 14, 2016 | Reply

  6. […] Go here if you want the prolog and table of contents to the SYWTLTC series! […]

    Pingback by SYWTLTC: (AB) Chapter 3.2 : Static Analysis « The Skeptical Methodologist | November 14, 2016 | Reply


Leave a reply to SYWTLTC: Advanced Beginner (AB) Chapter 1: The Command Line « The Skeptical Methodologist Cancel reply