Hey,
I've just finished my book on c and i'm wondering what do I do now?
I know about data structures, algorithms etc. but where do I go now to
advance my learning and become a professional?
Thanking you in advance.
Being a good software developer is a multi faceted job but mostly it
breaks down to
1. Know about computers (how they work internally, how the pieces fit
together, etc)
2. Know about languages (not specifically the syntaxes but that's a
good start, but also the process from source code to executing code,
you really ought to be able to switch from one language to another in
most cases)
3. Be able to think in abstracts.
#3 being very very important. I've worked with a few interns that
might know about technology, have fancy phones they play with, might
know a bit of C or Java or something like that, but when it comes to
thinking abstractly they fail miserably. I've had to actually sit and
explain verbally step by step what an intern has to do to solve a
problem they're working on because I can't just give them hints or
whatever. Usually I can visually debug their code [without seeing it
run] and I get in a weird place where I'd rather withhold the answer
so they learn but also we gotta get stuff done and it's a waste of
time.
Largely it comes from experience, after you've tackled some 100s of
different comp.sci problems you start to develop an ability to break
down a task into smaller tasks, to the point where the tasks are
directly expressible with your language of choice. It's not a skill
that's taught in most schools, and really if you want to be good at it
you need to have experience.
So my suggestion to you is this:
Write a lot of programs. Not just programs that are new but things
that have already been solved. The point isn't to immediately
revolutionize the world, the point is to get caught up in your
experience so that when you tackle new problems you're capable of
organizing a thought.
If you're not willing to write 100s of programs that nobody cares
about in an attempt to learn how to problem solve and think
abstractly, then you're not really willing to be a professional
developer later on. (basically, set aside ego for a bit and work on
your skills)
Should point out this applies to most any other profession. You think
Mozart first pieces were published? No. You think a great athlete
starts at the pro level? etc...
Tom