(I know this is potentially an IMHO post, but there may not actually be many ways to do this at all, so I’m hoping that it can stay in GQ)
My wife and I run a home based business. The business is travel related, but it’s different and proprietary enough that I can guarantee that there’s no software available to do all I need in order to run it (I’m currently keeping track of stuff using a combination of Excel spreadsheets and Microsoft Outlook). I’d like to write the software to do what I need.
Some background on myself: I’m a computer professional, having started out as a system admin/programmer back in '89 (I even have a BS in Comp Sci), but I’m now a full time database administrator. I was a pretty fair C programmer in my day, but lately all the stuff I write is Perl, Unix Shell and SQL, none of which are really suited to a modern GUI-based application (I need a GUI because my wife isn’t really intuitive when it comes to computers). In the past (we’re talkling 9 years past now) I’ve done some VB but I found the language clunky and building the UI panels tedious.
I need the software to be able to track inventory, customers, reservations, be able to send out emails, pop up reminders, track cash, and do most other business-related tasks (there’s also some unique stuff that I’m not going to bother mentioning because explaining it would really take too long and isn’t necessary for the purposes of this discussion). I know that there are packages out there that will do most of this stuff, but I want everything integrated together, and I don’t want to start out having to hack a commercial app so I can add my own stuff in another application, just so they can share data.
I’d have a database as a back end (probably MS SQL Server) but I need some sort of tool that will let me build the UI and the logic. When I started out as programmer in the late 80s, 4GLs were all the rage, and if there was a modern version of one of those, it would probably do the trick. I’m willing to spend several hundred dollars on a development package if I’m sure it will do what I need, as the amount of time saved once this software is developed would be significant. Even though I’m really a Unix guy at heart, preferably this would be a Windows-based application, although web-based with a Linux back end server would be acceptable. We must be able to run the client on Windows, at any rate.
I’d suggest taking a look at Microsoft C# and seeing if it’s up your alley… as I understand it, it’s an attempt to combine the best features of VB with syntax and language features that would be attractive to old C/C++ nerds.
What exactly did you find tedious about building user interfaces with VB, by the way?? You might find some of the corresponding features tiring in C#, or you might not. Worth a try to take a look I think.
As a C programmer you will find the syntax a doddle and though the 4GL GUI builder (Windows Forms) works superficially very much like VB, the code you write is nothing like. Connecting to a SQL Server database should be a doddle (I’ve only used on top of Oracle but even that was seamless).
The only barrier is that it is totally OO, though if you start out just using it as a 4GL the learning curve needn’t be that steep.
I never learned C++, or any real object-oriented language (Perl has some stuff, but I’m still not 100% up to speed with the OOL bits).
I don’t know if I could state exactly what I found tedious about building panels; if there’s no alternative, and C# is usable by someone who knows C but not C++, I guess I could take a look…
Hmm…you know C, done some PERL before and know SQL. I would join the crowd and say “C#” or “VS.NET”, but another alternative to explore is to develop it in PHP. Just install apache, PHP and mySQL on your PC, lauch apache, and you can use your own web application without the need of a remote server.
There are also free e-commerce packages or content mangement stuff for PHP. One example woud be oscommerce - http://www.oscommerce.com/
As a huge Mac fan I feel a little guilty about this but, I’ll second Clanger’s suggestion. .Net makes working with a database backend a no-brainer, and if you are thinking about a web-based interface, this is a match made in heaven.
It is way easier to get into OO through C# than through C++ (was for me anyway). C# is a much cleaner language than C++ (what isn’t). You can use the IDE to build screens the way you would in VB without having to use OO as such at all. It builds all the classes, event handlers and so on for you. Also it doesn’t hide any of that stuff, all the source code it generates is there to read, and alter if you feel adventurous, unlike the code generated by the C++ environment with the
// Auto generated code, do not edit or your PC will probably explode
If you just want to get off the ground quickly you can use Access to do this while your developing your program.
I know many people think of it as a toy and not really worth considering (and I may get beat up for this ), but if you have a small number of users, which it sounds like you do, you can knock out something like what you described pretty darn quick in Access.
What he (she?) said. For quick and dirty you want to use PHP code to generate a web application for your GUI. There are lots of PHP websites, the official reference is on-line, there are libraries to do many different things, database access is very easy and many, many, people are using these tools to do similar things.
Having said that this would clearly get down to a preferences issue, many people will disagree with me choice, and I’d use C or C++ in a different scenario.
I’ve never really used the ‘visual’ bits of C/C++, so I always use other tools when I need a GUI. But any GUI I need is only for my use, or as a tool, not anything important.
You can download a free version of Visual C# (Visual C# 2005 Express Edition) not to mention the Visual C++ Express Edition, Visual Basic Express Edition, Visual J# Express Edition, Visual Web Developer Express Edition, and SQL Server 2005 Express Editon from here. All of them are free, and as the FAQ says:
By a substantial margin, including expandability, easy learning curve, and potential for concurrent use by more than a hundred users, it’s the tool for the job.
If you’d like, you can call me up (or join me in an instant-message session) and I’ll build you an hour’s worth of FileMaker prototype which you can then refine and polish. It sounds very straightforward based on your description.
I guess I’ll buck the trend here and recommend the Java route.
Some Pros:
It’s all free. There are no limitations to anything you can use for commercial purposes. You can use the exact same software Google, Amazon, Yahoo, etc use to run their systems with no cost to you.
Almost all the applications you would use are open source meaning that there is a whole lot of developers out there working to improve the software all the time.
Lot’s of modules to plug and play together. Alot of people have built tons of applications that available for free on the web that you can plug into your system, and have the source code to modify it to your heart’s content. From my experience, there are alot more of these available than for the C# world where code is kept more proprietary. For example, some of the functions that I do that use free web modules: real time PDF creation and printing, advanced email creations and sending, web based data charts and graphing, automated UI layout, advanced DB access (to triggers and stuff like that).
There is no limit to what you can do. This depends on how far you think this application is going to grow. The more simple languages to pick up (like PHP, PERL) will eventually hit a ceiling of how much you can expand. (But honestly for a 2 to 10 person business I don’t think you’d hit a performance ceiling with any mature product out there.)
All can be run on the web so you get all the advantages there (no clients to update, easier upgrade path, etc)
Some Cons:
I think the learning curve is going to be steeper than PHP
I develop and maintain enterprise-level software currently running B2C, B2B, and backend applications on the web and it is all open source. I run two different set-ups of code depending on how much fire-power is needed. They all run on Linux (Redhat at our current hosting facility). For a lighter weight install I use Apache for the web server, Tomcat as the Java Server Pages server (this is the bit that holds all the business logic, talks to DBs, etc.), and PostgreSQL for the DB (an amazing heavy-duty open source DB that has been around for decades. If you are a DBA don’t even think about using MySQL and go straight to Postgres.) For heavier duty stuff I use Apache, Tomcat, JBoss which is an open source J2EE application server that would replace the application logic bit (this allows massively parrallel and distributed applications, but for your issue it would allow you to run 2 synced servers that would allow redundency and business continuity if one server goes down if that is important for you.)
Also, the development environments are great. The open source environment is called Eclipse and has tons of open source plug-ins for almost anything you would want to do. Some friends of mine work in a .NET shop and had to do some Java work for a new project (by the way basic C# and basic Java are nearly identical in ease of use and power) and they were amazed by how much more advanced and easy to use Eclipse is. Borland JBuilder is also pretty much free now (the Personal version at least).
As an aside to all of the suggestions in this thread… most of us have been recommending web-based solutions which means you will have to build user-friendly UI’s from HTML. This in and of itself is a big task… and a major problems for average developers that don’t really have an eye for design. I have 2 suggestions here. The first is to hire a good web designer that can build you some templates with examples of buttons and fields you could use. Than you can cut and paste those elements around onto new pages when you need them. You can use a open source structure like Struts to help you control and layout the webpages. The second option is to use Swing. Swing is a Java tool that allows you to build client based UI’s. So you would build a Swing application using Eclipse and the Swing drag and drop type plug-ins, and than that Swing application can talk remotely to something like JBoss on the backend.
Another plus with the PHP route is that user interface is through a web browser, making it a snap to add another terminal if you business needs require one… you could even acccess it remotely if you set up the right rules for your router/firewall.