
Ask HN: What's the best way to create a web app the first time? - marcamillion
I have a confession. I feel like I am cheating. I have been slaving away at this web app concept I have for the last few weeks, but haven't been making as much progress as I want to.<p>I did CS in college, and am familiar with the web, but I have never built a web-app from scratch. I can understand most programming languages, and most markups, but since I never went into a programming job right out of college (and never really had much motivation to do it on the side) I don't know how to build something from scratch completely.<p>I have been trying to 'tried and true' way of just sitting down and struggling and it has been very, very difficult to stay motivated. Whenever I come across a problem that Google doesn't help me solve, I post a question to some tech help site (like stackoverflow) and that helps me much. Sometimes I read through reference files and figure out the problem.<p>When I do figure it out, it feels like I scored a winning touchdown in the superbowl (especially if I have been struggling with that one problem for days).<p>I am tempted to use jQuery plugins to help me do what I need to do, but to be honest I feel like I am cheating.<p>Maybe it is the college mentality that is forcing me to not want to re-use any code from anyone else (it took me about 2 weeks to convince myself that using jQuery was fine). It sounds stupid I know...but I guess I have just always done all of my work from scratch and so doing it any other way right now is so hard.<p>So my question is, do you have any tips about how I can go about building my web app (given that it is the first time).<p>The UI functionality I am trying to build is like a hybrid of many functionalities I have seen in many places (popular sites as well as not so popular ones), but I feel like by viewing their source and taking bits and pieces I am stealing :(<p>Do I just continue doing what I am doing, but how do I stop myself from feeling like I am annoying people with always asking questions...because I have ALOT of questions.<p>I am feeling very conflicted right now, and discouraged to be honest...but I KNOW that if I can get this thing to be the way I want it to be, it will solve a very specific pain problem that many people face.<p>By the way, everything I am talking about is just getting it to some form of a minimum viable product. But I am still struggling :(<p>Help!
======
fhirzall
Don't feel bad about using jQuery or any other library. These libraries have
been built for re-use. Once you get more familiar with the basics and build a
few apps, you can start looking into the actual libraries and figuring out how
they work.

Think about it this way, you're driving a car but you have no idea how the
engine works and that's OK!

As for asking questions on the various tech sites, you shouldn't feel bad
about asking questions - these sites were created for that specific purpose.
You're actually helping other programmers that might search for the same issue
later on.

My only advice would be to hone your search techniques to be able to find
answers faster. Mostly everything that involves basic web apps has been
answered in one form or another. If you run into a problem with something,
just note the issue and move on to the next part of the web app!

~~~
marcamillion
Thnx for the encouragement fhirzall.

The truth is, a funny thing has started happening. The more I used jQuery and
the more I solved some problems, is the more I understood javascript better -
which was a bit strange at first. I have had a few 'epiphany' moments.

Your analogy about the car makes total sense, especially for what I am trying
to do.

Your point about my questions helping other programmers is also very true and
prescient.

This is why I love HN, because I can get good, heartfelt feedback about issues
I am dealing with in the moment.

Thanks again.

------
ismarc
You're mixing multiple concepts into a single thing, and that's probably a
large portion of why you're running into difficulties. There's fundamentally
two pieces to a web-based application. The user interface and the server that
runs it. The server piece is critical for accomplishing the tasks while the
user interface is critical for triggering those actions.

Now, since this is your first, and you're in over your head (not a bad thing,
we've all been there before!), you need to decide which is more important:

1) Interface turns out how you want - You don't care how sloppy the back end
is, or it's trivial and you care about user experience above all else

2) Back end functionality - What the server does is critical, it holds the
important pieces and the user interface can be simple at first and expanded
later

3) Getting something, anything working - You want a product that just needs
improvement, it can be a mess for the UI and the backend, but it's functional

4) Increasing your knowledge of how these systems are built - You recognize
this project might not succeed, and you would like to learn enough so that you
know how to choose and utilize existing tools in the future

5) Be able to churn out multiple applications at a quick pace - You want to be
able to kick out multiple applications quickly to see which will stick better
as a concept, and then move to improve the one that has the best chances

Now, there's multiple ways to address each one, and they're not necessarily
mutually exclusive, I simply chose this list so that you can pick the
direction you go.

If #1 is the most important, get a simple backend and live on
w3schools/specifications pages for ECMAscript/other resources (unfortunately,
I don't primarily do UI work and typically use the w3c
recommendations/w3schools for any references I need, there are likely good
communities out there around CSS/ECMAScript).

If #2 is most important, choose the language and platform and use just quick,
thrown together UI to be improved later. A lot of frameworks prefer convention
over configuration, so which one you choose likely won't matter to you since
there aren't any "preferred" methods yet. One with an active community is
best, IRC channels are your friend when the documentation fails you.

If #3 is the most important, reuse everyone elses code as much as possible,
duct taping things together. There won't be much knowledge gain here, but
you'll have a product that's a pain to maintain and extend (I suggest against
this being your priority if you're inexperienced).

If #4 is most important, don't use anyone elses code at all. Only use built in
language features and common libraries (don't use web frameworks, don't use
high level libraries such as jQuery). You will most likely never launch the
web app, or even get halfway done, but you will learn a LOT. A couple of
failed attempts such as this and you'll be able to pick the right frameworks
for your project based on capabilities and easily work around short comings of
those frameworks as you hit them. This is an educational route, and not one to
base a business idea on (not saying it won't work, just that it's not likely).

If #5 is most important, follow the steps for #4, then #3, then repeat as
necessary until you can do #5.

A lot of people will probably disagree, but I'm a firm believer that
understanding the capabilities of the underlying system and what is possible
and how makes using the abstracted systems a lot easier and faster. You
understand how much time you're saving, how they likely did it and you aren't
completely lost the instant there isn't an existing solution to what you want
to do. The idea is not to think that you're going to build a new framework
that you'll use everywhere, but instead you actually understand what it's
doing when you type "gimme_a_new_controller --named MyMagicStuff --with_table
MyMagicStuffTable --with_fields secretIngredient,specialSauce".

~~~
marcamillion
Wow...thanks for taking the time to go through all of this ismarc. Definitely
gives me a lot to think about and helps me 'segment' my decision-making
better.

I guess if I had a co-founder or someone else working with it would be easier,
but you are absolutely right. I am trying to do everything at once, although I
did try to segment them it seems I am not doing that properly.

In my case, the UI is very important and even though I am no graphics person,
I think I will likely go with your #1. Then once I am done with that, cross
that bridge.

