Aprenda a programar de trás para frente, ou “então eu falhei no teste do FizzBuzz. Agora o que? ”[Fechado]


94

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.


63
Quando li isso: 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 saber if($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?
Phant0m

10
Eu também sou um programador autodidata. Trabalha há mais de 10 anos, na web, o tempo todo ... naquela época não havia aulas de desenvolvimento na web ... acho que há algum benefício em aprender por conta própria. você realmente vai querer aprender sobre os princípios fundamentais de OO e padrões de design. eles o ajudarão muito a tê-los na parte de trás de sua cabeça ao atacar problemas. Geralmente, acho que nem sempre tenho o vocabulário que os outros têm, mas se você gosta de codificar e gosta de escrever soluções elegantes, então eventualmente você 'll ser capaz de codificar o seu caminho para o que quiser
hanzolo

56
Em relação ao 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.
18118 grossvogel

18
@grossvogel Exatamente! Uma das razões pelas quais pessoas como o Fizzbuzz é que existem muitas maneiras de resolvê-lo. Não é apenas um truque para saber se você conhece o operador do módulo. Uma das principais habilidades de programação é a capacidade de traduzir um problema da forma em que está indicado na melhor forma para o seu conhecimento / ferramentas / recursos / etc.
outubro

18
Não conhecer o operador do módulo não é um motivo para falhar no FizzBuzz. Quando você encontrar algo que falta, você deve ser capaz de contorná-lo.
Loren Pechtel

Respostas:


144

No seu caso, como você é autodidata e já tem o que parece ser uma abordagem boa, saudável e sem BS para a aprendizagem. Ainda algumas sugestões ...

A prática leva à perfeição

Eu acho que você deveria mergulhar em exercícios de programação, como:

Até pegue as perguntas dos exames anteriores de universidades conhecidas ao seu redor ou de competições de programação locais (ou remotas). Por exemplo, temos um bom na França para aspirantes a programadores do ensino médio chamado Prologin , e fornece todos os anos uma boa série de quebra-cabeças (provavelmente apenas em francês, desculpe, mas esse é o tipo de coisa que eu quero dizer )

Para saber mais: Onde posso encontrar quebra-cabeças e desafios de programação?

Livros Clássicos e Referências

Também poderíamos recomendar uma lista muito longa de livros incríveis , mas eu diria que a resposta zen é que não existe um caminho certo para a iluminação.

Seria difícil dizer quais estão no topo da lista. Portanto, continue lendo várias coisas para aprender as armadilhas gerais a serem evitadas e as melhores práticas a serem seguidas, como você está fazendo agora.

Para mais:

Forçando os limites

Além disso, procure material que coça a cabeça, como:

Não necessariamente deve ser tomado como exemplo de coisas para fazer hoje em dia, mas vale a pena tentar descobrir o que diabos está acontecendo lá.

Sistemas de pares são motivacionais

Você também pode espreitar (e se envolver) nas seguintes comunidades para melhorar suas habilidades de forma incremental ao ser confrontado com outras pessoas.

Educação a tempo parcial

Se você não tiver tempo ou motivação para participar de outro curso de quatro anos ou algo semelhante (que pode até não ser necessário ou recompensador, e caro), considere procurar material de ensino on-line. Obviamente, estes não se limitam à ciência da computação.

Graças ao esforço original do MIT OpenCourseWare , agora existem várias universidades que seguiram o exemplo e você pode encontrar muitos materiais de cursos de nível universitário gratuitamente. Nem sempre é fácil navegar e ler por conta própria, mas alguns são muito bem feitos. Para começar do zero e subir bastante, considere também a Khan Academy .

Alguns vão um pouco mais longe e oferecem cursos on-line reais de graça, onde você também tem acesso ao material do curso, mas também oferece palestras com ritmo e auto-avaliações regulares. Por exemplo, visite Coursera ou Udacity .

A maioria dos itens acima costuma publicar suas palestras no Youtube ou no iTunesU, assim você encontrará bastante material se sua sede de conhecimento ainda não tiver sido suprimida por todos os links anteriores.

Se você deseja algo que ofereça uma experiência mais próxima da universidade "real", considere universidades remotas, que também permitem trabalhar em meio período, mas exigem que você siga o ritmo e faça auto-avaliações e final de exames de ano (às vezes no local), como com a OpenUniversity e suas variantes internacionais.

A paixão mantém você indo

  • Encontre um projeto de estimação: crie seu próprio ou junte-se a um ou mais projetos de software existentes e contribua.
  • Código, código, código. E então codifique um pouco mais.

(e obtenha olhos suficientes observando seu código para criticá-lo e ter diferentes perspectivas)

Os franceses dizem:

C'est en perdoant que quem for forient desviante.

Continue fazendo o que está fazendo e, eventualmente, você será um especialista. Leva tempo e trabalho.

Veja também Estou com problemas para aprender para obter mais sugestões.


PS: Embora seja uma ferramenta muito controversa para entrevistas e não ajude a identificar bons candidatos, costumo usar o FizzBuzz para pelo menos eliminar os incrivelmente "ruins". Então comece a praticar! :)


