Como posso explicar aos meus pais que eu estudo linguagens de programação?


64

Atualmente, estou terminando meu mestrado em ciência da computação. Estou interessado em linguagens de programação, especialmente em sistemas de tipos. Interessei-me por pesquisas nesse campo e no próximo semestre vou iniciar um doutorado sobre o assunto.

Agora, aqui está a verdadeira questão: como posso explicar o que (quero) fazer com pessoas sem conhecimento prévio em ciência da computação ou áreas afins?

O título vem dos fatos de que eu nem sou capaz de explicar o que faço aos meus pais, amigos e assim por diante. Sim, posso dizer "o objetivo é ajudar os desenvolvedores de software a escrever um software melhor" , mas não acho que seja realmente útil: eles não têm conhecimento de "programação", não têm idéia do que isso significa. Parece que estou dizendo que sou mecânico de automóveis para alguém da Idade Média: eles simplesmente não sabem do que estou falando, muito menos como melhorá-lo.

Alguém tem boas analogias com o mundo real? Exemplos esclarecedores que causam momentos "a-ha"? Devo realmente mostrar um trecho curto e simples de código para maiores de 60 anos sem experiência em ciência da computação (nem acadêmica)? Em caso afirmativo, qual idioma devo usar? Alguém aqui enfrentou problemas semelhantes?


Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
DW

3
Esta pergunta recebeu um voto negativo e uma ou mais sinalizações de fechamento, se eu entendi corretamente o painel. Por favor, considere deixar um comentário para que eu possa melhorá-lo. Embora eu esteja aqui à espreita há algum tempo, é a primeira vez que participo ativamente do site e talvez eu não esteja familiarizado com algumas políticas.
Effeffe


11
Simplesmente não consigo entender por que essa pergunta é mais votada do que uma questão relacionada a um problema específico, o que é mais útil. Esta pergunta é ridícula e foi ridiculamente votada. Incrível!
Nbro 5/05

2
@ Nbro Eu não entendo o que é ridículo sobre a questão, e não sei como você decidiu que uma pergunta específica é "mais útil" do que outra.
Effeffe

Respostas:


59

Se você tiver alguns minutos, a maioria das pessoas sabe como adicionar e multiplicar dois números de três dígitos no papel. Peça-lhes para fazer isso, (ou a admitir que eles poderiam, se tivessem de) e pedir-lhes a reconhecer que eles fazem esta tarefa metodicamente: se este número for maior que 9, em seguida, adicionar um carry, e assim por diante. Essa descrição que eles deram do que fazer é um exemplo de algoritmo .

É assim que ensino as pessoas o algoritmo de palavras e, na minha experiência, esse foi o melhor exemplo. Em seguida, você pode explicar que é possível imaginar que há tarefas mais complexas que os computadores devem executar e que, portanto, é necessário que uma linguagem inequívoca alimente esses algoritmos com um computador. Portanto, houve uma proliferação de linguagens de programação porque as pessoas expressam seus pensamentos de maneira diferente, e você está pesquisando maneiras de projetar essas linguagens para que seja mais difícil cometer erros.

Esta é uma situação muito reconhecível. A maioria das pessoas não tem noção de que os computadores que usam executam programas, ou que são programas de código-fonte escrito por humanos, ou que um computador pode "ler" o código-fonte, ou que o cálculo que eles associam à aritmética é a única coisa que os computadores faça (e movimentação de dados e rede, talvez).

Minha pesquisa é em computação quântica; portanto, quando as pessoas me perguntam o que eu faço, não tento explicar isso. Em vez disso, tento explicar que a física quântica existe (eles geralmente ouvem falar do gato de Schrödinger e de coisas que estão em dois lugares ao mesmo tempo) e que, devido a essa física estranha, é possível uma computação mais rápida.

Meu objetivo é deixar a pessoa se sentindo um pouco mais instruída do que ela, sentindo-se excitada com um mundo que desconhecia que existia, mas com o qual você agora a familiarizou. Acho que isso é muito mais valioso do que explicar minhas perguntas de pesquisa específicas.


27
Classificar um baralho de cartas também é uma maneira fácil de introduzir a noção de algoritmos.
Morwenn

