Easiest way is to set the field so they are not modifiable in browse mode. You can set this in layout mode from the inspector by unchecking browse mode under Behavior on the Data tab. This would prevent users from editing the data, but they can enter in the fields if doing a find and any calculations would still update the field.
There a several options. The simplest to implement is to use Field Behavior to deny access to the field while in browse mode. This requires that you control access to the field on every layout, but is simple to set up and scripts can still modify the data in the field.
A more secure method is to set up access control based on the user's privilege set. Use the privilege set to deny access to the fields for that privilege set and they will be unable to edit the data, but a script set to run with full Access privileges can still modify the data. The main drawback here is this limits access to the entire table not just a few fields.
A middle road between these two is to set up a validation calculation on the field that checks a "lock" field kept hidden from the user. A script can then modify the value in the hidden field to "unlock" it. Change the value in the data field and then reset the value in the lock field to lock it back up again. This gives you field by field access control and a single change in manage database locks it for all layouts in your system, but has the draw back that user are permitted to attempt entering the field and editing data, throwing up a validation error only when they leave the field and attempt to commit the changes.