3
C'est super ça! :) Obrigado pela lista. O Projeto Euler e os quebra-cabeças parecem muito agradáveis. E eu já uso alguns outros sites SE. Irá mergulhar nele.
moraleida

@moraleida: Que bom que você gostou da resposta. De nada.
21115 haylem

Sobre o seu PS: Não estou realmente preocupado com entrevistas no momento, pois não quero voltar a ser funcionário. 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. :)
moraleida

4
+1 apenas por que o FizzBuzz é usado no final ... Muitas vezes, vejo comentários aqui ou em blogs sobre pessoas que o criticam porque assumem que as empresas o estão usando para identificar super codificadores. (Para as empresas: Você está fazendo errado!)
Izkata

1
Isso está listado em alguns dos links, mas acho que isso merece um convite: eu também procuraria em rosettacode.org . Possui um grande número de problemas diferentes resolvidos em um grande número de linguagens de programação. É uma boa prática na leitura de código, que é tão importante quanto escrevê-lo, bem como uma ótima maneira de ver muitas abordagens diferentes para resolver o mesmo problema. E se você encontrar um problema que ainda não foi resolvido em um idioma que você conhece ou deseja aprender, esse é um desafio de programação para você.
Mark Reed

60
I didn't have the if($n1 % $n2 == 0) method memorized.

Não tenho codificado há muito tempo (comecei a aprender SQL sozinho há cerca de 27 meses e comecei a codificar em Perl há cerca de 20 meses), mas a citação acima parece algumas coisas que ouvi de ex-alunos:

Como devo memorizar qual técnica de integração usar para cada problema?

Não memorizei se deveria adicionar ou multiplicar probabilidades, usar "n escolher k" ou usar fatoriais.

Espere um minuto! Você disse que x era igual a 2 ontem! Agora é igual a zero ?!

Ok, esse último provavelmente foi um pouco duro ... mas o ponto que estou tentando fazer é que resolver problemas não é memorizar . Se fosse, algum gênio poderia programar um computador para resolver todos os problemas, e nenhum de nós teria que pensar novamente (que mundo infernal seria esse ...).

Agora, é verdade que qualquer empreendimento intelectual consiste em pelo menos um pouco de memorização. Em particular, se você for codificar em PHP, deverá entender os tipos de dados básicos (números, seqüências de caracteres, matrizes), coisas básicas que você pode fazer com eles (para números: adição, subtração, multiplicação, divisão e módulo; para cadeias de caracteres: concatenação, substrings, substituição e pelo menos algum conhecimento de expressões regulares; para matrizes: concatenação, aderência a elementos, união de elementos, looping, contagem de elementos, etc.) e as estruturas lógicas básicas que se pode usar (instruções if / then / else, loops foreach, loops etc).

