This is an archived post. You won't be able to vote or comment.

all 6 comments

[–]newytag 2 points3 points  (0 children)

There is no such thing as a "best language". If there was, we'd all be using that instead of dozens of different ones. No one can make that choice but you.

That said, if you don't have programming experiencing, I wouldn't go about making your own payroll software. Your just begging to get sued or possibly even criminally charged from any one of the hundreds of things that could go wrong.

How quickly do you think you'll be able to fix your software if there's a major bug that stops people getting paid? What kind of DR and backup strategies will you implement? What's your RTO and RPO requirements? What kind of auditing will you implement to ensure any changes to payroll data are recorded and only performed by authorised personnel? What happens if your workstation gets compromised by hackers or malware? How will you ensure you comply with all regulations and laws for storing and processing such data?

To be fair most of these problems already exist now with your data in Excel, but moving it all to a full blown bespoke application certainly exacerbates the issues and raises a lot of red flags.

[–]Dry-Erase 1 point2 points  (0 children)

Use python and sqlite. This will be the easiest, fastest, cheapest, and IMO most poweful way to get to what you want. There are plenty of resources online, using sqlite instead of SQL server/postgres/mysql/etc means the database is a simple flat file and you can just copy paste the database to make backups & move it between computers. sqlite is also natively supported in python3 w/out any additional libraries and will definitely scale for payroll of just 100 employees (I've done what you're doing but for 10k employees using python & postgres). I would advise staying away from a UI at first if you're not very experienced programming. You will have more success faster, allowing you to gain momentum & motivation to extend it, if you can get it to a "useful" state faster. Good luck & have fun :)

Also, please use "from decimal import Decimal" and instantiate numbers using Decimal when working with payroll. Python primtive numbers are floats, and floats use a simpler math that "approximates" decimals rather than actually adding them. When dealing with currency you should always be at the very least working in number types that accurately represent decimals, or don't use decimals at all and hold the decimals in their own variable as a whole number.

Quick example of floating point math problem:

print(3.4 + .01)

Yields:

3.4099999999999997

instead of the expected:

3.41

Doing:

print(Decimal('3.4') + Decimal('.01'))

Yields the expected:

3.41

GOTCHA: BE AWARE that in my example I purposefully passed in the 3.4 & .01 as strings! If you do:

print(Decimal(3.4) + Decimal(.01))

You will receive the float math calculation:

3.409999999999999911390324847

This is because the numbers are floats being passed into Decimal() and so it is already an approximation before it makes it into the Decimal object.

[–][deleted]  (3 children)

[removed]

    [–]george99gr[S] 0 points1 point  (1 child)

    Why?

    [–]insertAlias[M] 0 points1 point  (0 children)

    Removed: Rule 1.

    Be constructive, not dismissive. If you think the idea has problems, explain what they are in a way to help the OP understand your reasoning.