2
@ Morwenn Isso é verdade! Existem muitos algoritmos que executamos no dia a dia! Lidar com cartões é algorítmico, o tráfego tem muitos aspectos algorítmicos, embora sejam baseados em eventos e não imperativos, o cozimento é algorítmico quando você faz isso no piloto automático. A razão pela qual eu gosto disso é que todo mundo aprendeu o mesmo algoritmo no ensino fundamental, enquanto que para classificar uma lista de números, as estratégias das pessoas variam e não são metódicas: tentam encontrar padrões de números próximos e adjacentes, e nem todo mundo conhece o encomendar um baralho de cartas é suposto ter qualquer maneira (é corações antes de espadas?)
Lieuwe Vinkhuijzen

Pessoalmente, quando perguntado sobre a computação quântica, costumo evitar completamente a física, mas tento dar uma idéia geral (que um computador quântico não funciona melhor ou mais rápido, mas pode simplesmente fazer cálculos de uma maneira que está fora do escopo dos computadores normais). Se eles perguntarem o que é dessa maneira, eles tendem a ser felizes com uma visão simplificada, basicamente a do processamento SIMD (com recursos lineares suficientes para acessar o tamanho exponencial dos dados de entrada paralelos), como são a maioria dos algoritmos.
The Vee

Você pode ir além de apenas cartões; Recentemente, encontrei-me usando uma variante do Quicksort para classificar uma pilha de papéis que precisava organizar, sem sequer pensar nisso, porque havia muitos para uma classificação básica de inserção.
JAB

@JAB Isso é incrível! Mas você provavelmente já conhece o Quicksort no fundo da sua mente. A vantagem de explicar adição versus classificação é que todo mundo tem o mesmo algoritmo de adição, mas nenhum leigo possui algoritmo de classificação metódico. Por outro lado, isso poderia ser uma vantagem! Você começa a explicar diferentes algoritmos. Essa é a rota que eu tomo quando falo com alguém com espírito matemático fora do cs e aborda o conceito de algoritmos diferentes para a mesma tarefa com limites de tempo diferentes e por que limites inferiores são difíceis.
Lieuwe Vinkhuijzen

18

Eu tentaria algo assim:

Os programadores podem dizer aos computadores o que fazer. Para fazer isso, eles precisam usar uma linguagem de programação. Essa é uma linguagem que é entendida por computadores e humanos. Por exemplo, se você editar um documento do Word e pressionar uma tecla, o computador mostrará a letra que você pressionou. Isso porque um programador escreveu um programa dizendo: Se o usuário pressionar "A", coloque um "A" no documento. Se o usuário pressionar "B", coloque um "B" no documento e assim por diante. O computador apenas segue as regras do programa que o programador escreveu.

Agora, às vezes, os programadores escrevem uma regra estúpida por engano. O computador tentará seguir a regra estúpida de qualquer maneira, mas se você seguir uma regra ruim, algo ruim acontecerá. Por exemplo, às vezes, quando você está editando um documento do Word, de repente tudo congela e o computador não reage mais. Isso pode ser porque algum programador da Microsoft escreveu um programa menos do que perfeito.

Meu trabalho é sobre inventar métodos para verificar programas quanto a esses e outros erros, usando outros programas e alguma matemática. A idéia básica é descobrir como prever o que acontecerá quando um programa for executado, sem realmente executá-lo.

É claro que, como se trata de pesquisa, só trabalho em um pequeno aspecto disso, não tudo de uma vez, mas esse é o quadro geral do que estamos tentando alcançar.

Estou usando uma explicação em um estilo semelhante para o meu campo (linguagens específicas de domínio) e posso relatar que muitas vezes me ajudou a superar o "oh, você é um cientista da computação que eu nunca poderia fazer isso, me deixe ir embora e parar de falar para você ". A chave parece ser a de extrair as primeiras frases até que uma chegue a um exemplo com o qual a outra pessoa possa se relacionar, como documentos do Word nesse caso. Pontos de bônus pela inclusão especial do exemplo na outra pessoa, como Excel para contadores ou Powerpoint para chefes ou jogos de computador para jogadores ou navegadores da Web ou qualquer outra coisa.

Observe que você não precisa permanecer nesse nível superficial. Se você (e a outra pessoa!) Quiser, poderá se aprofundar nos detalhes do que está fazendo exatamente a partir daí. Por exemplo: "No meu projeto atual, estou tentando provar matematicamente que o que eu inventei no ano passado realmente funciona. Isso significa que eu tenho que definir com muito cuidado o que um programa realmente significa e o que minha invenção prevê que um programa significa, e então Eu posso mostrar que a previsão está realmente correta ".


