Como posso ensinar uma pessoa inteligente, sem experiência em programação, como programar? [fechadas]


100

Pediram-me para levar uma pessoa em nosso departamento de TI que não tenha experiência em programação, mas que seja uma pessoa inteligente e capaz, e ajudá-la a entrar na programação, digamos que um desenvolvedor iniciante que suporte aplicativos .Net existentes. Definitivamente, acredito que essa pessoa possa fazer isso, mas estou procurando a maneira mais rápida de fazê-la acelerar. Eu tenho muitas idéias, mas queria ver o que as outras pessoas pensavam. Eu sei que isso também será altamente dependente de como ele aprende, mas estou falando em geral.

Portanto, a pergunta: quais você acha que são as melhores maneiras de acelerar o desenvolvimento de um não desenvolvedor (neste caso, .Net?)?


1

Ouvi dizer que Learn Python The Hard Way é bom para não-programadores iniciantes.
28211 john2x

Dê uma olhada no Small Basic . É simples, mas útil para iniciantes.

3
Eu acho que explicar a programação para alguém que não tem modelo mental de nada do que você está falando é inútil. Descubra qual idioma você está falando e peça para eles acessarem os tutoriais e sujarem as mãos e depois explicarem. Eles terão dificuldades e você entrará e acelerará o processo de aprendizado.
O homem de muffin

1
Eu pediria que ele lesse | Sobre a crueldade de realmente ensinar ciência da computação | de Edgser Dijkstra, faça com que ele aprenda sobre o motivo desse artigo, para que ele possa ter cuidado com os possíveis danos cerebrais que podem ser infligidos a ele pelos geralmente aceitos formas de programação de ensino
vfclists

Respostas:


125

Normalmente, prescrevo a mesma sequência para quem quer aprender programação. É muito teórico, mas estabelece uma boa base. Deve levar três ou quatro meses de estudo em período integral, mas a programação não é algo que você aprende da noite para o dia.

Se você não conseguir passar por essa sequência, não poderá programar, então é melhor desistir agora.

  1. Code, de Charles Petzold.
  2. A linguagem de programação C, K&R
  3. A Estrutura e Interpretação de Programas de Computador, Abelson e Sussman.

Minha regra é: trabalhe nesses três livros com pura força, se necessário. Faça todas as perguntas que você tiver, mas somente depois de se esforçar para descobrir por conta própria. Se você conseguir passar por esses três livros, parabéns, você é um programador, agora eu posso jogar PERL EM 15 MINUTOS ou qualquer coisa que esteja na livraria da Big Bookcase of Java e você vai se sair bem. Se você não conseguir passar por esses três livros, desista, vá para casa, nunca conseguirá.

Não acho que você precise aprender C e Scheme, para ser sincero. Eles são apenas uma base para aprendizado futuro. Esses dois livros bastante simples são muito simples na superfície (C e Scheme são linguagens super fáceis), mas eles se aprofundam na arte real de programação sem perder tempo com sintaxe confusa; portanto, são excelentes para começar a religar seu cérebro para ser um bom programador.

