on dreams.
So why do I want to be a programmer? Why do I want to work in software development? Why do I want to spend hours in gdb trying to figure out why my program is segfaulting? Why do I want to spend most of the day reading manpages to figure out library function prototypes? Why do I want to make it nearly a certainty that I will end up with an RSI later in life; some sort of typing related horror that will probably make daily task incredibly annoying?
Well, the short and simple answer is because it's fun.
It's a joy hacking away at code, dereferencing pointers with reckless abandon, clobbering registers for the fun of it, coming up with ridiculously hacky solutions to problems that would make most normal people swoon.
It's really something I love.
So what makes a good programmer? The answer varies depending on who you ask of course, but ask the grizzled veterans, the ones who used to hack away on TX-01s between classes and build telephone relays to thwart service provider fees, you'll start to see the answers sort of converge; I've eventually learned that these are the ones that warrant your full, undivided attention.
Programming is hard. There's no ifs, ands, or buts about it, and really it is not some sort of thing you can do half-heartedly. Attention to detail is incredibly important. You need to be willing to put the work in; when you have a problem you can't solve no matter how hard you throw your brain pan at it, you can't just check stack overflow and copy-paste some snippet call you a programmer. Well, you can, but eventually, your hubris will catch up with you. You'll find yourself stuck way in over your head, and end up quitting and becoming a lumberjack or something.
No, you have to actually want to know the “why”. The internet is great, answers to nearly any problem are right your fingertips, but just using someone else's work and calling it a day will eventually come back to bite you. Googling is fine and dandy, encouraged even, but you have to try to understand “why” this is the solution. By doing so, you not only are bettering your craft, you are building towards something far more important: A foundation for your entire programming career.
Knowing how some tiny, useless snippet works under-the-hood, say the reason why:
char a[] = "foo";
putchar(2[a]);
prints out 'f' may seem useless and unimportant; who would ever need to use something like this in production? But as it turns out, this is a brick in the house you are building. Because you are aware that array indexing is just pointer math:
2[a] == *(2 + a) == *(a + 2) == a[2]
when you come across some weirdo problem like:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
*(*(arr + 1) + 2) = 0;
you are then able to realize you are doing array indexing, and it's the same as:
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
arr[1][2] = 0;
and you end up with
int arr[2][3] = {{1, 2, 3}, {4, 5, 0}};
without having to sort through any incredibly ugly pointer math.
Now having technical know-how isn't at all the only thing you need to be any good at programming; in fact, it's not even the most important trait to have. Above all, the thing that makes or breaks you is humility. You need to be humble, a person who understands that “I am probably am not some super-prodigy one-in-a-million chosen-by-god programmer who knows everything.” Having the courage to admit that “I probably need to seek out help” every now and then is incontrovertibly the most important characteristic to have; it truly is what defines a professional programmer.
And to be humble, as simple as it may seem, is NOT easy.
So what are my long-term aspirations? I have no clue. I haven't fully planned out my life apart from a general direction I have pointed myself in, and I don't really feel a pressing need to do so. I just want to be happy, spending my days hacking away at projects that tickle my fancy, creating programs others find useful; everyone wants to make some sort of mark on the world after all.
I do want to be good at my craft, and I will not pretend I am without sin; the sins I have gone over I am guilty of committing far more than a few times. I will not apologize for being human. But I am earnestly working at it. In the end, if I were to ask myself: “Where am I going? What is it I really want to be in this unimaginably huge sea of possibilities?” Well, at this point, the only answer I can give right now would be a simple one, maybe one that would be considered a bit corny by most, but it would be something given in surety:
I just want to be a human being worth a damn.