Em seguida, quando encontrar um problema, use o problema para fornecer o contexto de quais ferramentas você precisa. Para o FizzBuzz, você precisa saber quando um número é divisível por 3, 5 ou 15. Ok, então estamos lidando com números .... que ferramentas básicas nos permitem dizer quando um número inteiro é divisível por outro? Bem, o operador do módulo. Então, use isso. (É claro que, se seu número for $n, você pode imaginar e ver se o último dígito $né 0 ou 5 e / ou se os dígitos $nsomam algo divisível por 3, mas eu discordo ...) Você precisa faça isso para cada número entre 1 e 100, para evitar o túnel do carpelo, use um foreachloop.

O moral da história é que, por um lado, você diz "Sou basicamente capaz de escrever qualquer sistema completo em PHP" e, por outro lado, não pode codificar o FizzBuzz, a primeira afirmação está incorreta. Alguns dos meus ex-alunos de cálculo juraram de alto a baixo que entendiam os conceitos, mas simplesmente não conseguiam resolver os problemas no exame ... ou nos trabalhos de casa ... ou nos problemas do questionário. Eles estavam errados quanto à sua compreensão também.

Pare de inventar desculpas e aprenda o básico.


6
Não memorizo, metabolizo e faço dessas coisas parte da minha intuição. Sempre procure expandir isso.
Ncmathsadist

@ ncmathsadist - Sim, expandir a intuição é fundamental, mas mesmo a intuição precisa depender da memorização de um pequeno número de conceitos e fatos muito básicos.

para o registro, você não precisa multiplicar um número por 3 e, em seguida, adicionar os dígitos para ver se é divisível por 3, basta adicionar os números. por exemplo, 864, 8 + 6 + 4 = 18, que é divisível por 3 e também por 864
Oztaco

@ leaf68 - Duh! [bate na testa] você está absolutamente correto ... deixa eu editar!

27

Você pode pensar que o FizzBuzz é um problema de brinquedo; quando é que precisarei usar o operador de módulo em um programa real? Mas você realmente usa isso o tempo todo. Três exemplos comuns:

  1. Você está exibindo uma tabela e deseja alternar cores de plano de fundo para diferentes linhas. Você verifica se uma linha é par ( row_number % 2 == 0) e exibe uma cor para linhas pares e uma para linhas ímpares.
  2. Você tem uma coleção de objetos pelos quais está circulando e deseja imprimir uma tabela com N objetos por linha; o critério para quando adicionar uma quebra de linha é (item_number% N == 0). Na verdade, eu tinha uma pergunta SO sobre esse comportamento exato, embora nessa linguagem de modelo a condição tenha if item_number % N == 0sido escrita como equivalente ( if item_number|divisbleby: N).
  3. Você está executando várias operações que deseja agrupar em uma transação que só é confirmada quando o grupo atinge um determinado tamanho por motivos de eficiência. Talvez você esteja usando a API de dados do google e não queira o cabeçalho HTTP / sobrecarga de autenticação para criar uma nova transação para cada operação, portanto, você está agrupando-os em grupos de 50 operações. Ou você está salvando registros no seu banco de dados e deseja confirmar a transação quando este tiver um tamanho razoável. Algo como if cur_item_number % 50 == 0 then commit_data.

Claro que existem outras maneiras de fazer todas essas coisas. Mas você pode fazer um zumbido de efervescência sem usar o operador módulo ou comparar a divisão flutuante com a divisão inteira. Por exemplo, para o FizzBuzz, você pode fazer algo como o seguinte pseudo-código.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Para concluir, se você quiser ser um grande programador algum dia, não comece a aprender livros de idiomas. Sim, um livro PHP / Java fará com que você obtenha respostas do google / stackoverflow e de programas que estão trabalhando pela metade muito mais rápido do que qualquer outra coisa. Mas para realmente saber como escrever programas ótimos de qualidade e pensar como um programador, você precisa de alguma exposição a livros reais de CS.

Comece com um livro de CS que introduz uma linguagem de programação e os antecedentes de CS, com o famoso exemplo de Estrutura e interpretação de programas de computador (que ensinará Scheme - um dialeto Lisp) ou possivelmente algo como Think Python Como pensar como um computador Cientista (que eu não li). Ambos são gratuitos online.

