Not all indices into a string are valid, since some indices might not lie exactly at the start of a character (and some characters span multiple bytes). Instead, you can use prevind to extract the previous valid index:
julia> s = "André(m, n)"
"André(m, n)"
julia> i = findfirst(isequal('('), s)
7
julia> s[1:prevind(s, i)]
"André"
Although in this case a regular expression might be more appropriate:
julia> m = match(r"(.*)\(", s)
RegexMatch("André(", 1="André")
julia> m.captures[1]
"André"