Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Excellent how this problem is continuously attempted to be solved.

As a wannabe programmer, one thing I always lacked from these sites was the ability to somehow see my code live. I.e. it's fun to write html and css on codecademy or python from LPTHW or whatever but how on earth do I get it on the web or assembled into .app? In actuality, the complexity that surrounds DNS providers, server apps (or whatever you call filezilla etc), server providers (here i mean heroku, AWS, Cloudflare etc), those weird githubs and repos that people chat about etc etc, is way more deterring than actually learning what a "class" is.

Learning is fun; endless googling is not.



And this is why I always use PHP as an introductory language if I have to teach web dev; the setup part is much more straightforward than it is for Rails/Django/etc., and you don't have to spend a ton of time teaching dozens of concepts (MVC, routes, templating, git, unit tests, ORMs, etc.) before the students can have mini web apps written.

Some programmers balk at the idea of teaching PHP with plain HTML/CSS instead of teaching using Rails + Angular + all the fancy crap they like, but I've taught web dev to over 500+ students in the past 7+ years (and programming/CS to about twice that), and it's worked like a charm (and the people who get the most upset by that notion are often those who have taught 0 students).

My girlfriend is an art teacher, and when they teach new students they don't start right away with watercolor or oil paints; rather, they start with materials that are easier to handle for beginners (e.g. plain pencil), so they can focus on the basics before tackling the more subtle and advanced techniques. Why are we trying to teach programming using all the fancy tools and technologies used in production systems?


Flask. Flask Flask Flask. It's well-documented, in Python, and you can push it to Heroku easy as pie.

You can add things like templates (they're built in, and can be really simple) or just concatenate HTML the old-fashioned way. You can program very imperatively and work up to abstractions. It's very friendly.

I haven't seen it used as an introductory "language" but I feel like it would work well.


>you can push it to Heroku easy as pie

Having worked with absolute beginners, this isn't nearly as easy as you think for someone just getting started. You're adding ssh keys, getting set up with git, installing the heroku client, running things from the command line, dealing with dependencies, dealing with heroku config file issues...

These are the things that get extremely frustrating very quickly to someone who doesn't have a technical background, and they cause people to give up.

Compared with: start a shared hosting account for $2/month, connect with a gui FTP client and the password you made during signup, drag and drop files to the server, go to http://www.yourserver.com/foo.php and see if it works.

If it's about learning the most basic fundamentals, PHP just works. It will be some time before these people start building things where security, scale, separation of concerns, version control etc start to count. Introducing too many things at once is frustrating, and the fun starts when you can use the things you're building, and share them with others. There's not much that's better than PHP in that regard.


Yes, anyone that says "you can push it to Heroku easy as pie" clearly hasn't spent hardly any time teaching anything to actual beginners.


I was working on the assumption that environment would be already set up for them. Setting up Apache to test stuff locally, getting FTP set up to get into your remote server, etc is all a pain with PHP too.

Once everything is set up, it's two-ish commands to commit and push to somewhere like Heroku.

And no, I haven't taught beginners at all, I'll fess up to that. I've learned alongside them, though. PHP is a perfectly cromulent language/framework for this sort of thing, but something like Flask could be just as accessible.


Windows: Install Xampp, copy your files to C:\xampp\htdocs

Right click xampp icon and start services

Ubuntu: sudo apt-get install apache2 php5 mysql-server php5-mysql

sudo service apache2 start/restart

sudo service mysql start/restart

copy files to /var/www/

"getting FTP set up to get into your remote server"

sudo apt-get install ssh sudo service ssh start


We use Flask at Thinkful in our Python course for precisely this. Ran into some disappointment from folks who'd prefer to dive directly into Django, but from an instructional perspective we'd much rather introduce something comprehensible than ask students to memorize magic words or incantations.


> and the people who get the most upset by that notion are often those who have taught 0 students

Does that apply to you?


To me? Yes and no. Yes I've taught precisely 0 students. No, I'm not at all upset with teaching PHP, I coded up my fair share of awful PHP web apps. My first favorite language was ActionScript which everyone loves to hate! But at the time, nothing beat PHP and ActionScript/Flash for simple, fun web development for beginners.

I think something like Flask might be a worthy successor. Heck it even includes a webserver, no need to fiddle with installing Apache to test stuff locally. And with services like Heroku the barrier to getting it online is almost as low as PHP.


I somehow missed your actual arguments for flask, so my impression of you over-enthusiastically praising flask was all wrong, sorry. Still, if Flask does everything for you, what are students left to learn? A lot, i guess :)


Read the rest of the sentence.

> but I've taught web dev to over 500+ students in the past 7+ years