Você precisa, eventualmente, ler um bom livro de algoritmos, o melhor sendo os algoritmos do CLRS (não gratuito), embora este livro de algoritmos on-line gratuitopode ser um substituto de baixo custo (se você puder apenas comprar o CLRS). O livro de algoritmos ensina como pensar em resolver problemas do computador e apresenta uma variedade de estruturas de dados (Matrizes / Listas Vinculadas / Montes / Árvores Binárias / Árvores B / HashTables) e algoritmos importantes que você precisa saber como usar da melhor maneira . Você não precisa memorizar todas as provas ou saber escrever perfeitamente todos os algoritmos (quem já usa um Fibonacci Heap); mas você deve saber intuitivamente que o loop for aninhado é O (N ^ 2); as classificações de comparação são, na melhor das hipóteses, O (N lg N), a pesquisa binária é O (lg N), pode encontrar mediana em O (N), por que os bancos de dados do disco rígido usam árvores B, etc.). No mínimo, um forte conhecimento do livro de algoritmos o ajudará a aceitar entrevistas de programação técnica da variedade google / facebook. Ao ler livros de programação, não basta ler / ler; você'

Também recomendo um livro sobre engenharia de software (código completo ou programador pragmático) depois de ler o livro de CS e algoritmos, que ensinará as práticas recomendadas de como escrever um bom código que pode ser mantido (nomes claros; comente apenas quando necessário ; manter código unido; refatorar quando necessário; usar controle de versão; etc).


4
Melhor comentário ainda; enquanto eu vejo muitas pessoas dizendo prática, prática, prática, esse não é o caminho a seguir. A prática leva à perfeição, dizem eles, mas isso apenas impõe maus comportamentos. Para o OP: exponha-se a outros conceitos, saiba por que uma quicksort é preferida a uma bolhas. Somente a prática perfeita leva à perfeição. Faça o curso de CS.
Pieter B

2
Obrigado por postar esse código de exemplo, eu já pensei que precisaria fazer isso sozinho. - Podemos construir qualquer circuito lógico complexo usando portas NAND sozinhas; temos idiomas com muito poucas operações simples que são completas de Turing; não precisamos desses operadores sofisticados para resolver problemas. Resolver um problema não é apenas conhecer as ferramentas certas, poder trabalhar em um problema, descobrir uma solução que funcione para seu próprio conhecimento é o que faz um programador.
cutuca

22

Ontem, porém, fiquei preso tentando descobrir (não o google) uma solução para o teste FizzBuzz porque não tinha o método if ($ n1% $ n2 == 0) memorizado.

Ninguém memoriza essa coisa. Você deveria inventar por conta própria. Se você conhece o operador de módulo e sabe o que ele faz, então é trivial um ótimo ajuste para o problema do FizzBuzz.

Eu vou sair em um membro aqui e geralmente sugerem que o problema é PHP. Eu gosto de dizer que Java é a pior linguagem já projetada e PHP é a pior linguagem já criada , porque mesmo seus criadores admitem que nunca foi projetado. É difícil aprender boas práticas de engenharia de software quando seu ambiente é praticamente a definição de como não fazê-lo. E, dependendo de uma estrutura para fazer tudo, não é dizer muito.

Atualmente, passo o meu tempo livre estudando Java para programadores (para manter uma linguagem que todo mundo diz ser difícil / exigente)

Java é uma das linguagens mais fáceis e piores que existe. Só tem uma coisa: herança manual coletada pelo lixo. Se seus amigos ou consultores dizem que o Java é difícil, encontre novos amigos. C ++ é uma linguagem difícil que inclui muitos conceitos e que ninguém contestará. Você também pode fazer C #, que pelo menos possui alguns genéricos e lambdas.

Como você aprenderá a codificar, quando seus idiomas foram projetados e implementados por pessoas que não podem codificar, e você depende de estruturas para tudo o que faz?


14
@moraleida: Não há vergonha em procurar a sintaxe para um operador que você não teve motivos para usar.
DeadMG

2
@moraleida: nesse caso, eu concordo que não há nenhum problema real. Eu acho que nenhum profissional, entrevistador ou outro, deveria se importar se você não consegue identificar a sintaxe exata para um idioma diferente, desde que possa expressar claramente qual é a sua intenção.
haylem

