[Tutor] Conceptual Question About Use of Python for Employee Training Program
Steven D'Aprano
steve at pearwood.info
Sat Jun 25 17:31:59 CEST 2011
Adam Carr wrote:
> Good Morning:
>
> I am very new to Python but I am enjoying the learning process. I have a
> question about the application of Python to a problem at the industrial business
> where I work. My two main questions are:
>
> 1. Can Python be used to achieve the goals of the possible project?
Yes.
> 2. Where are the best places to look (books, blogs, websites, etc.) for
> programming examples or modules that would help me begin to assemble and test
> some code?
Do you know Python? If not, start with a tutorial or three. Google is
your friend: google for "python tutorial" or "learn Python". Don't just
read them, do them.
Don't start with code. Start with a list of Functional Requirements. FRs
should be technology independent, and preferably written for non-tech
people. In other words:
BAD:
The training notes are opened in Powerpoint using a remote procedure call.
GOOD:
The training notes are shown to the user by the system.
You already have the skeleton of an FR, your text below. Don't think the
FR needs to be a huge, technical, ISO-standard document. A single page
may be enough. You're just trying to identify the target you are aiming
for, so you can tell whether or not you've hit it.
Requirements includes things like:
- How scalable does this need to be? Do we have 10 users, or 10 million?
- Do we have to service remote users over the Internet?
- What sort of security is needed? Do you need fear staff cheating?
Don't be afraid to postpone functionality for the next version. You
don't need all the bells and whistles from day one. In fact, I recommend
that you start with the simplest application you possibly can do, and
add extra features afterwards. Release early, release often.
Get the Powers That Be to approve the FRs. Make sure that everyone
(especially you!) understands that no changes will be accepted to
functionality without it being put in writing. Now you have a stable
target, rather than a moving one.
Now write a technical design document: this is where you choose the
technologies used. This is the point you start thinking about:
- Do we need a database? Which one? SQLite? Postgres? Oracle?
- A web app or a desktop app?
- Which web framework, or GUI toolkit?
- Do you have a server that can run this web app?
- Do you need a server-class machine, or can it run off a cheap PC?
Again, this may be quite short, although probably a bit longer than the
FR. Don't think that you *need* to answer every question up front,
although it is best if you can. Especially for small projects, you can
leave gaps to be filled in later. But the gaps will guide you, by
showing you what you need to learn before you can even start writing code.
E.g. if you decide you need a web application, but you have no idea
which web framework to use, you now know that you need to spend some
time investigating frameworks. CherryPy, Django, Zope, Pylons...
http://wiki.python.org/moin/WebFrameworks
Once you know what sort of code you need to write, then you can start
writing code.
More comments below:
[...]
> 2. A confirmation is generated showing the employee name and other minor
> details, accessed from a simple list, to be sure the identity number and the
> person are correctly matched. This requires employee acknowledgment.
You state that the employee name and details are "accessed from a simple
list"? That's a technical design choice, not a requirement of the
program. Perhaps it would be better to come from a database, or a Python
dict, or an INI file. Who knows?
The requirement is that the employee must acknowledge that he or she is
who the system thinks he or she is based on the ID number. Everything
else is design.
> 3. The employee freely selects a training subject from a list.
I would put it as, "freely selects a training subject from a menu of
available subjects". This could be implemented as a list box GUI widget,
or a set of checkboxes, or a set of push buttons, or by typing the name
of the subject... the user interface is a design choice, and should be
kept separate from the requirement that the employee somehow choose a
subject.
You should see the pattern now... keep design *choices* separate from
functional *requirements*.
Nothing you have stated seems impossible for Python. Far from it, I
would think that Python is a good choice for this project.
[...]
> I would like to see a program that can be deployed as originally intended,
> on individual PCs, that can be more easily maintained and modified than the
> behemoth Access program we now have. We are running a Windows network with most
> production floor PCs using the latest version of XP and most individual desktops
> and laptops using Windows 7. I have the blessing of our network gods to pursue
> an open source solution because the options for this kind of program, which is
> tailored to individual locations, are few. The best approach the network folks
> suggested was a Lotus Notes database, which would work great I'm sure but the
> development cost is very, very high and each of the company's many manufacturing
> locations would require a slightly different version of the database.
Do your staff have access to a web browser? Will your network sys admins
allow you to put a PC on the intranet running a web server (possibly on
a different port)?
If the answers to this are both Yes, I would recommend you use a
web-based solution, using CherryPy as a lightweight webserver, Sqlite as
the database, and only OpenOffice and a browser on the desktops.
But of course my recommendation is meaningless, because I don't have
your functional requirements! I might as well guess that you need a
distributed application spread over thirty countries, capable of
servicing tens of millions of users at once, with nine-nines uptime...
*wink*
Good luck, and enjoy!
--
Steven
More information about the Tutor
mailing list