How to start writing software: web applications

| | Comments (0) | TrackBacks (6)
code.png

Almost anyone can write little scripts to do simple tasks or write little code snippets that print hello world endlessly but to actually develop a really useful application requires a little more time and knowledge. I've put together a step-by-step guide for aspiring programmers to follow that should help fill in the gaps with their new programming venture.

In order to understand what technologies you need to learn, you need to have a type of application defined that you are looking to develop. There are many types, but the most common these days is the web application. For that reason, we will use web application technology as the example for all of the following lists and text.

A web application incorporates several different layers of technology, including but not limited to:

  • Server-side application and database code
  • Server-side 3rd party product integration code
  • Server and client-side networking code
  • Client-side 3rd party product integration code
  • Client-side presentation code.
What does this all mean? Application code? Database code? I thought I was writing a program! Sure, it's all code, but certain concepts have been established over the years that, when used, bring efficiencies and organization to the modern programmer. Learning these concepts and any future concepts will be key to keeping up with technology.

Application code typically is code that deals with the unique parts of your application. For example, if you're writing 2 web applications, 1 for a construction business and one for a grocery store, you will find many common parts between them including code to render pretty HTML, code to store files on your server, code to communicate with the database server and so on. The unique parts should be fairly obvious in this example. There are parts of code for the construction business that deal with construction industry concepts, terms and functionality that is unique to that industry whereas the grocery store application will have barcodes, food categories and all types of things you've taken for granted while walking through your local grocery store. There are more concepts here than I'm defining but for the most part, the unique parts of an application goes into the application code.

Database code can be one of two things: Stored Procedures or Datasource-layer code. Stored Procedures run on your database server using code that the server itself executes. If you were to run Microsoft SQL Server, your stored procedures would be written in a variation of Visual Basic and would be run by MS-SQL Server. Datasource-layer code is something different. It runs with your application and provides a way to access data in your database from multiple spots in your application without re-writing the same code over and over.

Networking code for web applications is very established and standard. HTTP is the protocol used, and it works by traveling over TCP/IP, which can go over wireless or ethernet and so forth all the way down the OSI. Networking code supports HTTP, AJAX, XML services and any other high-level networking that is done.

Often times one product will need to support another. For example, when writing an application that can work with audio, I won't want to write the low-level audio codecs myself so I'll integrate LAME with my product, which can encode MP3s. The code that's needed to work with LAME is called integration code.

Presentation code is anything that takes a set of data and formats it to look nice for the end user. There is generally lots of presentation code in the modern web application. It is what's responsible for generating nice HTML and putting things where they belong on screen.

Things to learn for developing a full-featured web application:

Understand fundamentally how computers work

  • How code is executed using the CPU and RAM
  • How the OS interacts with your code behind the scenes
  • How networks work
  • Where bottlenecks are

Read up thoroughly on all major concepts

  • OS Architecture
  • Procedural Languages
  • OO Languages
  • Interpreted Languages
  • TCP/IP
  • HTML/XML
  • Client-Side scripting (javascript, dhtml)
  • Back end technologies (SQL, XML, Developing proprietary formats)
This is a lot of reading but is important if you wish to develop your software in a timely manner. I've seen people design things completely wrong, causing them to have to rethink their entire projects simple because they had not researched enough about how things work and made false assumptions. Take the time to look into your technologies before you start designing. You may very well find shortcuts you never knew existed and will be certain to know exactly what the technology is capable of.

Further reading for the technology you'll be using:

  • Books
    • Design Patterns
    • Architecture
    • Language
    • Reference
  • Forums & Blogs
    • Specific Developer Forums & Blogs
    • Technology Forums & Blogs

Your first project:

Determine what to develop

  • Small goals make small and successful first projects
  • Plan so that you have little parts that clearly work and show you progress
  • Find something you're passionate about but is still small enough to be achievable

Creating a plan

  • Make a project plan
    • Outline the objective of the project
    • List what it must have/do to be considered "successful" by you
    • Design it on paper, ask yourself "Will this work?" and "Does this meet my requirements I listed?"
    • Estimate how long it will take to do everything. Be realistic.
  • Create milestones
    • Milestones are markers along the project that indicate how far you've come.
    • Make a few milestones so you can stay focused and enthusiastic about your project.
  • Stick to your goals
    • Did you say you'd have a book finished by next week? How's your 10 hours/week coding time you've dedicated coming? Stick to it! You'll never finish if you don't.

Getting help when you're stuck

  • Ask someone for help immediately when you're stuck
  • Little things can become very frustrating and discouraging.
  • Ask friends
  • Ask in developer forums
  • Read more
Your first project can be the most daunting. There is so much to learn and some of the simplest-seeming things can hold you up for hours and hours. It's also very easy to get sidetracked and start working on something completely different than you had started on. For this reason, I recommend making a project plan and getting involved in forums, blogs and friend networks so that you have people to talk to when you aren't sure what to do.

Your next projects and beyond:

Keep learning and rereading past material

  • Review conceptual books
  • Subscribe to software development blogs

Stay open to new ways of doing things

  • Understand new frameworks
  • Understand new languages
  • Review new APIs

After finishing your first project, your perspective should have shifted on the driving mechanisms behind most software you've used and also how much work really is required for a quality product. Hopefully this guide helped you get started or get through one of your first projects. If you're having problems, stick with it! Good things come to those who persevere.

Related Articles

How I became a professional software developer

Categories

6 TrackBacks

Listed below are links to blogs that reference this entry: How to start writing software: web applications.

TrackBack URL for this entry: http://www.rbgrn.net/blog/mt/mt-tb.cgi/8

(code) Many people, in their quest for a new vocation, have asked me how I've managed to land a successful software development career without proper academic background or training. While I feel like I've known how to write software... Read More

» How to write a brute-force password cracker from Robert Green's DIY

If you have access to a password's hash and salt, if applicable, a brute force attempt to crack it is a guaranteed method if you have the CPU cycles available to compute it in a reasonable amount of time. ... Read More

Object Oriented (OO) languages are a staple of the development community, however many people continue to argue against them, citing that they are inefficient, useless, confusing and unnecessary.  There are many real benefits to using OO even for ... Read More

Wikipedia defines polymorphism as "the ability of objects belonging to different types to respond to method calls of the same name, each one according to an appropriate type-specific behavior."  There is nothing too fancy about polymorphism other ... Read More

Hibernate is an excellent tool which saves many projects from substantial amounts of code.  Gone are the days of writing massive datasource layers full of obnoxious JDBC code.  As gravy you also get simple query objects, caching, connection p... Read More

If you have a need to use the command pattern and want to have a standard interface but with type safe parameters, I have come up with a solution.  This is one of the most interesting uses (or hacks) of... Read More

Leave a comment


Type the characters you see in the picture above.

Contact

If you find these articles helpful, please donate!
Every dollar is appreciated.