Grammatical and Biological Gender in Spanish
In Spanish and many other languages nouns have a grammatical gender assigned to them. This is not the case in English where only nouns referring to people have biologically assigned gender, for example, girl and boy. In Spanish the grammatical gender has nothing to do with the actual gender of the object. For example, the word mesa (table) is feminine despite there being no inherently female traits to a table. You cannot check under a table's skirt to see if it masculine or feminine, you must learn these assignments as you learn new vocabulary. Many native English students learning a new language find this cumbersome. However, there are some rules and tricks to help remember or guess the gender of a word.
Masculine: Words that ends in an 'o' is always masculine.
Masculine: Words that end in consonants 'l' and 'n'
Feminine: Words that end in 'dad', 'umbre' and 'ion' are always feminine
Femiine: Words that end in 'a' are mostly feminine. Exceptions include words derived from Greek (rather than Latin) that en in 'ma' like sistema, programa, problema, and words like mapa and dia.
Masculine or Feminine: Words that refer to people that end in 'ista' always end in 'a' (therefore are invariable) even when referring to man. For example, dentista, artista can be a man or woman (the words dentisto and artisto do not exist).
Masculine or Feminine: words ending in 'e' or 'z' can be either gender and must be learned individually.
Words that refer to biological gender may reflect that gender by using an 'a' for feminine or and 'o' or 'n' for masculine. For example, chico/chica (boy/girl) and peaton/peatona (male pedestrian/female pedestrian).
Some words referring to biological gender use totally different words for each, as in the English example of boy and girl. Examples include hombre/mujer (man/woman) and yerno/nuera (son in law/daughter in law). These examples illustrate that you cannot simply replace the 'o' with an 'a' to make a word feminine since the resulting *hombra* and *yerna* do not exist.