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.
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.