A Student’s Thoughts After (Almost) Two Months of Code Year

It’s been almost two months since Codecademy started Code Year, a year dedicated to teaching people to program. I’ve been keeping up with the courses and here are my thoughts thus far.

Earlier this year, I made a pledge to learn to code in 2012. Not only did I make the pledge, but I’ve kept the pledge, generally completing each weekly course within three to four days after its release.

I really am Codecademy‘s ideal student: an extremely competent non-programmer (did you read about how I made my iPhone app?) with a strong desire to learn to code. I’ve attempted to learn programming numerous times before (investing in books, online classes, and continuing adult education classes) without much success. But I’m willing and ready to put in the time.

Even with all the prior attempt to learn to code, it wasn’t until the Functions section of Codecademy’s classes that coding “clicked.” It all suddenly made sense. I finally understood why every class that I had attempted always recommended prior knowledge of another language. I understood where math and algorithms fit into the equation. I understood how a language’s ability to return 2 + 2 impacted a program.

As with any other skill, the more you learn, the more questions you have and the more you realize you don’t know. Codecademy has been fantastic for opening the door to learning to code (so they have succeeded in their goal) but I still see areas where I want to know more and don’t know where to find answers. Maybe these gaps will be filled as the year progresses, but as a student for two months, I wanted to share what I feel some of my thoughts thus far.

Why am I Learning JavaScript?

Codecademy is teaching me JavaScript. But why am I learning JavaScript? I know that courses teaching other languages are on the way, but why start me with JavaScript and not, say, Python? There are countless articles I’ve read about learning to code by starting with Python. The MIT OpenCourseWare class Introduction to Computer Science and Programming uses Python as the language to teach computer science concepts. When I talked to other coders about my desire to learn application development and mentioned starting with Python, the feedback was largely positive.

So why am I learning JavaScript?

Don’t get me wrong, JavaScript is definitely a language that will be insanely useful. And I’m sure the Codecademy team put a lot of thought into what language to teach first. But I’m not educated enough to know the strengths and weaknesses of different languages yet, so I’m just left confused. As I make my way concurrently through the Google Python Class, I’m left wondering Codecademy’s thought process.

How to Use Code in Real World

I’m following along with all the code lessons and projects. I’m understanding the concepts. But how do I actually use this code on a website? One of the very first things you learn at Codecademy is how to create an alert box or a prompt. If I, say, wanted to add an alert or a prompt to this website, how would I do that? Where would I put JavaScript? How would I call the code? How does that process work?

I understand that teaching real world deployment of code may go beyond the scope (or goals) of the class, but maybe Codecademy can point me in the right direction? Or create a bonus project where basic knowledge of HTML is required (or even briefly explained) and JavaScript is deployed. Or at least link me to an example of basic JavaScript in the real world.

I’m aware that the best way to learn code is to look at other people’s code. I often view the page source of websites I stumble upon to see how they work. I now view every link to a JavaScript project that’s posted to Hacker News. But most of this code is still too advanced for me. And I can sort of see how the language is being used in the real world by viewing the page source of websites using JavaScript, but even a lesson or two explaining exactly what I’m looking at would be extremely helpful.

Learning to Think Like a Programmer

Codecademy is great for walking me, step by step, through the process of building an application. The projects are especially great because functionality is added bit by bit until we have a large and functional project built from smaller bits and steps taught in the lessons. But I feel like too many of the answers are given away in the instructions. If I’m told to wite a function that takes a certain perimeter, I can do that. But if I was given a problem without being told which specific tools to use, how long would it take me to figure out that I need to utilize a function rather than an object, a constructor, a switch, or anything else? This is the difficulty of programming.

The Blackjack challenge was great because it challenged the student to think about which tool to use before actually using the tool. At this point in my studies, there is where I need the most help and practice. If even the instructions were hidden at first, in the same way that hints are hidden, it would give me more of a time to think about how to solve a problem. I can build an object or a class with no real problems; my coding errors usually result from syntactic mistakes and are usually easily caught and fixed. Where I really need help is thinking like a programmer.

My Brain Wants More

