Background
I have some background in abstract commutative algebra and basic scheme theory as covered in Atiyah/Macdonald and the notes by Ravi Vakil. What I have absolutely no background in is computer science and programming.
However, I would like to self-learn some algorithmic or computational algebra. I would appreciate to see some book recommendations concerning these topics.
Books that I know about
What seems to be quite standard but not very deep on the algebra side and not so explicit on the implementation side (which I want to learn as well) is the book Ideals, Varieties and Algorithms by Cox, Little and O'Shea.
I also know about the book A SINGULAR Introduction to commutative algebra by Greuel and Pfister. It seems to be much more in depth on the algebra side --- covering for example commutative algebra over arbitrary base rings, not just fields --- and closely connected to the CAS SINGULAR.
There is also a three volume book Computational Commutative Algebra by Kreuzer and Robbiano working with the CAS CoCoA.
Besides those computer Algebra books there are books on constructive algebra (which I am also interested in) like Commutative Algebra: Constructive Methods by Lombardi and Quitté an A Course in Constructive Algebra by Mines, Richman and Ruitenburg. These work purely constructively but do not make explicit the algorithms that can be extracted from the proofs.
My Questions
Is it important to have a book focusing on one CAS explicitly?
From this there arise two more questions:
Which CAS should I decide for?
There are so many choices here and I'm not sure if they are basically all the same or if there are major differences and which to prefer.
Where does the programming experience come from?
Suppose I just learned about Gröbner bases and the Buchberger algorithm. I might implement some version of that algorithm and compute Gröbner bases of two or three more or less complicated ideals. And then? Is this all? Move on to the next topic? Although I want to learn so computational thinking, it is not the case that every day I encounter problems that can only be solved with a computer. So where do the problems to solve and to earn experience from?
How to check if I have written good code?
This is perhaps more a computer science question. But computer scientists probably have to hand in exercises for university or so where they get feedback. If I write the worst and most inefficient code one can think of, which still somehow works - how should I know?