Tentativas de pegar um atalho e ir diretamente para aprender exatamente o que você deseja aprender agora (como começar com C # e ASP.NET) estão condenadas.


25
Como alguém que teve que bater a cabeça na mesa com "programadores" altamente recomendados por suas habilidades em C #, mas que não conseguia fazer coisas simples como implementar uma classe base muito bem documentada, encontre vazamentos de memória em programas c e c ++, ou simplesmente resolva um problema por conta própria ou aprenda uma nova idéia em um ritmo moderado, eu concordo. Isso não é elitismo; é senso comum. Se você não conseguir dominar indicadores e recursões, nunca será muito útil para quem precisa de desenvolvedores que possam resolver problemas por conta própria.
Jonathan Henson

53
Não, não é a única maneira de ser um bom programador. Mas se três livros são uma "lista assustadora", você pode estar subestimando o que os programadores fazem.
Joel Spolsky

32
Você está tão fora de contato às vezes, Joel.
Robert S.

46
Desculpe, os jornais demoram alguns dias para chegar ao meu clube particular porque precisam ser passados ​​por um manobrista antes que possamos vê-los.
Joel Spolsky

19
Infelizmente, esta resposta falha na up to speed quicklyparte.
Rb.usa

30

A melhor maneira de atualizar rapidamente um não desenvolvedor é inspirá-lo !

Para ter sucesso, o candidato deve estar pelo menos curioso, se não apaixonado , sobre programação (independentemente da plataforma).

Embora eu concorde com Joel no caso do candidato ideal, tomei cuidado para não colocar muita teoria em uma mente fraca - isso apenas os desencorajará. Se forem inspirados, curiosos e esperançosamente apaixonados, quererão entender a teoria depois de verem a mágica.

Concordo plenamente com @karudzo - a realização pessoal e uma revisão construtiva podem ser muito inspiradoras.


29
"Se você deseja construir um navio, não instale pessoas para coletar madeira e não lhes atribua tarefas e trabalho, mas ensine-as a almejar a imensidão infinita do mar". - Antoine de Saint-Exupery
Julien Chastang

Julien - legal! Exatamente!
Jkoreska

Concordo plenamente com você neste caso! Eu mentorei / ensinei muitos desenvolvedores que não tinham experiência e, às vezes, não tinham idéia de que acabariam programadores. Fiz isso simplesmente orientando-os ao longo do caminho ... sua própria curiosidade e paixão os levam ao resultado final. Se eles não tivessem nenhum desses dois atributos, não acredito que seria possível alcançar o que alcançaram. Eu trabalho com muitos programadores que não possuem um ou ambos os atributos e estão nele apenas porque há muito trabalho disponível ... é horrível!
Jeach

Concordo. Eu sinto que a questão de aprender programação é respondida de maneira muito literal. As pessoas aprendem coisas por uma razão. As pessoas aprendem a programar para resolver problemas, ajudar as pessoas e transformar idéias em algo real. Eu conheci pessoas que esqueceram isso ao longo do caminho e, quando o redescobriram, redescobriram seu amor pela programação. Quando você realmente gosta de algo que aprenderá, encontrará maneiras de aprender e ficará melhor.
Luis Perez

12

Estou procurando a maneira mais rápida de fazê-lo acelerar.

A maneira mais rápida pode ser dar a ele o tempo que leva , embora isso possa facilmente levar um ano ou dois.

Claro, parece fácil ensinar a ele uma linguagem simples (C #, se ele quiser fazer coisas em .NET), mas aprender uma linguagem não é aprender a programar.

Se ele nunca programou, então, além da sintaxe e da biblioteca de pelo menos um idioma, ele terá que aprender sobre matrizes, listas vinculadas, o modelo de compilação de qualquer idioma que aprender, modularização, gerenciamento de recursos, paradigmas, padrões, Big- O-notação ... - toda a enchilada. É muita coisa para explorar, e a maioria de nós levou vários anos apenas para aprender essas noções básicas e ainda mais para se tornar um verdadeiro programador profissional.

Há material por aí que cobre muito disso (como o livro mais recente do Stroustrup, que ensina programação usando C ++, em vez de ensinar a linguagem C ++), mas não há muito disso e nada que cubra tudo isso. Então o cara deve estar disposto a aprender e a ler muitos livros e artigos.

Quanto a como fazer isso: não tenho um currículo completo para colar aqui. (Desculpe.)
O que eu recomendo é começar com o ensino de uma linguagem de programação, para que ele tenha a chance de progredir rapidamente e obter resultados encorajadores. Existem muitos livros por aí para ensinar essas línguas, escolha um que você esteja familiarizado. Se o livro tiver muitos exercícios, e ele estiver disposto a executá-los, esteja preparado para gastar muito tempo ajudando-o com eles. Se o livro não tiver (m) nenhum, comece a pensar em seus próprios livros com bastante antecedência, mas esteja preparado para adaptá-los ao seu nível / velocidade de entendimento.
Se o primeiro idioma não fosse C ou C ++, na IMO ele deveria aprender um destes a seguir. K&R é bom nisso, assim como o TCPL de Stroustrup ou, se ele puder (com a sua ajuda) lidar com uma curva acentuada de aprendizado, Koenig / Moo. A razão pela qual eu recomendaria isso é que, uma vez que você conhece C ou (IMO preferencialmente) C ++, é relativamente fácil escolher qualquer um desses derivados C como C #, Java, ObjC ...

De resto, forneça a ele um fluxo constante de bons livros e artigos. Eu não acho que seja muito útil se sugerimos muitos deles, já que 1) precisa se encaixar na cultura da sua empresa e 2) você precisa se sentir à vontade para dizer a ele para aprender essas coisas.


1
"desenvolvedor iniciante que suporta aplicativos .Net existentes" ... "ele terá que aprender sobre matrizes, listas vinculadas, o modelo de compilação de qualquer idioma que aprender, modularização, gerenciamento de recursos, paradigmas, padrões e notação de bits". são todos "legais", mas aposto que boa parte dos desenvolvedores que escreveram o código não tem essas habilidades.
precisa

