A Little Background
I'm 28 today, and I've never had any formal training in software development, but I do have two higher education degrees equivalent to a B.A in Public Relations and an Executive MBA focused on Project Management. I've worked on those fields for about 6 years total an then, 2,5 years ago I quit/lost my job and decided to shift directions.
After a month thinking things through I decided to start freelancing developing small websites in WordPress. I self-learned my way into it and today I can say I run a humble but successful career developing themes and plugins from scratch for my clients - mostly agencies outsourcing some of their dev work for medium/large websites.
But sometimes I just feel that not having studied enough math, or not having a formal understanding of things really holds me behind when I have to compete or work with more experienced developers. I'm constantly looking for ways to learn more but I seem to lack the basics.
Unfortunately, spending 4 more years in Computer Science is not an option right now, so I'm trying to learn all I can from books and online resources. This method is never going to have NASA employ me but I really don't care right now. My goal is to first pass the bar and to be able to call myself a real programmer.
I'm currently spending my spare time studying Java For Programmers (to get a hold on a language everyone says is difficult/demanding), reading excerpts of Code Complete (to get hold of best practices) and also Code: The Hidden Language of Computer Hardware and Software (to grasp the inner workings of computers).
So, my current situation is this: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books), integrating Ajax, SQL and whatnot, and maybe a little slower than an experienced dev would expect due to all the research involved.
But I was stranded yesterday trying to figure out (not Google) a solution for the FizzBuzz test because I didn't have the
if($n1 % $n2 == 0)
method modulus operator memorized.
What would you suggest as a good way to solve this dilemma? What subjects/books should I study that would get me solving problems faster and maybe more "in a programmers way"?
EDIT - Seems that there was some confusion about what did I not know to solve FizzBuzz.
Maybe I didn't express myself right: I knew the steps needed to solve the problem. What I didn't memorize was the modulus operator. The problem was in transposing basic math to the program, not in knowing basic math.
I took the test for fun, after reading about it on Coding Horror. I just decided it was a good base-comparison line between me and formally-trained devs.
I just used this as an example of how not having dealt with math in a computer environment before makes me lose time looking up basic things like modulus operators to be able to solve simple problems.
I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)and combine this with you not knowing
if($n1 % $n2 == 0), I wonder about the exposure you've had to things written in PHP. I think most things you do go beyond a simple modulo calculation. Could you give some more insight into what you think you are able to do?
stuck b/c I didn't memorize %issue, it's worth noting that there are other ways to do this: (assuming $n2 != 0)
if (is_int ($n1 / $n2))or
if (($n1 / $n2) == (int) ($n1 / $n2))Knowing keywords is one thing, and knowing how to express the underlying ideas in the absence of a built-in solution is another.