5
Concordou na maioria dos pontos, mas por que você considera o Java 'a pior linguagem já projetada'? Eu não sou um grande fã de Java, mas isso parece muito opinativo.
Casey Kuball

7
-1 por usar a pergunta como uma desculpa para bater de cabeça para baixo o PHP quando ele tem zero relação com o que foi solicitado.
StasM

1
@Darthfett: Eu poderia escrever um ensaio sobre isso. Venha para o chat do SO C ++ e você pode lê-lo: P
DeadMG

11

Eu acho que você precisa dar uma olhada no porquê de ficar preso tentando descobrir o FizzBuzz. Então, suponha, você lembrou que há um operador que lhe $ndiz se é divisível por um número. E você tem má sorte para esquecer o que é. Tudo bem, por que você não tenta fazê-lo de outra maneira? Se você souber algo sobre código, poderá encontrar uma dúzia de outras maneiras de fazê-lo. Alguns deles podem parecer estranhos - como, por exemplo, colocar cada múltiplo de 5 em uma matriz e depois verificar se $nestá entre eles - e é uma solução ruim, mas ainda assim seria uma solução. No entanto, você está dizendo que não tinha, apenas estava preso. Pode ser um sintoma de um problema maior.

Há duas coisas na programação que você precisa aprender.

  1. Saco de truques. Como ler arquivos em PHP, como analisar XML em Java, como conectar-se ao banco de dados em Python. Algumas pessoas memorizam, mas, na verdade, essas coisas valem a pena memorizar apenas se você as usar todos os dias. Caso contrário, basta acessar os documentos e pesquisar. Essas coisas não têm substância, exceto por sua forma literal - você só precisa saber como soa o encantamento mágico específico e qual será o resultado.
  2. Mentalidade. Esta é a coisa mais importante. É assim que você programa, e isso não tem nada a ver com memorização. Você precisa entender como explicar as coisas que deseja fazer no computador, quais são as formas de fazê-lo e quais delas usar em qualquer caso específico. Agora, dadas as ferramentas modernas e a documentação moderna, é plausível que alguém possa escrever um CMS inteiro em PHP usando a abordagem "saco de truques", mas depois de encontrar uma tarefa que não tem solução pronta, você fica "preso".

A partir de sua descrição, parece que você começou com a primeira parte, mas um pouco ausente na segunda parte. Um bom curso de CS geralmente ajuda muito com isso, mas não é o único caminho. Tentando resolver problemas diferentes e lendo sobre como esses problemas precisam ser resolvidos, lendo os livros fundamentais citados aqui - tudo isso ajudaria. Depois de entender a mentalidade do programador, você descobrirá que começar a usar um novo pacote de truques não será um grande problema. Você precisaria pesquisar no Google aqui e ali, é claro, mas nunca ficará preso.


1
“E leia sobre como esses problemas precisam ser resolvidos” - Na verdade, procure soluções diferentes para o mesmo problema. Tente entender cada um deles, compare o que eles têm em comum e o que fazem de maneira diferente. Entenda essas coisas e você escolherá automaticamente maneiras diferentes de pensar sobre o mesmo problema.
cutuca

Eu concordo completamente com a mentalidade. Depois de entender a mentalidade e os conceitos, aprender as construções da linguagem subjacente é muito mais fácil e você começará a pensar em maneiras alternativas de fazer as coisas naturalmente. (Tal como para fizzbuzz, todos os números divisíveis por 5 terminará em 5 ou 0, de modo que não há necessidade do módulo operando em que parte)
JohnP

9

Você é bom em desenvolvimento da mesma maneira que em qualquer outra coisa: prática. Existe um bom conceito no mundo da programação chamado código kata . Este é essencialmente um exercício em que você codifica uma solução para um problema relativamente pequeno, analisa o que é bom e o que é ruim, descarta tudo e faz de novo. O FizBuzz é um kata por si só. Então faça e faça mais. Quando você encontrar coisas que não parecem muito boas ou simplesmente não funcionam, pesquise e seja minucioso. Faça perguntas nos sites de perguntas e respostas, leia artigos e blogs, veja como os outros lidam com isso e pratique o que aprendeu.