1
@KirkBroadhurst: Se sim, algo está errado na sua empresa.
Sbi 7/11

@sbi Acho que você encontrará algo errado em muitas empresas. A empresa da OP está sugerindo que um não programador (mas ele é um "cara esperto"!) Seja transferido para uma função de suporte a aplicativos. Não sei onde você trabalha ... mas, na minha experiência, esse é o "mundo real". Realmente bons, programadores competentes são a exceção - como na maioria dos setores, a maioria das pessoas faz o suficiente para sobreviver.
precisa

1
@KirkBroadhurst: Onde trabalho é minha decisão. Fugi de empresas por ser incompetente e fugiria se nenhum dos desenvolvedores soubesse sobre pelo menos a maioria dessas coisas.
SBI

7

Eu não os iniciaria no .NET. Eu cometi esse erro muitas vezes. Não deixe um empregador pressioná-lo a criar um programador incompetente por causa do tempo. O .NET pode ser uma plataforma de desenvolvimento rápido, mas não força os desenvolvedores a aprender programação. Somente no C #, você encontrará um desenvolvedor preso aos tipos de referência, ao tempo de vida do objeto, ele deixará um grande vazamento de memória (sim, é possível no .NET) e terá designs ruins. Seria muito melhor iniciá-los em C ou C ++ (provavelmente c ++, pois eles precisarão usar conceitos de OOP) e depois dizer algo como: "Agora não seria bom se sua memória fosse gerenciada por você, tudo era objeto orientada e você não teve que lidar com todos esses indicadores desagradáveis? " Aqui está C # e JAVA. Se eles dominam o c ++, eles conquistam tanto em uma semana ou duas cada. Eu recomendo o regimento de Joel. Essa foi a lista que meu professor de CS 101 me deu, e eu fiquei muito melhor quando cheguei à análise numérica por causa disso. Isso também permitirá que você descubra antes se o candidato cortará a mostarda ou não. Além disso, depois de obter c e c ++, você entenderá automaticamente c # e java depois de ler a introdução aos livros. Você não apenas os entenderia, mas também os entenderia melhor do que alguém que não conhecia c e c ++.


4
"" Agora, não seria bom se sua memória fosse gerenciada para você, tudo fosse orientado a objetos e você não tivesse que lidar com todos esses indicadores desagradáveis? "Você quer dizer, aqui está a STL. Espere, o que . por que você não me ensinar a usar a STL em C ++ desde o início ?!
Raynos

Bem, STL é doce. Refiro-me mais à API do Windows, na medida em que a programação do Windows vai. A API do Windows não foi projetada com OOP em mente. Eu acho um ótimo exercício fazer um sujeito pobre escrever um aplicativo usando a API em c ++. Em seguida, solicito que ele escreva uma classe Window e encapsule o loop de eventos etc. ... você sabe, faça com que ele seja orientado a objetos. Depois que eles finalmente funcionarem, mostro-lhes o Windows Forms. Isso realmente os obriga a lidar com alguns conceitos básicos - ou seja, como um aplicativo do Windows funciona - que alguém nunca conseguiria se apenas pulasse no .NET.
Jonathan Henson

4
por que alguém tocaria a API do Windows com um pau? Quero dizer, estávamos falando hWNDdos anos 80, certo? Claramente, você usa uma boa abstração (que abstração é um debate completamente diferente). Claro saber como ele funciona sob o capô é bom, mas você não precisa de C # .NET para a captação
Raynos

2
A API do Windows é incrível. Enfim, eu só uso isso como uma ferramenta de ensino. Por exemplo, as pessoas geralmente não entendem como os eventos são disparados magicamente nos programas do Windows. É útil que eles tenham que brincar com o loop de eventos. Além disso, os programadores precisam, no mínimo, estar familiarizados com o hWND, especialmente se estiverem lidando com qualquer API que brinque com gráficos - assim como você terá dificuldade em fazer qualquer coisa no Unix sem saber como usar um XID. De qualquer forma, obriga-os a aprender como funciona um programa do Windows. Além disso, quando terminam, eles sabem como o Windows.Forms funciona.
Jonathan Henson

Não precisa ser uma transição para o C # btw, apenas para o .NET em geral. Acho que o @Joel tem um bom artigo sobre a Lei das Abstrações com Vazamento, sobre o motivo pelo qual geralmente é bom que os programadores olhem por baixo do capô antes de usar uma estrutura.
Jonathan Henson

6