I’m always extremely excited for a new lesson on Monday, and then sad on Wednesday when I have no more lessons or projects to complete. I don’t know where to turn for more. Not just more lessons but more puzzles, more math, and more related brain exercises.

I’ve started taking the Google Python class in addition to the Codecademy courses. My girlfriend even humored my inner nerd and got me an Introduction to Algorithms textbook for Valentine’s Day. I’ve also been reading a bit through the MIT book Structure and Interpretation of Computer Programs (the full text is available online!).  But should I really be learning two different languages at this point in my studies? All these extra books and classes leave me feeling very unfocused. I have gone, in just two months, from knowledge of zero computer languages to learning computer science concepts with four different languages. I even attempted to start the Try Ruby course at Code School, but don’t feel ready to throw another language into the mix at this point.

I’m basically stuck, because I want to learn more, but I don’t know where to turn. I want puzzles to solve, algorithms to figure out, and a forum to discuss my questions with other Codecademy students (much like the invaluable Q&A section for each lesson and project). This problem may be solved son since  Codecademy is opening up their system to allow programmers to create new classes. However, for the moment, I have a strong desire to learn more and no direction about where to turn.

Codecademy Spoiled Me

Finally, Codecademy has spoiled me rotten. They walk me through concepts, step by step, and let me physically try each step as I’m learning it. Their website shows which lines in my code have errors. Their Q&A help section is amazing, and helped answer my questions every time.

Other courses, such as the Google Python class, now seem cumbersome with all the pausing and switching back and forth between my video player and the terminal. With my textbooks, it’s easy to think I understand a concept and then be completely lost when it’s time to try it out. Or to get lost trying to search the internet for answers when I’m not even sure what question I should be asking.

Codecademy really is changing the way people interact and learn to code. It really has opened a whole new, exciting world for me and made me want to learn more. I also recognize that Codecademy is still in its infancy, and will only grow and become more feature filled over time.

So, thank you Codecademy, for all you’re doing. I can’t wait for more.

Related Posts:

