Um pouco de fundo
Hoje tenho 28 anos e nunca tive nenhum treinamento formal em desenvolvimento de software, mas tenho dois graus de ensino superior equivalentes a um BA em Relações Públicas e um MBA Executivo focado em Gerenciamento de Projetos. Eu trabalho nesses campos há cerca de 6 anos e, há 2,5 anos, deixei / perdi meu emprego e decidi mudar de direção.
Depois de um mês pensando nas coisas, decidi começar a desenvolver freelancers pequenos sites no WordPress. Eu aprendi sozinho e hoje posso dizer que tenho uma carreira humilde, mas bem-sucedida, desenvolvendo temas e plugins do zero para meus clientes - principalmente agências terceirizando parte de seu trabalho de desenvolvedor para sites de médio / grande porte.
Mas, às vezes, sinto que não ter estudado matemática o suficiente ou não ter uma compreensão formal das coisas realmente me atrasa quando tenho que competir ou trabalhar com desenvolvedores mais experientes. Estou constantemente procurando maneiras de aprender mais, mas parece não ter o básico.
Infelizmente, passar mais 4 anos em Ciência da Computação não é uma opção no momento, então estou tentando aprender tudo o que posso com livros e recursos online. Esse método nunca vai ter a NASA me empregando, mas eu realmente não me importo agora. Meu objetivo é primeiro passar da barra e ser capaz de me chamar de programador real.
Atualmente, estou gastando meu tempo livre estudando Java para programadores (para aprender uma linguagem que todo mundo diz ser difícil / exigente), lendo trechos do Code Complete (para aprender as melhores práticas) e também Code: The Hidden Language of Computer Hardware e software (para entender o funcionamento interno dos computadores).
TL; DR
Então, minha situação atual é a seguinte: sou basicamente capaz de escrever qualquer sistema completo em PHP (com a ajuda do Google e alguns livros), integrando Ajax, SQL e outros enfeites, e talvez um pouco mais lento do que um desenvolvedor experiente esperaria devido a toda a pesquisa envolvida.
Mas ontem fiquei preso tentando descobrir (não o Google) uma solução para o teste FizzBuzz porque não tinha o operador do módulo de if($n1 % $n2 == 0)
método memorizado.
O que você sugeriria como uma boa maneira de resolver esse dilema? Quais assuntos / livros devo estudar que me levariam a resolver problemas mais rapidamente e talvez mais "do modo de programadores"?
EDIT - Parece que houve alguma confusão sobre o que eu não sabia para resolver o FizzBuzz.
Talvez eu não tenha me expressado direito: sabia os passos necessários para resolver o problema. O que não memorizei foi o operador do módulo. O problema estava na transposição da matemática básica para o programa, e não no conhecimento da matemática básica.
Fiz o teste por diversão, depois de ler sobre isso em Coding Horror . Eu apenas decidi que era uma boa linha de comparação de base entre mim e os desenvolvedores formalmente treinados.
Eu apenas usei isso como um exemplo de como não ter lidado com a matemática em um ambiente de computador antes me faz perder tempo pesquisando coisas básicas, como operadores de módulo, para poder resolver problemas simples.
stuck b/c I didn't memorize %
problema, vale a pena notar que existem outras maneiras de fazer isso: (assumindo $ n2! = 0) if (is_int ($n1 / $n2))
ou if (($n1 / $n2) == (int) ($n1 / $n2))
Conhecer palavras-chave é uma coisa, e saber como expressar as idéias subjacentes na ausência de uma solução interna é outro.
I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)
e combino isso com você sem saberif($n1 % $n2 == 0)
, me pergunto sobre a exposição que você teve a coisas escritas em PHP. Eu acho que a maioria das coisas que você faz vai além de um simples cálculo de módulo. Você poderia dar mais informações sobre o que acha que é capaz de fazer?