Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

foshizzle

macrumors regular
Original poster
Oct 17, 2007
240
0
I'm a college student (ME and just started CS minor/maybe double major) and I've been with an engineering firm for a few years now. Without getting into much detail, as of now we use excel spreadsheets for any data recording from tests, for client information, quotes, job numbers, etc. We are moving into automated equipment (built in-house) and it seems fitting to update our way of data-recording. I have a huge vision for creating a database and building a powerful web-app (to be accessible by any browser) that is both powerful and secure but very easy to use by lab technicians. I'm beginning with C right now (starting with the basics) and this summer I've bought a book on learning HTML from the ground up to get some basic web-design under my belt as well.

My question to those knowledgeable in the subject is this: To build said web-app, what foundations should I put in place in my education on specific platforms to build a powerful app that can be expandable in the future? Should I look into Ruby on Rails? PHP? Others? Again, I know almost next to nothing about these languages so if I could maybe get a road map on things to learn after HTML and C to get to the platform to build this, that'd be awesome.

I'm completely willing to learn, and I would have the available resources at the job to build this on a server (install a virtual machine LAMP, probably Ubuntu server). I'm the in-house IT person, we do have a company who handles the more complex things (VPN between three other offices, dealing with the windows server, those kinds of things), but I have quite a bit of say in the decisions that go on, so if I'm going to pitch the idea I'd like to make sure i can give an educated presentation and a timely goal.

Thanks in advance, and if I have anything wrong please correct me.
 
To build a web app, form my point of view, you need:
1) A database
2) A means of accessing the database from your application layer
3) An application layer
4) A means of accessing your application layer from your web server/web programming layer
5) A web server/web programming layer
6) A front end presented in the browser, with javascript providing dynamic elements

Some of those (2-5, perhaps) can be collapsed in a small-scale application.

The skills involved will be:
Setting up a database management system
Designing a database schema
Writing queries to retrieve data from and insert/update data to/in the database
A solid knowledge of an application programming language with the ability (likely via a library) to access the database system you chose.
Understanding of a dynamic web programming platform (i.e. via an apache module, etc.). Ideally this will utilize the same language for the application programming for simplicity.
Knowledge of javascript, HTML, and CSS for writing/designing your browser-delivered UI.

This is a LOT of stuff to learn yourself. You may be expecting that, but it will be difficult for you to design, implement, and deliver all of this yourself, especially if there's the expectation that the system is relatively bug-free (that's to say, it works). Do you have QA available, or a very savvy, patient pool of users that could beta your product before it's rolled out for "full production"?

I don't know anything about Ruby on Rails. I know it is popular. Do not make that your basis for picking it. It may have solid, scalable technology with a knowledgeable, helpful user-base. If so, that *is* a reason to choose it.

Overall, delivering a web app is much harder than a native app because of the additional layers of complexity involved. Be prepared for ridiculous quirks between browsers. Mostly between everything vs. IE of any version, and between IE versions, but also between the non-IEs.

Good luck!

-Lee
 
thanks so much.

I definitely will not be the only person on the project if it happens, we've got a good group of people that could help out for sure. We'd also have some 'beta' testers on hand.

Overall, I'm just looking for what it would take to make this a reality at some point in the next few years, even if we start relatively small and grow in features. From what I've seen and read, i am absolutely positive it can happen, it is only a matter of learning how to make it happen.

I think the thing about making a webapp instead of a native app is that we'd not be stuck with windows or another platform, we could pretty much run linux and firefox on really old hardware in the lab and be able to interface with it with no issue, or even make a iPhone/blackberry available site for mobile users, all in one place.

Looks like I need to see about taking some database and web design electives next year! Not sure if they're included in my coursework but then again I just made the decision to do the CS minor. when I go to advising next week I'll get the info on it. Either way, i love a good challenge and this sounds like it will be one, learning all this stuff and them implementing it.

Thanks for the reply, definitely was helpful.
 
I guess another question is, in the web-app design process, after I learn HTML what should I move to next? I really like what RoR has to offer (although I know very little even about HTML, I have been able to follow some guides on the rails site since RoR is included with Mac OS X), so should I learn Ruby first or would there be another step between HTML and Ruby? Would Java be worth checking out? I'd rather build something that didnt require some kind of browser install plugin like activex (the devil) or some other thing that would prohibit the app from running properly on any platform, desktop or mobile.

thanks.
 
My Experience

I unfortunately have no experience with RoR, i've heard about it here and there, sounds like the way a lot of people are going.

I started learning web application development using a LAMP (Linux, Apache, MySQL, PHP) setup using Ubuntu years ago. This was ridiculously easy to setup and there is an extremely large community out there to help you out if you can't find the answer via google.

I am now developing for enterprise corporations using Java/JSP. I use a LAMP environment for my own efforts.

My suggestion would be to choose between a LAMP setup or RoR. My recommendation is LAMP with the following reasons:

1) Easy setup
2) PHP and MySQL are very well supported by a large user community
3) PHP is probably one of the easiest server side scripting languages to learn while providing you with enough flexibility to create some really kick *** web apps