12

A maioria das pessoas entende receitas. Se você seguir as instruções, receberá uma refeição decente. Às vezes, porém, as instruções podem ser difíceis de seguir. Por exemplo, ao criar perogias, você encontrará instruções como esta, extraídas palavra por palavra dos Perogies poloneses da avó :

Para cozinhar perogies: Deixe ferver uma panela grande com água levemente salgada. Solte perogies um de cada vez. Eles são feitos quando flutuam para o topo. Não ferva muito tempo, ou eles ficarão encharcados! Retire com uma escumadeira.

Caramba. Vamos rever os gentis conselhos da vovó para nós. Coloque-os um de cada vez ... para que todos tenham diferentes períodos de tempo em que estão no pote. Entendi. Eles são feitos quando flutuam para o topo . Bem, quantos são 'eles'? Eu pego cada um assim que aparece? Espero 80% flutuar até o topo e depois pegá-los todos? Isso é loucura, impreciso. Não ferva por muito tempo, ou eles ficarão encharcados! Como faço para medir quando eles estão prestes a ficar encharcados para não demorar muito? Se cinco aparecerem ao mesmo tempo, terei tempo para obtê-los todos?

E confie em mim, eu arruinei muitas perogias nos meus dias. Esse é um problema sério que qualquer cozinheiro de perogie já enfrentou antes. Mas, apesar desses problemas que surgem mesmo nas análises mais básicas, as pessoas ainda são capazes de criar perogias usando exatamente o mesmo método. Mas há algo que podemos fazer para que mais lotes de perogias sejam bem-sucedidos e menos lotes de perogies falhem?

Não seria ótimo se alguém especializado em tornar as receitas mais confiáveis? Alguém que disse "podemos canalizar as perogias para que elas apareçam e saiam da água!" ou "podemos adicionar um corante especial ao perogie, seguro para comer, é claro, que lhes dá tons diferentes e sabemos que os mais escuros são os primeiros, já que eles correm o risco de ficar encharcados". Queremos um especialista que possa pegar esta receita e solucionar os possíveis problemas. A vida dos cozinheiros perogie em todo o mundo será mais fácil, e menos pedaços de batata-macarrão encharcados serão alimentados a um cão.

Os programadores seguem receitas o tempo todo também. Mas, às vezes, o equipamento que usam, as instruções que usam e as interpretações que usam não se combinam para fazer a refeição luxuosa que eles queriam. Felizmente, existem pessoas que dedicam suas carreiras para tornar a vida de um programador mais produtiva. No seu caso, você se especializou em uma das ferramentas que um programador usa, a linguagem, para tentar melhorá-las.


7

Aqui está como eu tentaria explicar isso para minha mãe:

As linguagens de programação são usadas pelas pessoas para fornecer instruções ao computador. Tudo o que um computador faz é feito através de algum código de computador escrito em uma linguagem de programação por um programador.

Portanto, se, por exemplo, queremos que o canal de TV mude quando pressionamos um botão, precisaríamos escrever algum código em uma linguagem de programação para fazer isso. O mesmo vale para tudo o que acontece com um laptop, um smartphone e qualquer outra coisa cuja operação envolva um computador.

Pode parecer que exista uma única linguagem de programação que os programadores possam usar para escrever todos os programas. Mas isso simplesmente não é o caso. Existem diferentes linguagens de programação para todos os diferentes tipos de aplicativos.

Alguns são usados ​​para criar sites, outros para criar aplicativos para laptops (como o Microsoft Word).

Uma das razões pelas quais existem muitas linguagens de programação diferentes é porque algumas são mais adequadas para algumas tarefas do que outras. Outro motivo é que alguns idiomas foram projetados para serem usados ​​com computadores diferentes. Portanto, nem sempre é possível pegar o código escrito para um smartphone e executá-lo em um laptop. E enquanto alguns programadores podem programar em muitos idiomas, e muitos são capazes ou aprendem novos idiomas rapidamente, qualquer programador conhecerá alguns idiomas melhor do que outros, e outros nem um pouco.

Portanto, as linguagens de programação são uma das principais tecnologias que fazem os computadores funcionarem. Linguagens de programação bem projetadas podem aumentar tremendamente a produtividade dos programadores. Eles também podem melhorar a segurança e reduzir erros de programação, bugs e defeitos.

