A New Codecademy
codecademy.com
codecademy.com
Sure, you are now actually building a project, but still only in this cute little console. What is a text editor? What is hosting? What does DNS mean? How can I make what I typed into my text editor show up on mydomain.com? What do I actually do with all of this HTML, CSS and JavaScript you're teaching me how to write?
"Let's build the airbnb website" is infinitely better than "this is a 'for loop in JavaScript,'" but it still doesn't solve the main problem of understanding how I can build technology. Solve that problem, and the motivation to learn to program goes up 10x, because all of the sudden it's real and it's live. Stop teaching us how to dick around in apps you built and teach us how to make something real.
Then teach them how to code the files.
Maybe after that something like a whole MEAN/LAMP stack development course. Personally I think the technologies used in MEAN are easier to understand and you can do a lot of neat things with angular in just a few lines of code. An interactive angular course would be really awesome. But people definitely need to know how to interact with a database. What would be nice would be to actually learn MEAN and LAMP side by side to actually understand the differences, but I guess that's diverging from the 'beginner friendly' approach.
would love to hear your feedback when this goes live!
Got a more appropriate area for bug reports?
It is like teaching someone to read and write: you teach the letters, how they sound, how they go together to form words and then phrases. And how to construct paragraphs and essays and etc. But you somehow forget to teach that in order to write you need a paper and a pencil. And if you want something more permanent you use a pen!
This is how I feel with the little knowledge about programming that I have. If someone sets everything up for me I can write the functions and they will perform as expected. But if someone give me a new computer I have almost no idea where to start.
I would spend about 4 hours coding the software to perform, let's say, a very basic ecommerce website, with menu, product pages, payment integration (with paypal) and stuff. But I would spent easy more than 10 hours to know where to upload the file, with which name, where to host, how to host, how to test in my computer, how to put in production, how to integrate it with a domain, etc.
Some context: I spent 4 months this year learning how to code using a lot Treehouse and Codecademy, reading Heads First C# and then Google+StackOverflown. With all this help and a lot more from Visual Studio I was able to create a complete, functional web app hosted at Azure. But I can't say I can code, there are a few basic things I just don't understand. For example, I can't learn how to create a webapp based on a API. The basic rules of how ask for information from an API I understand, but I have no idea where to put it to make it work.
Earlier this year I created a free course called the New Year of Coding [1] with the goal of helping anyone learn what they're doing and, more importantly, why things function in the way they do.
I'm attempting to tackle the problem at a larger scale with my upcoming book, Your First Web App [2], which will walk anyone through the entire process of creating a web app, from start to finish. The goal is for someone to be able to understand all of the pieces, starting with the text editor, the development environment, etc., and gradually working into the actual development, all the way explaining how everything fits together.
It's proven to be a great deal of work so far, but it sure is rewarding getting the "Hey! This is was super helpful! Thanks!" messages.
These concepts/tools are important to learn eventually, but are not the core of building software. One of the great things about Codecademy is that it abstracts away all of the yak-shaving/ops work so you can dive into what is actually interesting. Obviously this approach can only take you so far, but from my experience[1], I can't think of anything that would motivate a prospective learner less than banging his/her head against the command line, googling cryptic error stack traces, for X hours just trying to get a dev environment setup, just to (finally) write your first line of code.
[1] Quick background: I'm a full time developer, completely self-taught (did the HTML/CSS, and basic JS track on Codecademy back in early 2012 before diving into The Hard Way series and Michael Hartl's book)
Some people call this stuff "system administration," "operations," or what-have-you. To me though, it's all programming. It's a decidedly more annoying and less glamorous aspect of programming. But it's so essential.
As the parent commenter said, HTML, CSS, and JS are useless without a place for them to live. That place consists of a properly configured Unix server, pointed to by a domain name. It takes a while to understand how it all works together. But at the very least, you need to be able to cargo cult it just to get your project off the ground.
Deploying computer programs is, strictly speaking, separate from writing computer programs. With that said, it's certainly a skill that could be better covered by introductory texts.
Let's not get loose with our terminology though.
It's all online and here are some of the lessons we teach: The command line, Setting up Github, Going online with Heroku, Registering a custom domain.
The idea is to show people how to build a simple Pinterest-like photosharing web app. We're going to be expanding that to include other web apps (like Airbnb and Reddit).
If you're interested @austenallred I can give you access and I'd love to hear your feedback. Email mattan at onemonth dot com
I agree, it would be infinitely useful to have a lesson on: "Okay this is where programming Python fits into the architecture of a website. Now that you're oriented in the world, let's learn how to program in Python."
I teach an Intro to Rails course with HackerYou in Toronto, and we certainly cover the web in general, how requests work and are interpreted by a browser, how to use a text editor, programming concepts in general, git, etc. I don't really think we're particularly unique in that regard, either.
I won't say we're absolutely comprehensive on all of these topics, but if the bar for "making a Rails site work" is that you've read SICP, configured your own Unix server, and can implement something in raw HTTP, we're essentially giving up on the notion of programming as something novices can do at all.
I think you're right not be comprehensive, trying to dig deep would be ridiculous. I think the parent is specifically looking to address the problem of teaching an abstract concept (programming, often through algorithms, data structures, object orientation, all extremely abstract things), which can be aided by some orientation of where the topics in the class reside in the larger concrete, applied space.
I remember when I was sitting in my first object-oriented programming class trying to figure out what all of the "objects" and "instances" were that the instructor was talking about. I didn't have the mental model to associate the groupings of code snippets on my page to "things" that could be manipulated and could "communicate" with each other. Once I was able to build that model, I was able to grok the concept of object composition, etc.
Years later after designing a few systems, I am able to construct large mental models and know where what I'm looking at at a given time (whether that be a database, business logic snippet, or HTML elements) lives in relation to the rest of the system.
It's far from essential to learning "how to program procedural code", but it's essential in building entire things, or even pieces that touch other parts of a whole.
It's an interesting balance between architecting an entire technology web app and understanding a programming language on a meta level. Most people learn from the ground up - i.e. syntax first, then simple commands..etc. No one starts by building the practical stuff and getting it to work before understanding the details.
I finally built an online food ordering site only after sitting down...and building an online food ordering site. I didn't try to learn Ruby, or Python, or Javascript. I just brute forced my way to getting a functional app. I googled a lot, trolled stackoverflow, debugged errors, nagged people for help, and ended up hacking together a Rails app.
Learning to build apps is different than learning to code. So why are we still learning it the same way?
- Susie
Founder at https://baserails.com
There is so, so much more a beginner should be exposed to than for loops and cleverly slicing lists.
Edit: For those asking for books/resources, here is what I would suggest to someone just starting out. I chose python for myself because I wanted a language with broad potential (ie web development to statistical and biological computation). It's absolutely critical that you complete every exercise provided.
Programming basics:
- How to Think Like A Computer Scientist - http://www.greenteapress.com/thinkpython/thinkpython.html
- Think Complexity - http://greenteapress.com/complexity/thinkcomplexity.pdf
- SICP - http://mitpress.mit.edu/sicp/
---
Web/Development basics:
- Team Treehouse modules on git, shell commands, DNS, etc -http://teamtreehouse.com
- How Does The Internet Work? - http://www.stanford.edu/class/msande91si/www-spr04/readings/...
- Udacity Web Dev course - https://www.udacity.com/course/cs253
---
Django basics:
- Getting Started with Django - http://gettingstartedwithdjango.com
- Two Scoops of Django - http://twoscoopspress.org/products/two-scoops-of-django-1-6
http://interactivepython.org/courselib/static/thinkcspy/inde...
For example the API stuff on Codecademy doesn't go into the full picture of how you build this into page. I have struggled mightily with understanding how the whole process works. I would love to find a service that walks me through building a page in Flask, hosting it and integrating it into APIs of popular services.
E.g You break your problem in pieces and start making something. Wanna make a music player? Well how do you play music oh theres a library that you call song.play, cool. How do you read the tags? How do you get the files? Isnt a playlist just an array? And so on...
This is the approach that worked for me.
Granted, I'd recommend doing a L*THW or something before going to SICP, but you don't need a ton of programming experience to get something out of it.
Would you be able to share the titles of some of these books?
The first time I actually completed a project was when I built the website for my small business, cpustorage.com. I built it by starting with a Wordpress theme and continually tinkering with the HTML and CSS until I got the site where I wanted it to be, using Google to solve problems as I ran into them. This process resulted in more learning, it was more fulfilling and fun, and it actually led to the launch of a business.
OT: Reminds me of when I learnt I'd been reading deprecated as depreciated for years, until seeing: http://english.stackexchange.com/questions/45295/why-is-ther...
[1] - http://www.builtinchicago.org/blog/code-academy-evolves-star...
As for me, Codecademy helped me to understand Python basics and I've built a web-scraper. Now I'm learning Django.
Codecademy is of great use for developing countries -- it's text-based and light-weight, meaning it's the best choice for mobile-connectivity-only learners:
-- you pay less for data usage. (Mobile data is getting cheaper, but to take Udacity's CS 101 I had to spend something around $100 for data packages).
-- you can go through its lessons using USB-dongle even with EDGE/GPRS (2G) connectivity. In our country 3G is available only to 50% of the population, the other half of it use 2G.
It's interesting, how popular is Codecademy in developing countries? What's the portion of the learners coming from African or exUSSR states?
I've started writing a series of posts about the fundamentals of full-stack development. It came out of what I have been explaining some students I have been mentoring recently.
http://daemon.co.za/2014/04/introduction-fullstack-fundament...
My goal is to explain the different layers, the concepts at play in them, and how they interact with each other.
"It's a roadmap, not a recipe book". The format is going to end up being similar to this post about microservices I built.
http://wayfinder.co/pathways/53536427f7040a11002ae407/a-fiel...
This is the outline so far : http://i.imgur.com/qsGqFFk.png
I was looking for quality learning material on front-end deveopment last week and came across this site: https://noisebridge.net/wiki/Front-end_Web_Development Jeffrey Faden is teaching that free class starting 2012. Videos available on YouTube, links can be found on his website. http://jeffreyatw.com
bookmarked.
1) Put the courses into perspective as part of the onboarding process. Why do I need to learn HTML, CSS, JS, or Python? Most people who want to learn have no clue how everything fits together. If you can provide a high level guide as to how and why someone should work through specific codecademy courses you will likely increase satisfaction and completion of courses (just a hypothesis, but this is the most common criticism I hear).
2) I wish codecademy would cover database basics. What is SQL? How should you think about storing data? Until I started researching outside of Codecademy it hadn't even occurred to me that storing and structuring data was a huge part of creating useful applications (I was totally nontechnical). This is the largest hole in terms of actual content.
3) Your classes are already great at teaching newbies the syntax. The big missing component (as some have pointed out), is turning this syntax into real world solutions for real world problems. How do you get past this? You have to break into an area that you aren't comfortable in: Content Production. Unless you can come up with a way to show people how to create and run scripts on their local computer (or maybe a remote server?) through the browser this will continue to be a pitfall of the Codecademy experience. There is probably the potential for you to create some new software that does this (maybe a desktop app), but if you took a codeschool or treehouse approach, only for this stage of the learning, you would be able to truly offer an end to end solution. In your case video content scales just as well as the software. If you were to combine your superior browser interface with high quality video production you would be in a fantastic position to win the "Learn to code online" market. This sets you up with not only a differentiated product offering (your interface is the best), but a future revenue stream. Both of the aforementioned companies are making some serious cash... And thats without even mentioned the real juggernaut (Lynda).
Overall I love the product and think there is a lot of potential. If you have any questions or any of my points require clarification please feel free to shoot me an email (in profile).
Best of luck!
The issue at the moment seems to be that Codecademy focuses on syntax rather than problem solving. For example most of the JS exercises, if I remember correctly, focus on the command line rather than effect on the DOM (the vast use case).
Aside from that, the environment doesn't really give a great feel for how these languages map to their hardware counterparts.
For example Python runs on a server but how does one get a python instance running on a server? How does one even acquire as server? What IS a server?
HTML/CSS/JS run partly on a server and mostly in the DOM. What is the nature of when to run what where and why?
These questions are answered by running through a full stack product problem like starting a website by getting the server ready, pushing code to it, ensuring its live, ensuring you aren't working on the live version, etc.
I'd imagine it would be wonderful if a set of icons functioned as a dashboard and active parts of what you are working in the hardware-stack on are lit up. When code is run, arrows clearly point to where the code is running and where information is being sent. For example when running some webcode you could see it being pushed from the server to the DOM, the DOM running it then displaying the content. When actions are then performed, you could see them being sent back to the server, the server processing it, then sending a result back.
This would go a long way to helping people understand how code really functions to make the products they use every day.
I started creating a new course, how can I split the code across multiple files?
(http://www.codecademy.com/groups/codecademy-course-creators/...)
I quickly retyped everything, but... only the HTML changes seemed to take effect. I tried targeting the CSS to a class I put on the HTML, then to an id, then to the div itself, and a bunch of different simple litmus tests for whether or not it was working like just applying a color, but nothing worked.
After each change, the preview pane would re-render, so it was picking up the changes. I tried viewing the preview in full screen and refreshing, but nothing got the CSS to apply again.
Anyway, the site looks great. Congratulations on the revamp regardless of nitpicky bugs.
- If language-runtime patches, then there are escapes likely.
- If chroot, then there are escapes.
- If linux namespaces, then there are escapes.
- If ...
Which level did they go for?Plus then I get to focus more on the other major issues with online education like helping students work together :)
Obviously it's worked for them this far, so it must be somewhat enticing to a certain demographic, but I think there's room for less condescension.
At the beginning for most of them, we open a simple nearly empty page with a few tags and their eyes gloss over.
"Coding" is an incredibly opaque wall to the non-initiated, and, while using a simulated command line to do math won't be surprising, if someone is going to go from 0 to initiated, do not underestimate the size of the baby steps needed.
Codeacademy helped me learn syntax, but that's about it. After the first few lessons, I had learned all I needed to. What kept me from building the product was all the other stuff (production environment, IDE, ect).
I think this is the right direction. Give a more complete view and do it step by step so the person learning can be rewarded and keep the motivation.