

Ask HN: How to convert from amateur web app developer to professional? - infocaptor

This is more of a practical question on web app development and deployment process.<p>Here is some background information.<p>I use PHP for server side scripting, javascript for client side. I use Netbeans and notepad++.<p>I user Firefox and firebug for debugging and testing.<p>The process I use is very amateurish, I code something in netbeans, something in notepad++ and since there is nothing to compile, I just refresh the firefox browser and test it. This is convenient and faster compared to the Java development enviornment where you would have to atleast compile and deploy the jar files before you could run them.<p>I have been thinking of putting a formal process in my development and find it hard putting it together. There are so many things to do before you can deploy your final web app. I keep hearing jslint, compression, unit testing (selenium), Ant, YUI compressor etc but I am now looking for some steps that I can take to make me more organized.<p>For e.g I use netbeans but don't use any projects within it. I directly update the files. I don't use any source control but use my Iomega backup that saves each save into a different version and at the end of the day I backup the dev directory to my Amazon s3 account. For me development environment is just a DEV directory, TEST is my intermediate stage and PROD is the final directory that gets pushed out to the server. But all these directories are in the same apache home. I have few php scripts that just copies the needed files into the production directory. Thats about it for my development approach.<p>I know I am missing the following - Regression testing (manual or automated ??) - automated testing (selenium ??) - automated deployment (ANT ??) - source control (svn ??) - quality control (jslint ??)<p>Can someone explain what are the missing steps and how to go about filling those steps in order to have more professional approach. I am looking for tools with example tutorials in streamlining the whole development to deployment stage.<p>For me just getting a hang of database, server side and client side development all in synchronization was itself a huge accomplishment. And now I feel there is lot missing before you can produce quality web application.<p>For e.g I see lot of mention about using automated testing but how to put in use with respect to javascript and php. How to use ANT for the deployment etc.<p>Is this all too much for a single or two person development team? Is there a way to automate all the above so that I just keep coding in netbeans and then run a batch file that is configured once and run it everytime to produce the code in the production directory?<p>Lot of these information is scattered on the web and here, if someone can guide I would be happy to consolidate here.<p>Thank you for your patience :)
======
irishmanirl
There are a lot of small, detailed things you probably need to know to become
a "rounded" development professional and they are only really learned "in the
trenches" so to speak.

Don't overly stress the "process" you are using, if you ask 10 people this
question you will probably get 10 different answers, the best process is one
that is repeatable and you feel works for you. The process can also change
depending on the type of project you are working on, team size and location,
tools being used....don't be afraid to try different things out & see what
fits.

Down to brass tact's, unit testing I find to be most important when it comes
to tests, write the test cases first, then write the features they are to
test.

Learn git and setup a repo for every project you develop - even personal side
projects. Use github.

Use a good project management, task management tool like pivotaltracker.com

Use to use frameworks e.g. zend and other MVC frameworks correctly, use
industry conventions and existing libs, you do not need to reinvent the wheel
for everything you need to do.

Learn search and sorting algorithms for a start, then start of popular design
patterns - only way to really understand these is to use them.

Finally I would strongly recommend you try and get a junior development job or
internship with a good dev shop, this was by far the best thing I did when I
was learning how to program for a living. Nothing else will match it in terms
of learning & giving you confidence.

Hope this helps in some way.

------
zepolen
Hint, just because something is used in the enterprise doesn't mean it's
better.

That said, source control is a must, start there.

~~~
sagacity
> _That said, source control is a must...._

Based on my 25+ years of IT industry experience, I'd say put that in an
infinite loop. :-)

------
eengstrom
I think I understand what you're asking for. Some things you need to learn
through experience and whether you can afford to spend any money on utilities,
but if you're comfortable working in English check out url:
<http://github.com/plans>

If you read/write/speak a non-English language or character set you may want
to try and find similar tools in your native language.

Generally speaking a development process can be exactly as you describe, but
what you want to achieve in order to be professional varies widely. I had a
point of sale vendor working with a customer (I was fixing their performance
problems) and the developer was "source code controlling" with copy and paste
on their personal work station. If I paid that person money to MAKE something,
I would have had them shot. Except they are in Canada and shooting people is
probably frowned upon.

So here is my advice:

1\. Look at how you're working right now, strip out all but the essential
steps that you can write on a piece of paper

2\. Grade the list with how much time you spend each week on each step in the
process

3\. Keep working on that list for a few days or a week even, logging the time
you spend - note also if you lose progress or work due to error, or how many
times you do something where an automatic solution may help

4\. Use the list above to determine, based on where you can probably save time
with utilities and tools, or come back to ask HN more specific questions

For a one or two person shops, I'd be storing my source code online at github
or similar source code repository. As for what you need to do for yourself,
start abstracting what you're writing in script as an "architecture". Try
keeping a high level document describing the workflow you're automating and
what the purpose is.

From there, break down into component parts, how you think about it and how
others may need to work with it.

The easiest way to act professional is learn how and what to comment in your
scripting. What is apparent to you right now, won't be in a year when you need
to back and chance something, or even better, when you start collaborating
with other developers.

Being professional means that you invest in the time it takes to collaborate
with others. Despite posting this on a site called "HackerNews", I'm SO not a
hacker, and I would generally pitch a fit at hacker behavior. But then I've
witnessed and personally experienced the pain and limitation of hacking, in
lisp, pain, oh pain.

As to automated testing, don't worry about it until you're finding yourself
testing more than coding. If you can't get a cheap hand, or friend or family
member, or (chuckle) a customer to test the product, don't worry about getting
a tool.