On a side note **** important! if you do choose PHP/MySQL, look into a PHP framework. I believe the most popular ones are CakePHP and Zend... Propel is a object relational mapping framework(if you don't use cakephp or zend but want something to ease the burden of persisting to the db).
 
Consider Java Server Pages, Enterprise Java Beans and PostgreSQL. It has a long and stable history as far as web technologies go which is good if you looking for a long term solution. It also gets lots of use in the enterprise which is good for job prospects in the future, and above all, I find Java quite a fun language to use.
 
I'll also throw in a recommendation for Python + Django. Like Ruby/Rails, this is an excellent combo and personally (not coming from a web background) I found it pretty easy to use. Google also chose it for their App Engine (although they are adding some more languages), so that's also an endorsement of sorts. Of course the guy who invented Python works at Google so it's not that surprising, but still. Like Ruby/Rails developers, I don't hear very much grumbling from Python/Django devs. It comes down to which language you prefer really, as they can both do similar things. I don't really dig PHP as a programming language, but the previous poster is right: a lot of people use it, it's capable, and there's a lot of support available for it.
 
I do have a few years experience using Ubuntu (about to put it on a file server here at work - lets hope it works so we don't have to pay out $700 for windows) and I'd probably use it for any kind of database or web server for being more flexible and, of course, free.

All of your comments have been helpful.

So after I learn HTML and feel comfortable in it, what is my next step in web development languages? Would PHP be an okay next step? Or Java? is there something I need to learn after HTML before I get into any of these? I think i'd like to learn a bit of each of these and more just to see which I like/would rather use for this and other projects.

BTW - Just got a pretty good beginning HTML/CSS book from amazon yesterday. No experience in HTML, but just reading and doing the sample markup last night for an hour is pretty fun! I wish I had known it isn't that bad a few years ago, I'd have tried to learn it then.
 
. . .

So after I learn HTML and feel comfortable in it, what is my next step in web development languages? Would PHP be an okay next step? Or Java? is there something I need to learn after HTML before I get into any of these? I think i'd like to learn a bit of each of these and more just to see which I like/would rather use for this and other projects.

BTW - Just got a pretty good beginning HTML/CSS book from amazon yesterday. No experience in HTML, but just reading and doing the sample markup last night for an hour is pretty fun! I wish I had known it isn't that bad a few years ago, I'd have tried to learn it then.

My suggestion is to pick one of these two frameworks mentioned (Ruby on Rails or a Python framework like Django). I have not used either of them, but my rationale for picking them is that they use languages that can be used easily outside of the web server on the command-line. Java is a compiled language and if you are already using/learning C then there isn't a compelling reason to use another one of those (except for the object-oriented learning). Ruby and Python both support object-oriented concepts.

It's possible that PHP does this too, but it did not used to be separate from web usage and I don't know about its object-orientedness.
 
I would say the next step, or even part of the first step, is learning javascript and how to manipulate the DOM with it to help drive the UI side of the app. You don't necessarily have to mess with XMLHttpRequest right now, especially considering the cross-browser challenges since IE didn't allow this to be done in a javascript-only manner in IE7 (when MS developed this feature it was activeX only). If you can say "IE6 is not supported", great, but most of us don't have that luxury.

Once you can do some simple field validation with javascript (is that thing a number, is that thing a date, etc.), then you can move on to your dynamic content generation using a web-server and whatever module that it will use to actually generate the HTML to the client. You seem to be pressing on what exactly you should learn for this, and you've gotten a lot of recommendations.

I haven't used a lot of these, so I can't give a very well-informed suggestion. I used PHP for a very short time to implement RSS in an existing content-management platform. I hated it very much, and made my soul ache. Your milage may vary, it may be the best thing since sliced bread in your eyes. I have zero experience with Ruby on Rails or any Python frameworks, so I can't say if they are good or bad. I can reiterate that a number of these are popular. Popularity should mean ready access to support, but it doesn't mean technical superiority. I have read about the challenges of scaling rails, but large scaling may not be an issue for you, and these challenges may have been mitigated since i read about it. I would just try to read about a few and see what the "feeling" is around the internet, how clear their documentation is to you, the tone and activity level on their forums, etc.

If you want to partition your app into business logic in an application layer, and a layer that accesses this in your "presentation" layer at the web server, this might affect this decision. For your goals this is not necessary. As far as i understand it the frameworks like Django and RoR are designed to do everything for you in the same layer, accessing your backing store directly and generating the HTML, etc. If you do want to divide the app up, you should pick a language that you can do both in, because it would be more difficult if you had to switch from language to language when you need to write a new API method vs. authoring a new page, etc.

Hopefully any framework you choose is easy enough to pick up that you won't be making a huge mistake with anything you choose now. Hopefully if it doesn't meet your needs you can pick up another without too big of a challenge.

So I'd say the next step is javascript, then whatever is going to be doing your presentation in the web server. It can't hurt to take a look at RoR or Django. I have written no Ruby and only a little Python, but they are both modern languages that you shouldn't have too much trouble picking up. I have spent some time in the python docs and i think they are quite good, so that might make me lean in that direction.

-Lee
 
I'm a big fan of Django myself. My main reason for picking it was I prefer Python but a wide margin over Ruby. Make sure the underlying language of the framework you pick is something you like - you'll be writing a lot of it.
 
The language doesn't matter. Just pick one and learn about the best practices for that language.

Same for the database (between PostGreSQL or MySQL). Avoid holy wars. If you set the project up right, you can abstract the database in the application so you can use any DB, but if you just pick one it won't be the end of the world.

I would learn the server-side stuff before the client-side (JavaScript), simply because you have to have the former, and you can skip the latter.

For the actual project, the first step is to plan what this app is going to do: user's needs, etc. Feature creep is unavoidable, but try to minimize it. Get a lock on how the various data relates to real world (company) use— my big web app is based on some faulty assumptions that management/users never bothered to clarify until four years into the app's use :mad:.

re: command line: PHP works beautifully as a scripting language too in a pinch. If you really need speed, write the key command line components in a compiled language and compile them. On a modern server, just about everything is fast.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.