Dê a eles algo simples, mas útil para resolver. Deixe-os se atrapalhar um pouco e ajudá-los a polir. Não há nada como uma pequena conquista para ajudá-los (embora alguém não esteja interessado em programar


6

Programação em pares. Deixe que eles sigam você enquanto você escreve seu próprio código - qualquer código. Dentro de algumas horas, faça com que eles digitem seu código para você, enquanto você lhes diz o que fazer, pressione tecla por tecla, mesmo se necessário. Responda a algumas das perguntas deles, mas não tanto, para que você fique muito lento - deixe-os absorver tudo. Eles também encontrarão seus erros de digitação e mais erros do que você imagina. Dentro de alguns dias, eles poderão começar a "navegar", informando qual código inserir para tarefas semelhantes às que eles já viram antes.

Aprendi muito do que sei como desenvolvedor dessa maneira em um mês e ensinei vários outros novos desenvolvedores dessa maneira, um dos quais conseguiu me assumir como desenvolvedor líder de uma startup depois de vários meses. Quando começamos a trabalhar juntos, ele nunca havia escrito uma única linha de código.


1
Acho que a programação em pares é realmente uma ótima maneira de ensinar programadores iniciantes, mas acho que a programação em pares o tempo todo pode ser problemática. Acho que os programadores iniciantes precisam de algum tempo trabalhando sozinhos para aprender a resolver problemas e criar confiança em suas habilidades.
precisa saber é o seguinte

Sim, comece com a programação em pares e dê as tarefas simples - tarefas reais, no software em que eles estão trabalhando, na linguagem em que eles estão trabalhando, com realizações. Revise e mentorize todo o seu trabalho e eles progredirão.
Thomas W

2

Dê a ele um bom ide (estúdios visuais, express ainda é bom). Ensine a ele 60% da sintaxe comum (exclua yield, linq, enums, atributos, etc., faça aulas, virtual e substitua). Passe algum tempo no depurador (especialmente na pilha de chamadas). Em seguida, diga a ele para pesquisar no google "msdn functionanme" sempre que precisar de ajuda e isso deve levá-lo a começar rapidamente.

Também ensine-o a nunca pegar e engolir uma exceção. Diga a ele que ele deve repetir ou registrar novamente!

Bônus: ensine como serializar dados json para que ele possa ler / gravar facilmente em um arquivo. Um banco de dados é um exagero e muito para aprender e você não quer que ele escreva formatos de arquivo personalizados, embora eu possa permitir que uma entrada por tipo de linha de arquivo passe para salvar / carregar uma matriz de string como aceitável.


1

Eu sei que muitas pessoas têm falado sobre idiomas e livros para esses idiomas. Eu sou diferente.

Programar é aprender a pensar analiticamente. Em primeiro lugar, a pessoa deve ser capaz de pensar e apresentar o algo em um pedaço de papel para saber qual é o problema. Você precisa orientá-los para que eles obtenham a técnica de pensamento correta.

Em seguida, vem os fundamentos da linguagem. Comece com eles no idioma de sua escolha. Dê um problema ao programa.

Depois que esse primeiro corte terminar, faça com que eles façam os fundamentos de CS e os Padrões de design.

Agora faça com que eles reprograme o problema anterior com esses novos conceitos.


1

Comece com o básico: variáveis, loops, enquanto loops, para loops, matrizes, ensine o básico, imprimindo na tela, fazendo algumas contas simples. Mova-se para métodos e OOP básicos, coisas como a seguir, como criar uma classe, mostre a ele o por que não apenas o como.

A linguagem não importa, mas escolha algo que você conhece e que seja altamente abstrato (java, python etc ...) para que ele não precise se preocupar com coisas como gerenciamento de memória, ponteiros etc. recursão, torres de hanio ou pesquisa recursiva em diretórios.

Aprenda a programar é um bom recurso gratuito na programação Ruby. Faça com que seja divertido, fácil e divertido.


1

Dê a ele alguns desafios e peça que ele aprenda a encontrar recursos para resolver o problema.

Se você puder ensiná-lo a encontrar respostas e ser auto-suficiente, ele naturalmente aprenderá a programar bem. Pensamento crítico e desenvoltura são duas habilidades essenciais para um programador.

No final do dia, a paixão / interesse será definitivamente um fator-chave para o sucesso que eles terão em aprendê-lo rapidamente. Se ele não tiver ou pegar "o bug", pode ser um processo lento e / ou doloroso. Se ele pegar o bug, ficará acordado até tarde, fora do horário de trabalho, tendo o tempo de sua vida.

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.