E, basicamente, é isso que eu estudo: como as diferentes partes das linguagens de programação afetam a produtividade do programador? Que partes de um idioma específico melhoram a escrita de código para um site? Por que alguns idiomas são mais populares que outros?

Embora possa parecer que essas perguntas sejam esotéricas e distantes da vida cotidiana das pessoas comuns, o oposto é verdadeiro. O estudo das linguagens de programação é vital para qualquer produto ou serviço que use um computador. E hoje isso significa quase tudo;)


7

Sua melhor aposta pode ser formar analogias com idiomas humanos.

Linguagens de programação são usadas para fornecer instruções aos computadores. As línguas humanas são usadas para comunicar idéias a outras pessoas e ajudar a formar nossos próprios pensamentos. A hipótese de Sapir-Whorf diz que a linguagem que você usa influencia seu pensamento. (O grau em que a hipótese de Sapir-Whorf é verdadeira é discutido, mas podemos aceitá-la verdadeira ao discutir linguagens de programação. Caso contrário, você também pode desistir de seu doutorado. 😜)

Existe uma grande variedade de linguagens humanas, algumas com características que consideramos exóticas. Por exemplo:

  • Alguns idiomas exigem que você indique evidências em todas as afirmações: se a afirmação é devida a sua própria experiência, sua própria inferência, boatos, especulações etc.
  • Algumas línguas formam grandes palavras por aglutinação; cada palavra pode ser altamente modificada para codificar muitas informações sobre seu papel gramatical. Outros idiomas quase nunca modificam as palavras e dependem da ordem ou das partículas das palavras para expressar essas informações.
  • Os idiomas diferem no tamanho do vocabulário . Alguns idiomas têm palavras que só podem ser traduzidas com uma circunlução (por exemplo, 엄친아 ). Algumas línguas têm expressões brilhantes que são tão boas que outras línguas as emprestam (por exemplo, Schadenfreude).
  • Algumas línguas não têm conceito de esquerda / direita; você deve expressar tudo em termos de norte / sul / leste / oeste.
  • Alguns idiomas não têm números. Os idiomas também variam no número de nomes de cores comuns .
  • Os idiomas variam em suas fonotáticas. Por exemplo, a taxa de sílabas varia, com os japoneses tendendo a usar muitas sílabas simples, enquanto o chinês é mais lento, mas codifica as informações em tons.
  • Os idiomas variam em densidade de informações . Se você olhar para uma tradução chinês-inglês-francês, verá que a versão chinesa é muito compacta no papel e os franceses ocupam mais espaço.
  • Alguns idiomas, como o inglês, são promíscuos: qualquer pessoa pode emprestar livremente uma palavra de outra língua e identificá-la em inglês. Outros idiomas, como o francês, têm um órgão padronizador que resiste à mudança. O islandês, por exemplo, é ferozmente conservador por natureza.

Existe uma melhor linguagem, objetivamente falando? A resposta pode depender do que você está tentando fazer.

  • Se você está tentando se comunicar secretamente pelo rádio, o Navajo seria uma boa aposta. (Mencione seu idioma "somente gravação" favorito.)
  • Se você está tentando escrever um aviso para as gerações futuras, e a inscrição deve ser compreensível daqui a alguns milhares de anos, convém usar o chinês (devido ao grande número de falantes e à estabilidade do sistema de escrita) ou talvez Inglês (que mudou drasticamente no último milênio, mas é amplamente conhecido). (C e JavaScript provavelmente viverão "para sempre".)
  • O chinês, com muitos homofones, é ótimo para punir . (Poesia Perl)
  • Talvez a neutralidade seja importante; nesse caso, você pode escolher o esperanto. (Java foi projetado para ser portátil; C é menos).
  • Talvez você precise expressar um pensamento com total precisão, e nenhuma linguagem natural será suficiente. Você tem que recorrer a Ithkuil !
  • Pode ser muito difícil traduzir entre alguns pares de idiomas (por exemplo, árabe-inglês ) devido a vastas diferenças culturais e conotações culturais com certas palavras. Da mesma forma, algumas idéias não são facilmente expressas em certas linguagens de computador porque o conceito simplesmente não existe (por exemplo, recursividade da cauda).