I can imagine Heroku being easy as pie when everything works, but it is a pain in the arse when it doesn't (I have pushed 3 small Django apps to Heroku, its not easy to debug errors).


Also blueprints, a good exercise in separation of concerns, flexibility etc


It's also easy to teach programming with BASIC. That doesn't mean it's particularly good for the students.

Setting up a web server with e.g. Python's SimpleHTTPServer is absolutely trivial, and teaches them a lot more about what a web server actually does (routing requests and building responses), and also prepares the students to use whatever hip python stuff people are doing servers in these days.


The advantage for typical PHP here is that the webserver runs the programs somewhat transparently rather than the other way around with your program creating the webserver and then managing requests. PHP/Apache provides a very simple routing model that correlates 1:1 with the filesystem.


>PHP/Apache provides a very simple routing model that correlates 1:1 with the filesystem.

Might that give students a false impression of what a webserver does and is capable of doing? The students can implement the same thing themselves in a few lines of python, rather than offload most of the functionality to a monolithic and unapproachable black box like apache or nginx.


It's useful to black box some of the things when you are first learning. The specifics of serving a request are probably not the first thing you want to teach, especially when it requires some notional understanding of threading/blocking which Apache can take care of automatically. Also mod_rewrite and .htaccess provide powerful methods of adjusting behaviour of routing and the like.


Writing web apps or servers are two different things. well, mostly ... almost, at least if you teach for productive use. especially for anyone who just started coding, a few lines of python can be a lot, so KISS.


Routing is done by a router, not a server. a server serves. Does that really need to be said?

Edit: to clarify, I read about "routing" in "web-apps" now and then. I have problems figuring out, although it seems to be clear to anyone. And then you come and mess up terms even more, while routing is absolutely not essential to a web-server. Also, if your idea of routing is anywhere near apache's rewrite-rules, I don't wanna know it. If on the other hand routing is essential to an ftp server, I'd be curious.


"Routing" in this context means resolving URLs to their correct handler.


Well, that's the main feature of a web server, besides the obvious sending of responses? The usual notion is of requests and responses, routing seems to be an avant-garde term, in this domain.


Another teacher with real-world experience teaching ACTUAL, normal students? We're a rare breed.

I agree with everything you wrote, of course. Kids need to learn how to CODE first with simple, non-magical tools. Experience with the other bells and whistles comes later.


> Why are we trying to teach programming using all the fancy tools and technologies used in production systems

Wait, either a) PHP isn't a production system, :) or b) you are blaming yourself for using it, or c) ...


> Learning is fun; endless googling is not.

At least you have Google, Bing, Yahoo, ...

Kids these days. :)


>In actuality, the complexity that surrounds DNS providers, server apps (or whatever you call filezilla etc), server providers (here i mean heroku, AWS, Cloudflare etc), those weird githubs and repos that people chat about etc etc, is way more deterring than actually learning what a "class" is.

That stuff is 80% of practical software engineering. The other 20% is communicating with other people.

If you want to be good at your job, you've got to put in the hours to learn the stuff that isn't in the books. The same as any other skilled career. If you want to worry about the niceties of programming languages all day, go into academia.


Exactly! If 80% of practical software engineering is what i described above, then how come no one is teaching it!

Also, I feel we are talking about students quite a few steps below the stage where engineer vs. academia discussions become relevant.


There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things.

The comment about academia was a bit silly, true. I was trying to say that it's the only place where you can have the luxury of thinking about "pure" programming as a primary concern.


"There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things."

