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?
Respostas:
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.
fonte
Eu tentaria algo assim:
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 ".
fonte
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ó :
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.
fonte
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;)
fonte
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:
Existe uma melhor linguagem, objetivamente falando? A resposta pode depender do que você está tentando fazer.
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
Bem, provavelmente, você tem algum motivo para estudar idiomas - use esse motivo. Por exemplo:
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 já 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)
fonte
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.
fonte
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 ".
fonte
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 ).
fonte
É 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.
fonte