3 ms·
I read the following quote somewhere (paraphrased since I don't remember the exact wording): The apprentice hacker hears of an interesting problem, gets excite
by csense 14y ago
I read the following quote somewhere (paraphrased since I don't remember the exact wording):
The apprentice hacker hears of an interesting problem, gets excited, rushes off to his computer and starts madly writing code. The master hacker hears of an interesting problem, settles back in his chair, stares off into space and says, "You know, I think I've seen something like this before..."
At this point, your goal should be to expand your knowledge base. Your end goal should be to have a sufficiently good understanding of enough different tools, technologies, and ways of thinking that you can decompose anything new into ideas you already understand.
So here are some random suggestions for what you should actually do:
You have to have a balance between theory and practice. Try to build specific things like a blog site, a game, a raytracer, a media player, a website scraper, whatever tickles your fancy or scratches an itch. Try out different languages, libraries, IDE's, tools, operating systems. Exposure to different layers in the stack, different philosophies and different problems will increase your skills, help you learn the sense of the right tool for the job, and help you develop your own style as by combining the strengths of your different experiences.
Likewise, math and theory will help your skills reach new heights, especially after you start to feel comfortable with programming. You can accomplish a lot if you don't know much theory, but theory will give you a deeper understanding of many situations and make your thoughts clearer and more effective.
Your general programming abilities will improve if you learn high-school algebra, graph theory, automata theory (finite automata, push-down automata, and Turing machines), regular expressions, and compiler design. Geometry, trigonometry, calculus, and linear algebra are helpful for physics or graphics-intensive programming. Number theory and abstract algebra are virtually required to study modern cryptography.