No final, tudo no computador é traduzido para o idioma da máquina, mas escolher o idioma certo para o trabalho pode afetar muito a produtividade, a confiabilidade, o desempenho e a agilidade do seu software. Escolhemos linguagens camisa de força como Ada ou Java para projetos "sérios" e Ruby ou Perl para máxima whipuptitude . Para consultar um banco de dados, SQL é a linguagem usual; escrever seu próprio código C seria idiota.

Com base nessas analogias, tenho certeza de que você pode expor idéias como programação funcional, segurança de tipo, inferência de tipo etc. por algumas horas.


11
Uma dificuldade disso é que algumas pessoas nunca realmente refletiram sobre sua própria linguagem natural. Portanto, os exemplos de linguagem podem ser quase tão difíceis de entender para algumas pessoas quanto a noção de linguagem de programação. Se você conhece a pessoa é (pelo menos) bilíngüe, as perspectivas são provavelmente melhor ....
TextGeek

@TextGeek Mesmo em inglês, existem dialetos. As pessoas discutem sobre as regras da linguagem, como negativos duplos e frases finais com uma preposição. A linguagem evolui o tempo todo, às vezes de maneiras controversas. A popularidade das mensagens de texto levou a novas abreviações. No inglês americano, você pode transformar qualquer substantivo em um escândalo adicionando um sufixo "-gate". Não acho que você precise ser bilíngue para apreciar a inovação e a diversidade de idiomas.
200_success

3
  • as linguagens de computador se relacionam mais ou menos com as linguagens humanas. eles usam palavras padrão / comuns / compartilhadas. considere que existem milhares de idiomas humanos, alguns extintos, outros ativos, e seu vocabulário e uso estão evoluindo continuamente ao longo do tempo. algumas pessoas criam novas palavras úteis para expressar conceitos que não eram expressáveis ​​anteriormente. outro aspecto sobreposto da linguagem de computador e da linguagem humana é a gramática . alguns idiomas, como o inglês, possuem gramática muito complexa. considere todos os tempos diferentes e as regras complexas que os governam. outros idiomas não têm os mesmos tempos . outra correlação é com partes do discursocategorias, por exemplo, substantivo, verbo, advérbio, adjetivo, etc., elas funcionam como tipos em linguagens de computador. imagine criar novos idiomas com diferentes partes de categorias de fala que não foram consideradas anteriormente ou com novas combinações de partes de fala provenientes de diferentes idiomas, etc .; note que a linguística tem uma conexão com a ciência da computação, por exemplo, esp na teoria da linguagem chomskiana.

  • software e hardware geralmente estão relacionados a motores e máquinas e até recebem o nome disso. existe uma antiga analogia de software de que tentar modificar um complexo sistema de produção 24 horas por dia, 7 dias por semana, é como trocar os motores de um avião durante o vôo . Observe também que os motores a jato são altamente complexos e envolvem enormes especificações precisas de peças intercambiáveise aqui há alguma analogia com as linguagens de computador que controlam o hardware. imagine toda a complexidade dos documentos que descrevem exatamente como construir motores a jato: todas as peças, como são construídas, como se encaixam, como são montadas etc; são criados / compilados por engenheiros usando um formato / estrutura preciso / regras convencionais; software é um pouco análogo a isso.

  • Em máquinas, qualquer pessoa sem educação científica ou matemática ou mesmo uma criança pode entender o conceito básico e muitos aspectos de uma máquina de Turing! uma criação maravilhosa. suspeita-se que Turing tenha se inspirado em máquinas de escrever e / ou máquinas de teletipo. alguém poderia descrever a tabela de estados e mostrar a eles uma amostra de tabela de estados que calcula a multiplicação, e alguém poderia assistir a uma animação do youtube de uma máquina de Turing calcular uma computação básica como uma multiplicação. diga a eles que a tabela de estados pode calcular ou decidir literalmente um idioma e que as entradas são literalmente chamadas de palavras . de fato, as máquinas de Turing aceitam palavras em idiomasetc., diga a eles que existem duas tabelas de estados que calculam a multiplicação, mas uma é muito mais rápida ou mais eficiente que a outra e que sua pesquisa envolve encontrar melhores conceitos de tabelas de estados. descobrir como criar tabelas de estados efetivamente envolve linguagens de programação que resumem o conteúdo de grandes tabelas de estados! um compilador converte o código escrito em uma linguagem de programação em uma grande tabela de estados.

  • algoritmos de classificação são uma ótima metáfora de nível de entrada para a ciência da computação. pode-se observar as diferentes listas de instruções, também conhecidas como algoritmo, para cada tipo. pode-se aprender o que é uma classificação por bolha versus uma classificação por inserção, pode-se usar um baralho de cartas. agora concentrar-se sobre os diferentes conjuntos de instruções, e consideram que eles têm de ser escrito em uma linguagem muito precisa, tão precisa quanto afirmações matemáticas, que tem uma rígida sintaxe etc, e tem semelhanças / estruturas básicas: a lógica condicional, loops, variáveis etc e explique que a arte desta especificação precisa é sobre linguagens de computador, e que algumas linguagens diferentes podem gerar os mesmos algoritmos, mas existem algumas variações estilísticas sutis nessas linguagens que são estudadas com grande profundidade etc.