This! In my team, everyone comes to me for help with their problems. Generally, 75% of the time, I know the answer (because I've come across it before). And the other 25%, I solve their novel problem because I ask the right questions, and use basic problem-solving and problem-narrowing steps.

It really isn't rocket-science, it's just analytical, or problem-solving ability. I suppose it has many names. After burning much over other peoples' problems, I eventually resorted to guiding them towards the right direction. Asking them what they think is the problem, getting them to tell me their thought-processes. It's helped quite a bit...


Bootcamp can help folks learn to use their skill, to focus on the things that matter. As my friend Tom often says when I want to reinvent the wheel, "Joe, we CAN do anything. What SHOULD we do?" That's definitely something a bootcamp can help with.


> There's no decent way (IMO) to learn generic problem solving skills other than solving a lot of problems for yourself. That's what worries me about these bootcamp things.

Hm, though I see your point, and agree that "googling" is an actual skill you can acquire and improve by yourself, I feel it's not that different from any other skill, generic or not. I mean, before structure dawned upon playing piano or coding, to learn, the task was problem solving.

To me, there's no essential difference between "this note sounds wrong, why is that, let me try another one" to "how do I get my damn website online". If one beginner's learning process can have structure, why not the other's.


But if you could start with actually writing stuff instead of dealing with "software bureaucracy" you might be a lot more motivated to learn programming.


The problem is you learn something well, then all the hipsters tell you that it needs to be done in Mongo / Node / / whatever the latest fad is.


This is why I loved the Rails Tutorial when I did it about a year ago: it doesn't teach you just writing code, but also testing that code, managing it in a version control system, uploading it to Github and deploying it on Heroku. It's basically an "end-to-end" guide that explains each step of the way thoroughly.

https://www.railstutorial.org/


"Learning is fun; endless googling is not."

Searching for knowledge/information, discovering domain-specific terms, then finding their definitions... these are all very important parts of learning.

Any time I've had to get into a new domain, I start off with searching. Then you discover new terms specific to that domain, then you learn those terms, then you apply those terms to learn more in-depth topics about the domain you're learning about. Before you know it, you're a jack of a new domain (or more than a jack, if you put the time in).


I really got bogged down with that crap when learning python as well. I love coding but there was a point when I was launching my apps and there was just one thing after another that was slightly wrong and taking quite a bit of time to Google/find/fix them. That was my main problem with Django. I've since been using flask with PythonAnywhere[0] (I don't work for or have any connection to them other than being a casual user) and it's extremely simple to launch an app compared to alternatives that I've looked at. It makes writing web apps fun because you can focus on coding and not wondering why your templates aren't loading or whatever.

[0]https://www.pythonanywhere.com/


It would probably be pretty easy to create a tutorial that gets someone to set up a github account, introduces the basics of git/html/css/javascript, and ends up with the tutee having a Github Page that demonstrates what they've done exposed to the world on the internet. Include the DNS setup via cloudflare if they want to buy their own domain.

Are there not tutorials like that?

And then there would be next steps, using free tiers of online services to add a backend etc. There's quite a lot of places to go from there though. What would be best?


That's basically what we do with https://www.makeitwithcode.com, we take people through building things and teach them theory as they go along. Then we go through deploying something to Heroku etc as part of subsequent lessons, so by the end they've got a mixture of the theoretical stuff as well as the more practical "how do I make this be on the internet".

I think there's a few others which also follow the approach of each lesson essentially culminating in a new portfolio piece.


Your website isn't clear - is there a cost?


on the homepage bottom-right it says: The course costs just $200. If, during the course, you feel you're not getting value for money, we'll give you a refund.

You'll get a lesson a week for 10 weeks. The lessons are text-format, combining a balance of challenges with instruction.


There are some fairly easy ways to get some code up if you go for the easiest solutions. eg web2py/pythonanywhere.com for Python, http://www.appgyver.com/ for javascript/phonegap apps


The deal is, there is no way for a beginner to come to that conclusion after finishing a given tutorial. The different solutions are separated. It is not a continuous flow. HTML/CSS/Javascript(/php) are luckily taught in succession and tandem, but rarely with the hosting, naming, storing, sharing aspects integrated.

It should be:

html -> css -> Javascript (-> php) -> Hover(DNS) -> AWS(server) -> Final assembly -> Live product! -> github -> promotion/advertising/fluff


By the way I kind of recommend "The Complete Web Developer Course - Build 14 Websites Web development from scratch in 6 weeks. HTML, JS, CSS, PHP, MySQL, Bootstrap, Wordpress, APIs, Mobile Apps all covered." On Udemy.

Available for $10 until friday pm (says usual price $199 but there's usually a discount on) and includes a year or so of hosting on Rob the teachers servers. I've been doing some bits myself. He also has a how to earn money while doing it by pitching your services on elance guide. It has detailed instructions to get the stuff up on the servers, for web at any rate.

https://www.udemy.com/complete-web-developer-course/?hb=get1...


And here is my problem with both learning sites like this and search engines like Google. If I search for hosting JavaScript, appgyver.com doesn't feature in the results. In that scenario search is broken.


That's because there is a complete disconnect between "javascript hosting" and "AppGyver". Try being more specific:

Search for: "hosting html5 javascript steroids.js"

Because AppGyver seems to be related to some sort of JS framework called steroids.js. I'm not going to do it for you, but presumably there is a logical search chain that gets you from "javascript" or "javascript framework" to "Steroids.js".

Yes, I search a lot. It's the third most useful tool I have at my human disposal, just after "touch-typing" and "problem-solving ability".


I do the same. Axiomatically, Exercism.io's target audience will not have the experience or knowledge to do that.


I'm working on a book that targets this. Hit me up (email in profile) if you're interested in a spot of "beta testing" =)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: