Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I'm currently trying to build a personal website to create a presence on the web for myself. My plan is to include content such as my resume, any projects that I have done on my own and links to open source projects that I have contributed to, and so on. However, I'm not sure which approach would be better from a perspective of "advertising" myself, since that what this site does, especially since I am a software developer.
Should I use an out-of-the-box system and extend it as needed, with available modules and custom modules where needed or should I custom build a site and all of its features as I need them? Does a custom site look better in the eyes of a potential employer who might visit my site?
I've toyed with this idea in the past but I don't think it's really a good idea for a number of reasons. Firstly, there are a number of places that can take care of most of this without you needing to do the work or maintenance. Just signing up for a linkedIn account for example will allow you to get most of your needs catered for in this regard. You can create your resume there and bio information etc and make it publicly viewable. The other issue with your "own site" is that if you don't update it often, the information gets stale, and worse yet, people have no reason to go back because "nothing has changed" - and that's not much of an advert for you is it?
Now that I've said all that, I'll make another recommendation. Why not start a blog instead?! If you've got decent experience, why not share that. I'd be willing to bet that this will be the best advert for your skills because:
It's always updated (if you post often)
It's not like you're looking for work doing it - but your (future) employer, or their developers will check it out anyway to get a better insight into your character.
Putting something on your resume doesn't mean you can do it. I'm not saying that you'd lie about your skills :-), but there's no argument about your ability when you're writing articles about the stuff, getting comments and feedback, and better yet, learning EVEN MORE about your passions.
Best of all - you can run your blog from your chosen domain and also point to your resume that is stored in linkedIn. Just an idea...
That's my two pennys worth on that - hope it helps you come to a decision!
If you are a web-specific developer I would go with a custom site, but if you focus more on desktop applications or backend technologies, I think an out of the box system would be fine.
A nice looking, default, off the shelf, complete website could be more impressive than a poorly done, broken, tacked together, incomplete website. Perhaps start with something "off the shelf" but nice looking, keep it simple, professional, and then eventually add more custom functionality, style and content. Potential employers may like to see that you are capable of reusing tried and trued solutions instead of trying to create everything from scratch without a good reason. Or you could spend time combining great components into something even better than the sum of the parts, as Jeff Atwood talks about extensively in the Stack Overflow podcasts. Stack Overflow is a good example of writing lots of custom code, but combining that with some of the best Web 2.0 technologies/widgets/etc. into something coherent, instead of trying to prove that they could implement x/y/z from scratch.
(On the other hand, it's really fun to build your own login system, blog, or photo gallery. If you really enjoy it and you want to learn a lot or create something new and different, then go for it!)
Here's what I did (or am currently doing). First, use an out of the box solution to begin with. In my case, I used BlogEngine.NET, which was open source and easy to set up. This allows me to put content on my site as fast as possible. Now, I can continue to use BlogEngine.NET, and skin my site to give it more personality or I can start rolling out my own solution. However, I haven't found a requirement yet that would give me a reason to waste time building my own solution. Odds are you probably won't either.
I don't think it matters if your site is blatantly using a framework or other "generic" solution. The real question is "is it done well, with taste?" If you are using an out of the box solution, you should take the time and pay attention to details when customizing it as if you were creating it from scratch.
Alternatively, if you're looking for a great learning experience and something to spend a lot of your free time on -- write it yourself. But know that you are re-inventing the wheel, and embrace it.
edit
A recent post from 37Signals, Gearheads don't get it, really sums up a good point about not focusing on the technical details, but "content and community".
Reinventing the wheel is not such a great idea when you are building a personal site. Building your own CMS is fun, and to some degree is something to brag about, but not so much features you won't have the time to build and all the security holes that you won't have the time to fix.
It's much better to pick a good, well-established engine, build a custom theme, and contribute a module or two to it: you'll be writing code that you can show off as a code sample and at the same time creating something useful.
Knowing your way around an open source CMS is a good skill in just about any job: when your boss says - hey, we need a three pager site for client/product/person X in 10 hours, you can say - no problem.
For a simpler portfolio site, Wordpress might meet your needs.
You can set up 'static' Wordpress pages for contact information, various portfolios, a resume, etc. This would also give you a blog if you want to do this.
Wordpress does give you the flexibility to "hide" the blogging part of it and use it basically as a simpler CMS. For example, your root URL of example.com could point to a WP static page, while example.com/blog would be the actual blog pages.
If you self-host Wordpress on your own domain (which I really would recommend instead of going through wordpress.com), it should be trivial to set up a few subdomains for extra content. For example, downloads.example.com could host the actual downloads for projects you've developed linked from the Wordpress portfolio pages. Similarly, if you're doing a lot of web work, a subdomain like lab.example.com or samples.example.com could then host various static (or dynamic) pages where you show off sandboxed pages that are not under the control of Wordpress.
Keep in mind though that you'll want to make your page look good. A sloppy looking site can scare away potential clients, even if you are not looking to do any web work for them.
Putting your resume up online somewhere helps, I get a lot of recruitment emails from people who happened on my resume via googling. However I agree with ColinYounger in that you'll probably get more bang for your buck from LinkedIn.
My advice is this - if you want to take the time out to LEARN a CMS or something, to better yourself, then why not make your first project in one be your homepage?
Maybe enlighten us as to the "features" you want to have on a personal homepage? Outside of a link to an HTML resume and perhaps some links to things you like, not sure exactly what the features of a homepage would be...
It really depends on:
a) what services you provide
b) what your skill level is when it comes to web design/development
If you are primarily a web applications developer then running an off the shelf product or using blatantly using DreamWeaver to develop it may not be so smart -- or maybe your clients aren't adept enough to notice?
Likewise if you're primarily a web designer then it is probably a good idea to design your own website.
Just as a side question and following up on my 'ego trip' comment: why would you take anything on the web to be 'true'? IME printed submissions, while not necessarily accurate, tend to be slightly less, erm... exaggerated than web submissions.
Do those responding\viewing ever hire? I wouldn't google for a candidate. I might ego surf for a respondent, but would ignore CVs.
Rounding back to the OP, I would suggest that you need to SHOW what you're good at - participate in Open Source projects and POST on their forums, link to projects you can post details of and generally try to show what a Good Employee you could be. Just telling me that you're good at [insert latest trend here] means diddly.
I have come to see that the best way to advertise yourself is to put quality content out there. If you write about the technology that you have experience in, maybe create a few tutorials, and if you do all that often enough, that shows some authority in your chosen field of work.
This alone is one of the best advertisements. However, you also want to show passion. And online, that can be shown through how meticulously your site is done (it doesn't have to be a super great UI or something), but it should be neat, clean, and professional. It doesn't matter if its out of the box, or custom designed.
Either way, you will have to work hard to make it look good.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
Improve this question
I help make promo/event websites that shoot up and come down anywhere from a month to six months.
Clients ask for minute text edits a lot during the creation period, and during the live period they sometimes like to swap out images or text every few weeks to function as updates. It's inconvenient for the client to do this all through emails and phone calls.
I have been asked to do research to find a CMS that will let the clients do minor edits like this.
I was pointed to big dogs like Wordpress, Drupal, Joomla, and Typo3, but these are all very heavy-handed.
I settled on trying ImpressPages because of its inline editing and undo log but it too began to ask for a lot - I tried to adapt an old project to it but it insists all content calls and form submissions adhere to its framework so it's definitely not easy to drop in.
I don't need a CMS that handles page creation or any sort of overhead.
What I need is a CMS that doesn't care about any facet of the page other than editing text, swapping images, and probably a pretty secure login. Since we take care of the backend and it's only live for a few months it doesn't need detailed project maintenance and certainly the client should not have access to that.
Do you have any suggestions for lightweight CMSs that are easy to pop into a project?
11/11/14 EDIT:
Results so far:
I think a good alternative for this problem is Create.js and one of its children ContentBlocks, however they require node.js and REST which I have yet to really figure out. Quite different from what I know. However, this system allows for editing in-line on the page and saving right there, with no overhead menus or settings or anything. Just edit divs. Here's a link:
http://createjs.org/
children projects can be found by snooping the github
There are more CMS options out there than almost any other web technology. That said some are more and less easy to customize. It sounds like you've steered away from most of the common answers, although I really think you might want to look at WordPress again, with a little setup work and customizing the admin page it can be super lean and "dead simple" like Tumblr's interface.
That said there are a few more good options that are very light and yet full of potential!
Database back end
Perch – This one isn't free, but it's not expensive. It is built with the designer in mind (by other designers) and is also built with the end user in mind, thus it is light, flexible and the interface is not daunting to the non dev. And has very very good support.
Cake PHP – A lovely bit of OSS work, that will need some setting up by you or another dev, but once you have boilerplate/templates it should be simple to roll and unroll small sites.
Anchor – Another OSS project that seeks to be powerful but slight in it's footprint, but probably more structured (less pre-dev time required) than Cake PHP.
Flat file
No DB required, the user just puts their stuff in folders (like on their desktop) and then they get webpages - kinda brilliant and maybe just what you're looking for.
Pico – Uses PHP templates, but a simple file folder based structure, so there is very little learning curve to running or setting up the site.
Kirby – While this is not free, it is very well supported by original developers. It is designed with the goal of being dead simple to use and support.
Dropplets – This one is very very simple, possibly too simple, but there is very little to make a confusing interface out of. This one is very blog focused.
Hope that helps guide your search, as this list is far from exhaustive.
I have also been looking something easy and lightweight for clients to use for days. There are tons of options but there always seems to be something a bit off.
Finally yesterday I found two very good candidates:
Really impressed with both of them have been developing with Drupal, Conrete5, Wordpress.. but this is what simple sites need! Wow!
TidyCMS
http://tidycms.com/
Free / cheap license
Static pages hosted on your site + a connector that connects to the hosted editor. Basic package free.
"TidyCMS is a flat databaseless CMS that makes HTML-files editable and dynamic."
A Finnish startup who are creating a super simple product!
It could not be easier you just throw in a static html-template and put a TidyCMS-conector folder and browse to the subfolder. The subfolder connects to the hosted editor. The editor lets you click on page elements to make them editable. The interface is pretty okay. A bit rough though still, with some glithes. Seems to be in heavy development, but it's already pretty usable. The UI hangs sometimes, for instance when saving changes and you have to reload.
Instant Update
http://instant-update.com/
Open Source! Free! GNU General license.
This seems to be more mature. Also handles static html/php -files but the CMS seems to need a database. The inline editing is pretty good and stylish. The system also has backend with simple user and page management. Still in development by a small group of guys. I'm sure they'll welcome more people.
I am looking to make a small website that will be used regularly by only 80 odd people. It would contain a home page with a few widget like parts (calendar, upcoming events, chat, news). It might have a forum, but that would be low key. It would also (if it is possible) have a link to google groups mail. I would also liketo include a jainrain style openid/google account login for the site as well as local login. The site would be in part multilingual, if only the back end in english and the front another language.
Now to the "please dont shoot me" part. I am not looking for a specific solution (drupal, plone, wordpress) - well not as much as a general direction. Hopefully this will be of use to others in the same situation in the future.
I know python (as well as other non web orientated languages) and have past experience with two several month projects using web2py. I have yet to use a CMS, but have installed and played around with wordpress and plone over the last couple of days.
To the question. Is a CMS the right choice for something of this style. From what i have seen of them i really like the bits that are done for you out of the box, and i can tolerate the learning curve - but wordpress for example seems a bit to article/post orientated, and CMS's look to be aimed to provide the average non-coding admin the ability to change the site. Which is not needed here. I have done quite a bit of googling and comparison shopping of the various CMS's out there, and get that you can use it for static pages also. But should i be looking in an entirely different direction altogether?
I imagine that a framework like django or web2py are beyond overkill (and would take way too long for the effort i want to invest). And that anything can be done with wordpress etc given enough effort. But is something of this size with these features suited for a CMS, or should i be looking to do manually or otherwise?
I get the impression that this is not the type of question that is liked here - if so at least writing it helped clarify the problem for me a bit.
Thanks - and don't shoot!
I understand your website will be very small, but never say "never". You should plan with taking into account the possibility that your site will get bigger, even if you and your clients are sure that the site will not get bigger. In other words: it's better to have a solution which works for your small site even if it will increase than having a solution which will not support larger traffic.
Also, there is absolutely no point in reinventing the wheel. It's better to use a CMS (especially because you can get pretty nice CMSs for free), because they already have nice features and their new versions will be even better.
"Thanks - and don't shoot!"
You're welcome... BANG :D
As I'm starting to develop for the web, I'm noticing that having a document between the client and myself that clearly lays out what they want would be very helpful for both parties. After reading some of Joel's advice, doing anything without a spec is a headache, unless of course your billing hourly ;)
In those that have had experience,
what is a good way to extract all
the information possible from the
client about what they want their
website to do and how it looks? Good
ways to avoid feature creep?
What web specific requirements
should I be aware of? (graphic
design perhaps)
What do you use to write your specs in?
Any thing else one should know?
Thanks!
Ps: to "StackOverflow Purists" , if my question sucks, i'm open to feed back on how to improve it rather than votes down and "your question sucks" comments
Depends on the goal of the web-site. If it is a site to market a new product being released by the client, it is easier to narrow down the spec, if it's a general site, then it's a lot of back and forth.
Outline the following:
What is the goal of the site / re-design.
What is the expected raise in customer base?
What is the customer retainment goal?
What is the target demographic?
Outline from the start all the interactive elements - flash / movies / games.
Outline the IA, sit down with the client and outline all the sections they want. Think up of how to organize it and bring it back to them.
Get all changes in writing.
Do all spec preparation before starting development to avoid last minute changes.
Some general pointers
Be polite, but don't be too easy-going. If the client is asking for something impossible, let them know that in a polite way. Don't say YOU can't do it, say it is not possible to accomplish that in the allotted time and budget.
Avoid making comparisons between your ideas and big name company websites. Don't say your search function will be like Google, because you set a certain kind of standard for your program that the user is used to.
Follow standards in whatever area of work you are. This will make sure that the code is not only easy to maintain later but also avoid the chances of bugs.
Stress accessibility to yourself and the client, it is a big a thing.
More stuff:
Do not be afraid to voice your opinion. Of course, the client has the money and the decision at hand whether to work with you - so be polite. But don't be a push-over, you have been in the industry and you know how it works, so let them know what will work and what won't.
If the client stumbles on your technical explanations, don't assume they are stupid, they are just in another industry.
Steer the client away from cliches and buzz words. Avoid throwing words like 'ajax' and 'web 2.0' around, unless you have the exact functionality in mind.
Make sure to plan everything before you start work as I have said above. If the site is interactive, you have to make sure everything meshes together. When the site is thought up piece by piece, trust me it is noticeable.
One piece of advice that I've seen in many software design situations (not just web site design) relates to user expectations. Some people manage them well by giving the user something to see, while making sure that the user doesn't believe that the thing they're seeing can actually work.
Paper prototyping can help a lot for this type of situation: http://en.wikipedia.org/wiki/Paper_prototyping
I'm with the paper prototyping, but use iplotz.com for it, which is working out fine so far from us.
It makes you think about how the application should work in more detail, and thus makes it less likely to miss out on certain things you need to build, and it makes it much easier to explain to the client what you are thinking of.
You can also ask the client to use iplotz to explain the demands to you, or cooperate in it.
I also found looking for client questionnaires on google a good idea to help generate some more ideas:
Google: web client questionnaire,
There are dozens of pdfs and other forms to learn from
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I'm working in a small company and weeks away from deploying a web-app that will be used a lot. Everyone at one location will have to learn to use it, and although I think it's pretty easy and intuitive I may be biased.
I've written a help guide with plenty of screenshots that's available on every page, but I'll still need to train everyone. What's the best way? How do you take a step back and explain code you've been working on for weeks?
First try to avoid the training:
Perform usability testing to ensure your web app is intuitive. Usability testing is a very important aspect of testing and it is often ignored. How you see your system will probably be very different as how a new user sees your system.
Also add contextual help as often as you can. For example when I hover over a tag in stack overflow, I know exactly what clicking it will do, because it tells me.
Also this may seem obvious, but make sure you link to your documentation from the site itself. People may not think of looking in your documentation unless its right in front of their eyes.
About training documentation:
Try to split up your material into how your users would use the system. I personally like the "trails" option that Sun created for their Java tutorials. In this tutorial you can do several things, and you can chose on which trail you'd like to go.
Support random reads in your help documentation. If they have a task to do in your web app, then they should be able to get help on that without reading a bunch of unrelated content.
Make sure your documentation is searchable.
About actual training sessions:
If you are actually performing training sessions, stay away from explaining anything related to your code at all. You don't need to know about the engine to drive a car.
Try to split up your training sessions into very focused aspects of your system. If you only have 1 training session available to you then just do one specialized use case of your system + the overall description of the system. Refer to the different parts of documentation where they can get help.
Letting the community help itself:
No matter how extensive your documentation is, you'll always have cases that you didn't cover. That's why it's a good idea to have a forum available to all users of the system. Allow them to ask each other questions.
You can review this forum and add content to your documentation as needed.
You could also open up a wiki for the documentation itself, but this is probably not desirable if your user base isn't very large.
Few ideas:
Do you have some canned walk-through scenarios? Don't know if it is applicable for your product, but I built a pretty substantial product a couple years ago and developed some training modules that they'd work through - nothing long, maybe 15 minutes tops for each one.
I put together a slide presentation that hit the highlights to talk about what it does. I would spend about 10 minutes going through the app's highlights to familiarize them with it before doing the hands-on stuff.
People don't tend to read stuff, unfortunately. You could put hours and hours into a help document, and still find that folks simply don't read it or skim over it. That can be frustrating. Expect that answers that are in your guide will be the topic of questions your users will have.
Break up any training you do into manageable chunks. I've been to a full-day training exercise before and the trainer broke it into short pieces and made it easy for me to get the training topic in my head. You don't want to data-dump on them because their eyes will gloss over and you'll lose them.
Ultimately, if your app is highly usable, it should be a piece of cake. If it isn't, you'll find out. You might want to have a few folks you know run through your training ahead of time and give you constructive criticism on it. Better to fix it before the big group is trained. You'll be more confident in the product and the training materials (whatever they are) and you'll likely have a better training experience.
If applicable, provide an online help/wiki/faq for them. Sometimes that is helpful.
Best of luck!
You should really have addressed this issue a lot earlier in the development cycle than you are doing.
In my view the ideal scenario for corporate software is one where the users design their own application and write their own documentation and I always try to strive for this. You should have identified key users early on and designed the system with them (I try to get my users to do basic screen designs and menu layouts in Excel or similar - then I implement that as static pages and review before writing a line of significant code, obviously they won't get the design right first time, but it's your job to guide them - and ideally in a way where they think they came up with the correct design decisions, not you :-) ).
These users should then write the user documentation from this design in parallel with you developing the system. I have never seen help documentation delivered by a IT department/software company used significantly in a corporate setting. Instead what happens is the users will create their own folder of notes and work-arounds and refer to this (in fact if you're ever doing system analysis to replace an existing system finding the 'user-bible' for the old system is a key strategy). Getting the users to write their own documentation up-front simply harnesses what will happen anyway - but this is vastly easier if the users feel they have ownership of the system because they designed it themselves in the first place.
Of course this approach needs commitment and time from your users, but generally it's not that hard a sell. It's trite, but working as a facilitator so the users can develop there own system rather than as a third party to give them a system pretty much guarantees user acceptance.
As you are where you are you're too late to implement all of this, but if you can identify a couple of keen, key, users and get time from them to write their own documentation then that would be a good move. If you can't get even that then you need to identify an evangelist who you can train to be the 'departmental' expert and give them 110% of your energy to support them.
The bottom line is that user acceptance is based on perception, and this does not necessarily correlate with how usable an system actually is. You have to focus on the group psychology of this as much as the reality of the system, which tends to be tricky for developers as we're much more factually based than most people.
I'll be looking into something like this too in the next few months.
In your case, hopefully the UI has already undergone user acceptance testing. You say you work in a small company. Is it possible to get the least tech-savvy person there to try it out? In fact, get them to try it out without any guidance from yourself except for questions they ask. Document the questions and make sure your user-guide answers them.
The main thing for me would be logic and consistency. If the app's workflow relates logically to the task it has been designed to accomplish and the UI is consistent you should be OK.
Create a wiki page to describe the use of your system. Giving edit rights to the users of your system lets the users:
update the documentation to correct any errors in the initial release of documentation,
share any tips on usage they may have found.
share unusual uses for the system that you may not have thought of.
request features.
provide any workarounds they've found while waiting for the new functionality to be implemented.
Try a few users first, one or two in a small company. Mostly watch, help as little as possible. This tells you what needs to be fixed, and it creates an experienced user base - so you are not the "training bottleneck" anymore.
Turn core requirements/use cases/storycards into HowTo / walkthroughs for your documentation.
For a public training, prepare a 10..15 minute presentation (just that, not more!) that covers key concepts that the users absolutely must understand, than show your core walkthroughs. Reserve extra time for questions about how to solve various tasks.
Think as a user, not as a techie: - noone cares if it's a SQL database and you spent a lot of time to get the locking mechanisms right. They do care about "does it slow me down" and "does something bad happen when two people do that at the same time". Our job is to make complicated things look easy.
It may help to put the documentation on the intranet in an editable form - page "comments", or wiki maybe. And/or put up a "error wiki" for error messages and blips - where you or your users can quickly add recomendations, workarounds and reasons for anything that does not go as expected.
Rather then train all those people I have chosen a few superusers (at least one person from each department) and trained them to teach the rest of the employees. It is of course vital that those super users are
well respected in their departments
able to teach
like the application
The easy way to ensure that they like the app is to have them to define the way it should work :-). Since they should work with this app each and every day they are the prime stakeholders, no matter what management states
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 6 years ago.
Improve this question
I have the task to build a web-site for a smaller non-profit organization. I have a bit experience with ASP.NET but because ASP.NET hosting is rather expensive here in germany (we will also need a lot of webspace and traffic) and aslo because there are quite a hughe list of features I think I should go with a PHP/MySQL based CMS (correct me if I am wrong). The question is wich one? There are are so many free CMSs out there. If I tell you what I need, can you tell me what would be a good choice?
Here are my requirement (sorted by priority):
Ease of use (installation, configuration, maintainance) for me who builds the site but also for the members of the organisation they must be able to easily change the the content of some main pages, add supages, add a new mailinglist upload a file to the repository etc.
A membership/role management system. Based on the role of a member access to certain subpages, subforums or folders in the file management system etc. must be restricted. Only certain roles must be allowed to add new mailinglists or moderate the forum.
A mailingsystem that allows me or the members of the organistation to add new adresses, maillinglists or newsletters.
A file management system. Members should be able to upload arbitary files on the server and browse them via a web frontent. Access to folder should be restrictable based on the member rights.
A pulbic forum with private subforums.
Localization. As much as possible of the final site (if not everything) that is presented to the visitor of the site as well as to the members who maintain the site should be presented in german.
Good control over design/look and feel of the overall site. I should have good control over how I want the site to look like.
A lively community with enough momentum to find ressources and help when I am lost.
Extensibility. In case there are some smaller features missing or f the behavior of an existing feature is not quite the way I want it, it would be cool to easily add it myself.
As mentioned by others, Joomla might be a good option for you, although Wordpress may also work (and it's easier). However, I highly recommend that you check out OpenSourceCMS.com, which hosts demos for many of the free and open source CMS's, blogs, forums, shopping carts, etc. For most of them, you can try out both the admin and the frontend. Spend some time looking them over and then when you find some that you like, investigate them further by going to their websites.
Concrete5 is a new Content management system that is excellent. Easily themable, user friendly, great little dashboard for management
and it's open source
My vote would be Joomla. It has most fot he features you discussed, if not in the core as an extension, component or theme. I've set several up and rarely have to use any coding during setup, plus there's a vibrant community if you need help. It also integrates nicely with other 'best of breed' apps like BB forums, Coppermine photo gallery's and others.
Joomla! would seem to fit your needs, and I'd also suggest Kunena for the forum (which integrates with Joomla) and DOCman for the file management solution.
Well, I'd suggest Drupal for any sort of advanced web site. While Joomla! and similar systems are a bit easier to get started with, Drupal's a lot more flexible and extensible.
You want full control over theming? Or user authentication? Access control? Database queries? User picture scaling? Tagclouds?
It's there when you need it :)
I would go with Joomla too, even though I'm a ASP.NET developer.
Joomla is very flexible and customizable, so it fills all your need, because of the big community.
As a complete CMS noob, I asked myself the same question. I started with Drupal. Sure you can do lots of things with it. Very extensible and customizable.
But after implementing my first site in Drupal, I decided to create the next one in Joomla, to have a frame of comparison. Conclusion: Joomla is a looooooooooooot easier to get started and takes a lot less time to create a functioning website from scratch. Sure, for very big projects, Drupal lets you customize more, but for the type of project you suggest: I would recommend Joomla...
I found this PDF report comparing WordPress, Joomla, Drupal and Plone quite helpful when I was asking myself the same question recently. Nice comments with a focus on non-profits - find the comparison summary/recommendation on pp 13-14.
Definitely read the report because it talks about the strengths/issues of each package - given your prioritized list of features, I'd recommend Joomla. I think you can do what you want with reasonable effort and good recent modules like DocMan. WordPress is awesome for a blogging site, but lacks a number (2,3,4,9) of your requirements, and though Drupal is powerful and flexible, it definitely has a steep learning curve. Plone even more so.
Good luck!
I'd vote for DotNetNuke, it's ASP.Net but that saves you the overhead of learning a complete new environment, language and tool just to implement a 'free' CMS, realistically how much is your time worth? It meets all your criteria, and there are currently 600,000 users - which means that you can just get on with it, somewhere someone has already worked on your problems for you.
As for expensive hosting, why not host in another country, I get US$5/month for DotNetNuke in the states, and I code from Australia.
Ive had some experience with Joomla. Highly customizable, plenty of plugins and one of the liveliest communities in development. It has a great admin panel also.
Well, as told by Tom Deleu, yes, though Drupal is very capable and strong CMS but it is tough and complicated to work on. Coming to another option of CMS that is Wordpress. Though it is very easy to develop a content based websites with wordpress but with very limited scope and flexibility.
As per your requirement my vote will also go to Joomla. It is very user friendly, optimized and a CMS you can rely on. Small applications as mentioned by you like "mailing system", "File system" etc. suits joomla more than others.