11
Por que voto negativo neste? Eu acho que há muitas idéias. Pode-se não concordar com todos os pontos, mas há muitas possibilidades aqui. +1
effeffe

3

Você simplesmente diz: "Estou ajudando os caras que ensinam computadores a trabalhar"

A idéia é que os programadores ensinem computadores a fazer coisas usando programas e você os esteja ajudando. Eu acho que vai funcionar, assumindo que eles já sabem um pouco sobre computadores.


"Acho que vai funcionar, assumindo que eles já sabem um pouco sobre computadores", esse é o ponto: se você ler atentamente minha resposta, verá que o principal problema é explicar o que faço para aqueles que não têm idéia de como o computador realmente funciona. .
Effeffe

@effeffe: mas eles sabem que existem computadores? E eles provavelmente têm alguma idéia de que existem coisas chamadas "programas", "aplicativos" ou "aplicativos", mesmo que nunca tenham usado conscientemente um computador. Portanto, por uma questão de simplicidade, a programação é (entre outras coisas) a criação de um aplicativo escrevendo instruções que o computador pode seguir. Naturalmente, levaria muito tempo e instruções para que eles apreciassem qualquer detalhe da programação ou de como isso poderia ser melhorado, mas se eles souberem que computadores e programas melhoram com o tempo, eles conhecerão "um pouco" sobre computadores, pelo menos.
Steve Jessop

3

Se você não quiser usar comparações, embora eu ache que o algoritmo criado por Lieuwe é muito bom para transmitir a idéia, você poderia dizer que deseja reduzir os mal-entendidos entre humanos e computadores. Afinal, você está lidando com idiomas, e isso é algo muito básico para os seres humanos, eu acho. Então, por que não fingir que o computador é apenas outra mente com a qual você deseja conversar?

Os seres humanos criaram computadores, então sabemos como a mente do computador funciona. Mas o computador geralmente não "sabe" como nossas mentes funcionam. (Ou qual era a nossa intenção real quando escrevemos um bug intrincado e finamente criado que vive feliz no meio do código por muitos ciclos;)) Portanto, cabe a nós refinar o idioma que usamos para nos comunicar com eles e reduzir possibilidades de mal-entendidos. E é isso que você faz. Analogias como verificação ortográfica ou gramática são, obviamente, muito bem-vindas neste contexto.


3

Aqui estão duas analogias que você pode achar úteis:

  • Meu trabalho é como explorar novas abordagens à notação musical. ( exemplo ) Embora os sistemas de notação predominantes sejam bastante sofisticados, é valioso explorar alternativas que reduzam tempo / esforço / erros para o compositor, para o artista ou permitem que coisas desajeitadas ou impossíveis de serem expressas no sistema predominante, ou até apenas promover diferentes tipos de pensamento e, assim, levar a novas composições. (Isso facilita a compreensão de que um dos desafios está em convencer as pessoas a adotar o novo material.)

  • Estou ajudando a projetar melhores ferramentas para as pessoas do meu setor. Assim como as pessoas na indústria de manufatura são auxiliadas por inovações como furadeiras sem fio, cortadores a laser e impressoras 3D (nenhuma delas existia há 60 anos), as pessoas na indústria de desenvolvimento de software são auxiliadas por mais poderosas, mais precisas, mais robustas ou linguagens de programação mais fáceis de usar e seus recursos.


2

Bem, provavelmente, você tem algum motivo para estudar idiomas - use esse motivo. Por exemplo:

