EDIT: Bonus points for any companies hiring junior developers!
I like solving algorithmic problems. I enjoy it so much that I do it for fun. I know there are plenty of people offering web design/development service, but about algorithm design and development?
To clarify: I'm looking for work where I get to work with a lot of companies that do (hopefully) interesting work. My specialty is taking a problem specification and providing a solution by designing an algorithm and then implementing it for the company. I wouldn't be opposed to helping the company integrate this algorithm into their system and providing follow-up service and maintenance, but I don't want to develop entire products.
I have a hard time staying focused on anything for more than a few weeks, so I'd like to get it, do something new and interesting, and then get out.
We all agree that computer science is not programming, but I believe a firm grasp on basic CS concepts can make anyone a better developer. This relationship is similar to that of a journalist who studies English. While a journalist can have a great career without studying English, there is certainly an argument that theory (English) is just as important as application (Journalism). For programmers, this is the difference between studying theoretical computer science (algorithms, data structures, AI, etc) and learning programming languages (Python, C, etc).
My goal is to become proficient at engineering optimized algorithms for solving real-world problems. This won’t happen by diving right into a book on algorithms and that is something that I fully understand. My question is this: What do I need to know before I start tackling The Algorithm Design Manual? To be a good algorithm designer one certainly needs to know how to analyze the time complexity of an algorithm. What math skills, specifically, are required to do this well? I’ve heard that going through a book on discrete mathematics would be a good idea. What else would you recommend? Statistics and probability, perhaps?
I’ve never done any freelancing or professional development before. What advice do you have to offer to someone in my situation?