I started reading Hacker News about two years ago (freshman year in college), and I was instantly motivated to start coding. I decided to major in EE, and I've done well in my C/C++ programming classes. I also picked up Python and R for some work on personal projects.<p>However, almost all of my coding has been limited to the command line. Although its been fun, I've been interested in designing a web-app for a while. Some of the posts on Hacker News make the process sound so easy, so I finally built up the motivation to start.<p>I decided to use Python as a backend, since I know that language best. I chose Flask as my web framework because it's supposed to be one of the simplest frameworks for Python. Unfortunately, I'm struggling to understand proper file structure and basic features such as blueprints, forms, models, and controllers. Most Flask tutorials go over these terms too quickly for me to properly understand them.<p>I wanted to manage users on the web-app, so I needed a database. I picked SQLite. Just like with the frameworks, I had to pick a solution without even understanding what the solution was doing. Fortunately, SQLite and databases haven’t been as difficult to pick up as Flask.<p>To control my web-app’s appearance, I picked up HTML and CSS. The tutorials on w3schools were nice, but I couldn't imagine building an entire app manually. And then I came across Bootstrap! It's an extremely helpful framework, but again, it's another tool I've had to learn.<p>One feature I wanted was interactive graphs, so I went to JavaScript. Codecademy helped me with the syntax, and I eventually found the Highcharts library. This has been the easiest tool to learn due to their comprehensive documentation.<p>Learning these tools individually is tough. Making them work together is even tougher. The posts on Hacker News make the web development process seem so easy. Was everyone's first experience this rough?
"A journey of a thousand miles begins with a single step"<p>It looks like you're starting out too big. If you want to get started with web development, I really would advise against using a backend MVC framework, a front end framework like Bootstrap AND interactive graphs with Highcharts/Javascript for your first app. I guarantee you will be put off by using them because you won't know what it is they do. Frameworks and libraries are great for increasing productivity, but horrible for actually learning. You don't start learning Chinese by reading Sun Tzu in Chinese, you start by learning to say 'hello', right? This goes for frameworks too. Eventually you'll need them, but now is not the time.<p>If you want to be a decent web developer, it's essential that you learn how things work from the beginning. Frameworks don't teach you that. I really suggest you try to build a simple app from the ground up. Nothing fancy, just a simple time tracking app, personal page or something. Or start with just a static HTML/CSS page. Add a database/server side later when you get the hang of HTML/CSS. Done? Begin sprinkling some jQuery in it. By this time you can begin thinking about frameworks.<p>It's a long road, sure. But if you begin small there's a much, much better chance of mastering web development. Just make sure to steer clear of W3Schools. They don't have nice tutorials, okay? It's like saying 'I went to McDonalds and they had this really great gourmet meal...'<p>The web is littered with tutorials about web development. Some free, some paid, some old, some new. Pick your poison, see which one works for you. If you need some guidance and extra motivation to push through (because you're paying for it!) I can recommend Treehouse (www.teamtreehouse.com). Well worth the $25 a month.
Good luck!
It seems to me that you are on a library / framework binge.
> I chose Flask as my web framework because it's supposed to be one of the simplest frameworks for Python.
> And then I came across Bootstrap
> I eventually found the Highcharts library<p>My take on this: You do not need frameworks and tools as a beginner. Start simple with a server side scripting language to perform the logic of reading and writing to the database. (I started with PHP). Once you have that figured out, each scripting language can talk to a database either using drivers or plugins or a module that can be found (Again, I began with MySQL). Write simple logic to read and persist data. And build from there. This could be any language or database solution, my choices were what happened by chance when I began part-time work as a web developer.<p>Without breaking down a large app into smaller pieces, you'll be overwhelmed. Once you learn one server side programming script/language and data store logic, you can explore frameworks. Again, there are many frameworks out there, so choose one based on your need - not because it is "cool" or the shiny new thing out there. StackOverflow is your friend.<p>Also, this:
> The tutorials on w3schools were nice<p>Personally, I would not recommend W3Schools -> <a href="http://www.w3fools.com/" rel="nofollow">http://www.w3fools.com/</a>
In short: yes.<p>I actually disagree with the idea that it's easier or better to start simple. As I've gotten more experience, I like simple frameworks better, but as someone starting out, I had no idea what to <i>do</i> with them. You don't know what you don't know.<p>Here's what I suggest: find a tutorial that walks you through every single step and lets you build a complete, fully-functional web app. You're not going to understand what you're doing or why, and most of what happens is going to look like magic. This is ok. After that, start to customize your application. This is the part where you really start to understand how it all works. You'll fumble around and get error after error. But after having gone through your tutorial (and type it all out by hand, because you'll inevitably make typos and <i>this is good</i> because you'll start to understand what different errors mean), you'll have an idea of how to find the answers. Almost everything you encounter at this point will be answered on Stack Overflow, and if it isn't, that's a pretty big hint that your problem is a weird typo.<p>I like to think of it this way: think about how people learn new languages (not of the programming kind). Maybe people will tell you to buy a dictionary and grammar book and "start with the basics", but that's not going to get you fluent and frankly, won't be much help at all unless you've already got some real experience. The <i>best</i> way to become fluent in a new language is total immersion.<p>Yeah, it's nice to sit here and say you should learn everything about how HTTP works and what happens when you type an address. But you're going to find this out for yourself when you take control of routing in your application. If you sit here without any context and read about GET vs. POST, that knowledge doesn't have anything to stick to.<p>I don't know much about the Python world, but I guarantee there are tutorials out there that walk you through a complete web application from the ground up. Django seems pretty popular, so you might have some success finding tutorials there.
I was in your boat. I studied mechatronic engineering in school. Going from command-line,fizz-buzz-style programming to web development is a huge undertaking, not least because there are so <i>so</i> many concepts in web dev that you probably weren't exposed to. If you were like me, you probably didn't have software engineering experience - I'm going to guess that you aren't using version control. (No offence intended - I'm drawing from my own experience here.)<p>If you're dead set on going into web development, the first thing you need to understand is how the web works. You should be able to understand, at least on a superficial level, what happens between the time you type a url into the address bar of a browser, and the time the website appears in your browser. Get yourself familiar with HTTP requests.<p>Other people might tell you not to rely too much on external libraries. I'm going to tell you to the opposite. When you're starting out, and your goal is just getting a webapp, <i>any webapp</i>, out, you should use high-level frameworks that do a lot of hand-holding for you. That means jQuery on the frontend, and Django on the backend. Django is better that Flask here because it forces a code-organizational style, it hides a lot of advanced concepts from the user, and it's generally dead-simple to use.<p>Eventually you'll want to outgrow those frameworks though - Django is a bit too limiting for my tastes. But save that thought for the future.
There's a popular viewpoint I think from Malcolm Gladwell's <i>Outliers</i>[0] that could possibly be summarised as "any non-trivial skill takes at least 10,000 hours of practice to approach mastery." I think this applies especially to programming[1].<p>I can still vaguely remember a time, many years ago now where I just couldn't get my head around a garden variety "for" loop. Now I wonder what was so hard to understand about it. Many times over the years since those early "for" loops I have often felt that I wasn't really making any progress at all in grokking this programming thing. I look back now and in fact that was an illusion generated by a localised point of view. In fact I was making progress the whole time, just slowly enough that at times it didn't feel like it.<p>I probably came at things from a fairly opposite place to you, I started with the web. I started with HTML and CSS and kind of worked backwards. But regardless of where you start, there will always be challenges to your understanding. IMO, one thing that marks a promising developer is the ability to be comfortable with feeling like an idiot while you're learning something new but continuing to persevere, because the need to learn new things happens so often in our relatively young industry. In my experience, few people truly are able to be comfortable with this feeling, but those who are able can surmount amazing obstacles.<p>So don't get discouraged if it feels like you're not making progress. Stick with it, you will. It just won't seem like it at the time.<p>As you've experienced, the MVC pattern is still very much in ascendance in the web dev world. I would suggest that you invest in a couple of good books (if available) or lengthy tutorials on the framework of your choice (if available). If neither of these things are available, that may be a sign that you should choose a different framework. :) Don't invest in too many books though, because you'll find they date quite quickly and eventually it will become more efficient to just search for what you need on a case-by-case basis. But to get a good grounding, dropping a bit of coin can be a good thing in the early stages of learning a new technology.<p>0. <a href="http://en.wikipedia.org/wiki/Outliers_(book)" rel="nofollow">http://en.wikipedia.org/wiki/Outliers_(book)</a><p>1. <a href="http://norvig.com/21-days.html" rel="nofollow">http://norvig.com/21-days.html</a>
Seems silly to pick an dev environment when you haven't built a proof of concept. Build that in the something to can rapid prototype and then refine the process. Software construction is about refining the application into something useful... Code purists will tell you some BS about this framework or that one, but all the crap that is out there today will be gone in 3 years and something else will be en vogue. Get the app up, test the crap out of it and then see if anyone wants to use it... if so, tear it apart and rebuild it... eBay was built on isapi.dll calls and that was a POS and it ran like that for 15 years... Build, test, refine... That's what a coder does. Build
Web development is heard, there are many skills you need to get a handle of, minimally: HTML, a programming/scripting language, a database and the file system of the webserver.<p>Each one you have to not only research but do a bunch of hand-on work to fine tune and to make them work together. Then once you get some progress, you throw into the mix improving user experience... heh.<p>Starting with the 8-bits we had a finite universe, the computer. Add into it a new disk drive or some new coding hack now and again. On the internet you can have too many options and choices, and you are lost in choosing and learning tools than working on problems.
"Was everyone's first experience this rough?"<p>I wrote my first shopping cart web app in Java servlets & JSPs. This was back in 2003 and I was 15. Took me 3 days to connect to Microsoft Access (yes, it's all ancient now).
A Coursera course started yesterday about web app architecture. Its six weeks long and uses Rails. It could be a good introduction into how web apps work.<p><a href="https://www.coursera.org/course/webapplications" rel="nofollow">https://www.coursera.org/course/webapplications</a>
sounds very familiar! I used to work as a quantitative analyst at an IB and was quite familiar with programming. Turned out that coding algorithms is one thing, coding up a webapp with loads of different moving parts is quite another story. But by the sounds of it, you're on the right track, keep it up!