Estou tentando tornar os computadores e seus aplicativos mais baratos, mais fáceis de usar e mais seguros.

Se isso é algo que chama a atenção, sinta-se à vontade para se aprofundar um pouco mais, mas não se esqueça da distância inferencial - a maioria das pessoas tem um grande problema em explicar algo que está muito longe da experiência e do conhecimento existentes do aluno.

Os idiomas estão bem abaixo da escada do computador. As pessoas que você está tentando explicar provavelmente não sabem o que é algoritmo , muito menos que existem maneiras diferentes de representar o referido algoritmo que são mais ou menos úteis. Você pode explicar qualquer coisa se for gentil o suficiente, mas esteja preparado para passar por várias camadas, se desejar explicar algo tão "profundo" quanto a "linguagem de programação RnD". Ajuda se as pessoas que você está explicando já lidam bem com matemática, mas isso é tão raro quanto o conhecimento em informática :)

Vá devagar com analogias. Eles parecem estar ajudando, mas pela minha experiência, eles geralmente aumentam a confusão, mesmo que você ache que eles são uma grande ajuda. As linguagens de programação são uma espécie de como falar advogado ... mas isso não é muito útil para pessoas que não entendem tanto a programação e advocacia, realmente. Se você realmente precisar de alguma ajuda extra, os exemplos funcionam bem o suficiente - mas você precisa acomodá-los para a pessoa que você está explicando (e o que exatamente você está pesquisando)

Você sabe como não pode dividir por zero? Estou tentando garantir que os computadores nem tentem se dividir por zero, para não travarem quando alguém cometer um erro.


▲ por sugerir uma abordagem gradual e suave.
PJTraill

1

Acho que as melhores analogias são adaptadas à pessoa com quem você está falando. Eles são pintores? Discuta como o que você está fazendo é o equivalente a explorar a teoria de como criar pincéis melhores; apenas esse campo tem apenas 60 anos em vez de 600! Cavaleiros? Compare-o ao desenvolvimento de ferraduras para tarefas específicas ao longo dos anos.

Se eles realmente querem entender melhor, minha maneira favorita de explicar é falar sobre o preenchimento de formulários fiscais e as instruções de cada linha. Acho que a maioria das pessoas com mais de 20 anos tem alguma experiência com o Formulário 1040 do IRS e as caixas que você preenche correspondem muito bem a falar sobre a atribuição de variáveis. Em seguida, aponto que o software equivale a cerca de 2 bilhões deles por minuto (um número composto, mas é claro). Se você está estudando linguagens de computador, é fácil para as pessoas entenderem por que melhores instruções realmente importariam =)

Se eles ainda parecem interessados, é sobre o ponto em que começo a tentar explicar o controle de fluxo. Normalmente, quando termino de discutir o controle de fluxo do Formulário 1040, eles começam a ficar empolgados e a perguntar se já vendi alguma das minhas idéias ao governo!

Costumo falar sobre sistemas embarcados, portanto, às vezes, mesclo a analogia do Form 1040 com um robô que cozinha um pedaço de pão (ou 500). Geralmente funciona bem, embora, por algum motivo, passar dos formulários de imposto do IRS para fazer algo que deixe um bom gosto na boca seja muito difícil para algumas pessoas.


1

Seus pais têm algum tipo de computador. Provavelmente não um, mas muitos. Eles podem ter um computador desktop ou laptop, telefone ou iPad. Caso contrário, eles têm uma máquina de lavar ou um gravador de vídeo ou um DVD player ou algo com um computador dentro.

Caso contrário, você diz: "Desculpe, mas você conseguiu ter uma vida completamente sem computadores. Portanto, não posso explicar o que estou fazendo. Mas o mundo está mudando. Você só precisa confiar em mim que Eu sei o que estou fazendo. "

Se eles têm algum tipo de computador, você diz: "Este é um computador, e não funciona apenas por mágica. Funciona porque um homem ou mulher inteligente escreveu um programa que diz ao computador como trabalhar. E o trabalho de esses homens e mulheres inteligentes são realmente difíceis, e o que estou fazendo é ajudá-los a facilitar o trabalho ".


-1

Há algum tempo, decidi que uma boa analogia para a programação, que poderia ser facilmente entendida por pessoas com pouca ou nenhuma experiência com computador, estaria escrevendo receitas de tricô .