No curso dessa prática, você aprenderá quanto conhecimento matemático / teórico adicional poderá precisar. Se você se deparar com conceitos que você simplesmente não consegue entender, leia sobre eles e seus conhecimentos prévios e decida caso a caso, se você deseja fazer um curso ou o que você tem para expandir seus conhecimentos. bases teóricas.


1
Este código kata também parece incrível!
moraleida

8

... porque eu não tinha o método if ($ n1% $ n2 == 0) memorizado.

Estou interpretando que isso significa que você não sabia e / ou não se lembrava do operador do módulo. Se for esse o caso, o ponto de partida é revisar as construções de idiomas no idioma que você está usando. Revise tudo o que você não 'sabe frio' e aprenda qualquer coisa que você simplesmente não sabe.


4
+1. Enquanto as outras respostas falam sobre como se tornar um artesão melhor, é possivelmente ainda mais importante saber quais ferramentas realmente existem. Já tentou remover um parafuso quebrado sem uma saída fácil ? Existem outras maneiras de fazer isso, mas é uma bofetada na testa quando você finalmente aprende a ferramenta feita para isso. Eu diria que o OP deveria ler atentamente qualquer lista de operadores PHP há muito tempo e brincar com aqueles que não eram familiares.
precisa

5

Continue codificando, continue aprendendo. Eventualmente, com bastante dedicação, você verá o FizzBuzz e se perguntará por que teve que pensar nisso. Muitas empresas fazem uma pergunta no estilo FizzBuzz como parte muito inicial de suas entrevistas, portanto, falhar desta vez significa que você pelo menos aprendeu algo sobre o processo de contratação.

Continue escrevendo o código, apresentando as idéias do projeto e pesquisando.


4

Posso recomendar o aprendizado de JavaScript antes de Java, C ++? Razões para você:

  1. Usado no design de front-end (jQuery, alguns de seus plug-ins do WordPress, feeds do Twitter, carregando bancos de dados no navegador via JSON com pouco ou nenhum trabalho de back-end, validação de formulário etc.)
  2. Pode ser usado no servidor via Node.js
  3. Pode ser usado para criar aplicativos híbridos para iOS, Android, Win8, etc
  4. Estudar JS ajudará você a entender melhor o desempenho da página da web em diferentes navegadores e dispositivos
  5. JS foi projetado para ser mais amigável para iniciantes
  6. Você já conhece HTML & CSS (espero;), então isso ajuda com JS

Recursos gratuitos para iniciantes

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
Eu tinha cerca de 10 outros links, mas o SE não me permite publicá-los até atingir 10 repetições.

Aprender C ++, Java, etc, também é útil, mas o IMHO não tem o impacto geral na programação da Web como o JS, pois você pode usá-lo tanto no front quanto no back-end. Diverta-se!



1
e quando estiver pronto para conseguir um emprego: jobety.com
imns

3

Você pode encontrar e ajudar outras pessoas, por exemplo, giving.code (divulgação: meu site) ou Code for America ou qualquer outra coisa. Essa é uma excelente maneira de obter mais exposição a problemas que não sejam de criação de páginas da Web em PHP e se sentir bem também.

Quando você tem um problema para resolver - ou ajuda a resolver, ou apenas entende -, a escolha do código ocorre naturalmente ao longo do caminho. Ter um objetivo é a melhor maneira de aprender alguma coisa.


1
Impressionante! Esta é realmente uma boa maneira de estudar!
Moraleida

0

Então você não conseguiu resolver o problema do FizzBuzz. Grande negócio. Agora você pode, e eu aposto que você nunca esquecerá todas as inúmeras maneiras de como. Tente não ficar tão ansioso para se classificar como um programador ruim, simplesmente porque você não conseguiu resolver um problema estúpido do alto da sua cabeça.

Essa é uma questão. A outra é que você parece se sentir um pouco atrás da curva de aprendizado de programação. Como outros já disseram, continue codificando e continue lendo. Quanto mais você faz, melhor fica. É simples assim. Comece com o que você achar que é o maior buraco no fundo e prossiga a partir daí.