Comments

  1. Jason says:

    Hi, probably not a good idea to learn more than one language at the same time. More important then the language are the concepts which are the things that can be transplanted from one language to another. I am currently working though Learn Ruby The Hard Way as I currently program in C# and PHP. Perhaps if you want to work on your Javascript skills you could look into learning Javascript from the W3Schools site as a compliment to your Code Academy course? I found it helpful for learning PHP a while back.

    • Dann says:

      I’ll definitely check that out. I know about the W3Schools website, but haven’t actually spent any real time exploring. Thanks for the tip!

  2. Allen says:

    By the way, W3Schools is universally despised and reviled among web programmers, for being out of data and in some places just plain wrong. (If you care about specifics, here’s some: http://w3fools.com/)

    Here’s some actually good docs on web tools, including JS: http://developer.mozilla.org/

  3. Brett says:

    As Jason said, it is probably a better idea to focus on one programming language to start. And since you said you enjoy and understand the JavaScript tutorials a bit more because of the fluidity I would stick with that one. Remember that the Python tutorials will still be there next year!

    I have a suggestion that might seem odd at first. Step away from the computer and write code on paper as you are learning the concepts. This will help you solidify the concepts in your head a little bit more. And as you said, you want to look at it in a real world implementation. Real world developers don’t just dive into a problem with code, they plan. So as you are reading about an Algorithm in your book while waiting for the next installment of JavaScript, try implementing one of the Algorithms using JavaScript.

    Or think of a problem and try to break that problem into clear step by step instructions and then you have yourself an algorithm. Then think how to turn that algorithm into code!

    Hope this helps,
    Brett

    • Dann says:

      Yeah. coding away from the computer is something I had read before and am trying to do more now. I even bought myself a whiteboard, and will practice writing code and my lessons from the day there, and then checking my code on the computer. The temptation to quickly jump on Google for an answer is always quite strong, but I’ve just gotta fight that.

      Thanks for the suggestions!

  4. niourk says:

    Hi

    i’ll try to write in English, although this is not my natural language, sorry for my not perfect english.

    Where I really need help is thinking like a programmer.

    If I had to extract one sentence from this post, i would choose this one.

    I don’t know much more about Codecademy but it seems really cool. However, i would ask : will this course make you become a programmer ? I don’t know if it’s its real purpose, maybe it’s smaller, like assimilating some programming skills while learning a good usefull language. Anyway the “newbie” case is necessary. But if i could give some tracks from my personal experience, i would say that, what really help you to progress is not learning language. It’s about these things :

    – solid acquisition of the basics : as you say you are a competent non-programmer, so you may guess that you need programmer attitude, conceptual horizons, methods, and good practices
    – some deep-rooted concepts in programmer’s mind : how to think about problem-solving, algorithms and data structures, iteration, recursion, proof, complexity …
    – practicing your algorithmic skills : which means to create several algorithms, away from the keyboard first, without any implementation ; and then to implement them with the keyboard in language of your choice
    – labors of Heracles : follow the absurd but satisfying need to confront a series of programming challenges to be solved for the pleasure of solving them and to test your abilities
    – dual benefit of programming challenges : this will improve your knowledge of algorithmic through the mastery of a language (i mean the mastery of philosophy, syntax, and ecosystem of this language)
    – common programming : then we can dig and learn what are the classical patterns and algorithms in software design, and in what circumstances to use them.

    But it would be wrong to stop there : )

    After dealing with abstractions and with implementing automated abstractions, we can finally take a step back and learn what kinds of relationships “the craft of programming” has with computers, networks, systems, and any other areas of computer science.

    Something i learnt when learning to program, it’s that : everthing i said before can be sometimes totally restrictive. I think it’s a good thing to learn computer-science aspects of programming, and the same time dealing with dirty and quick programming. We can see the same thing in drawing skills area : classical theories and strong practices are usefull, but quick and dirty sketches help you to keep on enjoying drawing while you learn to quickly analyze the underlying basic forms of a real model. Computer Science is a means of solving real-world problems : but it doesn’t have to be hard or strict each time.

    So enjoy programming, when you have completed a fundamental experience point of leveling up as a programmer, practice a lot and make little toys or projects that solve daily real world problems you face.

    +

    • Dann says:

      Thanks for the thoughts. And your English is great!

      I’m learning that is really is all about learning how to think. This is one of the reasons I wish I had studied Computer Science in college, just to get in some of the basics, rather than starting from the very beginning now. Because now, all I want to do is build something, and I don’t have the foundation to do that just yet.

      I’m getting closer though. And I know that if I just work on it even a little each day (more if I’m in the mood) I’ll get there. I’m just so excited to be able to build something useful that it feels like learning is going in slow motion (even though I’m quite happy with the pace I’m making).

  5. Matt says:

    They walk me through concepts, step by step, and let me physically try each step as I’m learning it. Their website shows which lines in my code have errors.

    Herein lies the answer to your question concerning “why javascript?” As the browser’s lingua franca, javascript is the perfect language to use for creating interactive applications that can leverage the browser’s inherent capabilities to create debuggable/interactive coding tutorials.

    I wish you the best of luck in your endeavors, and keep at it!

    • Dann says:

      I’ve slowly picked that up as I’ve been learning JavaScript and studying a few other languages. However, I feel like if I was JUST doing the JavaScript classes and hadn’t looked at anything else, this would still be unclear to me. Codecademy doesn’t really explain this that well (yet).

      And I’m still going strong…I’ll get there. Thanks for the encouragement!

  6. VaqueroGalactico says:

    A lot of the advice in these comments is great, but some of it seems a little long-term. For the short term, you’re looking for problems to solve, puzzles to figure out, and people to talk to about learning.
    Here’s a few resources I’d suggest:
    http://www.reddit.com/r/learnprogramming
    For programming questions and some discussion.
    http://www.reddit.com/r/dailyprogrammer
    Gives you a puzzle a day (one easy, one intermediate, one difficult) and solutions and discussion on methods.

    Also, for specific languages, try
    http://www.reddit.com/r/javascript
    and
    http://www.reddit.com/r/python

Leave a Reply

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