Uma boa receita de tricô contém vários tamanhos na mesma lista de instruções, que fornecem loops e instruções if. É ilegível para aqueles que não tricotam e, se contém erros, você acaba com padrões desalinhados ou uma manga extra. Cabe a você - como redator da receita - descobrir onde a receita estava errada com base nas blusas incorretas e corrigi-la.

Você pode usar o exemplo de "Estou vendo como as receitas são diferentes para tricô, crochê, confecção de malhas e similares" e aprendendo sobre o X (onde você precisa encontrar uma analogia para o que realmente faz ).


O autor da pergunta não está estudando programação. Eles estão estudando o design de linguagens de programação.
precisa saber é o seguinte

@DavidRicherby É por isso que sugeri usar o exemplo do OP, observando como as receitas procuram diferentes tipos de trabalhos manuais. Aparentemente, estes também são muito diferentes.
Thorbjørn Ravn Andersen

-1

É Magica!

Quando pessoas sem formação técnica perguntam o que significa escrever software / programas / fazer engenharia de software, apenas lhes digo o que realmente é: mágica. Os mágicos encantam feitiços em uma linguagem esotérica para realizar certas tarefas, agitam suas varinhas e algo mágico acontece. Encanto certos feitiços em uma linguagem esotérica, mexo o mouse e algo mágico acontece (no que diz respeito a eles).

Se eles não estiverem convencidos, pedi que ligassem o smartphone e me digam como realmente funciona. Eles costumam dizer: "Não sei, é o que acontece. Aperto os botões e tudo acontece." Então eu digo a eles: "Sim, exatamente, mas eu sei o que realmente está acontecendo, e é basicamente o mesmo que Harry Potter balançando a varinha e dizendo: 'Hocus pocus'" Para todos os efeitos, para o leigo, eu pense que esta é uma explicação perfeitamente legítima.

Quase todo mundo sabe quem é Harry Potter, o que ele faz e o que o torna especial (pelo menos ele é um mágico e pode fazer coisas poderosas com magia). Você pode simplesmente explicar que, às vezes, os mágicos precisam escrever seus feitiços em um novo idioma para tornar sua mágica ainda mais poderosa, o que não é tão longe da verdade. Você pode apenas dizer a eles que está estudando o processo de criação de livros de feitiços mais poderosos para ajudar uma geração de assistentes ainda mais poderosos que podem criar ainda mais magia em seus dispositivos de consumo favoritos. Todo mundo aprecia isso.

Falha épica

Se isso falhar, volto ao exemplo da receita, porque a não uniformidade das soluções ensina às pessoas que há mais de uma maneira de esfolar um gato (ou assar um bolo), e isso é parte do que torna a programação tão complicado. Também ajuda a colocar a pessoa na posição de CPU e, algumas vezes, seguir as instruções que ela talvez não entenda (a maioria das pessoas provavelmente não sabe a diferença entre bicarbonato de sódio e fermento em pó, e por que uma receita teria uma ou outra).

Becos-sem-saída

Não gosto de usar a matemática como exemplo, porque para fazer a matemática, você precisa entender para que servem as etapas. Você não pode fazer muita matemática seguindo as instruções às cegas (bem, você pode, mas não é assim que os humanos aprendem, geralmente). Não gosto de classificar como exemplo, porque é muito técnico para o leigo apreciar. Se estou conversando com alguém que pode apreciar o exemplo de classificação, eles provavelmente já têm alguma idéia do que é a programação e provavelmente tentaram eles mesmos.


11
Não vejo o que isso tem a ver com a questão. Especificamente, a questão é perguntar como explicar a teoria dos tipos para leigos, e a teoria dos tipos é matemática.
precisa saber é o seguinte

Talvez, infelizmente, talvez não, mas a programação em geral é um livro fechado para mais de 99% da população mundial. Passei uma boa quantidade de tempo ao longo dos anos tentando fazer com que os não programadores entendessem a programação, sem sucesso. Explicar os meandros e as iguarias de vários sistemas de tipos é semelhante a explicar a física de partículas subatômicas para essas mesmas pessoas - seus olhos brilharão e provavelmente serão educados, mas não conseguirão. E tudo bem - eles NÃO PRECISAM entendê-lo e, com toda a probabilidade, não se importam em não entender. É o suficiente que fazemos. :-)
Bob Jarvis
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.