(Este era para soar edificante Não sei se conseguiu lá lol...)
Nick Spreitzer

0

Eu não acho que me recusaria a recomendar alguém para contratar, porque eles não sabiam que era o operador do módulo, desde que:

  1. Eles sabiam que era algum tipo de operador.
  2. Eles poderiam me dizer qual era o "módulo" quando eu os levasse.

Nem sempre é (embora geralmente)%, e alguns idiomas são estranhos. E diabos, depois de uma década, não posso dizer honestamente que conheço todos os operadores perl (e qual é a espaçonave que se faz de novo?), Nem sempre me lembro perfeitamente dos operadores bit a bit. Faz alguns anos desde que eu fiz qualquer coisa que exigisse isso.

O que poderia me fazer hesitar em recomendar alguém seria se isso causasse algum ataque de pânico por falta dessa pergunta / teste. Isso pode me dar a impressão de que eles eram um pouco verdes demais (a menos que fosse uma posição muito básica). Ninguém precisa de alguém que memorize (ou sinta necessidade) memorizar essas coisas. Você precisa de alguém que entenda conceitos muito mais amplos. Ninguém vai se importar se você procurar isso no google, mas terá que estar confiante na entrevista que saber% não era grande coisa e também que você sabe usar "operator" como uma palavra-chave ao fazer uma pesquisa rápida no google procurar.

Além disso, isso é apenas uma idéia ... mas se a faculdade comunitária local tiver um programa de compsci, todos os seus outros créditos serão transferidos e você provavelmente precisará de apenas 20 créditos para o curso de 2 anos. Quase poderia terminar isso em um semestre. Eles querem que você faça um curso sobre estruturas de dados, e também espero que algoritmos ... possam torná-lo um pouco mais forte.


-1

Aqui está um exemplo de curso: http://www.ox.ac.uk/admissions/undergrad_courses/courses/computer_science/computer_science_.html

Sugiro que você leia primeiro o seguinte: Programação orientada a objetos (muito comum, usada em todos os lugares, é aqui que entra o java) Simultaneidade (para escrever programas java que não batem misteriosamente no mundo real, aprender sobre impasses) (a maioria dos aplicativos precisa salvar dados, a teoria é importante aqui) Paradigmas de programação (leia sobre pelo menos uma linguagem não ops, de preferência funcional, para expandir seu pensamento e aprender coisas novas)

Quando olho para os 4 anos de ensino de ciências da computação, para ser sincero, acho que há apenas alguns cursos que você precisa levar a sério.

Estruturas de dados e algoritmos (e você precisa de matemática aqui para ficar realmente bom e ser levado a sério por outros programadores), redes de computadores e sistemas operacionais vêm à mente como os mais importantes. Outros assuntos que lidam com código de nível inferior, como ser capaz de codificar em montagem, sem dúvida não são tão importantes para você. A engenharia e os testes de software expõem você a conceitos úteis e você pode entender isso com o tempo.

Basta baixar um pdf que explica esses conceitos de maneira intuitiva e você estará no seu caminho.

Em alguns cursos de ciências da computação, pelo menos nos meus, o primeiro ano é uma introdução a todas as áreas da engenharia, como mecânica, elétrica, civil, etc. Há muitas matemáticas complicadas, lembre-se, que novamente podem ou não ser relevantes hoje para a maioria dos programadores de aplicativos. Portanto, muitos dos engenheiros hoje em dia têm apenas 3 anos de educação científica em ciências (espero que isso faça você se sentir melhor :)

Ponto crucial da resposta: você pode levar algum tempo para estudar todos os dias, digamos uma hora ou mais, e durante um período de tempo, tornar-se um bom programador. Apenas continue aprendendo. E lembre-se de escrever algum código todos os dias.


-3

Para mim, minha estratégia é atacar apenas o problema relevante para o que estou trabalhando. Portanto, meu conselho é que você não precise aprender tudo, apenas leia as coisas relevantes para o que está trabalhando, porque se você tentar aprender tudo de uma vez, há uma tendência de se prostrar e acabar odiando a programação.

Paz

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.